iSCSIによるベンチマーク

PS3 Linux上のiSCSI enterprise target(iET)を利用して、Windows側のinitiatorと組み合わせた場合のパフォーマンスを見てみた。

60%を境にパフォーマンスが低下しているのは、HDDの読み取りパフォーマンスの特性による。つまり、HDDは、通常外周(低いLBA)ほどパフォーマンスが高く、内周(高いLBA)に行くほど低速になる。
60%以前はパフォーマンスが一定になるが、これがiSCSIの転送能力によるものなのか、PS3のHypervisorによるものなのかは何とも言えない。内蔵HDD単独のベンチマークをする必要がある。追記した。
リリースバージョンのiET(0.4.17)は、最近のカーネル(2.6.30以降)に組み込むことが出来ない。svn版を使う。
ちなみにこの結果はggaoe + winaoeよりも相当に良いパフォーマンスと言える。原理的には、TCPを使わず、プロトコルが単純なATA over Ethernetの方が良いパフォーマンスが出そうなものだが。。ATA over Ethernetでは、EthernetのMTUの影響を受けて1パケットに2セクタしか収まらない。iSCSIはストリーム指向のプロトコルであるTCPを使うためこの制限は無く、より効率的にセクタを転送出来るのかも知れない。この場合、より高いMTUによって状況が改善する可能性がある。また、iETがカーネルモジュールとしての実装であることも影響しているかも知れない(ネットワークによる通信だけをユーザモードのdaemonが行い、ディスクI/Oはカーネル空間で行う)。
追記 :
bonnie++に付属しているzcavコマンドで、ローカルから測定してみた。

たしかに、30MB/s付近で、iSCSIを経由するよりも高速になっていることがわかる。60GBモデルのPS3を、10GBをゲーム側に割り当てて使用している。
Oprofileでのプロファイル結果。

samples  %        app name                 symbol name
37954    74.7685  kernel2630               .raw_local_irq_restore
1527      3.0082  kernel2630               .__copy_tofrom_user
1017      2.0035  iscsi_trgt               /iscsi_trgt
576       1.1347  kernel2630               .__qdisc_run
542       1.0677  kernel2630               .tcp_sendmsg
484       0.9535  kernel2630               .dev_queue_xmit
429       0.8451  kernel2630               .tcp_transmit_skb
415       0.8175  kernel2630               ._spin_lock_bh
398       0.7841  kernel2630               .tcp_write_xmit
323       0.6363  kernel2630               .ip_queue_xmit
241       0.4748  kernel2630               .skb_release_data
200       0.3940  kernel2630               .dst_release
194       0.3822  kernel2630               .tcp_ack
186       0.3664  kernel2630               .ip_finish_output
185       0.3644  kernel2630               .__alloc_skb
185       0.3644  kernel2630               .__kfree_skb
165       0.3250  kernel2630               .sock_wfree
160       0.3152  kernel2630               .release_sock
152       0.2994  kernel2630               .__skb_clone
143       0.2817  kernel2630               .gelic_net_poll
135       0.2659  kernel2630               .memset
131       0.2581  kernel2630               .local_bh_enable
110       0.2167  kernel2630               .lock_sock_nested
106       0.2088  kernel2630               .__tcp_select_window
102       0.2009  kernel2630               .kfree
98        0.1931  kernel2630               .pfifo_fast_enqueue
96        0.1891  kernel2630               .__schedule