SlideShare a Scribd company logo
Lua(JIT) でpacket処理 -> 楽しい
Eishun Kondoh@shun159
npstudy 2016/11/29
Agenda
• Luaでpacket 処理?
• Snabbってズバリ何?
• 簡単なアプリをかく。
• パフォーマンスは?
• 最後に
Luaでpacket処理?
• そもそも”Lua”とは?
• リオデジャネイロ・カトリカ大学で開発されたスクリプト言語。
• 汎用言語であるが、同じようなスクリプト言語と比べて高速。
• 組み込み用途としても利用される。
• LuaJITで動作すれば型のないスクリプト言語としては最速。
• 言語仕様が小さい。学習しやすい(個人的感想)。
Luaでpacket処理?
• パケット処理とはまたおおざっぱな…
• 今回は”Snabb”という、高速パケットネットワークツールキットを使っ
てみて、面白さを共有できればよいとおもう。
• “Snabb”とは、DPDKと同じような方式を用いてNICを直で読み書きする
ためのツールキット。
Snabbってズバリ何?
• 高速パケットネットワークツールキットである。
• アプリ NICの読み書きの概念はまさにDPDKと似ているかもしれない(kernel をバイパ
スする、tight loopでポーリングする、アプリにはパケットが格納されたメモリ上のポイ
ンタを渡す、など)。
• LuaJIT上で駆動する。ここで動くLuaのコードはCのコードとも遜色のない速度である。
• LuaとCで実装されており、メモリをあれこれする箇所やデバイスドライバのほとんどが
Luaで書かれている。
• 今のところ、Intel(I350, 82599, XL710), Mellanox(connectx-4), virtio, vhost, rawsock, solarflare
などでテストされている様子。
Snabbってズバリ何?
• 個人的にユニークだと思っている点
• アプリケーション(Apps)
• RouterやFirewallはたまたLoad Generator、NICに至るまで、snabbのアプリケーショ
ンをこのAppsで構成する。
• アプリケーションネットワーク(App Networks)
• 上記のAppsを有向グラフでつなぐ。
Intel NIC
Filter1
Filter2
RawSock
input
inputoutput
output
tx
tx
rx
rx
簡単なアプリをかく
• さっそく書く(挨拶)
Module(…, package.seeall)
Function run(_args)
print(‘hello, snabb!’)
main.exit(0)
End
(prompt)> sudo snabb hello
# => hello, snabb!
定義済み関数を呼べる
ようにする
snabbを起動したとき、指定したモジュールの
run()が呼ばれる, ARGVがもらえます。
Printして、exit status 0
で終了
簡単なアプリをかく
• 単方向ブリッジ(raw sock版)
• requireのコードは除く…
function run(args)
local port1, port2 = args[1], args[2]
local c = config.new()
config.app(c, ‘port1’, rawsock, port1)
config.app(c, ‘port2’, rawsock, port2)
config.link(c, ‘port1.tx -> port2.rx’)
engine.configure(c)
engine.main()
end
配列は1から。
Configにパケット処理
ネットワークを表現す
る。初期化。
初期化したconfig
App名
App種別
引数
を与えて初期化。
2つのAppを接続する。
上記を適用し、起動。
簡単なアプリをかく
• Ethertype をプリントする
• 先ほどのrawsockのコードに printer というmoduleをかませるの
をイメージする。
• Printerはether typeに応じて文字列をプリントして、ポートに出すだけ
Rawsock printer RawSock
input outputtx rx
簡単なアプリをかく
• Packet dataの参照
• Ether type をとるには、例えば、このような感じ。
• ffi.C.ntohs(ffi.cast(‘uint16_t *’, packet.data + 12)[0])
• vlan tagをpopしたり、pushしたりするときも大体こういったAPIを読んで書いてい
る
• ほかには
• Packet.clone
• Packet.resize
• Packet.append
• Packet.prepend
• Packet.shift{left|right}
• などがある。
簡単なアプリをかく
• それをふまえて、
engine.configureの時に
呼ばれる。初期化
Appネットワークにパケットを
書き込む関数。
無限ループでもOK
簡単なアプリをかく
ether typeをとって
Printする
パフォーマンスは?
• これまで書いたコードとは別に、以下のような負荷試験アプリ
のネットワークを組む。
Intel
82599
Intel
82599
sinkinput
rx
source
tx rxtx
source: 負荷試験用の組み込みアプリ。20Mpps(60byte)程度の出力が可能
sink: 負荷試験用の組み込みアプリ。/dev/nullのようなもん
p1p1
p1p2
パフォーマンスは?
• 60 byte, 10millon packetsで 9.5Mpps(4.23Gbps)程度であった。
最後に
• 試験した環境では、性能はDPDKには及ばないものの、Luaでか
けるのは、非常に面白い。
• IPsecやIwAFTR, bridge, LISPの実装がすでにあるので、これらを組
み合わせるだけでもそれなりのアプリが出来上がってしまいそ
う。
• SDNなスイッチをかきたくなるよね…。

More Related Content

Viewers also liked

