Ottimizzazione delle prestazioni del disco permanente


I dischi permanenti offrono le prestazioni descritte nel grafico dei tipi di disco se la VM genera un utilizzo sufficiente per raggiungere i limiti delle prestazioni. Dopo aver impostato le dimensioni dei volumi dei disco permanente in base alle tue esigenze di prestazioni, il tuo carico di lavoro e il tuo sistema operativo potrebbero richiedere alcune modifiche.

Le sezioni seguenti descrivono le caratteristiche delle VM e dei carichi di lavoro che influiscono sul funzionamento del disco e illustrano alcuni elementi chiave che possono essere ottimizzati per migliorare il funzionamento. Alcuni dei suggerimenti e come applicarne alcuni a tipi specifici di carichi di lavoro.

Fattori che influiscono sulle prestazioni del disco

Le sezioni seguenti descrivono i fattori che influiscono sulle prestazioni del disco di una VM.

Limiti di traffico in uscita dalla rete per la velocità effettiva di scrittura

La VM ha un limite di uscita di rete che dipende dal tipo di macchina della VM.

Compute Engine archivia i dati su Persistent Disk con più scritture parallele per garantire la ridondanza integrata. Inoltre, ogni richiesta di scrittura comporta un certo ovverhead che utilizza una larghezza di banda di scrittura aggiuntiva.

Il traffico di scrittura massimo che un'istanza VM può emettere è il limite di uscita della rete diviso per un moltiplicatore di larghezza di banda che tiene conto della replica e dell'overhead.

I limiti di uscita della rete sono elencati nella colonna Larghezza di banda massima in uscita (Gbps) nelle tabelle dei tipo di macchina per le famiglie di macchine general purpose, ottimizzate per il calcolo, ottimizzate per lo storage, ottimizzate per la memoria e ottimizzate per l'acceleratore.

Il moltiplicatore della larghezza di banda è di circa 1,16 volte a utilizzo completo della rete, il che significa che il 16% dei byte scritti è overhead. Per i Persistent Disk regionali, il moltiplicatore di larghezza di banda è approssimativamente 2,32 volte per tenere conto del sovraccarico aggiuntivo della replica.

In una situazione in cui le operazioni di lettura e scrittura del Persistent Disk competono con la larghezza di banda in uscita della rete, il 60% della larghezza di banda in uscita massima della rete, definita dal tipo di macchina, viene allocato alle scritture del Persistent Disk. Il 40% rimanente è disponibile per tutto il resto del traffico di rete in uscita. Consulta la sezione relativa alla larghezza di banda in uscita per informazioni sull'altro traffico in uscita dalla rete.

L'esempio seguente mostra come calcolare la larghezza di banda di scrittura massima per un Persistent Disk su un'istanza VM N1. L'allocazione della larghezza di banda è la parte della larghezza di banda di rete in uscita allocata al Persistent Disk. La larghezza di banda massima in scrittura è la larghezza di banda massima in scrittura del Persistent Disk regolata per l'overhead.

Conteggio vCPU VM Limite di traffico in uscita dalla rete (MB/s) Allokazione della larghezza di banda (MB/s) Larghezza di banda di scrittura massima (MB/s) Larghezza di banda di scrittura massima a utilizzo completo della rete (MB/s)
1 250 150 216 129
2-7 1250 750 1078 647
8-15 2000 1200 1724 1034
16+ 4000 2400 3448 2069

Puoi calcolare la larghezza di banda massima Persistent Disk utilizzando le seguenti formule:

VM N1 con 1 vCPU

Il limite di traffico in uscita dalla rete è:

2 Gbps / 8 bit = 0,25 GB al secondo = 250 MB al secondo

L'allocazione della larghezza di banda Persistent Disk con utilizzo completo della rete è:

250 MB al secondo * 0,6 = 150 MB al secondo.

La larghezza di banda di scrittura massima del Persistent Disk senza contese di rete è:

  • Dischi zonali: 250 MB al secondo / 1,16 ~= 216 MB al secondo
  • Dischi regionali: 250 MB al secondo / 2,32 ~= 108 MB al secondo

La larghezza di banda di scrittura massima Persistent Disk con utilizzo completo della rete è:

  • Dischi zonali: 150 MB al secondo / 1,16 ~= 129 MB al secondo
  • Dischi regionali: 150 MB al secondo / 2,32 ~= 65 MB al secondo

