Ottimizzazione delle prestazioni del disco permanente

I dischi permanenti offrono le prestazioni descritte nel grafico dei tipi di disco se la VM gestisce un utilizzo sufficiente per raggiungere i limiti delle prestazioni. Dopo aver dimensionato i volumi del disco permanente per soddisfare le tue esigenze di prestazioni, il carico di lavoro e il sistema operativo potrebbero richiedere alcune ottimizzazioni.

Le seguenti sezioni descrivono le caratteristiche delle VM e dei carichi di lavoro che influiscono sulle prestazioni del disco e discutono di alcuni elementi chiave che possono essere ottimizzati per migliorare le prestazioni. Alcuni suggerimenti e come applicarli 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 per una VM.

Limiti di traffico in uscita dalla rete sulla velocità effettiva di scrittura

La tua VM ha un limite di traffico di rete in uscita 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 ha un overhead che sfrutta larghezza di banda aggiuntiva.

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

I limiti di traffico in uscita dalla rete sono elencati nella colonna Larghezza di banda massima in uscita (Gbps) nelle tabelle dei tipo di macchina per le famiglie di macchine per uso generico, ottimizzate per il calcolo, ottimizzate per l'archiviazione, ottimizzate per la memoria e ottimizzate per l'acceleratore.

Il moltiplicatore della larghezza di banda è di circa 1,16 volte al massimo utilizzo della rete, il che significa che il 16% dei byte scritti è overhead. Per i Persistent Disk a livello di regione, il moltiplicatore della larghezza di banda è di circa 2,32 volte per tenere conto di un ulteriore overhead della replica.

In una situazione in cui le operazioni di lettura e scrittura su un disco permanente competono con la larghezza di banda in uscita dalla rete, il 60% della larghezza di banda massima in uscita dalla rete, definita dal tipo di macchina, viene allocato alle scritture su Persistent Disk. Il restante 40% è disponibile per tutto il resto del traffico di rete in uscita. Fai riferimento alla larghezza di banda in uscita per i dettagli sul traffico di rete in uscita.

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

Conteggio di vCPU VM Limite di traffico in uscita dalla rete (MB/s) Allocazione larghezza di banda (MB/s) Larghezza di banda massima in scrittura (MB/s) Larghezza di banda massima in scrittura al massimo utilizzo della rete (MB/s)
1 250 150 216 129
2-7 1.250 750 1.078 647
8-15 2000 1200 1.724 1.034
16+ 4000 2400 3448 2.069

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 Gbit/s/8 bit = 0,25 GB al secondo = 250 MB al secondo

L'allocazione della larghezza di banda Persistent Disk al pieno utilizzo della rete è:

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

La larghezza di banda in scrittura massima Persistent Disk senza conflitti di rete è:

  • Dischi di zona: 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 del Persistent Disk al pieno utilizzo della rete è:

  • Dischi di zona: 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 traffico in uscita dalla rete forniscono un limite superiore alle prestazioni. Altri fattori potrebbero limitare il rendimento al di sotto di questo livello. Consulta le sezioni seguenti per informazioni su altri vincoli di prestazioni.

Letture e scritture simultanee

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

I volumi di Persistent Disk non possono raggiungere contemporaneamente la velocità effettiva massima e i limiti di IOPS sia per le operazioni di lettura che per le scritture.

Il calcolo della velocità effettiva è IOPS * I/O size. Per sfruttare i limiti massimi di velocità effettiva per le letture e le scritture simultanee su un disco permanente SSD, utilizza una dimensione di I/O in modo che le IOPS di lettura e scrittura combinate non superino il limite di IOPS.

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

Disco permanente standard Disco permanente SSD (8 vCPU) Disco permanente SSD (oltre 32 vCPU) Disco permanente SSD (oltre 64 vCPU)
Leggi Scrittura Leggi Scrittura Leggi Scrittura Leggi Scrittura
7.500 0 15.000 0 60.000 0 100.000 0
5.625 3.750 11.250 3.750 45.000 15.000 75.000 25.000
3.750 7.500 7.500 7.500 30.000 30.000 50.000 50.000
1875 11.250 3.750 11.250 15.000 45.000 25.000 75.000
0 15.000 0 15.000 0 60.000 0 100.000

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

Nella tabella seguente sono elencati i limiti di velocità effettiva (MB al secondo) per VM per le letture e scritture simultanee.