Janog37 Pattern BoF
Janog37 Pattern BoFJanog37 Pattern BoF
Janog37 Pattern BoF
Miya Kohno
 
Korejanai Story
Korejanai StoryKorejanai Story
Korejanai Story
Kentaro Takeda
 
Jcsug21 20140912
Jcsug21 20140912Jcsug21 20140912
Jcsug21 20140912
hirokihojo
 
FlexPod Day 2016 - Cisco session (Publish edition)
FlexPod Day 2016 - Cisco session (Publish edition)FlexPod Day 2016 - Cisco session (Publish edition)
FlexPod Day 2016 - Cisco session (Publish edition)
Takao Setaka
 
Career - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D eventCareer - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D event
Miya Kohno
 
Contiv 20160914
Contiv 20160914Contiv 20160914
Contiv 20160914
Takao Setaka
 
Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法
Kentaro Takeda
 
OpenStack Congress and Datalog (English)
OpenStack Congress and Datalog (English)OpenStack Congress and Datalog (English)
OpenStack Congress and Datalog (English)
Motonori Shindo
 
Cedexis
CedexisCedexis
Cedexis
J-Stream Inc.
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)
Tomoya Hibi
 
試してわかるSDN
試してわかるSDN試してわかるSDN
試してわかるSDN
cloretsblack
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
 
Node最新トピックス
Node最新トピックスNode最新トピックス
Node最新トピックス
shigeki_ohtsu
 
自動でできるかな?
自動でできるかな?自動でできるかな?
自動でできるかな?_norin_
 
マルチCDNの概要
マルチCDNの概要マルチCDNの概要
マルチCDNの概要
J-Stream Inc.
 
最近のBurp Suiteについて調べてみた
最近のBurp Suiteについて調べてみた最近のBurp Suiteについて調べてみた
最近のBurp Suiteについて調べてみた
zaki4649
 
【Interop Tokyo 2016】 Seminar - EA-18 : 「Cisco の先進セキュリティ ソリューション」 Shownet 2016...
【Interop Tokyo 2016】 Seminar - EA-18 : 「Cisco の先進セキュリティ ソリューション」 Shownet 2016...【Interop Tokyo 2016】 Seminar - EA-18 : 「Cisco の先進セキュリティ ソリューション」 Shownet 2016...
【Interop Tokyo 2016】 Seminar - EA-18 : 「Cisco の先進セキュリティ ソリューション」 Shownet 2016...
シスコシステムズ合同会社
 
【Interop Tokyo 2016】 ShowNet - SSS-17 : ShowNet 2016 を支える シスコの最新テクノロジー
【Interop Tokyo 2016】 ShowNet - SSS-17 :  ShowNet 2016 を支えるシスコの最新テクノロジー【Interop Tokyo 2016】 ShowNet - SSS-17 :  ShowNet 2016 を支えるシスコの最新テクノロジー
【Interop Tokyo 2016】 ShowNet - SSS-17 : ShowNet 2016 を支える シスコの最新テクノロジー
シスコシステムズ合同会社
 
ノリとその場の勢いでPocを作った話
ノリとその場の勢いでPocを作った話ノリとその場の勢いでPocを作った話
ノリとその場の勢いでPocを作った話
zaki4649
 
of_protocol_tremaday5
of_protocol_tremaday5of_protocol_tremaday5
of_protocol_tremaday5
エイシュン コンドウ
 

Viewers also liked (20)

Janog37 Pattern BoF
Janog37 Pattern BoFJanog37 Pattern BoF
Janog37 Pattern BoF
 
Korejanai Story
Korejanai StoryKorejanai Story
Korejanai Story
 
Jcsug21 20140912
Jcsug21 20140912Jcsug21 20140912
Jcsug21 20140912
 
FlexPod Day 2016 - Cisco session (Publish edition)
FlexPod Day 2016 - Cisco session (Publish edition)FlexPod Day 2016 - Cisco session (Publish edition)
FlexPod Day 2016 - Cisco session (Publish edition)
 
Career - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D eventCareer - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D event
 
Contiv 20160914
Contiv 20160914Contiv 20160914
Contiv 20160914
 
Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法
 
OpenStack Congress and Datalog (English)
OpenStack Congress and Datalog (English)OpenStack Congress and Datalog (English)
OpenStack Congress and Datalog (English)
 
Cedexis
CedexisCedexis
Cedexis
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)
 
試してわかるSDN
試してわかるSDN試してわかるSDN
試してわかるSDN
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
Node最新トピックス
Node最新トピックスNode最新トピックス
Node最新トピックス
 
自動でできるかな?
自動でできるかな?自動でできるかな?
自動でできるかな?
 
マルチCDNの概要
マルチCDNの概要マルチCDNの概要
マルチCDNの概要
 
最近のBurp Suiteについて調べてみた
最近のBurp Suiteについて調べてみた最近のBurp Suiteについて調べてみた
最近のBurp Suiteについて調べてみた
 
