トラフィック生成と確認方法
10Gigabit Ethernetの性能を的確に把握するためには、まずトラフィック生成を行う手法を理解する必要があります。一般的なベンチマークツールとしては、iperfやnetparfなどがありますが、ここではLinuxに標準的に搭載されるIn-Kernerlでパケット生成が可能なpktgenを紹介します。
動作はpktgenモジュールを最初に読み込んだ後、パケット生成を行いたいネットワーク・インターフェースに対して、生成したいパケット詳細を記述した上で実行します。今回は詳細な説明を割愛しますが、基本的にはパケット受信側のMACアドレスとIPアドレスを設定してから実行します。
# modprobe pktgen # vi rungen #!/bin/sh echo "rem_device_all" > /proc/net/pktgen/kpktgend_0 echo "add_device eth0" > /proc/net/pktgen/kpktgend_0 echo "max_before_softirq 300000" > /proc/net/pktgen/kpktgend_0 echo "count 0" > /proc/net/pktgen/eth0 echo "clone_skb 1" > /proc/net/pktgen/eth0 echo "pkt_size 64" > /proc/net/pktgen/eth0 echo "delay 0" > /proc/net/pktgen/eth0 echo "dst 10.10.11.2" > /proc/net/pktgen/eth0 echo "dst_mac 00:04:23:08:91:dc" > /proc/net/pktgen/eth0 echo "start" > /proc/net/pktgen/pgctrl # chmod 700 rungen # ./rungen
パケット送受信を確認するツールとしては、リアルタイムで状況確認できるvnstatが最適です。
# wget http://humdi.net/vnstat/vnstat-1.11.tar.gz # tar xzvf ./vnstat-1.11.tar.gz; cd vnstat-1.11; make; make install; # vnstat -i eth0 -l Monitoring eth0... (press CTRL-C to stop) rx: 4 kbit/s 3 p/s tx: 1.31 Gbit/s 2620103 p/s
昨今のモバイル端末から接続されるようなWebサービスの場合、ネットワーク帯域と同じくらいパケット処理数(Packet/Sec)が重要となっています。この両方を一度に確認するには、vnstatが最適なツールと言えるでしょう。vnstatはCTRL-Cで停止することで、それまで観測していたパケット通信サマリーを吐き出してくれます。これもネットワーク性能を簡単に俯瞰する意味でも、とても便利な機能です。
# vnstat -i eth0 -l
Monitoring eth0... (press CTRL-C to stop)
rx: 0 kbit/s 1 p/s tx: 0 kbit/s 0 p/s^C
eth0 / traffic statistics
rx | tx
--------------------------------------+------------------
bytes 13 KiB | 3.03 GiB
--------------------------------------+------------------
max 8 kbit/s | 1.96 Gbit/s
average 1.22 kbit/s | 298.67 Mbit/s
min 0 kbit/s | 0 kbit/s
--------------------------------------+------------------
packets 167 | 50773557
--------------------------------------+------------------
max 10 p/s | 3922693 p/s
average 1 p/s | 597335 p/s
min 0 p/s | 0 p/s
--------------------------------------+------------------
time 1.42 minutes
パケット処理の限界性能
次にLinuxが抱えるパケット処理性能の限界について見ていきます。さきほど紹介したpktgenよりも強力なパケット生成ソフトウェアを用いることで、Webサービスする場合でのボトルネックも炙り出されてくることでしょう。ピサ大学のRizzo博士によって開発されたnetmap(a novel framework for fast packet I/O)と呼ばれるドライバを組み込んだOSイメージを使うことで、in-kernelで動作するpktgenよりも強力なパケット生成を行うことができるのです。
まず、Rizzo博士のWebページからOSイメージをダウンロードし、Win32 Disk ImagerなどでUSBメモリに書き込みます。独自ドライバを組み込んだOSイメージは、特定Gigabit Ethenetのみ対応していますので、動作確認を行う際には注意が必要です。
動作方法は至って簡単で、pkt-genコマンドを用いてパケット受信側のMACアドレスとIPアドレスを記述するだけです。
# pkt-gen -i ix0 -f tx -l 64 -d 10.10.11.2 -D 00:04:23:08:91:dc main [1042] map size is 207712 Kb main [1064] mmapping 207712 Kbytes : main [1231] 14115785 pps main [1231] 14118009 pps
Linux in-kernelパケット生成処理を行うpktgenと、netmapドライバを組み込まれたpkt-genでは、パケット生成能力が大きく異なります(少し名前がややこしいですね…)。
10Gigabit Ethernet上でpktgenを用いて64バイトのパケット生成した場合は2.6万パケット/秒だったのに比べ、pkt-genを用いた場合、14.4万パケット/秒と大きく向上している点が見えます。これだけ大きな負荷を掛けることで、受信側OSに内在するパケット処理情報の限界や問題点などを確認できます。
私達研究所の実験環境でも同様のトラフィック生成を行い、OSやアプリケーションの挙動確認を行っています。高負荷状態でのシステムの安定性は、安定的なサービス提供が必要とされるWebサービスにとっては不可欠な知見なので、ぜひご自身で試してください。
次回予告
ここまで、今後の普及が期待されている10Gigabit Ethernetの簡単な使い方と性能限界について見てきました。現在開発されているネットワーク・インターフェースは、すでにInfinibandでは56Gigabit/secと、より広帯域のメディアも存在しています。SSDなど半導体ディスクや10Gigabit Ethernetに代表される高速ネットワークが普及してくると、いままで使っていたアプリケーションやデータベースへの負荷バランスなども、一気に変化していきます。今後の安定的なWebサービス提供のためにも、システム・エンジニアの皆さんには、新しい技術に積極的に触れて、事前に慣れておいていただければと思います。
次回以降は、一つ一つのネットワーク技術をより詳しく見ていきましょう。
8月1日開催のイベント「Developers Summit 2013 Summer」(夏サミ2013)で、10Gigabit Ethernetの実践的な使いどころのほか、さらにその先の40Gigabit Ethernetに関する考察も紹介されます。ぜひご参加ください!
- 「Webサービスのための10/40Gigabit Ethernetの可能性」(セッション紹介ページ)

