パケットジェネレータipgenから見るnetmap

1,400 views

Published on

iij/ipgenの紹介とnetmapの概要に関するスライドです。
第35回「ネットワーク パケットを読む会(仮)」の発表資料です。

Published in: Software
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,400
On SlideShare
0
From Embeds
0
Number of Embeds
627
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

パケットジェネレータipgenから見るnetmap

  1. 1. パケットジェネレータ ipgenから見るnetmap @furandon_pig 第35回「ネットワーク パケットを読む会(仮)」
  2. 2. 自己紹介 ★ Twitter ID: @furandon_pig ★ 家ではNetBSDを使っています ★ 興味ドリブンで勉強会開催しています ★SQL実践入門 読書会 http://sqljissen.connpass.com/ ★ Live2Dで遊ぶ会 https://enjoying-live2d.doorkeeper.jp/
  3. 3. 今日の発表内容 ★パケットジェネレータipgenの 紹介、動作デモ ★netmap機能の概要紹介
  4. 4. iij/ipgen ★Interactive Packet Generator ★https://github.com/iij/ipgen ★パケットジェネレータ ★ベンチマーク,パフォーマンス 測定を主目的とするツール ★FreeBSDで動作する ★10.3-RELEASEで試してみた
  5. 5. 測定環境の例 ★iij/ipgenを試してみる ★http://qiita.com/furandon_pig/items/ffc6aa43c8bb1e699df0 em1 172.16.0.59 wm1 172.16.0.58 em2 172.16.1.159 wm2 172.16.1.158 pakeana01 (FreeBSD) pakeana02 (NetBSD) リモートログイン用 ネットワーク ipgenで パケット送出
  6. 6. ipgenコマンド ★T(Tx;送出)とR(Rx;受信)を指定しコマンドを 実行する ★実行後はCLI(TUI)からパケット送受信の 制御、流量設定が可能 ★Webインタフェースからも制御可能 ★デフォルトでは14.88Mbpsでパケット送出 ★高速パケットI/O、”netmap”を使用 $ sudo ipgen -Tem1,172.16.0.58,172.16.0.59/24 -Rem2,172.16.1.158,172.16.1.159/24
  7. 7. 測定例
  8. 8. 測定例
  9. 9. ipgen環境の構築 ★FreeBSD-10.3-RELEASEの例 ★カーネル再構築 ★netmap機能を使用するため ★ipgenビルド ★対向側(NetBSDの場合) # sysctl -w net.inet.ip.forwarding=1 net.inet.ip.forwarding: 0 -> 1
  10. 10. カーネル再構築(1/2) $ mkdir -p ~/work/pakeana $ cd ~/work/pakeana $ curl -O http://ftp.jaist.ac.jp/pub/FreeBSD/releases/amd64/10.3-RELEASE/src.txz $ tar Jxvf src.txz -C . $ cd usr/src/sys/amd64/conf/ $ cp -p GENERIC PAKEANA01 $ vi PAKEANA01 ... $ diff -ur GENERIC PAKEANA01 --- GENERIC 2016-03-25 10:09:25.000000000 +0900 +++ PAKEANA01 2016-04-20 00:41:01.631701000 +0900 @@ -364,3 +364,5 @@ # VMware support device vmx # VMware VMXNET3 Ethernet + +device netmap
  11. 11. カーネル再構築(2/2) $ config PAKEANA01 Kernel build directory is ../compile/PAKEANA01 Don't forget to do ``make cleandepend && make depend'' $ cd ../compile/PAKEANA01/ $ make cleandepend $ make depend $ make $ sudo make install $ #netmap機能が有効になっていることを確認する $ sysctl -a | grep device | grep netmap device netmap
  12. 12. ipgenのビルド $ pkg search libevent2 libevent2-2.0.22_1 API for executing callback functions on events or timeouts $ sudo pkg install libevent2-2.0.22_1 $ git clone https://github.com/iij/ipgen.git $ cd ipgen $ make depend $ sudo make install $ which ipgen /usr/local/bin/ipgen $ man ipgen #マニュアルはまだない… No manual entry for ipgen
  13. 13. netmap(1/2) ★netmap(4) ★netmap ★高速パケット転送フレームワーク ★VALE ★仮想ローカルEthernet ★netmap pipes ★パケット転送チャネル用共有メモリ
  14. 14. netmap(2/2) ★高速パケット転送フレームワーク ★ラインレートに近い速度で送受信したい ★高ルータ、トラフィックモニタ、 ファイアウォール… ★一般的なOSでMppsの送受信を可能にしたい ★HWについても汎用的なものを使用 ★カスタムHWやアプリケーションの変更も不要 ★カーネル・ユーザランドでのパケット処理を 工夫することで、高速パケット転送を実現
  15. 15. netmap API(1/2) ★netmapへのアクセス ★open(“/dev/netmap")でファイル ディスクリプタ取得 ★ioctl(fd, NIOCREG, arg)でインタフェースを netmap modeにする ★mmap(..., fd, 0)でバッファとリングをマップする ★パケット送信 ★ioctl(fd, NIOCTXSYNC)でパケットをキューイング ★パケット受信 ★ioctl(fd,NIOCRXSYNC)でパケットを受信
  16. 16. netmap API(2/2) ★ioctl(fd, NIOC*SYNC)は ノンブロッキング動作 ★poll(),select()を除き、 (送受信可能なパケット)>0を返す ★netmap modeはデバイスを占有 する点に注意
  17. 17. 高速パケット転送フレームワーク ★netmap,DPDK+Seastar ★C++,Seastar独自APIによる プログラミングモデル ★既存のアプリケーションは 移植(Seastar対応)が必要
  18. 18. まとめ ★パケットジェネレータipgenの 紹介、インストール手順解説 ★netmapの概要紹介
  19. 19. Q&A,補足事項(1/2) ★netmap modeでデバイス占有すると8080番ポートにアクセス できなくなる? ★*:8080でLISTENしているので、管理用のNICを別途用意する ことでアクセス可能 ★測定環境ではwm0を管理用、wm1,wm2をnetmap(ipgen)で使用 ★数万台のクライアントが接続してくる環境を想定したテストに活用 したい。IPアドレスを変化させながらパケット送出は可能か? ★ipgen/gen.c:main()のコメントにコマンド例がある ★以下のように送信元IPアドレスレンジを指定する $ sudo ipgen --tcp -s 58 # TCPパケットを送出、TCPの場合はパケットサイズを58byte以上にする --saddr 192.168.0.1-192.168.100.250 # 送信元IPアドレスレンジを指定 -Tem1,172.16.0.58 -Rem2,172.16.1.158,172.16.1.159/24
  20. 20. Q&A,補足事項(2/2) ★バースト転送を平滑化する機構も実装されている ★バースト転送を平滑化する機構も実装されている ★(ただし、現状ではIntelのGbE+IPG制御用のカーネルパッチを 適用した場合のみ利用可能?) ★ipgenに関する、より詳しい情報は(本家の)スライドを参照のこと ★https://github.com/iij/ipgen/wiki/materials/ipgen.pdf ★https://github.com/iij/ipgen/wiki/materials/ipgen_ja.pdf $ sudo ipgen --ipg # IPGオプションを指定する -Tem1,172.16.0.58 -Rem2,172.16.1.158
  21. 21. その他-背景写真について- ★背景写真は以下のWebサイトより引用 http://free-photos.gatag.net/2014/09/13/220000.html ★背景写真の著作者情報は以下です 著作者: Pippoloide (改変gatag.net)

×