Confronta le prestazioni di un disco permanente su una VM Linux

Per confrontare le prestazioni del disco permanente, utilizza Tester I/O flessibile (FIO). Non utilizzare altri strumenti di benchmarking del disco come dd, che per impostazione predefinita utilizzano una profondità di coda I/O molto bassa, pertanto è difficile garantire che il benchmark generi un numero sufficiente di operazioni di I/O (IOPS) e byte per testare accuratamente le prestazioni del disco.

I dispositivi speciali utilizzati con dd sono spesso molto lenti e non riflettono in modo accurato le prestazioni disco permanente. In generale, evita di utilizzare dispositivi speciali come /dev/urandom e /dev/random. Sebbene questi file generino dati casuali, che sono più rappresentativi dei carichi di lavoro reali, possono essere costosi dal punto di vista dell'elaborazione e potrebbero colpire il benchmark, causando risultati imprecisi. Inoltre, quando utilizzi /dev/zero come input per dd, il file fornisce un flusso infinito di zeri, ma è altamente comprimibile e potrebbe non rappresentare carichi di lavoro reali.

Per misurare il numero di IOPS e la velocità effettiva di un disco in uso su un'istanza in esecuzione, confronta 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, esistono molti fattori specifici del tuo ambiente di sviluppo che potrebbero influire sui risultati del benchmarking e potresti non raggiungere i limiti delle prestazioni del disco.

Per misurare le prestazioni non elaborate di un disco permanente, esegui il benchmark direttamente per il dispositivo a blocchi. Utilizza questa opzione per confrontare le prestazioni non elaborate del disco con i relativi limiti di prestazioni.

I seguenti comandi funzionano con i sistemi operativi Debian o Ubuntu con il gestore di pacchetti apt.

Benchmarking di IOPS e velocità effettiva di un disco su 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, esegui il confronto con una nuova directory sul file system esistente. Ogni test fio viene eseguito per cinque minuti.

  1. Connettiti all'istanza.

  2. Installa le dipendenze:

    sudo apt update sudo apt install -y fio

  3. Nel terminale, elenca i dischi collegati alla tua VM e trova quello 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.

  4. Crea una nuova directory, fiotest, sul disco. In questo esempio, il disco viene montato in /mnt/disks/mnt_dir:

    TEST_DIR=/mnt/disks/mnt_dir/fiotest sudo mkdir -p $TEST_DIR

  5. Testa la velocità effettiva di scrittura eseguendo scritture sequenziali con più flussi paralleli (oltre 16), utilizzando una dimensione del blocco 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
    --max_batch_batch-reporting_submit

  6. Testa le IOPS di scrittura eseguendo scritture casuali, utilizzando una dimensione del blocco 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
    -max_batch_batch6 profondità

  7. Testa la velocità effettiva di lettura eseguendo letture sequenziali con più flussi paralleli (oltre 16), utilizzando una dimensione del blocco 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
    -max-batch_batch_reporting=1

  8. Testa le IOPS di lettura eseguendo letture casuali, utilizzando una dimensione del blocco 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
    -max_batch_batch6profondità

  9. Esegui la pulizia:

    sudo rm $TEST_DIR/write* $TEST_DIR/read*

Benchmarking delle prestazioni disco permanente non elaborati

Se vuoi misurare le prestazioni dei soli dischi permanenti al di fuori del tuo ambiente di sviluppo, verifica le prestazioni di lettura e scrittura per un dispositivo a blocchi su un disco permanente usa e getta e su una VM. Ogni test fio viene eseguito per cinque minuti.