【Interop Tokyo 2016】 Seminar - EA-18 : 「Cisco の先進セキュリティ ソリューション」 Shownet 2016...
【Interop Tokyo 2016】 Seminar - EA-18 : 「Cisco の先進セキュリティ ソリューション」 Shownet 2016...【Interop Tokyo 2016】 Seminar - EA-18 : 「Cisco の先進セキュリティ ソリューション」 Shownet 2016...
【Interop Tokyo 2016】 Seminar - EA-18 : 「Cisco の先進セキュリティ ソリューション」 Shownet 2016...
 
【Interop Tokyo 2016】 ShowNet - SSS-17 : ShowNet 2016 を支える シスコの最新テクノロジー
【Interop Tokyo 2016】 ShowNet - SSS-17 :  ShowNet 2016 を支えるシスコの最新テクノロジー【Interop Tokyo 2016】 ShowNet - SSS-17 :  ShowNet 2016 を支えるシスコの最新テクノロジー
【Interop Tokyo 2016】 ShowNet - SSS-17 : ShowNet 2016 を支える シスコの最新テクノロジー
 
ノリとその場の勢いでPocを作った話
ノリとその場の勢いでPocを作った話ノリとその場の勢いでPocを作った話
ノリとその場の勢いでPocを作った話
 
of_protocol_tremaday5
of_protocol_tremaday5of_protocol_tremaday5
of_protocol_tremaday5
 

Similar to npstudy 161129

アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Takashi Sogabe
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
NTT DATA Technology & Innovation
 
clominal
clominalclominal
Ruby Introduction
Ruby IntroductionRuby Introduction
Ruby Introduction
YushiroDodo
 
NPStudy LT Lagopus Router v19.07
NPStudy LT Lagopus Router v19.07NPStudy LT Lagopus Router v19.07
NPStudy LT Lagopus Router v19.07
Tomoya Hibi
 
LL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrintingLL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrinting
Naruhiko Ogasawara
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyoShuyo Nakatani
 
Rookの今とこれから(CloudNative Meetup #3)
Rookの今とこれから(CloudNative Meetup #3)Rookの今とこれから(CloudNative Meetup #3)
Rookの今とこれから(CloudNative Meetup #3)
JUNICHI YOSHISE
 
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドYAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
keroyonn
 
Lagopus performance
Lagopus performanceLagopus performance
Lagopus performance
Masaru Oki
 
rpi_handson_1
rpi_handson_1rpi_handson_1
rpi_handson_1
teruyaono1
 
Pandas / Dask / Vaex
Pandas / Dask / VaexPandas / Dask / Vaex
Pandas / Dask / Vaex
hide ogawa
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
Takuya Mukohira
 
Lagopus, raw socket build
Lagopus, raw socket buildLagopus, raw socket build
Lagopus, raw socket build
Masaru Oki
 
JavaのLambdaの裏事情
JavaのLambdaの裏事情JavaのLambdaの裏事情
JavaのLambdaの裏事情
なおき きしだ
 
ザックリとDocker
ザックリとDockerザックリとDocker
ザックリとDocker
ionis111
 
gRPCをちょこっと調べた話
gRPCをちょこっと調べた話gRPCをちょこっと調べた話
gRPCをちょこっと調べた話
Shuzo Kashihara
 
TOPPERS as an IoT OS(kernel)
TOPPERS as an IoT OS(kernel)TOPPERS as an IoT OS(kernel)
TOPPERS as an IoT OS(kernel)
Kiyoshi Ogawa
 

Similar to npstudy 161129 (19)

アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
 
clominal
clominalclominal
clominal
 
Ruby Introduction
Ruby IntroductionRuby Introduction
Ruby Introduction
 
NPStudy LT Lagopus Router v19.07
NPStudy LT Lagopus Router v19.07NPStudy LT Lagopus Router v19.07
NPStudy LT Lagopus Router v19.07
 
LL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrintingLL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrinting
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
Rookの今とこれから(CloudNative Meetup #3)
Rookの今とこれから(CloudNative Meetup #3)Rookの今とこれから(CloudNative Meetup #3)
Rookの今とこれから(CloudNative Meetup #3)
 
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドYAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
 
Lagopus performance
Lagopus performanceLagopus performance
Lagopus performance
 
rpi_handson_1
rpi_handson_1rpi_handson_1
rpi_handson_1
 
Pandas / Dask / Vaex
Pandas / Dask / VaexPandas / Dask / Vaex
Pandas / Dask / Vaex
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
Lagopus, raw socket build
Lagopus, raw socket buildLagopus, raw socket build
Lagopus, raw socket build
 
JavaのLambdaの裏事情
JavaのLambdaの裏事情JavaのLambdaの裏事情
JavaのLambdaの裏事情
 
ザックリとDocker
ザックリとDockerザックリとDocker
ザックリとDocker
 
gRPCをちょこっと調べた話
gRPCをちょこっと調べた話gRPCをちょこっと調べた話
gRPCをちょこっと調べた話
 
TOPPERS as an IoT OS(kernel)
TOPPERS as an IoT OS(kernel)TOPPERS as an IoT OS(kernel)
TOPPERS as an IoT OS(kernel)
 

npstudy 161129