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.