Per confrontare le prestazioni dei dischi permanenti, utilizza FIO anziché altri strumenti di benchmarking per dischi come dd
. Per impostazione predefinita, dd
utilizza una profondità di coda I/O molto bassa, perciò è difficile assicurarsi che il benchmark generi un numero sufficiente di I/O e byte per testare accuratamente le prestazioni del disco.
Inoltre, i dispositivi speciali utilizzati con dd
sono spesso molto lenti e non riflettono accuratamente le prestazioni del disco permanente. In generale, evita di utilizzare dispositivi speciali come /dev/urandom
, /dev/random
e /dev/zero
nei benchmark delle prestazioni dei dischi permanenti.
Per misurare IOPS e velocità effettiva di un disco in uso su un'istanza in esecuzione, seleziona il file system con la configurazione prevista. Utilizza questa opzione per testare un carico di lavoro realistico senza perdere i contenuti del disco esistente. Tieni presente che quando esegui il benchmark del file system su un disco esistente, i fattori specifici per il tuo ambiente di sviluppo potrebbero influire sui risultati di benchmarking e potresti non raggiungere i limiti di prestazioni del disco.
Per misurare le prestazioni non elaborate di un disco permanente, confronta direttamente il dispositivo di blocco. Utilizza questa opzione per confrontare le prestazioni del disco non elaborato con i limiti di prestazioni del disco.
I seguenti comandi funzionano con i sistemi operativi Debian o Ubuntu del gestore di pacchetti apt
.
Benchmarking di IOPS e velocità effettiva di un disco in un'istanza in esecuzione
Se vuoi misurare IOPS e velocità effettiva per un carico di lavoro realistico su un disco attivo su un'istanza in esecuzione, senza perdere i contenuti del disco, confrontali con una nuova directory sul file system esistente.
Installa le dipendenze:
sudo apt update sudo apt install -y fio
Nel terminale, elenca i 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, eseguiamo il test di 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 la velocità effettiva di scrittura eseguendo scritture sequenziali con più flussi paralleli (8+), utilizzando una dimensione di blocco I/O di 1 MB e una profondità di I/O di almeno 64:
sudo fio --name=write_throughput --directory=$TEST_DIR --numjobs=8 \ --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --group_reporting=1
Testa le IOPS di scrittura eseguendo scritture casuali, utilizzando una dimensione di blocco di I/O di 4 kB e una profondità di I/O di almeno 64:
sudo fio --name=write_iops --directory=$TEST_DIR --size=10G \ --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 \ --verify=0 --bs=4K --iodepth=64 --rw=randwrite --group_reporting=1
Testa la velocità effettiva di lettura eseguendo letture sequenziali con più flussi paralleli (8+), utilizzando una dimensione di blocco I/O di 1 MB e una profondità I/O di almeno 64:
sudo fio --name=read_throughput --directory=$TEST_DIR --numjobs=8 \ --size=10G --time_based --runtime=60s --ramp_time=2s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --group_reporting=1
Testa le IOPS di lettura eseguendo letture casuali, utilizzando una dimensione di blocco di I/O di 4 kB e una profondità di I/O di almeno 64:
sudo fio --name=read_iops --directory=$TEST_DIR --size=10G \ --time_based --runtime=60s --ramp_time=2s --ioengine=libaio --direct=1 \ --verify=0 --bs=4K --iodepth=64 --rw=randread --group_reporting=1
Esegui la pulizia:
sudo rm $TEST_DIR/write* $TEST_DIR/read*
Benchmarking delle prestazioni dei dischi permanenti non elaborati
Se vuoi misurare le prestazioni dei soli dischi permanenti al di fuori dell'ambiente di sviluppo, verifica le prestazioni in lettura e scrittura per un dispositivo di blocco su un disco permanente e una VM a consumo.
I comandi seguenti presuppongono che un disco permanente SSD da 2500 GB sia collegato alla
tua VM. Se le dimensioni del tuo dispositivo sono diverse, modifica il valore dell'argomento --filesize
. Questa dimensione del disco è necessaria per raggiungere i limiti di velocità effettiva della VM 32 vCPU. Per ulteriori informazioni, vedi Prestazioni dello spazio di archiviazione a blocchi.
Installa le dipendenze:
sudo apt-get update sudo apt-get install -y fio
Riempi il disco con dati diversi da zero. Le letture dei dischi permanenti dei blocchi vuoti hanno un profilo di latenza diverso dai blocchi che contengono dati. Ti consigliamo di riempire il disco prima di eseguire benchmark di lettura in 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
Testa la larghezza di banda di scrittura eseguendo scritture sequenziali con più flussi paralleli (8+), utilizzando 1 MB come dimensione di I/O e con 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=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=1M --iodepth=64 --rw=write --numjobs=8 --offset_increment=100G
Esegui test IOPS di scrittura. Per raggiungere il numero massimo di IOPS di DP, devi mantenere una coda di I/O profonda. Se, ad esempio, la latenza di scrittura è pari a 1 millisecondo, la VM può raggiungere al massimo 1000 IOPS per ogni I/O in volo. Per raggiungere 15.000 IOPS di scrittura, la VM deve mantenere almeno 15 I/O in volo. Se il disco e la VM sono in grado di raggiungere 30.000 IOPS di scrittura, il numero di I/O in volo deve essere di almeno 30 I/O. Se le dimensioni di I/O superano i 4 kB, la VM potrebbe raggiungere il limite della larghezza di banda prima di raggiungere il limite delle 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=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=256 --rw=randwrite
Testare la latenza di scrittura. Durante il test della latenza di I/O, la VM non deve raggiungere la massima larghezza di banda o IOPS; in caso contrario, la latenza osservata non rifletterà la latenza effettiva di I/O dei dischi permanenti. Ad esempio, se il limite di IOPS viene raggiunto a una profondità di I/O di 30 e il comando
fio
lo raddoppia, il totale di IOPS rimane lo stesso e la latenza di I/O segnalata 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=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=4 --rw=randwrite
Testa la larghezza di banda di lettura eseguendo letture sequenziali con più flussi paralleli (8+), utilizzando 1 MB come dimensione di I/O e con una profondità di I/O pari a 64 o superiore.
sudo fio --name=read_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=1M --iodepth=64 --rw=read --numjobs=8 --offset_increment=100G
Testa le IOPS di lettura. Per raggiungere il numero massimo di IOPS di DP, devi mantenere una coda di I/O profonda. Se, ad esempio, le dimensioni di I/O superano i 4 kB, la VM potrebbe raggiungere il limite di larghezza di banda prima di raggiungere il limite di IOPS. Per raggiungere il limite massimo di 100.000 IOPS di lettura, specifica
--iodepth=256
per questo test.sudo fio --name=read_iops_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=256 --rw=randread
Testare la latenza di lettura. È importante inserire dati nel disco per ottenere una misurazione realistica della latenza. È importante che la VM non raggiunga i limiti IOPS o di velocità effettiva durante questo test perché, dopo che il disco permanente ha raggiunto il limite di saturazione, viene eseguito il push su I/O in entrata e ciò si riflette come 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=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=4 --rw=randread
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=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --numjobs=4 --thread --offset_increment=500G \ --bs=1M --iodepth=64 --rw=read
Testa larghezza di banda di scrittura sequenziale.
sudo fio --name=write_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=1m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --numjobs=4 --thread --offset_increment=500G \ --bs=1M --iodepth=64 --rw=write
Passaggi successivi
- Ulteriori informazioni sui prezzi dei dischi permanenti.