4K 섹터 디스크에서 ZFS RAIDZ2의 오버 헤드는 어디에 있습니까? | |

정확히 10 억 바이트의 16 개의 빈 파일을 만드는 것으로 시작했습니다.

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

그런 다음 파일에 더 큰 RAIDZ2 볼륨을 생성하여 ashift = 12를 사용하여 4K 섹터 드라이브를 시뮬레이션합니다.

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

그런 다음 df -B1실제 크기를 확인하기 위해 사용 을 비교했습니다 .

Filesystem  1B-blocks
tank        12787777536

내 결과 :

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

차트로 :

효율성 차트

  1. 결과가 정확합니까, 아니면 무언가를 빠뜨 렸습니까?
  2. 그들이 맞다면 왜? 공간은 어디입니까?
  3. 효율성을 개선하기 위해 무엇을 할 수 있습니까?
  4. 효율을 계산하는 공식이 있습니까?


답변

RAIDZ (2)가 4k 드라이브를 빨아 들이기 때문에 glib가 응답합니다.

  • 이슈 # 548 : ashift = 12로 raidz2를 사용할 때 공간이 매우 비효율적으로 사용됨
  • 문제 # 1807 : RAIDZ2의 zvol이 예상 공간의 두 배를 차지합니다 # 1807

패리티 계산은 추가 공간, 특히 작은 파일의 보트로드를 차지합니다. 실제 비 효율성을 확인하려면 50MB 미만의 파일에 대해 동일한 테스트를 수행하십시오.