Perché è importante la IOPS?


32

Capisco cosa sono IOPS e throughput. La velocità effettiva misura il flusso di dati in quanto MB / se IOPS indicano quante operazioni di I / O stanno avvenendo al secondo.

Quello che non capisco è perché molti servizi di archiviazione mostrano solo gli IOPS che forniscono. Non riesco davvero a vedere nessuno scenario in cui preferirei conoscere lo IOPS anziché il throughput.

Perché è importante la IOPS? Perché AWS mostra principalmente le disposizioni di archiviazione in IOPS? Dove sono gli IOPS più rilevanti della velocità effettiva (MB / s)?


MODIFICARE:

Alcune persone stanno esaminando questa domanda come se avessi chiesto cosa sia l'accesso casuale e come influisce sulle prestazioni o su come funzionano HDD e SSD ... anche se penso che queste informazioni siano utili per le persone che non conoscono il comportamento dello storage, viene applicata molta attenzione a questo e non è l'obiettivo della domanda, la domanda è "Quale nuova informazione ricevo quando vedo un numero IOPS, che non vedrei un numero di throughput (MB / s)?"



3
Se desideri spostare dati di grandi dimensioni, ti preoccupi della velocità effettiva. Se hai bisogno di r / w un sacco di piccoli dati hai bisogno di più IOPS. eg1 Se esiste un'unica operazione in grado di leggere MB di dati dal dispositivo, è necessaria solo 1 operazione per ottenere un throughput elevato. eg2 Se hai bisogno di leggere dozzine di attributi di file non stai guardando una grande quantità di dati ogni volta, ma devi fare molte operazioni per recuperare piccoli bit di dati. La produttività sarebbe bassa ma occorrerebbero molte operazioni.
TafT

Risposte:


32

Throughput

La velocità effettiva è utile quando si eseguono operazioni come la copia di file. Quando fai quasi tutto il resto, le letture e le scritture casuali sul disco ti limiteranno.

IOPS

Gli IOPS in genere specificano la dimensione di ciascun pacchetto di dati. Ad esempio, AWS gp2 può eseguire 10.000 IOPS con una dimensione di payload di 16 KiB . Ciò si moltiplica fino a 160 MiB / sec. Tuttavia, è probabilmente improbabile che tu utilizzi sempre l'intera dimensione del payload, quindi la velocità effettiva sarà probabilmente inferiore. NB KiB è 1024 byte, KB è 1000 byte.

Perché IOPS specifica una dimensione del pacchetto che fornisce anche un throughput totale. Considerando che un throughput elevato non significa che si dispone di IOPS elevati.

scenari

Considera questi scenari:

  • Avvio del PC. Considera la differenza tra un SSD e un disco rotante nel tuo computer, che è qualcosa con cui molte persone hanno esperienza diretta. Con un disco rotante il tempo di avvio può essere di un minuto, mentre con un SSD questo può scendere a 10-15 secondi. Questo perché IOPS più elevati portano a una latenza inferiore quando vengono richieste informazioni. Il throughput del disco rotante è abbastanza buono, 150 MB / sec, anche se l'SSD è probabilmente più alto, non è per questo che è più veloce: è la latenza più bassa a restituire informazioni.
  • Esecuzione di un aggiornamento del sistema operativo. Sta andando su tutto il disco, aggiungendo e patchare i file. Se avessi IOPS bassi sarebbe lento, indipendentemente dalla velocità effettiva.
  • Esecuzione di un database, ad esempio selezionando una piccola quantità di dati da un database di grandi dimensioni. Legge dall'indice, legge da un numero di file, quindi restituisce un risultato. Ancora una volta sta andando su tutto il disco per raccogliere le informazioni.
  • Giocare sul tuo PC. Probabilmente carica un gran numero di trame da tutto il disco. In questo caso sono probabilmente richiesti IOPS e throughput.

Nastro LTO

