Dove sta andando l'overhead per ZFS RAIDZ2 su dischi settoriali 4K?


8

Ho iniziato creando 16 file vuoti di esattamente 1 miliardo di byte:

for i in {1..16}; do dd if=/dev/zero of=/mnt/temp/block$i bs=1000000 count=1000 &> /dev/null; done

Quindi ho creato volumi RAIDZ2 sempre più grandi sui file, costringendo ashift = 12 a simulare un'unità settoriale 4K, ad es.

zpool create tank raidz2 -o ashift=12 /mnt/temp/block1 /mnt/temp/block2...

e poi confrontato usando df -B1per vedere la dimensione reale.

Filesystem  1B-blocks
tank        12787777536

I miei risultati:

+-------+-------------+-------------+------------+------------+
| disks |  expected   |   actual    |  overhead  | efficiency |
+-------+-------------+-------------+------------+------------+
|     3 |  1000000000 |   951975936 |   48024064 | 95.2       |
|     4 |  2000000000 |  1883766784 |  116233216 | 94.2       |
|     5 |  3000000000 |  2892234752 |  107765248 | 96.4       |
|     6 |  4000000000 |  3892969472 |  107030528 | 97.3       |
|     7 |  5000000000 |  4530896896 |  469103104 | 90.6       |
|     8 |  6000000000 |  5541068800 |  458931200 | 92.4       |
|     9 |  7000000000 |  6691618816 |  308381184 | 95.6       |
|    10 |  8000000000 |  7446331392 |  553668608 | 93.1       |
|    11 |  9000000000 |  8201175040 |  798824960 | 91.1       |
|    12 | 10000000000 |  8905555968 | 1094444032 | 89.1       |
|    13 | 11000000000 | 10403577856 |  596422144 | 94.6       |
|    14 | 12000000000 | 11162222592 |  837777408 | 93.0       |
|    15 | 13000000000 | 12029263872 |  970736128 | 92.5       |
|    16 | 14000000000 | 12787908608 | 1212091392 | 91.3       |
+-------+-------------+-------------+------------+------------+

Come un grafico:

diagramma di efficienza

  1. I miei risultati sono corretti o ho lasciato qualcosa fuori?
  2. Se sono corretti, perché? Dove sta andando lo spazio?
  3. Posso fare qualcosa per migliorare l'efficienza?
  4. Esiste una formula per calcolare l'efficienza?

Perché? Solo perché?!?
ewwhite,

@ewwhite - C'è fino all'11% di spazio in meno rispetto a quanto mi aspettassi. Se avessi, ad esempio, unità da 12x1 TB, ti aspetteresti di avere 10 TB, ma di avere meno di 9 TB.
steveh7,

No, è una buona domanda. Non conosco la risposta. Ho grandi differenze nell'uso di zpool tra ashift 9 e 12 e gli stessi set di dati.
ewwhite,

Puoi rieseguirli con valori di ashift compresi tra 0 e 12 e tracciare in 3D?
Andrew,

Risposte:


3

La risposta glib, perché RAIDZ (2) fa schifo su unità 4k.

  • Problema n. 548 : uso altamente inefficiente dello spazio osservato quando si utilizza raidz2 con ashift = 12
  • Problema n. 1807 : zvol su RAIDZ2 occupa il doppio dello spazio previsto n. 1807

Ha a che fare con i calcoli di parità che assorbono un carico di spazio aggiuntivo, specialmente con file più piccoli. Prova a fare lo stesso test su file di dimensioni inferiori a 50 MB se vuoi vedere alcune inefficienze reali.


Questa risposta non è attuale, i bug sono stati corretti ...
Arman,

@Arman Se leggi i commenti su 548, spiega perché questo è il caso. Il "bug" nel 548 non è stato risolto, è solo chiuso; non è considerato un bug.
RobbieCrash,
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.