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
- Letture e scritture simultanee
- Dimensione del volume logico
- Più dischi collegati a una singola istanza 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 |
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.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 (
[]
).Se lo scheduler I/O non è impostato su
none
, esegui uno dei seguenti passaggi:- Per cambiare lo scheduler I/O predefinito in
none
, impostaelevator=none
nella voceGRUB_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.- Per cambiare lo scheduler I/O predefinito in
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 |
---|---|
|
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
- Eseguire il benchmarking dei volumi di dischi permanenti collegati alle VM Linux.
- Scopri di più sui prezzi dei dischi permanenti.
- Scopri come monitorare le prestazioni del disco esaminando le metriche relative alle prestazioni dei dischi permanenti.