새로 ftp.kr.freebsd.org 서버를 셋업하게 되어서, 기존 방식대로 ufs2 로 할까 하다가 10.0-BETA3 을 설치하게 되면서 zfs root 라든가 기존에 해 보지 않았던 것을 해 보고 있습니다. 그중에 FTP 미러 파티션을 무엇으로 해 볼까가 중요한 문제인데, 서버에 내장된 RAID 카드 (mfid) 의 하드웨어 RAID5 를 사용해 보느냐 아니면 디스크는 모두 JBOD로 지정하고 zfs 의 동급 기능인 raidz 를 써 볼까 하다가 간단히 성능 비교를 해 보기로 했습니다.

기본적으로는 ZFS Raidz Performance, Capacity and Integrity 을 읽고서 제 환경에 맞도록 따라한 것입니다. 자세한 설명은 해당 사이트를 읽어 주세요.

테스트 환경은 다음과 같습니다. 중요한 것만 나열 합니다.

하드웨어

  • DELL 2950
  • Xeon E5405 2.0Ghz x 2 (총 8코어)
  • 16G RAM
  • DELL PERC6 - LSI MegaRAID SAS
  • 디스크: SAS ST1000NM0023/HS0[A9] 953344MB x 4

OS

  • FreeBSD 1.0-BETA3 (amd64)
  • 커널 변경 없음

테스트


다음과 같은 4가지를 비교합니다

  • Hardware RAID5 (writeback):  PERC5 설정에서 디스크 4를 모아서 RAID5로 설정하고, Physical Disk의 write 설정을 writeback 으로 지정한 것입니다. zfs 에서는 zfs create disk 으로 설정.
  • ZFS raidz + HW writethrough: PERC5 설정에서는 디스크 4개를 각각 하나의 Virtual Disk 로 지정하고 해당 Virtual Disk 에는 하나의 Physical Disk 만 추가, Physical Disk 의 write설정을 writethrough 로 지정합니다. zfs는 zfs create raidz 로 설정합니다.
  • ZFS raidz + HW writeback: PERC5 설정에서는 디스크 4개를 각각 하나의 Virtual Disk 로 지정하고 해당 Virtual Disk 에는 하나의 Physical Disk 만 추가, Physical Disk 의 write설정을 writeback 로 지정합니다. zfs는 동일하게 zfs create raidz 로 설정합니다.
  • ZFS raidz + lz4 HW writeback: PERC5 설정에서는 디스크 4개를 각각 하나의 Virtual Disk 로 지정하고 해당 Virtual Disk 에는 하나의 Physical Disk 만 추가, Physical Disk 의 write설정을 writeback 로 지정합니다. zfs는 zfs create raidz 로 설정합니다. 추가로, LZ4 compression도 테스트하고 싶어져서 lz4 compression 을 pool 에 추가합니다. zfs set compression=lz4 로 간단히 할 수 있습니다. LZ4 compression 은 9.2 부터 추가된 기술로, 기존의 lzjb 보다 빠르고, 압축율이 낮으면 자동으로 압축을 하지 않는 기능이 있어서 압축 파일, 이미지, 동영상에서도 안심하고 사용할 수 있다고 합니다.

테스트에는 bonnie++ (benchmarks/bonnie++)을 사용합니다. 명령은 다음과 같습니다.
즉 단일 프로세스 테스트과 4개 프로세스 동시 테스트를 수행합니다.


## 1 proc
bonnie++ -u 101 -r 8192 -s 81920 -d /disk -f -b -n 1

## 4 proc

bonnie++ -u 101 -r 8192 -s 81920 -d /disk -f -b -n 1 -p 4 &
bonnie++ -u 101 -r 2048 -s 20480 -d /disk -f -b -n 1 -y s &
bonnie++ -u 101 -r 2048 -s 20480 -d /disk -f -b -n 1 -y s &
bonnie++ -u 101 -r 2048 -s 20480 -d /disk -f -b -n 1 -y s &
bonnie++ -u 101 -r 2048 -s 20480 -d /disk -f -b -n 1 -y s &


결과


1 프로세스의 결과입니다.  y 축은 bonnie++ 에서 측정된 전송 속도 (Mbytes/sec) 입니다. 하드웨어 RAID5 와 zfs raidz 의 차이가 거의 없고, writethrough 보다는 writeback 이 더 빠른 것으로 볼 수 있습니다. lz4 compression 은 sequential read에서는 큰 향상이 없지만 write 에서 거의 두배 이상, 그리고 무엇보다 random r/w 에서의 효과가 어마어마한 것으로 나타납니다.




4 프로세스의 결과입니다. 4개 결과의 평균 값입니다. raidz+writeback 이 H/W raid5 보다 더 좋고, compression 의 효과가 더 높은 것을 볼 수 있습니다. 거의 3배 빠르군요.



결론

생각보다 하드웨어 RAID5 보다 zfs raid5 가 성능상 떨어지지 않고, 새로 추가된 lz4 compression 이 sequential write 및 random I/O 에서 큰 효과를 볼 수 있다는 점을 알 수 있습니다. 특히 동시에 여러개가 있는 경우 random I/O에서의 효과는 어마어마하군요. CPU 를 사용한다는 단점은 있지만 크게 CPU intensive 한 어플리케이션이 아닌 경우 lz4 를 기본 사용하는 것도 무리가 없지 않을까 합니다. 제 경우는 zfs raidz+lz4 로 해 보려 합니다.