2006/07/21

ZFS configuration & Performance

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
(본문의 내용을 이해하기 쉽게 약간 의역했습니다.)

김봉환/

[Solaris10:inetd:network] Solaris 10에서 inetd 로그 활성화하는 법

Solaris 10에서는 inetd 운영 구조가 변경되다 보니, 이전 버젼에서 사용하던 방법들이
적용되지 않는 경우가 발생한다.
10이전 버젼에서는 inetd의 로그를 활성화하기 위해서는 inetd가 실행될때 -t 옵션을 가지고
실행하도록 하면 되었으나, 솔라리스 10에서는 inetd 서비스가 SMF 구조로 들어가다 보니
이것을 활성하는 방법이 다소 변경되었다.
솔라리스 10에서는 inetd 휘하에서 구동되는 서비스의 시작과 운영을 inetadm에 의해서 관리한다.
inetadm에 의해서 기본적으로 관리되는 속성을 보기 위해서는 다음과 같이 명령한다.

#inetadm -p
NAME=VALUE
bind_addr=""
bind_fail_max=-1
bind_fail_interval=-1
max_con_rate=-1
max_copies=-1
con_rate_offline=-1
failrate_cnt=40
failrate_interval=60
inherit_env=TRUE
tcp_trace=TRUE
tcp_wrappers=TRUE

솔라리스 10에서는 다음과 같이 함으로써 inetd 서비스의 운영 속성을 변경한다.

#inetadm -M tcp_trace=TRUE