Para onde está indo a sobrecarga do ZFS RAIDZ2 em discos do setor 4K?

8

Comecei criando 16 arquivos vazios de exatamente 1 bilhão de bytes:

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

Em seguida, criei volumes RAIDZ2 cada vez maiores sobre os arquivos, forçando o ashift = 12 a simular uma unidade de setor 4K, por exemplo

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

e depois comparado usando df -B1para ver o tamanho real.

Filesystem  1B-blocks
tank        12787777536

Meus 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 um gráfico:

gráfico de eficiência

  1. Meus resultados estão corretos ou deixei algo de fora?
  2. Se eles estão corretos, por quê? Para onde está indo o espaço?
  3. Posso fazer algo para melhorar a eficiência?
  4. Existe uma fórmula para calcular a eficiência?
steveh7
fonte
Por quê? Só por que?!?
precisa saber é o seguinte
@whwhite - Há até 11% menos espaço do que eu esperava. Se você tivesse, digamos, unidades de 12x1 TB, esperaria ter 10 TB, mas menos de 9 TB.
steveh7
Não, é uma boa pergunta. Não sei a resposta Tenho grandes diferenças no uso do zpool entre o ashift 9 e 12 e os mesmos conjuntos de dados.
precisa saber é o seguinte
Você pode reexecutá-los com valores de desvio que variam de 0 a 12 e plotar em 3D?
8303 Andrew

Respostas:

3

A resposta simplista, porque o RAIDZ (2) é péssimo em unidades de 4k.

  • Problema # 548 : uso altamente ineficiente do espaço observado ao usar o raidz2 com ashift = 12
  • Edição nº 1807 : o zvol no RAIDZ2 ocupa o dobro do espaço esperado # 1807

Isso tem a ver com os cálculos de paridade que consomem muito espaço adicional, especialmente com arquivos menores. Tente fazer o mesmo teste em arquivos com menos de 50 MB, se você quiser ver algumas ineficiências reais.

RobbieCrash
fonte
Esta resposta não é real, os bugs são corrigidos ...
Arman
@ Arman Se você ler os comentários no 548, explica por que esse é o caso. O 'bug' em 548 não é corrigido, é apenas fechado; não é considerado um bug.
22815 RobbieCrash #