Ottimizzazione delle prestazioni del disco permanente

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

Le seguenti sezioni descrivono le caratteristiche delle VM e dei carichi di lavoro che influiscono sulle prestazioni del disco, oltre ad alcuni elementi chiave che possono essere ottimizzati per ottenere prestazioni migliori. Alcuni dei suggerimenti e come applicarne alcuni a tipi di carichi di lavoro specifici.

Fattori che influiscono sulle prestazioni del disco

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

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

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

Il traffico in scrittura massimo che un'istanza VM può emettere è il limite 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 il calcolo, ottimizzate per la memoria e ottimizzate per l'acceleratore.

Con il pieno utilizzo della rete, il moltiplicatore della larghezza di banda è di circa 1,16 volte, il che significa che il 16% dei byte scritti è overhead. Per il Persistent Disk a livello di regione, il moltiplicatore di larghezza di banda è di circa 2,32 volte per tenere conto dell'overhead di replica aggiuntivo.

In una situazione in cui le operazioni di lettura e scrittura del Persistent Disk 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 di Persistent Disk. Il restante 40% è disponibile per tutto il resto del traffico di rete in uscita. Per maggiori dettagli sull'altro traffico di rete in uscita, consulta Larghezza di banda in uscita.

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

Numero di vCPU VM Limite di traffico in uscita dalla rete (MB/s) Allocazione della larghezza di banda (MB/s) Larghezza di banda massima di scrittura (MB/s) Larghezza di banda di scrittura massima al pieno utilizzo della rete (MB/s)
1 250 150 216 129
2-7 1250 750 1.078 647
8-15 2000 1200 1724 1.034
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 il pieno utilizzo della rete è:

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

La larghezza di banda massima di scrittura del Persistent Disk senza contesa 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 massima di scrittura Persistent Disk con l'utilizzo completo 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 di prestazioni. Altri fattori possono limitare il rendimento al di sotto di questo livello. Per informazioni su altri vincoli delle prestazioni, consulta le sezioni seguenti.

Lettura e scrittura simultanee

Per Persistent Disk standard, le letture e le 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 utilizzano una velocità effettiva di scrittura maggiore o IOPS sono in grado di eseguire meno letture.

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

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

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

Disco permanente standard Disco permanente SSD (8 vCPU) Disco permanente SSD (oltre 32 vCPU) Disco permanente SSD (oltre 64 vCPU)
Lettura Scrittura Lettura Scrittura Lettura Scrittura Lettura Scrittura
7.500 0 15.000 0 60.000 0 100.000 0
5.625 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 IOPS in questa tabella si basano su una dimensione di I/O di 8 kB. Altre dimensioni I/O, ad esempio 16 kB, potrebbero avere numeri IOPS diversi, ma mantenere la stessa distribuzione di lettura/scrittura.

La seguente tabella elenca i limiti di velocità effettiva (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)
Lettura Scrittura Lettura Scrittura Lettura Scrittura
1200 0 800* 800* 1200* 1200*
900 100
600 200
300 300
0 400

* Per il disco permanente SSD, la velocità effettiva massima di lettura e quella massima di scrittura sono indipendenti tra loro, per cui questi limiti sono costanti.

Dimensione logica del volume

Il Persistent Disk può avere dimensioni fino a 64 TiB ed è possibile creare volumi logici singoli fino a 257 TiB utilizzando la gestione logica dei volumi 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 di Persistent Disk si ottengono con dimensioni inferiori. I dischi richiedono più tempo per la lettura o la scrittura completa con questo spazio di archiviazione su una VM. Se la tua applicazione le supporta, valuta la possibilità di utilizzare più VM per una velocità effettiva totale del sistema maggiore.
  • Lo snapshot di un numero elevato di Persistent Disk potrebbe richiedere più tempo del previsto e potrebbe fornire una visione incoerente del volume logico senza un attento coordinamento con l'applicazione.

Più dischi collegati a una singola istanza VM

I limiti delle prestazioni dei dischi quando più dischi sono collegati 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 sono gli stessi di quelli di un singolo disco con le dimensioni combinate di quei dischi. Se utilizzi tutti i dischi al 100%, il limite di prestazioni aggregato viene suddiviso in modo uniforme tra i dischi, indipendentemente dalle dimensioni relative del disco.

Ad esempio, supponi di avere 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%, ognuno ha il limite delle prestazioni di un disco pd-standard da 600 GB (1200 GB / 2 dischi = 600 GB).

Più dischi di diversi tipi

Se colleghi diversi tipi di dischi a una VM, le massime prestazioni possibili corrispondono al limite delle 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 tuoi dischi per IOPS o carichi di lavoro orientati alla velocità effettiva

I suggerimenti sulle prestazioni variano a seconda che tu voglia massimizzare il numero di IOPS o la velocità effettiva.

Carichi di lavoro orientati a IOPS

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

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

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

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

I valori di readahead più bassi vengono generalmente suggeriti nei documenti di best practice per MongoDB, Apache Cassandra e altre applicazioni di database.