I limiti di uscita della rete forniscono un limite superiore alle prestazioni. Altri fattori potrebbero limitare le prestazioni al di sotto di questo livello. Consulta le sezioni seguenti per informazioni su altri vincoli di prestazioni.

Letture e scritture simultanee

Per Persistent Disk standard, le letture e le scritture simultanee condividono le stesse risorse. Quando la VM utilizza una maggiore velocità effettiva in lettura o IOPS, è in grado di eseguire meno scritture. Al contrario, le istanze che utilizzano più throughput in scrittura o IOPS sono in grado di eseguire meno letture.

I volumi dei Persistent Disk non possono raggiungere contemporaneamente i limiti di velocità effettiva e IOPS massimi sia per le letture sia per le scritture.

Il calcolo della produttività è IOPS * I/O size. Per sfruttare i limiti di throughput massimi per letture e scritture simultanee su SSD Persistent Disk, utilizza una dimensione I/O tale che le IOPS combinate di lettura e scrittura non superino il limite di IOPS.

La tabella seguente elenca i limiti di IOPS per VM per letture e scritture simultanee.

Disco permanente standard Disco permanente SSD (8 vCPU) Disco permanente SSD (più di 32 vCPU) Disco permanente SSD (più di 64 vCPU)
Leggi Scrittura Leggi Scrittura Leggi Scrittura Leggi Scrittura
7.500 0 15.000 0 60.000 0 100.000 0
5625 3750 11.250 3750 45.000 15.000 75.000 25.000
3750 7.500 7.500 7.500 30.000 30.000 50.000 50.000
1875 11.250 3750 11.250 15.000 45.000 25.000 75.000
0 15.000 0 15.000 0 60.000 0 100.000

I numeri di IOPS in questa tabella si basano su dimensioni di I/O di 8 KB. Altre dimensioni di I/O, ad esempio 16 KB, potrebbero avere numeri di IOPS diversi, ma mantenere la stessa distribuzione di lettura/scrittura.

La tabella seguente elenca i limiti di throughput (MB al secondo) per VM per letture e scritture simultanee.

Disco permanente standard Disco permanente SSD (6-14 vCPU) Disco permanente SSD (più di 16 vCPU)
Leggi Scrittura Leggi Scrittura Leggi Scrittura
1200 0 800* 800* 1200* 1200*
900 100
600 200
300 300
0 400

* Per i dischi SSD permanenti, la velocità effettiva di lettura massima e la velocità effettiva di scrittura massima sono indipendenti l'una dall'altra, pertanto questi limiti sono costanti.

Dimensione del volume logico

Il Persistent Disk può avere una dimensione massima di 64 TiB e puoi creare singoli volumi logici di massimo 257 TiB utilizzando la gestione dei volumi logici all'interno della VM. Un volume di dimensioni maggiori influisce sulle prestazioni nei seguenti modi:

  • Non tutti i file system locali funzionano bene su questa scala. Le operazioni comuni, come il montaggio e il controllo del file system, potrebbero richiedere più tempo del previsto.
  • Le prestazioni massime del disco permanente vengono raggiunte con dimensioni inferiori. Con questa quantità di spazio di archiviazione su una VM, la lettura o la scrittura completa dei dischi richiede più tempo. Se la tua applicazione lo supporta, valuta la possibilità di utilizzare più VM per un throughput complessivo del sistema maggiore.
  • La creazione di snapshot di un numero elevato di Persistent Disk potrebbe richiedere più tempo del previsto e fornire una visione incoerente del volume logico senza un'attenta coordinazione con l'applicazione.

Più dischi collegati a una singola istanza VM

I limiti di prestazioni dei dischi quando sono collegati più dischi a una VM dipendono dal fatto che i dischi siano dello stesso tipo o di tipi diversi.

Più dischi dello stesso tipo

Se hai più dischi dello stesso tipo collegati a un'istanza VM nella stessa modalità (ad esempio lettura/scrittura), i limiti di prestazioni sono gli stessi di un singolo disco con le dimensioni combinate di questi dischi. Se utilizzi tutti i dischi al 100%, il limite di prestazioni aggregate viene suddiviso uniformemente tra i dischi, indipendentemente dalle dimensioni relative.

Ad esempio, supponiamo che tu abbia un disco pd-standard da 200 GB e un disco pd-standard da 1000 GB. Se non utilizzi il disco da 1000 GB, il disco da 200 GB può raggiungere il limite di prestazioni di un disco standard da 1200 GB. Se utilizzi entrambi i dischi al 100%, ciascuno ha il limite di prestazioni di un disco pd-standard da 600 GB (1200 GB / 2 dischi = disco da 600 GB).

