企画第 3 弾.SR-IOV を有効にする (2) - TenForwardの日記 の続編.
きちっとギガのスイッチをはさんでリモートのホストからベンチマークを実行してみました.
ちなみにゲスト OS は CPU コアを 1 つ割り当てており,メモリは 1024MB です.
(2011/12/26: vhost-net でネットワーク構成を macvtap(bridgeモード) にした場合の結果を追記しました)
iperf
TCP
$ iperf -s (サーバ側) $ iperf -c 172.16.44.12
実行はサーバ側,クライアント側ともデフォルトです.実行中の VM が稼働しているホストの CPU 負荷も測定しました.3 回実行した時の平均値です.
仮想NIC | iperf(Mbits/sec) | %user | %system |
---|---|---|---|
e1000 | 511 | 10.91 | 15.44 |
virtio-net | 933 | 10.66 | 16.06 |
vhost-net | 935 | 10.50 | 15.01 |
vhost-net(macvtap) | 936 | 10.78 | 8.80 |
SR-IOV | 936 | 12.77 | 3.50 |
ギガのネットワーク程度では virio-net/vhost-net でも充分にスループットが得られるので,差はありませんが,SR-IOV の時の CPU 負荷が全然違います.
UDP (2011/12/14 追記,2011/12/15 更新)
UDP でパケットサイズを小さくしてやってみました.このやりかたでいいのかイマイチ iperf が判ってませんが.
(2011/12/15 更新) iperf で以下のようにテストをするとかなりパケットをロストするので,再テストをしてロストした割合も掲載しました.
$ iperf -s -u (サーバ側) $ iperf -c 172.16.44.12 -u -l 50 -b 1000M
仮想NIC | iperf (Mbits/sec) | %user | %system | lost(%) |
---|---|---|---|---|
e1000 | 12.9 | 6.06 | 16.13 | 52.7 |
virtio-net | 20.5 | 12.0 | 17.3 | 25.0 |
vhost-net | 13.4 | 6.62 | 13.65 | 51.7 |
vhost-net(macvtap) | 18.47 | 9.10 | 7.12 | 32.7 |
SR-IOV | 20.5 | 5.96 | 0.92 | 26.0 |
SR-IOV は CPU 負荷が低いというのはわかりますが,それ以外はイマイチ判らない結果... ^^;
(追記ここまで)
LMbench (lat_tcp)
LMbench - Tools for Performance Analysis (LMbench3) の lat_tcp コマンドを使ってレイテンシを測定してみました.
こちらもそのまま実行しただけです.
$ lat_tcp -s (サーバ側) $ lat_tcp 172.16.44.12 (クライアント側)
仮想NIC | lat_tcp(microseconds) |
---|---|
e1000 | 235 |
virtio-net | 285 |
vhost-net | 231 |
vhost-net(macvtap) | 211 |
SR-IOV | 491 |
なんか良くわからない結果です (^^;).
netperf(UDP_STREAM) (2011/12/15 追記)
netperf を以下のように実行してみました.
$ netperf -t UDP_STREAM -H 172.16.44.12 -- -m 50
仮想NIC | netperf (Mbits/sec) | %user | %system |
---|---|---|---|
e1000 | 18.31 | 5.07 | 26.93 |
virtio-net | 24.83 | 9.55 | 28.71 |
vhost-net | 66.67 | 12.02 | 30.98 |
vhost-net(macvtap) | 97.26 | 14.80 | 11.51 |
SR-IOV | 55.21 | 12.69 | 1.44 |
ちゃんと測定するにはちょっとそれぞれのツールがどういう処理をしているかも調べないとダメですが,とりあえず.