トラフィック生成と確認方法
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の可能性」(セッション紹介ページ)
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Webサービスのためのシステム・ベンチマーク入門連載記事一覧
- この記事の著者
-
松本 直人(マツモト ナオト)
1996年より特別第二種通信事業者のエンジニアとしてインターネット網整備に従事。その後システム・コンサルタント,ビジネス・コンサルタントを経て2010年より,さくらインターネット株式会社 / さくらインターネット 研究所 上級研究員。(2016年より一時退任)研究テーマはネットワーク仮想化など。3~5年先に必要とされる技術研究に取り組み、世の中に情報共有することを活動基本としている。著書: 『モノのインターネットのコトハジメ』,『角川インターネット講座 ~ビッグデータを開拓せよ~』など多数。情報処理学会 インターネットと運用技術研究会 幹事
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