Più dischi di tipi diversi

Se colleghi diversi tipi di dischi a una VM, le prestazioni massime possibili sono il limite di prestazioni del disco più veloce supportato dalla VM. Le prestazioni cumulative dei dischi collegati non supereranno i limiti di prestazioni del disco più veloce supportato dalla VM.

Ottimizza i dischi per i carichi di lavoro orientati a IOPS o throughput

I consigli per le prestazioni dipendono dal fatto che tu voglia massimizzare le IOPS o la produttività.

Carichi di lavoro orientati alle IOPS

I database, che siano SQL o NoSQL, hanno pattern di utilizzo di accesso casuale ai dati. Google consiglia i seguenti valori per i carichi di lavoro orientati a IOPS:

  • Valori di profondità di coda I/O pari a 1 per ogni intervallo da 400 a 800 IOPS, fino a un limite di 64 su volumi di grandi dimensioni

  • Una CPU gratuita per ogni 2000 IOPS di lettura casuali e una CPU gratuita per ogni 2500 IOPS di scrittura casuali

  • Se disponibili per il tipo di macchina VM, utilizza i dischi Hyperdisk Extreme di Google Cloud, che ti consentono di modificare le IOPS provisionate.

In genere, i valori di lettura anticipata più bassi sono suggeriti nei documenti delle best practice per MongoDB, Apache Cassandra, e altre applicazioni di database.

Carichi di lavoro orientati alla velocità effettiva

Le operazioni di streaming, come un job Hadoop, beneficiano di letture sequenziali rapide e dimensioni I/O più grandi possono aumentare le prestazioni di streaming.

  • Utilizza una dimensione I/O di almeno 256 KB.

  • Se disponibili per il tipo di macchina VM, utilizza i dischi Hyperdisk Throughput, che ti consentono di modificare il throughput riservato.

  • Per Persistent Disk standard, utilizza almeno 8 stream I/O sequenziali paralleli, se possibile. Il disco permanente standard è progettato per ottimizzare le prestazioni I/O per l'accesso sequenziale al disco, in modo simile a un disco rigido HDD fisico.

  • Assicurati che l'applicazione sia ottimizzata per una località temporale ragionevole dei dati su dischi di grandi dimensioni.

    Se la tua applicazione accede a dati distribuiti su diverse parti di un disco in un breve periodo di tempo (centinaia di GB per vCPU), non otterrai IOPS ottimali. Per ottenere le migliori prestazioni, esegui l'ottimizzazione in base alla località dei dati temporali, tenendo conto di fattori quali la frammentazione del disco e la casualità delle parti del disco a cui viene eseguito l'accesso.

  • Per il disco permanente SSD, assicurati che lo schedulatore I/O nel sistema operativo sia configurato per soddisfare le tue esigenze specifiche.

    Sui sistemi basati su Linux, controlla se lo schedulatore I/O è impostato su none. Questo pianificatore I/O non riordina le richieste ed è ideale per dispositivi I/O rapidi e casuali.

    1. Nella riga di comando, verifica la pianificazione I/O utilizzata dalla tua macchina Linux:

      cat /sys/block/sda/queue/scheduler
      

      L'output è simile al seguente:

      [mq-deadline] none
      

      Lo scheduler I/O attualmente attivo viene visualizzato tra parentesi quadra ([]).

    2. Se lo schedulatore I/O non è impostato su none, esegui uno dei seguenti passaggi:

      • Per impostare lo schedulatore I/O predefinito su none, imposta elevator=none nella voce GRUB_CMDLINE_LINUX del file di configurazione GRUB. In genere, questo file si trova in /etc/default/grub, ma in alcune distribuzioni precedenti potrebbe trovarsi in una directory diversa.
      GRUB_CMDLINE_LINUX="elevator=none vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16
      

      Dopo aver aggiornato il file di configurazione GRUB, configura il bootloader sul sistema in modo che possa avviarsi su Compute Engine.

      • In alternativa, puoi modificare lo scheduler I/O in fase di esecuzione:
      echo 'none' > sudo /sys/block/sda/queue/scheduler
      

      Se utilizzi questo metodo, al riavvio il sistema torna allo schedulatore I/O predefinito. Esegui di nuovo il comando cat per verificare lo schedulatore I/O.

Modifiche al carico di lavoro che possono migliorare le prestazioni del disco

