XCP-ng에서 Storage는 iSCSI를 연동한 ZFS Repository를 사용하고자 합니다.
이를 위해서 FreeNAS로 ZFS를 구성하였고, XCP-ng와 FreeNAS 서버간 iSCSI 연결을 통하여 XCP-ng에 Block 기반 스토리지를 구성하고, 여기에 CentOS 7.6 VM을 생성하여 DD 테스트를 수행하였습니다.
이 경우, Disk Write만을 단순 테스트하였고, XCP-ng에 배포된 VM (CentOS 7.6)에서의 Disk I/O가 FreeNAS 서버에서 직접 수행한 Disk I/O와 비교하여 현저하게 낮게 나오고 있습니다.
테스트 환경 구성 정보
++++++++++++++++++++++++++
- ZFS Storage: FreeNAS 11.2, 2TB HDD 12개로 RAIDZ2 구성, DC P3700 SSD 2개로 ZIL, L2ARC 각각 구성
- Virtualization: XCP-ng 7.6
- Network: 10GbE로 FreeNAS와 XCP-ng 서버간 Direct 연결 (iSCSI는 multipath를 구성하지는 않음)
- Storage volume: FreeNAS에서 1TB 크기의 zvol를 생성 (blocksize=128k)하고 이를 iSCSI 서비스에 할당 (LUN 등록)하고 SCP-ng에서 iSCSI 기반 Storage를 생성함 (이때 Storage type은 LVM over iSCSI로 생성되네요).
iperf3를 이용한 Network 테스트 내용
+++++++++++++++++++++++++++++++++++++
XCP-ng Dom0에서 ZFS Storage인 FreeNAS 서버로 iperf3 테스트 (10GbE Direct 연결되어 있음).
[root@svms3 ~]# iperf3 -c 172.16.1.90
Connecting to host 172.16.1.90, port 5201
[ 4] local 172.16.1.30 port 52690 connected to 172.16.1.90 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 1.15 GBytes 9.89 Gbits/sec 0 874 KBytes
[ 4] 1.00-2.00 sec 1.15 GBytes 9.88 Gbits/sec 0 874 KBytes
[ 4] 2.00-3.00 sec 1.15 GBytes 9.88 Gbits/sec 0 874 KBytes
[ 4] 3.00-4.00 sec 1.15 GBytes 9.88 Gbits/sec 0 874 KBytes
[ 4] 4.00-5.00 sec 1.15 GBytes 9.88 Gbits/sec 0 874 KBytes
[ 4] 5.00-6.00 sec 1.15 GBytes 9.88 Gbits/sec 0 874 KBytes
[ 4] 6.00-7.00 sec 1.15 GBytes 9.88 Gbits/sec 0 874 KBytes
[ 4] 7.00-8.00 sec 1.15 GBytes 9.88 Gbits/sec 0 874 KBytes
[ 4] 8.00-9.00 sec 1.15 GBytes 9.89 Gbits/sec 0 1.29 MBytes
[ 4] 9.00-10.00 sec 1.15 GBytes 9.88 Gbits/sec 0 1.29 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 11.5 GBytes 9.88 Gbits/sec 0 sender
[ 4] 0.00-10.00 sec 11.5 GBytes 9.88 Gbits/sec receiver
iperf Done.
FreeNAS에서 DD Write 테스트
+++++++++++++++++++++++++++++++
root@snas9[/]# dd if=/dev/zero of=/mnt/hpool/ddfile1 bs=1024k count=16k
16384+0 records in
16384+0 records out
17179869184 bytes transferred in 8.845996 secs (1942106827 bytes/sec)
XCP-ng의 VM 내에서 DD Write 테스트
++++++++++++++++++++++++++++++++++++
[root@localhost /]# dd if=/dev/zero of=/ddfile1 bs=1024k count=16k
16384+0 records in
16384+0 records out
17179869184 bytes (17 GB) copied, 70.2106 s, 245 MB/s
위의 테스트 결과에서 소요된 시간으로 비교해 보면, 10GbE 네트웍으로 묶여 있는 상태에서 iSCSI 연동한 Disk I/O의 Write 성능이 ZFS Local에서의 Disk I/O보다 약 9배 정도 성능이 떨어지는 것으로 나타납니다.
문제 해결을 위한 조언좀 부탁드립니다. 저가 미쳐 놓치고 있는 부분이 있을것 같은데 몇일째 그 원인을 찾지 못하고 있네요.
1. Network Setting에 민감 할 수 있습니다. iSCSI는 Jumbo Frame이 핵심인데 만약 Intel X5xx 계열의 Network Card를 사용하시면 Jumber Frame이 정상적으로 작동을 안하던지 아니면 성능이 잘 나질 않죠. 튜닝이 많이 필요합니다.
Network Switch에 iSCSI 최적화 설정이 되어 있는지도 보시구요.
Network Card에 따라서 MTU 크기도 이상한 수치를 요구할 수 있습니다. 9216, 9000, 8972, 8958 등 다양한 수치로 해보세요.
2. DD에 BS를 1MB로 하셨는데 보통 iscsi의 packet size가 32k를 넘지 않습니다. 대부분 8k 정도에서 이루어 집니다.
iSCSI는 initiator와 target이 서로 협의 하면서 크기를 정하기 때문에 보통 크기를 지정하기는 어렵습니다만 1M는 iscsi로서는 너무 큰 수치입니다.
3. 다른 의견입니다만 VM을 수행하는 iSCSI 환경이라면 BS는 더 적어져야 합니다. 보통 4KB가 최적으로 알려져 있습니다. 실제 사용환경의 성능이 필요하시면 BS를 4KB로 하시는것이 좋습니다.
4. 또 다른 의견입니다만 기본적으로 ZFS는 iSCSI와 좋은 조합은 아닙니다. ZFS와 같은 COW 시스템은 작은 크기의 Write IO가 많은 VM 저장소로는 좋지않습니다. DB를 사용하는 환경은 최악이구요.
5. 4번의 이유로 ZFS의 성능테스트는 좀 어렵습니다. cache 효과가 너무 크게 작용을 합니다. 테스트 하실때 Local, Local,..., Local 다음에 iSCSI, iSCSI,...,iSCSI가 아니라 Local, iSCSI, Local, iSCSI등을 바꿔가면서 10회 이상 해보셔야 그나마 정확한 결과를 볼 수 있습니다.
그렇다면 iscsi initiator 단에서 다양한 tuning이 가능합니다.
이부분은 구글에 많이 있습니다.
결론은 SAN인건가요.
FreeNAS 대신 Oracle Solaris 11.4로 ZFS 구성한 경우에는 그나마 조금 더 속도 개선이 있었지만 결정적이진 않은 것을 보면 iSCSI에 대한 더 깊은 고민이 있어야 할 듯 합니다. (HDD를 SSD로 변경했을 경우에도 iSCSI에 대한 개선은 없더라구요).
일단은 Network Switch를 배제하고 Direct 연결한 상태에서 iSCSI에 대한 튜닝을 해 보고 iSCSI 사용할지 아니면 SAN으로 넘어갈지 결정을 해야 할거 같습니다.
인터넷에서 cow, copy on write, file system 기술 찾아서 읽어보시면 왜 zfs + is is or fc가 답이 아닌지 알 수 있을겁니다.
참고로 계획은 아래와 같은 방안입니다.
- ZFS zvol01: 128k block size, iSCSI로 연동하여 VM들이 위치하는 Storage 영역
- ZFS zvol02: 8k block size, Oracle DB software가 설치된 Linux VM 내에서 iSCSI로 마운트하여 Oracle Data file용으로 사용하고자 함)
커널 메모리 캐싱을 활성화하면 좀 괜찮을 수도 있습니다..
https://www.youtube.com/watch?v=OAe3_8qoCWo
한 번 참고해보시면 좋을 것 같습니다.