Submit Search
Upload
Lagopus performance
•
3 likes
•
2,429 views
Masaru Oki
Follow
About Lagopus openflow switch fast-speed lookup development. (in Japanese)
Read less
Read more
Technology
Report
Share
Report
Share
1 of 26
Download now
Download to read offline
Recommended
Lagopus, raw socket build
Lagopus, raw socket build
Masaru Oki
Open stack+lagopus できるかな
Open stack+lagopus できるかな
Masaru Oki
Lagopus Switch Usecases
Lagopus Switch Usecases
Sakiko Kawai
Ryu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみよう
Masaru Oki
Open flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitch
Masaru Oki
Xeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdk
Masaru Oki
Lagopus どれだけ速いのか
Lagopus どれだけ速いのか
Masaru Oki
SDNソフトウェアスイッチlagopus for FreeBSD
SDNソフトウェアスイッチlagopus for FreeBSD
Masaru Oki
Recommended
Lagopus, raw socket build
Lagopus, raw socket build
Masaru Oki
Open stack+lagopus できるかな
Open stack+lagopus できるかな
Masaru Oki
Lagopus Switch Usecases
Lagopus Switch Usecases
Sakiko Kawai
Ryu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみよう
Masaru Oki
Open flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitch
Masaru Oki
Xeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdk
Masaru Oki
Lagopus どれだけ速いのか
Lagopus どれだけ速いのか
Masaru Oki
SDNソフトウェアスイッチlagopus for FreeBSD
SDNソフトウェアスイッチlagopus for FreeBSD
Masaru Oki
LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件
Masaru Oki
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編
Masaru Oki
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
Masaru Oki
Lagopus 0.2.2
Lagopus 0.2.2
Masaru Oki
Lagopus as open flow hybrid switch
Lagopus as open flow hybrid switch
Masaru Oki
Lagopus 0.2
Lagopus 0.2
Masaru Oki
DPDK QoS
DPDK QoS
Masaru Oki
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
slankdev
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
slankdev
hpingで作るパケット
hpingで作るパケット
Takaaki Hoyo
Rust-DPDK
Rust-DPDK
Masaru Oki
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
Tomoya Hibi
FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話
Masaru Oki
nftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linux
Tomofumi Hayashi
Lagopus.confの書式(for lagopus 0.1.x)
Lagopus.confの書式(for lagopus 0.1.x)
Masaru Oki
Lagos running on small factor machine
Lagos running on small factor machine
Lagopus SDN/OpenFlow switch
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
Dpdk pmd
Dpdk pmd
Masaru Oki
about Tcpreplay
about Tcpreplay
@ otsuka752
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
(^-^) togakushi
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用
kazuyas
More Related Content
What's hot
LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件
Masaru Oki
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編
Masaru Oki
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
Masaru Oki
Lagopus 0.2.2
Lagopus 0.2.2
Masaru Oki
Lagopus as open flow hybrid switch
Lagopus as open flow hybrid switch
Masaru Oki
Lagopus 0.2
Lagopus 0.2
Masaru Oki
DPDK QoS
DPDK QoS
Masaru Oki
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
slankdev
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
slankdev
hpingで作るパケット
hpingで作るパケット
Takaaki Hoyo
Rust-DPDK
Rust-DPDK
Masaru Oki
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
Tomoya Hibi
FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話
Masaru Oki
nftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linux
Tomofumi Hayashi
Lagopus.confの書式(for lagopus 0.1.x)
Lagopus.confの書式(for lagopus 0.1.x)
Masaru Oki
Lagos running on small factor machine
Lagos running on small factor machine
Lagopus SDN/OpenFlow switch
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
Dpdk pmd
Dpdk pmd
Masaru Oki
about Tcpreplay
about Tcpreplay
@ otsuka752
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
(^-^) togakushi
What's hot
(20)
LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
Lagopus 0.2.2
Lagopus 0.2.2
Lagopus as open flow hybrid switch
Lagopus as open flow hybrid switch
Lagopus 0.2
Lagopus 0.2
DPDK QoS
DPDK QoS
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
hpingで作るパケット
hpingで作るパケット
Rust-DPDK
Rust-DPDK
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話
nftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linux
Lagopus.confの書式(for lagopus 0.1.x)
Lagopus.confの書式(for lagopus 0.1.x)
Lagos running on small factor machine
Lagos running on small factor machine
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
Dpdk pmd
Dpdk pmd
about Tcpreplay
about Tcpreplay
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
Similar to Lagopus performance
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用
kazuyas
Tremaで試すFirewall
Tremaで試すFirewall
M Hagiwara
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
ryos36
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
NTT DATA Technology & Innovation
Lagopus Router v19.07.1
Lagopus Router v19.07.1
Tomoya Hibi
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
Yuya Rin
NPStudy LT Lagopus Router v19.07
NPStudy LT Lagopus Router v19.07
Tomoya Hibi
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
VIOPS06: OpenFlowによるネットワーク構築と実証事件
VIOPS06: OpenFlowによるネットワーク構築と実証事件
VIOPS Virtualized Infrastructure Operators group ARCHIVES
お手軽 OpenFlow Traceroute
お手軽 OpenFlow Traceroute
atzm
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Masahito Zembutsu
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
なおき きしだ
Lagopus Project (Open Source Conference)
Lagopus Project (Open Source Conference)
Tomoya Hibi
SDN Japan: ovs-hw
SDN Japan: ovs-hw
ykuga
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)
Panda Yamaki
ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視
npsg
Mr201304 open flow_security_jpn
Mr201304 open flow_security_jpn
FFRI, Inc.
Bossan dentoo
Bossan dentoo
kubo39
[DL Hacks]FPGA入門
[DL Hacks]FPGA入門
Deep Learning JP
Similar to Lagopus performance
(20)
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用
Tremaで試すFirewall
Tremaで試すFirewall
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
Lagopus Router v19.07.1
Lagopus Router v19.07.1
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
NPStudy LT Lagopus Router v19.07
NPStudy LT Lagopus Router v19.07
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
VIOPS06: OpenFlowによるネットワーク構築と実証事件
VIOPS06: OpenFlowによるネットワーク構築と実証事件
お手軽 OpenFlow Traceroute
お手軽 OpenFlow Traceroute
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
Lagopus Project (Open Source Conference)
Lagopus Project (Open Source Conference)
SDN Japan: ovs-hw
SDN Japan: ovs-hw
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)
ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視
Mr201304 open flow_security_jpn
Mr201304 open flow_security_jpn
Bossan dentoo
Bossan dentoo
[DL Hacks]FPGA入門
[DL Hacks]FPGA入門
More from Masaru Oki
NetBSD移植の昔話
NetBSD移植の昔話
Masaru Oki
Rust-DPDK
Rust-DPDK
Masaru Oki
Lagopusとvagrant
Lagopusとvagrant
Masaru Oki
今よりも少し(?)昔、 Windowsを作ろうとした話
今よりも少し(?)昔、 Windowsを作ろうとした話
Masaru Oki
Onieで遊んでみようとした話
Onieで遊んでみようとした話
Masaru Oki
GPD WINが来た!
GPD WINが来た!
Masaru Oki
新生Lagopus2017(仮称)
新生Lagopus2017(仮称)
Masaru Oki
Lagopus 0.2.7
Lagopus 0.2.7
Masaru Oki
Lagopus match improvements
Lagopus match improvements
Masaru Oki
Lagopus 0.2.4
Lagopus 0.2.4
Masaru Oki
Net bsd advent calendar 2015 bpf
Net bsd advent calendar 2015 bpf
Masaru Oki
Using rump on NetBSD 7.0
Using rump on NetBSD 7.0
Masaru Oki
Rumpを使ってみる
Rumpを使ってみる
Masaru Oki
Running lagopus on Xeon D
Running lagopus on Xeon D
Masaru Oki
Using Xeon D 10GBase-T
Using Xeon D 10GBase-T
Masaru Oki
More from Masaru Oki
(15)
NetBSD移植の昔話
NetBSD移植の昔話
Rust-DPDK
Rust-DPDK
Lagopusとvagrant
Lagopusとvagrant
今よりも少し(?)昔、 Windowsを作ろうとした話
今よりも少し(?)昔、 Windowsを作ろうとした話
Onieで遊んでみようとした話
Onieで遊んでみようとした話
GPD WINが来た!
GPD WINが来た!
新生Lagopus2017(仮称)
新生Lagopus2017(仮称)
Lagopus 0.2.7
Lagopus 0.2.7
Lagopus match improvements
Lagopus match improvements
Lagopus 0.2.4
Lagopus 0.2.4
Net bsd advent calendar 2015 bpf
Net bsd advent calendar 2015 bpf
Using rump on NetBSD 7.0
Using rump on NetBSD 7.0
Rumpを使ってみる
Rumpを使ってみる
Running lagopus on Xeon D
Running lagopus on Xeon D
Using Xeon D 10GBase-T
Using Xeon D 10GBase-T
Recently uploaded
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
Hiroshi Tomioka
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
Recently uploaded
(9)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
Lagopus performance
1.
Lagopusの性能の話 Apr 25, 2015 Masaru
OKI @masaru0714
2.
● OpenFlow対応ソフトウェアスイッチです ● (もちろん)オープンソースです ○
http://lagopus.github.io ● よく言われている特徴 ○ x86 Linuxで動きます ○ DPDKを使っていて、内部の工夫もあり速いです ○ マルチコア・マルチスレッドで動作します ○ OpenFlowの仕様のカバー範囲が大きいです Lagopusとは(おさらい)
3.
● MPLS-VLAN変換をやりつつ ● 10万フローエントリを持った状態で ●
10GbEでワイヤーレート (14.88Mfps) ○ ショートパケット (64bytes) Lagopusの性能目標(当時) ether header MPLS shim header upper layer header and payload ether header VLAN header upper layer header and payload
4.
● パケットの書き換えを伴う転送を実行する ● 2ポート 想定している通信 MPLS
network VLAN networkLagopus
5.
ざっくり一言でいえば、ユーザスペースでパケット読み書きするライブラリ ● コピーを(なるべく)しない ● コンテキストスイッチさせない ●
メモリフォールトを起こさない ● 割り込み駆動させない ● キャッシュ活用、SSE命令活用 ● マルチコア活用、NUMAアーキテクチャを意識 予備調査 サンプルプログラム example/l2fwd にてショートパケット転送 →10GbEワイヤーレート出ました I/O性能: DPDK
6.
● ソフトウェアで処理する以上、基本的に ○ なるだけメモリアクセスしない ○
メモリコピーもなるだけ避ける ○ コードも小さく実行ステップ数を少なく ○ 余計な処理を削る ● などすれば、それらをしない場合と比較して、速くなる。 ● もちろん、本当に必要な処理を省いて速くしても意味はない。 OpenFlow処理性能
7.
● OpenFlowでは特定の通信1本を「フロー」と呼んでいる ○ たとえばPC-AがServer-Bに80/tcpの通信をするパケット ○
たとえば任意ホストがServer-Cに53/udpの通信をするパケット ○ 折り返し(たとえば上記パケットの応答)も別フローという勘定 ● OpenFlowスイッチは、パケットヘッダを見てフローを選別し処理する ○ 処理: パケットヘッダの書き換え、指定ポートへのパケット送信 ● ひとつのフローを選別(match)する設定をフローエントリと呼ぶ ○ これらが登録された塊をフローテーブルと呼ぶ ● OpenFlow処理対象のパケットは、一つのフローエントリにのみmatch フローエントリ・フローテーブル
8.
● 10万フローエントリ=10万種類のmatch ○ 今回の想定では1方向(折り返し方向のパケットは考えない) 10万フローエントリ entry
# 優先順位 match action counter 1 1 マッチ条件1 処理1 2 1 マッチ条件2 処理2 : 100,000 1 マッチ条件100,000 処理100,000
9.
matchの部分だけ抜粋したもの ※実際のOpenFlowプロトコルは下記をバイナリエンコードしている in_port=1,eth_dst=00:00:00:00:00:00,eth_type=0x8847,mpls_label=0, in_port=1,eth_dst=00:00:00:00:00:00,eth_type=0x8847,mpls_label=1, in_port=1,eth_dst=00:00:00:00:00:00,eth_type=0x8847,mpls_label=2, : : in_port=1,eth_dst=00:00:00:00:00:00,eth_type=0x8847,mpls_label=99999, 使用したフローエントリ MPLSの eth_type label指定を 10万種類
10.
● 1秒間に1488万パケットを転送 ● 1パケットあたりの所要時間:
1/14.88M=67.2nsec ● 2GHz CPUでは134クロック ● 3GHz CPUでは201クロック 14.88Mfps
11.
● Intel DPDKという速いパケットI/Oライブラリがある ●
Lookup(match)とactionがどのくらいの速さか測ってみて考える ● まず愚直にエントリ1にmatch?→エントリ2に…というものを作る ○ 末尾のエントリでは遅くなるという予想は簡単にできる ● 1コアで、受信-OpenFlow処理-送信を連続実行(1スレッド) Lagopusプロトタイプ1st 受信 match action 送信コア1 10万エントリを リニアサーチする
12.
● 測ってみないとどのくらい理想と現実に差があるかわからない ● 測ってみた
(Xeon 2.2GHz) ● 先頭のエントリにmatchするトラフィックのみ: 14.88Mfps ● 末尾のエントリにmatchするトラフィックのみ: 22Kbps (42fps) 笑えるくらいひどい数字を見た。 ● 末尾エントリに当たる場合、ほとんど流れないに等しい。 ● 末尾エントリに当たるパケットで速くする必要がある。 Lagopusプロトタイプ1st測定
13.
● Lookup アルゴリズム ○
さすがに愚直に10万エントリをリニアサーチするのはないだろう ○ どうにかリニアサーチせずに済ませられないかのアイデア出し ● 対象エントリをどれだけ絞り込めるか? ○ リニアサーチでいえば、エントリ数が半分ならかかる時間も半分 ○ Lookupにかかるメモリアクセス量が少ないほど速くなる ● データ構造 ○ サーチに適したデータ構造をとることで速度向上できるか? ● 複数コアの利用 ○ 複数コアで並列処理させればその分速くなる ○ 処理をパイプライン化させればコアごとの処理が局所化できる 速度向上案
14.
● https://www.openmp.org/ ● 繰り返し処理が記述されたプログラムを並列化する ●
C言語では#pragmaディレクティブを埋め込むだけ ● 例 #pragma omp parallel for for (i = 0; i < max_entry; i++) { 並列化したい処理; } ● どのコアを使うなどの細かい制御は要求されず自動的に処理される ● 探索対象フローエントリを等分してそれぞれのコアで処理 ● 処理済みのエントリを持ち寄って、もっともpriorityの高いエントリを採用 OpenMPを使ってみた
15.
● 試作して動かしてみた ● かえって遅くなった ●
なぜか ○ 10コアでばらしても1コアあたり1万エントリの探索 ○ コアごとの選出エントリが出揃わないと比較できない ○ 比較して最終的に選ぶときには1コアでの処理 ○ 1パケットごとにスレッドをバラして止めてを繰り返しすぎる ○ DPDKのコア・スレッド管理との相性も良くない ● OpenMPによる高速化の試みは失敗。 ● 書いた試作コードは非公開のまま闇に消えていただいた OpenMPを使ってみた: 結果
16.
● ルーティングテーブルではPatricia Treeが使われる ●
OpenFlowでは単純にPatricia Treeを適用することができない ● OpenFlowのmatchは複雑 ○ パケットヘッダの特定のフィールド40種類 (OpenFlow 1.3) ■ eth_src, eth_dst, eth_type, vlan_id, ip_src, ip_dst, ip_proto,... ○ 任意のフィールド複数をAND指定できる ○ 省いたフィールドはワイルドカード ○ 値の比較の際にビットマスクを指定できる ○ エントリにpriorityがあり、順序に基づきmatch結果が決まる ● OpenFlow仕様を逸脱する実装は行わない ● option指定となっている機能も実装を省かない前提 Lookupの難しさ
17.
ip_srcをキーにして高速探索するコードを作っても結果が誤りとなる例 一筋縄ではいかない例 フロー# priority ip_src
ip_dst 1 32 192.168.0.1 - 2 31 - 10.0.0.1 3 30 192.168.0.2 - 4 29 192.168.0.3 - priority順に探索する フロー2が正解 ip_srcで探索すると フロー3となるが、誤り eth IPv4 src:192.168.0.2 dst: 10.0.0.1 Payload
18.
● いくつかのフィールドにてexact matchと無指定のテーブルを用意する ●
exact matchは、配列やhash table, patricia treeなどで高速探索 ● 探索した先は、別のフィールド用の2つのテーブル ● 無指定のテーブルは、別のフィールド用の2つのテーブル ● exact matchを続けた結果のエントリと無指定のエントリのpriorityを比較 ● 優先度の高い方を選択 * テーブル段数でエントリを特定する ● flow_mod(フローエントリ登録)にも利用し、高速化できた リニアサーチよりは速いが、これがベストかは疑問。 他の探索アルゴリズムやテーブル構造についても調査・検討中。 現在のLookup table実装
19.
● 他の要素(VLAN IDやMPLS
labelなど)を省いて簡略化した例 ● eth_typeは配列、ip_src, ip_dstはマスク別のpatricia tree ● priorityの高いほうの結果(フローエントリ)を選択する Lookup table例 Top 0x0000 0x0800 0xffff無指定 無指定 ip_src 無指定 ip_dst無指定 ip_dst ...eth_type ip_src ip_dst
20.
● 1コアでやるから遅い ● 複数コアで並列に処理すればその分速くなる ○
ただしX個にすればX倍、とはいかない ● 共有リソースアクセスに対するロックが問題となる→バルク処理 ● 命令キャッシュのヒット率を高めるためコアごとに処理内容を分ける 複数コアの利用 受信 OpenFlow 処理 送信OpenFlow 処理OpenFlow 処理OpenFlow 処理 受信 送信 Lock n個処理 Unlkn個受信 n個送信 read lock同士 は干渉しない locklessの ring buffer
21.
● テーブル探索で速くなったが8コア、12コアでも14.88Mfpsに届かず ● 8Mfps程度 ●
Linuxに用意されているperfコマンドを用いて遅い個所を調査 ● Lagopusを動かしておき、別ターミナルでsudo perf topを実行 ● 実行時間の長いfunctionが上位に表示される ○ 処理が軽くても空回り(busy loop)しているfunctionは上位に表示 ● 調査結果、まだまだLookupが遅いことが判明 まだ遅い。
22.
1. 最初のパケットは通常のマッチ処理を行う 2. マッチ完了→パケットヘッダの情報とフローエントリが関連付けられる 3.
関連付けをキャッシュテーブルに登録する 4. 次のパケットはパケットヘッダの情報でキャッシュを引く 5. 見つかればフローエントリは確定しているのでマッチ処理完了 6. 見つからなければ通常マッチ処理してキャッシュ登録 これにより12コアを使ってMPLS-VLAN転送14.88Mfpsを達成。 (2014年3月) Lookup軽量化: flow cache
23.
● OpenFlow処理スレッドでは、1パケットをmatch-action完了まで実行する ● 毎回やる必要のない処理があれば、省くことで速くなる ●
たとえば、特定処理の時のみ使われる変数の初期化 ○ OpenFlowのactionには、2種類がある ■ 即時実行するapply-action ■ 書き溜めておき、最後に実行するwrite-actions ○ write-actions用変数の初期化は毎回必要とはならないことが多い ○ これを必要な時のみ実行するよう変更 もっと速く
24.
● OpenFlow処理スレッドでは、1パケットをmatch-action完了まで実行する ● 細かく見ると、パケットヘッダの情報収集、match、actionにわけられる ●
パケットヘッダの情報収集をn個まとめて処理するよう変更 ● 命令キャッシュの利用効率が向上 ● Intel Performance Counter Monitor (Intel PCM)で調査できる ○ CPUが持つカウンタを参照するのでXeonが必要 ● 2015年4月現在、前出と同ハードにて、4コアを使って13Mfpsの性能 ○ 開発版 ○ 近日リリース予定とのことです もっともっと速く
25.
アイデア段階のものがいくつかある。 ● matchとactionをスレッド(コア)分離させる ● matchをバルク処理させる ●
action処理を見直す ● RSSである程度処理を分散させ、一部の探索を省く ● ポートごとに独立した処理とし、ポート数が増えても速度を維持させる ● Intel NICのflow director機能を使い、ハードウェアflow cacheを実現 ● flow cacheに使っているhash tableを高性能なものに置き換える ● バルク処理パケット数の調整(レイテンシ・揺らぎが増える) ● フローテーブルの内容によりダイナミックに探索テーブル生成 ● and, more! 提案、実装、大歓迎! さらなる性能向上に向けて
26.
Lagopus http://lagopus.github.io ONF (OpenFlowの総本山) http://www.opennetworking.org/ Lagopus User
Community http://www.lagopus.community/cms/ DPDK http://dpdk.org/ Reference
Download now