Carichi di lavoro orientati alla velocità effettiva

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

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

  • Se disponibili per il tuo tipo di macchina VM, utilizza i dischi per la 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 I/O sequenziali paralleli, se possibile. Un disco permanente standard è progettato per ottimizzare le prestazioni di I/O per l'accesso sequenziale al disco, come in un disco rigido fisico HDD.

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

    Se la tua applicazione accede a dati distribuiti in diverse parti di un disco in un breve periodo di tempo (centinaia di GB per vCPU), non potrai ottenere un numero di IOPS ottimale. Per ottenere le prestazioni migliori, ottimizza la località dei dati temporali, ponderando come la frammentazione del disco e la casualità delle parti del disco a cui si accede.

  • Per il disco permanente SSD, assicurati che lo scheduler I/O nel sistema operativo sia configurato in modo da 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 impostare lo scheduler 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 runtime:
      echo 'none' > sudo /sys/block/sda/queue/scheduler
      

      Se utilizzi questo metodo, al riavvio il sistema torna allo scheduler 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 un'elevata profondità di coda I/O

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 un numero sufficiente di richieste di I/O. Il numero di richieste di I/O eseguite in parallelo è indicato come profondità della coda di I/O.

Le tabelle riportate di seguito mostrano la profondità consigliata della coda di I/O per garantire un determinato livello di prestazioni. Tieni presente che la tabella riportata di seguito utilizza una lieve stima della latenza tipica per mostrare consigli prudenti. Nell'esempio si presuppone che utilizzi una dimensione di I/O di 16 kB.

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

  • Utilizzare dimensioni I/O grandi

    Per assicurarti 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.

    Usa strisce di grandi dimensioni per le applicazioni di file system distribuite. Un carico di lavoro di I/O casuale che utilizza grandi dimensioni di Stripe (4 MB o più) raggiunge grandi prestazioni sul Persistent Disk standard grazie alla precisione con cui il carico di lavoro riproduce l'accesso a più dischi di flusso sequenziale.

  • Assicurati che l'applicazione generi una quantità di I/O sufficiente

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

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

    Se la tua istanza VM ha bisogno di CPU, l'app non sarà in grado di 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 pesanti a un intervallo massimo

Uno intervallo è un intervallo contiguo di indirizzi di blocchi logici su un singolo disco fisico. I carichi di I/O intensivi raggiungono le massime prestazioni quando sono 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

Ai fini delle prestazioni, gli intervalli su dischi permanenti separati che raggiungono un massimo di 50 TB possono essere considerati come un singolo intervallo di 50 TB.

Modifiche al sistema operativo per migliorare le prestazioni del disco

In alcuni casi, puoi abilitare o disabilitare le funzionalità a livello di 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ò comportare prestazioni molto scarse in caso di carichi di scrittura intensi. Se possibile, utilizza ext4. Il driver di 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 nella 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. Ciò migliora le IOPS di scrittura in rapporto alla velocità effettiva di scrittura. La migrazione a ext4 può comportare miglioramenti fino a 7 volte di alcuni benchmark.

Disabilita l'inizializzazione lazy e abilita i comandi DISCARD

I dischi permanenti 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 per gli scarti consente al sistema operativo di contrassegnare i blocchi del disco come non più necessari, senza incorrere nel costo di azzerare i blocchi.

Sulla maggior parte dei sistemi operativi Linux, puoi abilitare le operazioni di eliminazione quando installi un Persistent Disk sulla VM. Per impostazione predefinita, le VM Windows Server 2012 R2 consentono l'eliminazione delle operazioni quando si monta un Persistent Disk.

L'abilitazione delle operazioni di eliminazione può migliorare le prestazioni generali del runtime 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, pertanto la formattazione lazy è una pratica comune. Lo svantaggio della formattazione lazy è che spesso il costo viene pagato la prima volta che il volume viene montato. Se disabiliti l'inizializzazione lazy e abilita le operazioni di eliminazione, 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 sulle 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 con le operazioni di eliminazione abilitate. Tuttavia, puoi facoltativamente eseguire fstrim periodicamente in aggiunta o anziché utilizzare le operazioni di eliminazione. Se non utilizzi le operazioni di eliminazione, esegui fstrim prima di creare uno snapshot del disco di avvio. Se tagli il file system, puoi creare immagini snapshot più piccole, riducendo il costo dell'archiviazione degli snapshot.

Regola il valore di lettura

Per migliorare le prestazioni di I/O, i sistemi operativi utilizzano tecniche come readahead, in cui una quantità maggiore di un file di quella richiesta viene letta in memoria partendo dal presupposto che è probabile che le letture successive richiedano questi dati. Una lettura più elevata aumenta la velocità effettiva, a scapito di memoria e IOPS. Una lettura più bassa aumenta il numero di 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 lettura è <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 del Persistent Disk aumentano con l'aumento del numero di vCPU disponibili.
  • Hyperdisk non è supportato con tutti i tipi di macchina.
  • Le tariffe del 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 disco permanente richiede cicli di CPU dalla VM. Per raggiungere livelli di IOPS molto elevati e coerenti, devi disporre di CPU libere per elaborare l'I/O.

Per aumentare il numero di vCPU disponibili per 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 con tutti i tipi di serie o di macchina. Hyperdisk offre tassi di IOPS o di velocità effettiva più elevate per i tuoi carichi di lavoro, ma sono attualmente disponibili solo con alcune serie di macchine e richiedono almeno 64 vCPU.

Le nuove serie di macchine VM in genere vengono eseguite su CPU più recenti, in grado di offrire prestazioni migliori rispetto ai predecessori. Inoltre, le CPU più recenti possono supportare funzionalità aggiuntive per migliorare le prestazioni dei carichi di lavoro, ad esempio Advanced Matrix Extensions (AMX) o Intel Advanced Vector Extensions (AVX-512).

Passaggi successivi