¿A dónde va la sobrecarga de ZFS RAIDZ2 en discos del sector 4K?

8

Comencé creando 16 archivos vacíos de exactamente mil millones de bytes:

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

Luego creé volúmenes RAIDZ2 cada vez más grandes sobre los archivos, forzando ashift = 12 para simular una unidad de sector 4K, por ejemplo

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

y luego se compara usando df -B1para ver el tamaño real.

Filesystem  1B-blocks
tank        12787777536

Mis resultados:

+-------+-------------+-------------+------------+------------+
| 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       |
+-------+-------------+-------------+------------+------------+

Como un cuadro:

tabla de eficiencia

  1. ¿Son correctos mis resultados o he dejado algo fuera?
  2. Si son correctos, ¿por qué? ¿A dónde va el espacio?
  3. ¿Puedo hacer algo para mejorar la eficiencia?
  4. ¿Existe una fórmula para calcular la eficiencia?
steveh7
fuente
¿Por qué? ¿¡¿Solo porque?!?
ewwhite
@ewwhite: hay hasta un 11% menos de espacio de lo que esperaba. Si tuviera, digamos, unidades de 12x1 TB, esperaría tener 10 TB, pero tener menos de 9 TB.
steveh7
No, es una buena pregunta. No se la respuesta. Tengo grandes diferencias en el uso de zpool entre ashift 9 y 12 y los mismos conjuntos de datos.
ewwhite
¿Puedes volver a ejecutarlos con valores de cambio de ceniza que van de 0 a 12 y trazar en 3D?
Andrew

Respuestas:

3

La respuesta simplista, porque RAIDZ (2) apesta en unidades de 4k.

  • Problema # 548 : Se observa un uso altamente ineficiente del espacio cuando se usa raidz2 con ashift = 12
  • Problema # 1807 : zvol en RAIDZ2 ocupa el doble del espacio esperado # 1807

Tiene que ver con los cálculos de paridad que consumen una gran cantidad de espacio adicional, especialmente con archivos más pequeños. Intente hacer la misma prueba con archivos de menos de 50 MB si desea ver algunas ineficiencias reales.

RobbieCrash
fuente
Esta respuesta no es real, los errores están solucionados ...
Arman
@Arman Si lees los comentarios sobre 548, explica por qué es así. El 'error' en 548 no se corrige, solo se cierra; No se considera un error.
RobbieCrash