Alcuni comportamenti dei carichi di lavoro possono migliorare le prestazioni delle operazioni di I/O sui dischi collegati.

Utilizza una profondità di coda I/O elevata

I dischi permanenti hanno una latenza più elevata rispetto ai dischi collegati localmente, come i dischi SSD locali, perché sono dispositivi collegati alla rete. Possono fornire IOPS e throughput molto elevati, ma devi assicurarti che vengano eseguite in parallelo richieste I/O sufficienti. Il numero di richieste di I/O eseguite in parallelo è chiamato profondità della coda I/O.

Le tabelle seguenti mostrano la profondità della coda I/O consigliata per assicurarti di poter raggiungere un determinato livello di prestazioni. Tieni presente che la tabella seguente utilizza una leggera sovrastima della latenza tipica per mostrare consigli prudenti. L'esempio presuppone l'utilizzo di una dimensione I/O di 16 KB.

Generare input/output sufficienti utilizzando dimensioni I/O elevate

  • Utilizzare dimensioni I/O di grandi dimensioni

    Per assicurarti che i limiti di IOPS e la latenza non creino un collo di bottiglia per le prestazioni della tua applicazione, utilizza una dimensione I/O minima di 256 KB o superiore.

    Utilizza dimensioni degli strisce grandi per le applicazioni del file system distribuito. Un workload I/O randomico che utilizza dimensioni degli strisce grandi (4 MB o più) offre ottime prestazioni su Persistent Disk standard a causa della stretta somiglianza del workload con l'accesso a più stream sequenziali sul disco.

  • Assicurati che l'applicazione generi I/O sufficienti

    Assicurati che l'applicazione generi I/O sufficienti per utilizzare completamente le IOPS e i limiti di throughput del disco. Per comprendere meglio il pattern I/O del tuo workload, esamina le metriche relative all'utilizzo e alle prestazioni dei disco permanente in Cloud Monitoring.

  • Assicurati che la CPU disponibile sull'istanza che genera l'I/O sia sufficiente

    Se l'istanza VM non dispone di CPU, la tua app non potrà gestire le IOPS descritte in precedenza. Ti consigliamo di avere una CPU disponibile per ogni 2000-2500 IOPS di traffico previsto.

Limita i carichi I/O elevati a un intervallo massimo

Un intervallo si riferisce a un intervallo contiguo di indirizzi di blocco logici su un singolo disco fisico. I carichi di I/O elevati raggiungono le prestazioni massime se limitati a un determinato intervallo massimo, che dipende dal tipo di macchina della VM a cui è collegato il disco, come indicato nella tabella seguente.

Tipo di macchina Periodo massimo consigliato
  • m2-megamem-416
  • VM C2D
25 TB
Tutti gli altri tipi di macchine 50 TB

Gli span su dischi permanenti separati che aggiungono fino a 50 TB o meno possono essere considerati uguali a un singolo span di 50 TB per motivi di prestazioni.

Modifiche al sistema operativo per migliorare le prestazioni del disco

In alcuni casi, puoi attivare o disattivare le funzionalità a livello di sistema operativo oppure configurare i dischi collegati in modi specifici per migliorarne le prestazioni.

Evita di utilizzare file system ext3 in Linux

L'utilizzo del file system ext3 in una VM Linux può comportare prestazioni molto scarse con carichi di scrittura elevati. Se possibile, utilizza ext4. Il driver del file system ext4 è compatibile con le versioni precedenti di ext3/ext2 e supporta il montaggio di file system ext3. Il file system ext4 è l'impostazione predefinita sulla maggior parte dei sistemi operativi Linux.

Se non riesci a eseguire la migrazione a ext4, come soluzione alternativa puoi montare i file system ext3 con l'opzione di montaggio data=journal. Ciò migliora le IOPS di scrittura a costo del throughput di scrittura. La migrazione a ext4 può comportare un miglioramento fino a 7 volte in alcuni benchmark.

Disattiva l'inizializzazione lazy e attiva i comandi DISCARD

I dischi Persistent Disk supportano operazioni di eliminazione o comandi TRIM, che consentono ai sistemi operativi di informare i dischi quando i blocchi non sono più in uso. Il supporto dell'eliminazione consente al sistema operativo di contrassegnare i blocchi del disco come non più necessari, senza doverli azzerare.

Sulla maggior parte dei sistemi operativi Linux, attivi le operazioni di eliminazione quando monti un Persistent Disk sulla VM. Le VM Windows Server 2012 R2 attivano le operazioni di eliminazione per impostazione predefinita quando viene montato un Persistent Disk.

