Questo documento descrive come eseguire il benchmark delle prestazioni del disco permanente sulle macchine virtuali (VM) Linux. Per le VM Windows, vedi Esegui il benchmark delle prestazioni del disco permanente su una VM Windows.
Per eseguire il benchmark delle prestazioni del Persistent Disk su Linux, utilizza Flexible I/O tester (FIO)
al posto di altri strumenti di benchmarking del disco come dd
.
Per impostazione predefinita, dd
utilizza una profondità di coda di I/O molto bassa e potrebbe non testare con precisione
le prestazioni del disco. In generale, evita di utilizzare dispositivi speciali come
/dev/urandom
, /dev/random
e /dev/zero
nei benchmark delle prestazioni
di Persistent Disk.
Per misurare le IOPS e il throughput di un disco in uso su un'istanza in esecuzione, esegui il benchmark del file system con la configurazione prevista. Utilizza questa opzione per testare un workload realistico senza perdere i contenuti del disco esistente. Tieni presente che quando esegui il benchmark del file system su un disco esistente, ci sono molti fattori specifici legati all'ambiente di sviluppo che possono influire sui risultati del benchmarking. Quindi potresti non raggiungere i limiti di prestazioni del disco.
Per misurare le prestazioni non elaborate di un disco permanente, esegui il benchmark direttamente sul dispositivo a blocchi. Utilizza questa opzione per confrontare le prestazioni del disco non formattato con i limiti di prestazioni del disco.
I seguenti comandi funzionano con i sistemi operativi Debian o Ubuntu con il
gestore di pacchetti apt
.
Benchmarking delle IOPS e del throughput di un disco su un'istanza in esecuzione
Se vuoi misurare le IOPS e il throughput per un workload realistico su un disco
attivo di un'istanza in esecuzione senza perdere i contenuti del disco, esegui il benchmark
rispetto a una nuova directory sul file system esistente. Ogni test fio
viene eseguito per
cinque minuti.
Installa le dipendenze:
sudo apt update sudo apt install -y fio
Nel terminale crea un elenco dei dischi collegati alla VM e trova il disco che vuoi testare. Se il disco permanente non è ancora formattato, formatta e monta il disco.
sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 10G 0 disk └─sda1 8:1 0 10G 0 part / sdb 8:32 0 2.5T 0 disk /mnt/disks/mnt_dir
In questo esempio, testiamo un disco permanente SSD da 2500 GB con ID dispositivo
sdb
.Crea una nuova directory,
fiotest
, sul disco. In questo esempio, il disco è montato su/mnt/disks/mnt_dir
:TEST_DIR=/mnt/disks/mnt_dir/fiotest sudo mkdir -p $TEST_DIR
Testa il throughput di scrittura eseguendo scritture sequenziali con più stream paralleli (più di 16), utilizzando una dimensione dei blocchi di I/O di 1 MB e una profondità di I/O di almeno 64:
sudo fio --name=write_throughput --directory=$TEST_DIR --numjobs=16 \ --size=10G --time_based --runtime=5m --ramp_time=2s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --group_reporting=1 --iodepth_batch_submit=64 \ --iodepth_batch_complete_max=64
Testa le IOPS di scrittura eseguendo scritture casuali, utilizzando una dimensione dei blocchi di I/O di 4 KB e una profondità di I/O di almeno 256:
sudo fio --name=write_iops --directory=$TEST_DIR --size=10G \ --time_based --runtime=5m --ramp_time=2s --ioengine=libaio --direct=1 \ --verify=0 --bs=4K --iodepth=256 --rw=randwrite --group_reporting=1 \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Testa il throughput di lettura eseguendo letture sequenziali con più stream paralleli (più di 16), utilizzando una dimensione dei blocchi di I/O di 1 MB e una profondità di I/O di almeno 64:
sudo fio --name=read_throughput --directory=$TEST_DIR --numjobs=16 \ --size=10G --time_based --runtime=5m --ramp_time=2s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --group_reporting=1 \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Testa le IOPS di lettura eseguendo letture casuali, utilizzando una dimensione dei blocchi di I/O di 4 KB e una profondità di I/O di almeno 256:
sudo fio --name=read_iops --directory=$TEST_DIR --size=10G \ --time_based --runtime=5m --ramp_time=2s --ioengine=libaio --direct=1 \ --verify=0 --bs=4K --iodepth=256 --rw=randread --group_reporting=1 \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Esegui la pulizia:
sudo rm $TEST_DIR/write* $TEST_DIR/read*
Benchmarking delle prestazioni non elaborate del disco permanente
Se vuoi misurare le prestazioni dei dischi permanenti da soli al di fuori del tuo ambiente di sviluppo, testa le prestazioni di lettura e scrittura di un dispositivo a blocchi su un disco permanente e una VM usa e getta. Ogni test fio
dura cinque
minuti.
Per i comandi seguenti è richiesto un disco permanente SSD da 2500 GB collegato alla VM. Se le dimensioni del dispositivo sono diverse, modifica il valore dell'argomento --filesize
. Queste dimensioni di disco sono necessarie per raggiungere i limiti di throughput delle VM con 32 vCPU. Per maggiori informazioni, vedi Prestazioni dell'archiviazione a blocchi.
Aggiungi un Persistent Disk all'istanza VM che intendi sottoporre a benchmark.
Installa le dipendenze:
sudo apt-get update sudo apt-get install -y fio
Riempi il disco con dati diversi da zero. Le letture di Persistent Disk di blocchi vuoti hanno un profilo di latenza diverso da quello dei blocchi che contengono dati. Ti consigliamo di riempire il disco prima di eseguire qualsiasi attività di benchmarking della latenza di lettura.
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=fill_disk \ --filename=/dev/sdb --filesize=2500G \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=128K --iodepth=64 --rw=randwrite \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Testa la larghezza di banda di scrittura eseguendo scritture sequenziali con più stream paralleli (più di 16), utilizzando 1 MB come dimensione di I/O e una profondità di I/O maggiore o uguale a 64.
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=write_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=1M --iodepth=64 --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --rw=write --numjobs=16 --offset_increment=100G
Testa le IOPS di scrittura. Per ottenere il massimo dalle IOPS del disco permanente, devi mantenere una profondità della coda di I/O elevata. Se, ad esempio, la latenza di scrittura è di 1 millisecondo, la VM può raggiungere al massimo 1000 IOPS per ogni I/O in esecuzione. Per raggiungere 15.000 IOPS in scrittura, la VM deve mantenere in esecuzione almeno 15 operazioni di I/O. Se il disco e la VM sono in grado di raggiungere 30.000 IOPS in scrittura, il numero di I/O in esecuzione deve essere almeno 30. Se le dimensioni di I/O sono superiori a 4 KB, la VM potrebbe raggiungere il limite di larghezza di banda prima del limite di IOPS.
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=write_iops_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Testa la latenza di scrittura. Durante il test della latenza di I/O, la VM non deve raggiungere la larghezza di banda o le IOPS massime; altrimenti, la latenza osservata non rifletterà la latenza di I/O effettiva del disco permanente. Ad esempio, se il limite di IOPS viene raggiunto a una profondità di I/O di 30 e il comando
fio
ha raddoppiato questo valore, le IOPS totali rimangono invariate e la latenza di I/O registrata raddoppia.# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=write_latency_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=4 --rw=randwrite --iodepth_batch_submit=4 \ --iodepth_batch_complete_max=4
Testa la larghezza di banda di lettura eseguendo letture sequenziali con più stream paralleli (più di 16), utilizzando 1 MB come dimensione di I/O e una profondità di I/O di almeno 64.
sudo fio --name=read_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=1M --iodepth=64 --rw=read --numjobs=16 --offset_increment=100G \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Testa le IOPS di lettura. Per raggiungere le IOPS massime del disco permanente, devi mantenere una profondità della coda di I/O elevata. Ad esempio, se le dimensioni di I/O sono superiori a 4 KB, la VM potrebbe raggiungere il limite di larghezza di banda prima del limite di IOPS. Per ottenere le IOPS di lettura massime di 100.000, specifica
--iodepth=256
per questo test.sudo fio --name=read_iops_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Testa la latenza di lettura. È importante riempire il disco con dei dati per ottenere una misurazione realistica della latenza. È importante che la VM non raggiunga i limiti di IOPS o throughput durante il test perché, una volta che il disco permanente ha raggiunto il limite di saturazione, respinge le operazioni di I/O in entrata e ciò si riflette in un aumento artificiale della latenza di I/O.
sudo fio --name=read_latency_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=4 --rw=randread \ --iodepth_batch_submit=4 --iodepth_batch_complete_max=4
Testa la larghezza di banda di lettura sequenziale.
sudo fio --name=read_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --numjobs=4 --thread --offset_increment=500G \ --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Testa la larghezza di banda di scrittura sequenziale.
sudo fio --name=write_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --numjobs=4 --thread --offset_increment=500G \ --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Pulisci il Persistent Disk e la VM temporanei:
- Elimina il disco utilizzato per il benchmarking delle prestazioni.
- Elimina la VM creata per il benchmarking delle prestazioni.
Passaggi successivi
- Scopri come monitorare le prestazioni del disco esaminando le metriche sulle prestazioni del disco.
- Scopri di più sui prezzi di Persistent Disk.
- Scopri come ottimizzare le prestazioni di Persistent Disk.