Disco permanente standard Disco permanente SSD (6-14 vCPU) Disco permanente SSD (oltre 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 permanenti SSD, la velocità effettiva di lettura massima e la velocità effettiva di scrittura massima sono indipendenti tra loro, pertanto questi limiti sono costanti.

Dimensione del volume logico

Il Persistent Disk può avere una dimensione massima di 64 TiB ed è possibile creare volumi logici singoli fino a 257 TiB utilizzando la gestione dei volumi logici all'interno della VM. Una dimensione del volume maggiore 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 dei dischi permanenti si ottengono su dimensioni inferiori. I dischi impiegano più tempo per la lettura o la scrittura completa con così tanto spazio di archiviazione su una VM. Se la tua applicazione la supporta, valuta la possibilità di utilizzare più VM per aumentare la velocità effettiva del sistema totale.
  • Lo snapshot di grandi quantità di Persistent Disk potrebbe richiedere più tempo del previsto e potrebbe fornire una visualizzazione incoerente del volume logico senza un attento coordinamento con la tua applicazione.

Più dischi collegati a una singola istanza VM

I limiti delle 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 delle prestazioni corrispondono ai limiti di un singolo disco che ha le dimensioni combinate di questi dischi. Se utilizzi tutti i dischi al 100%, il limite delle prestazioni aggregate viene suddiviso in modo uniforme tra i dischi, indipendentemente dalla dimensione relativa.

Ad esempio, supponiamo che tu abbia un disco pd-standard da 200 GB e un disco pd-standard da 1000 GB. Se non utilizzi un 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%, ognuno ha il limite delle 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 corrispondono al limite delle prestazioni del disco più veloce supportato dalla VM. Le prestazioni cumulative dei dischi collegati non superano i limiti delle prestazioni del disco più veloce supportato dalla VM.

Ottimizza i dischi per IOPS o carichi di lavoro orientati alla velocità effettiva

I suggerimenti sulle prestazioni dipendono da se vuoi massimizzare le IOPS o la velocità effettiva.

Carichi di lavoro orientati a IOPS

I database, 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à della coda I/O di 1 per ogni 400-800 IOPS, fino a un limite di 64 su grandi volumi

  • Una CPU gratuita ogni 2000 IOPS di lettura casuale e 1 CPU libera ogni 2500 IOPS di scrittura casuale

  • Se disponibili per il tipo di macchina della tua VM, utilizza i dischi Google Cloud Hyperdisk Extreme, che ti consentono di modificare le IOPS di cui è stato eseguito il provisioning.

I valori di lettura più bassi sono in genere suggeriti nei documenti con le best practice per MongoDB, Apache Cassandra e altre applicazioni di database.

Carichi di lavoro orientati alla velocità effettiva

Le operazioni di flusso, come un job Hadoop, traggono vantaggio da letture sequenziali veloci e dimensioni I/O più grandi possono aumentare le prestazioni dei flussi di dati.

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

  • Se disponibili per il tipo di macchina della tua VM, utilizza i dischi della velocità effettiva Hyperdisk, che ti consentono di modificare la velocità effettiva di cui è stato eseguito il provisioning.

  • Per Persistent Disk standard, utilizza 8 o più flussi di I/O sequenziali paralleli, se possibile. Un disco permanente standard è progettato per ottimizzare le prestazioni di I/O per l'accesso sequenziale al disco, in modo simile a un disco rigido fisico.

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

    Se l'applicazione accede a dati distribuiti in diverse parti di un disco in un breve periodo di tempo (centinaia di GB per vCPU), non è possibile ottenere IOPS ottimali. Per ottenere le migliori prestazioni, ottimizza in base alla località temporale dei dati, ponderando fattori come la frammentazione del disco e la casualità delle parti del disco a cui si accede.

  • Per i dischi permanenti SSD, assicurati che lo scheduler I/O nel sistema operativo sia configurato per soddisfare le tue esigenze specifiche.

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

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

      cat /sys/block/sda/queue/scheduler
      

      L'output è simile al seguente:

      [mq-deadline] none
      

      Lo scheduler I/O attualmente attivo viene visualizzato in parentesi quadre ([]).

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

      • Per cambiare lo scheduler I/O predefinito in none, imposta elevator=none nella voce GRUB_CMDLINE_LINUX del file di configurazione di GRUB. Di solito 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 essere avviato su Compute Engine.

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

      Se utilizzi questo metodo, al riavvio il sistema torna allo scheduler di I/O predefinito. Esegui di nuovo il comando cat per verificare lo scheduler 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 maggiore rispetto ai dischi collegati localmente, come i dischi SSD locali, perché sono dispositivi collegati alla rete. Possono fornire IOPS e velocità effettiva molto elevate, ma devi assicurarti che vengano eseguite in parallelo richieste di I/O sufficienti. Il numero di richieste di I/O eseguite in parallelo è definito profondità della coda I/O.

Le tabelle riportate di seguito mostrano la profondità consigliata per la coda di I/O per garantire un determinato livello di prestazioni. Tieni presente che la tabella riportata di seguito utilizza una leggera sovrastima della latenza tipica per mostrare suggerimenti conservativi. Nell'esempio si presuppone che tu stia utilizzando una dimensione I/O di 16 kB.

Genera un numero sufficiente di I/O utilizzando dimensioni I/O di grandi dimensioni

  • Utilizzare dimensioni I/O di grandi dimensioni

    Per garantire che i limiti e la latenza di IOPS non compromettano le prestazioni dell'applicazione, utilizza una dimensione minima di I/O di 256 kB o superiore.

    Utilizzare stripe di grandi dimensioni per applicazioni di file system distribuiti. Un carico di lavoro di I/O casuale che utilizza stripe di grandi dimensioni (4 MB o superiore) garantisce prestazioni elevate sul Persistent Disk standard grazie al grado di precisione con cui il carico di lavoro imita più accessi sequenziali al disco in modalità flusso.

  • Assicurati che l'applicazione stia generando un I/O sufficiente

    Assicurati che l'applicazione stia generando un numero di I/O sufficiente a utilizzare completamente i limiti di IOPS e velocità effettiva del disco. Per comprendere meglio il pattern I/O del carico di lavoro, esamina le metriche di utilizzo e prestazioni del disco permanente in Cloud Monitoring.

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

    Se l'istanza VM ha bisogno di CPU, l'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 di I/O intensivi a un intervallo massimo

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

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

Le aree su dischi permanenti separati che sommano fino a 50 TB o meno possono essere considerate pari a un singolo intervallo di 50 TB ai fini delle prestazioni.

Modifiche al sistema operativo per migliorare le prestazioni del disco

In alcuni casi, puoi abilitare o disabilitare le funzionalità a livello del sistema operativo oppure configurare i dischi collegati in modi specifici per migliorare le prestazioni del disco.

Evita di utilizzare file system ext3 in Linux

L'utilizzo di un file system ext3 in una VM Linux può portare a prestazioni molto scadenti con carichi di scrittura intensi. 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 puoi eseguire la migrazione a ext4, come soluzione alternativa, puoi montare i file system ext3 con l'opzione di montaggio data=journal. Questo migliora le IOPS di scrittura al costo della velocità effettiva di scrittura. La migrazione a ext4 può portare a un miglioramento fino a 7 volte in alcuni benchmark.

Disabilita l'inizializzazione lazy e abilita i comandi DISCARD

I dischi permanenti supportano le operazioni di annullamento o i comandi TRIM, che consentono ai sistemi operativi di informare i dischi quando i blocchi non sono più in uso. L'annullamento del supporto consente al sistema operativo di contrassegnare i blocchi dei dischi come non più necessari, senza dover sostenere il costo di azzerare i blocchi.

Nella maggior parte dei sistemi operativi Linux, le operazioni di eliminazione vengono abilitate quando si monta un Persistent Disk sulla VM. Le VM Windows Server 2012 R2 abilitano le operazioni di ignoramento per impostazione predefinita quando si monta un Persistent Disk.

L'abilitazione delle operazioni di eliminazione può aumentare le prestazioni di runtime generali e può anche accelerare le prestazioni del disco quando viene montato per la prima volta. La formattazione di un intero volume di disco può richiedere molto tempo, per cui la formattazione lazy è una pratica comune. Lo svantaggio della formattazione lazy è che il costo spesso viene pagato la prima volta che il volume viene montato. Disattivando l'inizializzazione lazy e abilitando le operazioni di annullamento, puoi ottenere operazioni di formattazione e montaggio rapide.

  • Disabilita 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 su 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
    
  • Abilita le operazioni di eliminazione durante il montaggio di un disco passando il seguente flag al comando mount:

    -o discard
    

Persistent Disk funziona bene se sono abilitate le operazioni di annullamento. Tuttavia, facoltativamente, puoi eseguire fstrim periodicamente in aggiunta o anziché utilizzare le operazioni di eliminazione. Se non utilizzi le operazioni di annullamento, esegui fstrim prima di creare uno snapshot del disco di avvio. Tagliare il file system consente di creare immagini snapshot più piccole, il che riduce il costo di archiviazione degli snapshot.

Regola il valore di readahead

Per migliorare le prestazioni di I/O, i sistemi operativi utilizzano tecniche come il readahead, in cui una quantità di file maggiore di quella richiesta viene letta in memoria nell'ipotesi che per le letture successive siano probabilmente necessari quei dati. Un livello di lettura più elevato aumenta la velocità effettiva a scapito di memoria e IOPS. Un livello di lettura più basso aumenta le IOPS a scapito della velocità effettiva.

Sui sistemi Linux, puoi ottenere e impostare il valore readahead con il comando blockdev:

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

Il valore di readahead è <desired_readahead_bytes> / 512 byte.

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

8388608 bytes / 512 bytes = 16384

Hai impostato blockdev su 16384:

$ sudo blockdev --setra 16384 /dev/DEVICE_ID

Modifica la VM o creane una nuova

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

  • Le prestazioni di Persistent Disk aumentano all'aumentare del numero di vCPU disponibili.
  • Gli Hyperdisk non sono supportati con tutti i tipi di macchina.
  • Le tariffe di traffico in uscita dalla rete aumentano con l'aumento del numero di vCPU disponibili.

Assicurati di avere CPU gratuite

La lettura e la scrittura su un disco permanente richiedono cicli della CPU dalla VM. Per ottenere livelli di IOPS molto elevati e coerenti, devi disporre di CPU libere per elaborare l'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.

Crea una nuova VM per ottenere nuove funzionalità

I tipi di disco più recenti non sono supportati per tutte le serie o tutti i tipi di macchina. L'Hyperdisk fornisce velocità di IOPS o velocità effettiva più elevate per i tuoi carichi di lavoro, ma al momento sono disponibili solo con poche serie di macchine e richiedono almeno 64 vCPU.

Le nuove serie di macchine VM in genere vengono eseguite su CPU più recenti, che possono offrire prestazioni migliori rispetto alle versioni 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