ZFS는 Copy-on-Write(COW)에 의해서 인접한 블럭들을 통합해서 I/O 처리할 수 있기 때문에 '쓰기(write)에 집중되는" 부하에서 매우 강한 것으로 보입니다만. 특별한 경우, 랜덤 읽기(Random Read)에서는 zfs가 가지는 RAID 구성의 특성에 영향을
많이 받을 수 있다고 되어 있습니다.
특 히, ZFS의 RAID-Z(5의 변형)은 각 디스크 별로 stripe되지 않고,디스크내의 Block 별로 stripe됩니다. (디스크가 1개가 있어도 RAID-Z를 사용하고, 동적으로 디스크의 가감이 이루어지는 것을 지원하기 위해서 위와 같은 방법을 사용합니다.) 그러므로, 디스크를 모두 같은 그룹으로 묶어버리게 되면, 결국 한 디스크에 IO가 발생하는 것과 동일하게 됩니다.(아래 테이블에서 Z 1 x (99+1) 구성) 때문에, 다른 볼륨 매니저의 RAID-5처럼 오인해서 모든 디스크를 한 그룹으로 묶게 되면 성능 저하가 발생하게 됩니다.(특히, RANDOM I/O에서)
전통적인 구성과 유사하게 하시려면 그룹이란 개념으로 디스크를 묶어서 RAID를 구성해야 합니다, Z 20 x (4+1)이나 Z 10 x (9+1)과 같은 구성을 하여야 합니다.
아래 zfs에서 사용되는 RAID구성과 Random 읽기 성능과의 상관 관계 테이블이 있습니다.
N= disk의 수
DS = 개별 disk 용량
IOPS= 각 disk별 IOPS
라고 가정했을 때, RANDOM Operation에서 다음과 같은 테이블이 구성됩니다.
Random
Blocks Available FS Blocks / sec
---------------- --------------
RAID-Z (N - 1) * DS 1 * IOPS
Mirror (N / 2) * DS N * IOPS
Stripe N * DS N * IOPS
디스크의 개수가 100(=N)개이고, 각 디스크의 용량이 100GB(=DS), 각 Disk별 IO 성능이 200 Blocks/sec(=IOPS) 라고 가정하면 다음과 같은 성능 테이블이 구성됩니다.
아래 테이블에서 각 레이블은
Z 5 x (19+1) : a dynamic striping of 5 RAID-Z groups, each
group made of 20 disks (19 data disk + 1 parity).
M : a 2-way mirror
S : a simple dynamic stripe.
를 의미합니다. 따라서, 예상 가능한 Performance Table/Configuration Matix는 다음과 같습니다.
Random
Config Blocks Available FS Blocks /sec
------------ ---------------- ---------
Z 1 x (99+1) 9900 GB 200(=100KB/s)
Z 2 x (49+1) 9800 GB 400
Z 5 x (19+1) 9500 GB 1000
Z 10 x (9+1) 9000 GB 2000(=1MB/s)
Z 20 x (4+1) 8000 GB 4000
Z 33 x (2+1) 6600 GB 6600
M 2 x (50) 5000 GB 20000(=10MB/s)
S 1 x (100) 10000 GB 20000
일반적으로 1 Block은 512bytes 입니다.
대부분의 경우에는 디스크를 많이 공급한후 R1+0. R0+1이 권고되는 구성이라고 생각합니다.
RAID-Z를 사용해야 하는 경우에는 위의 테이블을 기준으로 납득할 수 있는 IOPS를 기준으로 적절한 구성을 하시는 것이 좋을 듯 합니다.
refer the full story :
http://blogs.sun.com/roller/page/roch?entry=when_to_and_not_to
(본문의 내용을 이해하기 쉽게 약간 의역했습니다.)
김봉환/