Considerare per un momento un sistema di backup su nastro. LTO6 può fare 400 MB / sec, ma (immagino che qui) probabilmente non può nemmeno fare un IOP casuale, potrebbe essere basso quanto i secondi per IOP. D'altra parte, può probabilmente eseguire molti IOPS sequenziali, se un IOPS è definito come lettura o scrittura di un pacchetto di dati su nastro.

Se si tenta di avviare un sistema operativo dal nastro ci vorrebbe molto tempo, se funzionasse affatto. Questo è il motivo per cui la IOPS è spesso più utile della produttività.

Per comprendere un dispositivo di archiviazione, probabilmente vorrai sapere se si tratta di IOPS casuali o sequenziali e delle dimensioni di I / O. Da ciò è possibile ricavare velocità effettiva.

AWS

Si noti che AWS pubblica sia IOPS sia dati di velocità effettiva per tutti i suoi tipi di archiviazione, in questa pagina . L'SSD per scopi generici (gp2) può eseguire 10.000 IOPS da 16 KiB, che fornisce un massimo di 160 MB / sec. Gli IOPS forniti (io1) sono 20.000 IOPS da 16 KiB, che fornisce un massimo di 320 MB / sec.

Si noti che con i volumi gp2 si ottiene il provisioning di 30IOPS per GB, quindi per ottenere 10.000 IOPS è necessario un volume di 333.33GB. Non ricordo se i volumi di io1 abbiano una limitazione simile (è passato un po 'di tempo da quando ho fatto gli esami associati in cui quel tipo di cose è stato testato), ma sospetto che lo facciano, e in tal caso è probabilmente 60IOPS per GB.

Conclusione

Un throughput sequenziale elevato è utile e in alcuni casi è il fattore limitante per le prestazioni, ma è probabile che un elevato IOPS sia più importante nella maggior parte dei casi. Ovviamente hai ancora bisogno di un throughput ragionevole indipendentemente dall'IOPS.


Ho capito che IOPS misura le prestazioni di accesso casuale, ma in realtà non mostra quanto velocemente stai facendo le cose ... potresti fare 10000 IOPS, ma questo potrebbe essere qualcosa di lento o veloce, l'unico modo per sapere è sapere quanti MB / s l'operazione sta consumando.
mFeinstein,

Gli IOPS in genere specificano la dimensione del payload dei dati. AWS dice 16 KiB. Quindi 10.000 IOPS a 16 KiB / s offrono 160 MB / sec.
Tim

2
Tuttavia, 10000 IOPS a 16 KB non si traducono in 20000 IOPS a 8 KB (forse ~ 11000). Ciò significa che è necessario conoscere sia IOPS sia il throughput per valutare un'unità / carico di lavoro.
boot4life,

4
Solo per essere pedanti, sono ancora 1 IOPS, non 1 IOP. La s non è un plurale
Matthew Steeples

1
Non riesco a pensare ad altri. La maggior parte delle cose con IOPS elevati ha un throughput ragionevolmente elevato, ma nella maggior parte dei casi è utile a causa degli IOPS e non del throughput. Un altro esempio potrebbe essere un database relazionale, sebbene non sia un dispositivo di archiviazione ma un software. Non sono sicuro di cos'altro vuoi da questa domanda, penso che il concetto ti sia stato completamente spiegato. Qualunque cosa abbia un tempo di ricerca elevato o latenza probabilmente ha un basso IOPS, ma il throughput può essere disaccoppiato ed essere elevato in alcuni casi.
Tim

57

Questo perché il throughput sequenziale non è il modo in cui si verifica la maggior parte dell'attività di I / O.

Le operazioni di lettura / scrittura casuali sono più rappresentative della normale attività del sistema, e ciò è generalmente vincolato da IOPS.

Lo streaming di porno da uno dei miei server ai nostri clienti (o il caricamento sulla nostra CDN) è di natura più sequenziale e vedrai l'impatto del throughput lì.

Ma mantenere il database che cataloga il porno e traccia l'attività degli utenti attraverso il sito sarà di natura casuale, e limitato dal numero di piccole operazioni di I / O / secondo di cui è in grado di archiviare lo storage sottostante.

Potrei aver bisogno di 2.000 IOPS per poter eseguire i database al massimo utilizzo, ma potrei vedere solo 30 MB / s di throughput a livello del disco a causa del tipo di attività. I dischi sono in grado di supportare 1200 MB / s, ma gli IOPS sono la limitazione nell'ambiente.

Questo è un modo per descrivere il potenziale di capacità di un sistema di archiviazione. Un SSD può avere la capacità di eseguire 80.000 IOPS e una velocità di trasmissione di 600 MB / s. È possibile ottenere tale velocità effettiva con 6 dischi SAS da 10k regolari, ma il risultato sarebbe solo di circa 2.000 IOPS.


Potresti darmi un esempio in cui IOPS mi darebbe un'idea delle prestazioni del mio sistema in cui gli MB / s non sarebbero utili?
mFeinstein,

@mFeinstein Vedi l'esempio porno sopra.
ewwhite,

33
+1 per esempio porno lol
mFeinstein

2
Inoltre, è probabile che un sistema operativo esegua un mucchio di piccoli accessi casuali. Il throughput Seq non sarà di aiuto. Questo è un motivo per eseguire il sistema operativo su un SSD, almeno nei PC.
sudo,

3
Vedo spesso dischi completamente utilizzati che fanno ~ 2 MB / sec. Questo perché è IO casuale al 100%. A volte, incredibili guadagni di perf sono probabilmente disponendo i dati sequenzialmente su disco (ad esempio rimuovendo la frammentazione, indicizzando nei database).
boot4life,

6

Mentre la risposta di ewwhite è completamente corretta, volevo fornire alcuni numeri più concreti solo per aiutare a capire perché la differenza conta in prospettiva.

Come già affermato correttamente ewwhite, la maggior parte delle applicazioni non in streaming eseguono principalmente operazioni su disco non sequenziali, motivo per cui gli IOPS contano oltre alla velocità di picco teorica.

Quando un collega e io abbiamo installato per la prima volta SSD nei nostri sistemi di sviluppo per sostituire gli HDD che avevamo utilizzato in precedenza, abbiamo eseguito alcune misurazioni delle prestazioni su di essi che hanno messo in evidenza il perché:

Risultati HDD SATA:

Velocità di lettura sequenziale: ~ 100 MB / s
Velocità di lettura non sequenziale (2k blocchi, IIRC): ~ 1 MB / s

Risultati SSD collegati PCIe:

Velocità di lettura sequenziale: ~ 700 MB / s
Velocità di lettura non sequenziale (2k blocchi, IIRC): ~ 125 MB / s

Come puoi vedere chiaramente dall'esempio, solo elencare un throughput massimo per ciascun dispositivo darebbe un'immagine estremamente inaccurata di come si confrontano. L'SSD è circa 6-7x più veloce dell'HDD quando si leggono sequenzialmente file di grandi dimensioni, ma è oltre 100 volte più veloce quando si leggono piccoli blocchi di dati da diverse parti del disco. Naturalmente, con gli HDD, questa limitazione è in gran parte dovuta al fatto che gli HDD devono spostare fisicamente la testa destra / sinistra sulla traccia desiderata e quindi attendere che i dati desiderati ruotino sotto la testa, mentre gli SSD non hanno parti fisiche da spostare.

I nostri tempi di compilazione sono migliorati molto più drasticamente di quanto avrebbe suggerito un semplice confronto dei throughput massimi. Le build che in precedenza richiedevano oltre 30 minuti ora sono terminate in circa un minuto, poiché l'I / O del disco durante una build di grandi dimensioni consiste nella lettura e scrittura di molti file di origine separati che non sono individualmente molto grandi e possono essere sparsi fisicamente su tutto il disco .

Fornendo sia la velocità effettiva che i numeri IOPS, puoi avere un'idea molto migliore di come si comporterà un determinato carico di lavoro su un determinato dispositivo di archiviazione. Se stai semplicemente trasmettendo grandi quantità di dati non frammentati, ti avvicinerai abbastanza alla velocità massima. Tuttavia, se stai facendo molte piccole letture e / o scritture che non sono memorizzate in sequenza sul disco, sarai limitato da IOPS.


Non hai misurato anche gli IOPS?
mFeinstein,

3

Per eseguire un'operazione IO, l'azionamento / i devono passare attraverso una serie di operazioni. Per un disco rigido meccanico devono.

  1. Cerca la strada giusta e seleziona la testa giusta.
  2. Attendere che il piatto ruoti nella posizione corretta.
  3. Trasferire effettivamente i dati.

Il tempo impiegato per 3 dipende dalla dimensione del blocco di dati, ma il tempo impiegato per 1 e 2 è indipendente dalla dimensione della richiesta.

Il throughput del titolo e le cifre degli IOP rappresentano casi estremi. Le cifre del throghput del titolo rappresentano il caso in cui ogni operazione comporta un grande blocco di dati, quindi l'unità trascorre la maggior parte del tempo a spostare effettivamente i dati.

La figura IOP principale rappresenta il caso in cui i blocchi di dati sono molto piccoli, quindi la maggior parte del tempo viene spesa alla ricerca delle teste e in attesa della rotazione dei piatti.

Per molti carichi di lavoro i blocchi sono sufficientemente piccoli da rendere il numero di blocchi da trasferire molto più importante della dimensione dei blocchi.


2

Esistono due tipi di colli di bottiglia che è possibile riscontrare su volumi IO (o IO in generale).

Le prestazioni effettive vengono infatti misurate per includere un componente basato sul volume di dati spostati, ridimensionato in base alla larghezza di banda disponibile o simile, dimensione unitcost *, ma esiste anche un sovraccarico associato alle richieste, che è costante, che sia quel disco, rete o numerose altre cose.

unitcost * dimensioni + spese generali. l'equazione di una linea.

Se il costo unitario è elevato o le dimensioni sono elevate, ha senso caricare in base a questi volumi, come le reti di telefonia mobile, d'altra parte a volte le spese generali sono molto più critiche.

Puoi fare tu stesso un semplice esperimento, creare una directory con pochi file da 1 GB (o qualunque cosa sia pratica, qualcosa di così grande che ci vogliono diversi secondi per leggerlo / scriverlo), quindi creare una cartella con un milione di file da 100 byte (nota, questo è 0,1 GB di dati), quindi vedi cosa succede al tuo throughput quando inizi a provare a spostare tutte queste cose tra diverse partizioni / dischi: otterrai prestazioni limitate dal throughput per i file di grandi dimensioni e limitato da il numero di file per le cose più piccole.

Suppongo che Amazon sia a conoscenza di entrambi i modelli di ricarica e abbia semplicemente scoperto che uno rappresenta meglio le capacità della propria infrastruttura.

Esiste un limite alla dimensione di un IOP che è ampiamente correlato all'importo che il negozio può trasferire in un "ciclo", quindi le richieste di grandi dimensioni continuano a costare più IOPS.

C'è un bel pezzo qui degli stessi amazon su IOPS e costi, e 'risparmi' che passano attraverso le ottimizzazioni

Caratteristiche e monitoraggio I / O

Non leggere tutto ma sembra interessante, se sei curioso di quest'area.


2

Rispondere alla tua domanda

"Quali nuove informazioni ottengo quando vedo un numero IOPS, che non vedrei un numero di throughput (MB / s)?"

direttamente, indica quante operazioni di I / O della profondità della coda e della dimensione del file specificate possono essere archiviate al secondo . È possibile calcolare la velocità effettiva a determinate condizioni utilizzando la seguente formula:

IOPS * file size = Throughput

I test di archiviazione possono generare un numero diverso di IOPS in base alla dimensione del file e alla profondità della coda. Alla profondità della coda = 1 o 2, il controller non sfrutterà la memorizzazione nella cache, mentre alla profondità della coda 32, 256, il numero 512 aumenta più volte e non cambia molto. Con dimensioni dei file di 128 KB, il conteggio IOPS potrebbe essere inferiore accanto ai file 4KB, ma il throughput è più elevato.

Il modo migliore per valutare le prestazioni di un archivio è cercare IOPS e test di velocità effettiva a diverse dimensioni di blocco e profondità della coda.


Credo che potresti confondere un po 'IOPS con la velocità effettiva ... La velocità effettiva non è sinonimo di accesso continuo, ma i MB / s totali che l'archiviazione è stata in grado di elaborare in un determinato momento .... Quindi, quando dici l'HDD e l'SSD avrebbe lo stesso throughput, è per l'accesso continuo ... Poiché esiste un throughput anche per l'accesso casuale ... Solo molto meno per gli HDD in generale a causa del tempo di ricerca.
mFeinstein,

Quindi dovresti includere nella tua risposta che ti riferisci all'accesso continuo all'inizio e all'accesso casuale alla fine, poiché IOPS non è sinonimo anche di accesso casuale ... Proprio quando ha più senso usare IOPS come misurazione
mFeinstein,

@mFeinstein Ho modificato la risposta, dai un'occhiata.
Eugene,

1

In generale, lo IOPS è più difficile da ottenere rispetto alla velocità effettiva. Se disponi di molti IOPS, avrai una velocità effettiva sufficiente per la maggior parte del tempo.

Con i dischi rigidi classici, il numero di assi è il fattore limitante, poiché la testa deve essere spostata fisicamente su ogni unità: ed è terribilmente lenta. Gli SSD hanno una capacità IOPS decisamente migliore.

Se hai un solo utente, copiando un file di grandi dimensioni sulla rete, potresti avere solo una dozzina di ricerche per ottenere i dati e il resto sarà solo in streaming dal disco.

Tuttavia, se stai colpendo un database o hai molti utenti simultanei, dovrai accedere a diverse parti della tua memoria allo stesso tempo, con lo IOPS alle stelle.

Il semplice aggiornamento di 10 righe in parallelo su un database relazionale potrebbe comportare la generazione di centinaia di IO: lettura degli indici, lettura dei dati, aggiunta del file di registro, aggiornamento degli indici e dei dati. La maggior parte dei sistemi operativi e dei database si impegna molto per limitare il numero di IO inserendo nella cache e ritardando / raggruppando gli IO quando possibile.


1

Risponderò anche alla mia domanda perché penso che la maggior parte delle risposte sia andata molto fuori tema e la risposta potrebbe essere molto più semplice:

Se guardi solo il throughput dei tuoi dispositivi di archiviazione, potresti perdere ciò che sta succedendo ... Se c'è un throughput basso (MB / s bassi) potresti avere un dispositivo lento O avere un accesso casuale in un HDD o in qualche altro dispositivo che non gestisce bene l'accesso casuale.

Esaminando gli IOPS e conoscendo le dimensioni del blocco di ciascuna operazione I / O, è possibile sapere quanti accessi è in grado di gestire il dispositivo di archiviazione e qual è il throughput di questi IOPS (dimensione del blocco * IOPS).

Quindi guardando IOPS alti puoi concludere che il tuo dispositivo di archiviazione sta gestendo un sacco di accesso casuale, anche se questo ha un throughput basso .... o forse stai cercando IOPS bassi con lo stesso throughput basso, il che significa che il tuo dispositivo è solo inattivo.

Quindi, osservando lo IOPS, possiamo avere un'idea di cosa significhi effettivamente il throughput, entrambi si completano a vicenda.


IOPS = Ingressi / Uscite al secondo, non si tratta di plurale e S finale non deve essere omesso. :)
Eugene,

1
Non si tratta di plurale, ho visto alcune persone riferirsi all'IOP come abbreviazione di "I / O OPeration" come sembra ... Ma sì, questo potrebbe portare a confusione, quindi lo sostituirò, grazie
mFeinstein
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.