Dimensioni blocchi differenti e rapporti tra letture e scritture

Intel ci ha dato sei SSD DC S3500 equipaggiati con il controller proprietario SATA 6 Gbps integrato. Li abbiamo collegati alle sei porte del chipset C226, abbiamo usato diverse modalità di RAID software e usato due sistemi operativi per scoprire le prestazioni di questa configurazione.

Avatar di Tom's Hardware

a cura di Tom's Hardware

Dimensioni blocchi differenti e rapporti tra letture e scritture

Finora abbiamo testato solo carichi di lavoro semplici, inclusi gli accessi casuali 4 KB e dati organizzati sequenzialmente. Un dispositivo di archiviazione può effettuare operazioni in lettura o scrittura, quindi una divisione 70/30% significa che 70 su 100 operazioni di I/O erano letture, mentre le altre 30 erano scritture. La maggior parte del tempo i carichi di lavoro non sono però solo letture o scritture. E non consistono nemmeno di appena uno o due blocchi. La maggioranza dei carichi di lavoro è un mix di letture e scritture con blocchi tra 512 byte e 1 MB. Nel caso vi siate persi quanto abbiamo scritto a pagina due, i test che vedete di seguito sono sotto Linux (CentOS 6.4 e FIO, per l'esattezza). Se osservate con attenzione noterete che le prestazioni, in generale, sono superiori rispetto ai benchmark sotto Windows.

Un mix di letture, scritture e dimensioni dei blocchi

È bello misurare le IOPS con blocchi di dimensione differente, con un mix di letture e scritture. Sappiamo che servire un sacco di blocchi 4 KB è più di difficile che offrire pezzi di dati da 128 KB, solitamente perché raggiungendo lo stesso throughput con accessi più piccoli si ha un sacco di overhead in più. La relazione tra IOPS e bandwidth è piuttosto semplice:

Dimensione blocco Bandwidth a 1000 IOPS
4 KB / 4096 B 4000 KB/s
8 KB / 8192 B 8000 KB/s
16 KB / 16384 B 16,000 KB/s
32 KB / 32768 B 32,000 KB/s

Se un SSD immaginario arriva al massimo a 10.000 IOPS con dati 8 KB, poi un carico da 16 KB registrerà circa 5.000 IOPS. La quantità di bandwidth rimane la stessa a 80.000 KB/s, o circa 80 MB/s (abbiamo diviso il dato in KB/s per 1024 per avere il dato in MB/s). Con questo in mente, osservate la seguente classifica:

Esponiamo tutti e sei gli SSD DC S3500 in RAID 0 a un minuto di blocchi di varie dimensioni e modelli di lettura/scrittura, e poi osserviamo i risultati in IOPS. Controllate la linea 4KB in viola. Inizia con una lettura al 100% e finisce con il 100% di scrittura, raggiungendo cinque livelli intermedi. Lo vediamo per otto dimensioni diversi a sette rapporti di lettura/scrittura per un totale di 56 punti dati. Ognuno di questi rappresenta le IOPS medie generate nel corso di un minuto, quindi serve meno di un'ora per testare l'array in questo modo. Il paradigma è simile al primo test con due thread. Questa volta, però, ogni thread generato a queue depth di 32 porta a una coda di I/O totale di 64.

Noterete che la linea gialla - che rappresenta i blocchi da 512 byte - inizia a 350.000 IOPS e scende nettamente prima di recuperare terreno con il passaggio a un carico di lavoro composto principalmente da scritture. Questo comportamento è davvero comune per operazioni di I/O a 512 byte, che sono meno che ottimali per una soluzione flash che preferisce accessi allineati a 4 KB. L'accesso a 512 byte è, per definizione, non allineato. Quindi, la maggior parte degli SSD e gli array RAID va in difficoltà.

Accanto, la linea 4 KB - in viola - inizia a 300.000 IOPS, e scende gradualmente fino a quando il mix non è 5/95%, dove supera nuovamente quel dato. La maggior parte degli SSD non scrive più velocemente di quanto legge, quindi è naturale aspettarsi che la linea di pendenza verso il basso. Infine, vediamo dove si colloca la dimensione di ogni blocco nella gerarchia.

Invece di mostrare le IOPS, questa classifica mostra il dato sotto forma di bandwidth. La dimensione dei blocchi più grande genera meno bandwidth e consuma più risorse delle CPU per la creazione. Tornando alla linea gialla, le 350.000 IOPS con blocchi di 512 byte suonano come impressionanti, ma è solo circa 87 MB/s. Fino a quando non raggiungiamo accessi da 32 KB l'array inizia a toccare il limite di bandwidth di circa 1600 MB/s.

Questo grafico, che sembra un radar, è un altro modo di visualizzare il dato. Iniziando dall'alto con 100% di letture, i vari accessi diventano più pensatemente delle scritture in senso orario. I blocchi di 512 byte sono nel mezzo, richiedendo la minor quantità di larghezza di banda. Gli altri blocchi formano anelli concentrici. Si noti che 0% di letture (o 100% di scritture) è il valore più basso per tutte le dimensioni di accesso, mentre la metà del mix da 35/65% a 65/35% produce più bandwidth nei blocchi più grandi.