L'attivazione delle operazioni di esclusione può migliorare le prestazioni generali di runtime e anche accelerare le prestazioni del disco al primo montaggio. La formattazione di un intero volume del disco può richiedere molto tempo, pertanto la formattazione lazy è una pratica comune. Lo svantaggio della formattazione lazy è che il costo viene spesso pagato la prima volta che il volume viene montato. Se disattivi l'inizializzazione lazy e attivi le operazioni di eliminazione, puoi eseguire operazioni di formattazione e montaggio rapide.

  • Disattiva l'inizializzazione lazy e abilita le operazioni di eliminazione durante la formattazione di un disco passando i seguenti parametri a mkfs.ext4:

    -E lazy_itable_init=0,lazy_journal_init=0,discard
    

    Il parametro lazy_journal_init=0 non funziona nelle istanze con immagini CentOS 6 o RHEL 6. Per le VM che utilizzano questi sistemi operativi, formatta il Persistent Disk senza questo parametro.

    -E lazy_itable_init=0,discard
    
  • Per abilitare le operazioni di esclusione durante il montaggio di un disco, passa il seguente flag al comando mount:

    -o discard
    

Il Persistent Disk funziona bene con le operazioni di eliminazione abilitate. Tuttavia, se vuoi, puoi eseguire fstrim periodicamente in aggiunta o al posto dell'utilizzo di operazioni di eliminazione. Se non utilizzi le operazioni di eliminazione, esegui fstrim prima di creare uno snapshot del disco di avvio. Il taglio del sistema di file consente di creare immagini degli snapshot più piccole, il che riduce il costo di archiviazione degli snapshot.

Modificare il valore di lettura anticipata

Per migliorare le prestazioni I/O, i sistemi operativi utilizzano tecniche come la lettura anticipata, in cui viene letto in memoria più di un file rispetto a quanto richiesto, presupponendo che le letture successive abbiano probabilmente bisogno di questi dati. Un valore di lettura anticipata più elevato aumenta la velocità effettiva a spese della memoria e delle IOPS. Una lettura anticipata inferiore aumenta le IOPS a spese del throughput.

Sui sistemi Linux, puoi ottenere e impostare il valore di lettura anticipata con il comando blockdev:

$ sudo blockdev --getra /dev/DEVICE_ID
$ sudo blockdev --setra VALUE /dev/DEVICE_ID

Il valore di lettura anticipata è <desired_readahead_bytes> / 512 byte.

Ad esempio, per un'anticipazione di lettura di 8 MB, 8 MB corrispondono a 8388608 byte (8 * 1024 * 1024).

8388608 bytes / 512 bytes = 16384

Imposti blockdev su 16384:

$ sudo blockdev --setra 16384 /dev/DEVICE_ID

Modificare la VM o crearne una nuova

Esistono limiti associati a ogni tipo di macchina VM che possono influire sulle prestazioni che puoi ottenere dai dischi collegati. Questi limiti includono:

  • Le prestazioni di Persistent Disk aumentano con l'aumento del numero di vCPU disponibili.
  • Gli Hyperdisk non sono supportati con tutti i tipi di macchine.
  • Le tariffe di uscita della rete aumentano con l'aumento del numero di vCPU disponibili.

Assicurati di avere CPU libere

La lettura e la scrittura sul disco permanente richiedono cicli CPU dalla VM. Per raggiungere livelli di IOPS molto elevati e coerenti, devi avere CPU libere per elaborare le operazioni di I/O.

Per aumentare il numero di vCPU disponibili con la tua VM, puoi creare una nuova VM o modificare il tipo di macchina di un'istanza VM.

Creare una nuova VM per ottenere nuove funzionalità

I tipi di dischi più recenti non sono supportati con tutte le serie o tutti i tipi di macchine. Gli Hyperdisk offrono IOPS o tassi di throughput più elevati per i tuoi carichi di lavoro, ma al momento sono disponibili solo con alcune serie di macchine e richiedono almeno 64 vCPU.

Le nuove serie di macchine VM in genere funzionano su CPU più recenti, che possono offrire prestazioni migliori rispetto alle precedenti. Inoltre, le CPU più recenti possono supportare funzionalità aggiuntive per migliorare le prestazioni dei carichi di lavoro, come le Advanced Matrix Extensions (AMX) o le Intel Advanced Vector Extensions (AVX-512).

Passaggi successivi