Esegui il benchmark delle prestazioni del disco permanente su una VM Linux


Questo documento descrive come eseguire il benchmarking delle prestazioni del disco permanente su Macchine virtuali (VM) Linux. Per le VM Windows, vedi Eseguire il benchmark delle prestazioni dei dischi permanenti su una VM Windows.

Per eseguire il benchmark delle prestazioni dei dischi permanenti su Linux, utilizza Flexible I/O tester (FIO) invece di altri strumenti di benchmarking dei dischi come dd. Per impostazione predefinita, dd utilizza una profondità della coda 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 nel tuo Persistent Disk benchmark delle prestazioni.

Per misurare le IOPS e la velocità effettiva di un disco in uso su un'istanza in esecuzione, confrontare 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 confronti il file system su un disco esistente, ci sono molti i fattori specifici dell'ambiente di sviluppo che possono influire sul benchmarking e potresti non raggiungere i limiti di prestazioni del disco.

Per misurare le prestazioni non elaborate di un disco permanente, confronta il valore bloccare direttamente il dispositivo. Utilizza questa opzione per confrontare le prestazioni del disco non elaborato con limiti delle prestazioni del disco.

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

Benchmarking di IOPS e velocità effettiva di un disco su un'istanza in esecuzione

Se vuoi misurare le IOPS e la velocità effettiva per un carico di lavoro realistico su un disco su un'istanza in esecuzione senza perdere i contenuti del disco, in una nuova directory sul file system esistente. Ogni test fio viene eseguito 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 VM e trova che vuoi testare. Se il disco permanente non è ancora formattato, formattare e montare 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 è montato su /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ù stream paralleli (almeno 16), utilizzando una dimensione del blocco I/O di 1 MB e una profondità 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
    
  6. Testa le IOPS in scrittura eseguendo scritture casuali, utilizzando una dimensione del blocco I/O di 4 KB e una profondità 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
    
  7. Testa la velocità effettiva di lettura eseguendo letture sequenziali con più velocità (16+), utilizzando un blocco I/O di 1 MB e una profondità di I/O pari a 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
    
  8. Testa le IOPS di lettura eseguendo letture casuali, utilizzando una dimensione del blocco I/O pari a 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
    
  9. 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 il tuo ambiente di sviluppo, testare le prestazioni di lettura e scrittura per un blocco su un disco permanente e una VM usa e getta. 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'attributo --filesize . Questa dimensione del disco è necessaria per raggiungere la velocità effettiva di VM di 32 vCPU limiti. Per maggiori informazioni, vedi Prestazioni dello spazio di archiviazione a blocchi.

  1. Crea e avvia un'istanza VM.

  2. Aggiungi un disco permanente all'istanza VM di cui vuoi eseguire il benchmark.

  3. Connettiti all'istanza.

  4. Installa le dipendenze:

    sudo apt-get update
    sudo apt-get install -y fio
    
  5. Riempi il disco con dati diversi da zero. Il disco permanente legge i blocchi vuoti avere un profilo di latenza diverso dai blocchi che contengono dati. Ti consigliamo di riempire il disco prima di eseguire qualsiasi benchmark 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
    
  6. Verifica la larghezza di banda in scrittura eseguendo scritture sequenziali con più velocità i flussi di dati (16+), 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=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
    
  7. Testa le IOPS di scrittura. Per ottenere il numero massimo di IOPS di DP, è necessario mantenere una coda I/O profonda. Se, ad esempio, la latenza di scrittura è 1 millisecondo, la VM può raggiungere, al massimo, 1000 IOPS per ogni I/O in fase di sviluppo. Per ottenere 15.000 IOPS di scrittura, la VM deve mantenere almeno 15 I/O in durante il periodo di pubblicazione. Se il disco e la VM sono in grado di raggiungere 30.000 IOPS di scrittura, di I/O in volo deve essere almeno 30 I/O. Se la dimensione di I/O è superiore a 4 kB, la VM potrebbe raggiungere la larghezza di banda prima che raggiunga il 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
    
  8. Testa la latenza di scrittura. Durante il test della latenza di I/O, la VM non deve raggiungere il valore massimo larghezza di banda o IOPS; altrimenti la latenza osservata non rifletterà latenza di I/O di un disco permanente. Ad esempio, se il limite di IOPS è raggiunto a una profondità di I/O pari a 30 e il comando fio ha il doppio di tale valore, il numero totale di IOPS rimane invariato e la latenza di I/O riportata 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
    
  9. Testa la larghezza di banda di lettura eseguendo letture sequenziali con più i flussi di dati (16+), utilizzando 1 MB come dimensione di I/O e con una profondità di I/O uguale 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 --rw=read --numjobs=16 --offset_increment=100G \
      --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
    
  10. Testa le IOPS di lettura. Per ottenere il numero massimo di IOPS del PD, 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 di IOPS. Per raggiungere il numero massimo di IOPS di lettura 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
    
  11. Testa la latenza di lettura. È importante riempire il disco con dati per ottenere una misurazione della latenza realistica. È importante che la VM non copra IOPS o limiti di velocità effettiva durante questo test perché dopo che il disco permanente raggiunge il limite di saturazione, viene respinto sugli I/O in entrata e riflesso 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=randread \
      --iodepth_batch_submit=4 --iodepth_batch_complete_max=4
    
  12. 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
    
  13. 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
    
  14. Elimina il disco permanente e la VM usa e getta:

    1. Elimina il disco utilizzato per il rendimento del benchmarking.
    2. Elimina la VM creata per il benchmarking delle prestazioni.

Passaggi successivi