I comandi seguenti presuppongono un disco permanente SSD da 2500 GB collegato alla VM. Se le dimensioni del dispositivo sono diverse, modifica il valore dell'argomento --filesize. Questa dimensione del disco è necessaria per raggiungere i limiti di velocità effettiva delle VM di 32 vCPU. Per ulteriori informazioni, vedi Prestazioni dell'archiviazione a blocchi.

  1. Connettiti all'istanza.

  2. Installa le dipendenze:

    sudo apt-get update sudo apt-get install -y fio

  3. Riempi il disco con dati diversi da zero. Le letture del disco permanente dai blocchi vuoti hanno un profilo di latenza diverso da quello dei blocchi che contengono dati. Ti consigliamo di riempire il disco prima di eseguire benchmark di latenza di lettura.

    L'esecuzione di questo comando causa la perdita di dati sul secondo dispositivo. # Abbiamo fortemente

    consiglia di utilizzare una VM e un disco usa e getta. sudo fio --name=fill_disk
    --filename=/dev/sdb --filesize=2500G
    --ioengine=libaio --direct=1 --verify=0 --randrepeat=0
    --bs=128K --ioDepth=64 --rw=randwrite
    --io4_batch_batch_complete=

  4. Testa la larghezza di banda di scrittura eseguendo scritture sequenziali con più flussi paralleli (oltre 16), utilizzando 1 MB come dimensione di I/O e con una profondità di I/O maggiore o uguale a 64.

    L'esecuzione di questo comando causa la perdita di dati sul secondo dispositivo. # Abbiamo fortemente

    consiglia di utilizzare una VM e un disco usa e getta. 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
    --batch_challenge1 concreto_profondità_di_rippec

  5. Testa le IOPS di scrittura. Per raggiungere il numero massimo di IOPS del disco permanente, devi mantenere una coda I/O profonda. Se, ad esempio, la latenza di scrittura è di 1 millisecondo, la VM può raggiungere al massimo 1000 IOPS per ogni I/O in corso. 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 transito deve essere di almeno 30 I/O. Se la dimensione di I/O è superiore a 4 kB, la VM potrebbe raggiungere il limite di larghezza di banda prima di raggiungere il limite di IOPS.

    L'esecuzione di questo comando causa la perdita di dati sul secondo dispositivo. # Abbiamo fortemente

    consiglia l'utilizzo di un disco e di una VM utilizzabili. sudo fio --name=write_iops_test
    --filename=/dev/sdb --filesize=2500G
    --time_based --ramp_time=2s --runtime=5m
    --ioengine=libaio --direct=1 --verify_batch=0 --randrepeat=0
    --bs=2batch_depth --ioprofondità

  6. Testa la latenza di scrittura. Durante il test della latenza di I/O, la VM non deve raggiungere la larghezza di banda massima o il numero massimo di IOPS; in caso contrario, la latenza osservata non rifletterà la latenza di I/O del disco permanente effettiva. Ad esempio, se il limite di IOPS viene raggiunto a una profondità di I/O di 30 e il comando fio ha il doppio di questo, il numero totale di IOPS rimane invariato e la latenza di I/O segnalata raddoppia.

    L'esecuzione di questo comando causa la perdita di dati sul secondo dispositivo. # Abbiamo fortemente

    consiglia l'utilizzo di un disco e di una VM utilizzabili. 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=batch_depth --wio_profondità

  7. Testa la larghezza di banda di lettura eseguendo letture sequenziali con più flussi paralleli (oltre 16), utilizzando 1 MB come dimensione di I/O e con una profondità di I/O pari o superiore a 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 --swbatch=batch_depth --num

  8. Testa le IOPS di lettura. Per raggiungere il numero massimo di IOPS del disco permanente, devi mantenere una coda I/O profonda. Se, ad esempio, la dimensione di I/O è superiore a 4 kB, la VM potrebbe raggiungere il limite di larghezza di banda prima di raggiungere il limite IOPS. Per raggiungere il 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=5m
    --ioengine=libaio --direct=1 --verify=0 --randrepeat=0
    --bs=4K --iodepth=256read_batch_inprofondo

  9. Testa la latenza di lettura. È importante riempire il disco con dati per ottenere una misurazione realistica della latenza. È importante che la VM non raggiunga i limiti di IOPS o di velocità effettiva durante questo test perché, dopo che il disco permanente ha raggiunto il limite di saturazione, respinge gli 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=5m
    --ioengine=libaio --direct=1 --verify=0 --randrepeat=0
    --bs=4K --iodepth=4 -- rw=batch_Depth --presentio_profondità

  10. 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=500 profondità --

  11. 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=500 profondità --

Passaggi successivi