Solaris10:TIPS:zfs + iscsiでのベンチマーク

提供:KinusatiWiki
移動: 案内, 検索

目次

iscsi + zfsでのベンチマーク(負荷計測)

iscsiのCPU負荷を計測してみた。総評すると、標準のSolaris iscsi initiatorは遅いが、チューニングするとまずまずの速度になる。Linux iscsi initiatorは標準で十分早い

環境1

  • iSCSI Target  : AMD Phenom 9550(4core)(8GMem) (Solaris10 10/08 x64)
  • iSCSI Initiator : Intel PentiumM 2.0GHz(2GMem) (CentOS5.2 x86)
  • iSCSI Target側のファイルシステムはzfsでshareiscsi=onとしている。
  • iSCSI Initiatorではext3として利用している。

計測結果

1. 100mファイル

[root@pentium mnt]# dd if=/dev/zero of=file count=100 bs=1024k
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.165362 seconds, 634 MB/s
=> Linux側でのWriteキャッシュに含まれてしまうため1000BASET以上のスピードが出てしまう。

2. 4Gファイル

[root@pentium mnt]# dd if=/dev/zero of=file2 count=4096 bs=1024k
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 177.509 seconds, 24.2 MB/s

3. 10Gファイル

[root@pentium mnt]# dd if=/dev/zero of=file3 count=10240 bs=1024k
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB) copied, 515.037 seconds, 20.8 MB/s

環境2

  • iSCSI Target  : AMD Phenom 9550(4core)(8GMem) (Solaris10 10/08 x64)
  • iSCSI Initiator :
    • VMware Server 2.0 x64 for Windows
    • ホストOS : Intel Q9550(4core) (8GMem)でVista x64を動作
    • ゲストOS : CentOS5.2 x64 (2core/1GMemとして設定)
  • iSCSI Target側のファイルシステムはzfsでshareiscsi=onとしている。
  • iSCSI Initiatorではext3として利用している。

計測結果

1. 1Gファイル

[root@rac1 mnt]# dd if=/dev/zero of=file bs=1024k count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 32.6879 seconds, 32.8 MB/s

環境3

  • iSCSI Target  : AMD Phenom 9550(4core)(8GMem) (Solaris10 10/08 x64)
  • iSCSI Initiator :
    • VMware Server 2.0 x64 for Windows
    • ホストOS : Intel Q9550(4core) (8GMem)でVista x64を動作
    • ゲストOS : Solaris10 10/08(x64) (2core/1GMemとして設定)
  • iSCSI Target側のファイルシステムはzfsでshareiscsi=onとしている。
  • iSCSI Initiatorではufsとして利用している。

チューニング

  • nagleアルゴリズムOFF
# vi /kernel/drv/iscsi.conf
#
# Disable Nagle within the iSCSI Initiator
#
tcp-nodelay=1;
=> 再起動
  • iscsi initiatorのパラメータ変更
# for T in `iscsiadm list target | fgrep Target: | cut -d" " -f2`
# do
  iscsiadm modify target-param -p maxrecvdataseglen=65536 $T
  iscsiadm modify target-param -p datapduinorder=no $T
  iscsiadm modify target-param -p initialr2t=no $T
done

計測結果

1Gファイル(チューニング前)
bash-3.00# time mkfile 1g 1g.dat

real    1m56.860s
user    0m0.099s
sys     0m6.502s
=> 8.7MByte/Sec
1Gファイル(チューニング後。3回計測)
bash-3.00# time mkfile 1g 1g.dat

real    0m30.744s
user    0m0.160s
sys     0m6.266s
=> 33.3MByte/Sec
bash-3.00# time mkfile 1g 1g1.dat

real    0m42.719s
user    0m0.175s
sys     0m5.383s
=> 23.97MByte/Sec
bash-3.00# time mkfile 1g 1g2.dat

real    0m30.862s
user    0m0.162s
sys     0m3.633s
=> 33.1MByte/Sec

チューニングに対する考察

  • 効果は確かにある(8.7MByte/Sec => 23 or 33MByte/Secになる)
  • やや揺らぎが多いが理由がわからない

総評

  • サイズが大きくなるほど速度が低下したが、キャッシュの影響が出ているのか?
  • Solaris 標準のiscsi initiatorでは遅い。チューニングが必須。
  • Linux iscsi initiatorは早い。

参考資料

個人用ツール