View
3
Download
0
Category
Preview:
Citation preview
パケット処理の独自実装や高速化手法の比較と実践
JANOG45@札幌
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
Survey and Implementation examples ofcustom packet processing and acceleration methods
海老澤健太郎トヨタ自動車株式会社
日下部雄也BBSakura Networks株式会社
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
本日のお題
パケット処理とは?
(ハードウェア&ソフトウェア処理の違い)
パケット処理の独自実装や高速化手法の紹介
それぞれの特徴や適用領域の違いについて比較
独自パケット処理の実装例(P4/XDP)(サンプルコードを元に具体的な実装方法や実行環境の解説)
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
パケット処理を独自実装する “もうひとつの” 理由
独自のパケット処理をしたいから
実装する事でパケット処理(データプレーン)への理解が深まる
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
パケット処理とは?
ヘッダ解析テーブル参照ヘッダ変更メタデータ更新
ドロップ複製送信
受信
インターフェース(外部・内部・仮想)
インターフェース(外部・内部・仮想)
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
実装の種類
ハードウェア
専用回路を用いた処理
ソフトウェア
CPUを用いた処理
ソケット通信カーネルモジュール
XDP(Express Data Path)DPDK(Data Plane Development Kit)
ASIC FPGA
ハードウェア実装によるパケット処理
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
「パイプライン」がハードウェアによるパケット処理の基本
ヘッダ解析(Parse)
テーブル参照(Match)
変更・転送(Action)
Packet#3
Packet#2
Packet#1
複数パケットの並列処理
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
「パイプライン」がハードウェアによるパケット処理の基本
ヘッダ解析(Parse)
テーブル参照(Match)
変更・転送(Action)
ヘッダ解析(Parse)
テーブル参照(Match)
変更・転送(Action)
ヘッダ解析(Parse)
テーブル参照(Match)
変更・転送(Action)
パイプラインの並列化により性能がxx倍
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
ハードウェアのリソース≒回路の量(チップ上の面積)
「配線」が多くなる処理は苦手
⇒マッチテーブル・キーの長さ⇒パースするヘッダの長さ⇒ 「パケット全体を変更する」という処理は苦手
「配線の変更」を可能とするにはより多くのリソースが必要
⇒レジスタ(メモリ)やそれに合わせて動作が変わる回路たち⇒カスタマイズ(独自処理)可能な箇所は最小限にしたい
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
FPGAの特徴
RTL設計(Verilog/VHDL)
論理検証(シミュレーション)
論理合成
配置配線
タイミング検証(シミュレーション)
一般的なFPGA開発
回路をすべて独自処理実装可能(任意の変換ロジックを実装可能)
中速・高消費電力
回路を意識したプログラミングが必要
プログラミングの難易度が高い
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
ASICの特徴
https://commons.wikimedia.org/wiki/File:Integrated_circuit_design.png
(基本)回路は固定
高速・低消費電力
回路変更にはチップの焼き直しが必要(レジスタなどを利用した動作変更も可能だが最小限:バグ対応のため etc.)
変更に必要な期間が月・年単位
https://commons.wikimedia.org/wiki/File:Integrated_circuit_design.png
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
(ハードウェア視点での)パケット処理の独自実装とは?
ヘッダフォーマットの定義パースグラフの構築
ヘッダ解析(Parse)
テーブル参照(Match)
マッチフィールドの定義テーブルタイプの定義
MAC address
IPv4 address
proto + TCP ports
( any header fields )
変更・転送(Action)
アクションの定義フィールド操作ロジック
bit shift ()
add(+) sub(-) multiple(*)
drop forward
copy push / pop
レジスタなどを利用した “特定回路” のカスタマイズ
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
P4 ... パケット処理に特化したプログラミング言語
P4 Source Code パケット処理パイプラインの定義パーサーやテーブル、アクション、など
P4 Compiler P4をTarget上で実行可能な形式にコンパイルTarget毎に提供される
Target (P4対応Dataplane) P4 Dataplane runtime に従いパケットを処理Hardware: ASIC, NPU, FPGA | Software: CPU
“Programming Protocol-Independent Packet Processors”
https://p4.org/
ASIC, NPU, FPGAASIC, NPU, FPGA
https://p4.org/
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
P4を用いた FPGAの開発フロー
RTL設計(Verilog/VHDL)
論理検証(シミュレーション)
論理合成
配置配線
タイミング検証(シミュレーション)
一般的なFPGA開発
P4プログラミング
P4プログラムチェック
論理合成
配置配線
タイミング検証(シュミレーション)
NetcopeP4 Cloud
P4コンパイラ
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
P4を用いた独自パケット処理の実装方法の解説は後半で …
ソフトウェア実装によるパケット処理
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
ソフトウェア処理
• ソケット通信• カーネルモジュール• XDP(Express Data Path)• DPDK(Data Plane Development Kit)
NIC
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
ソケット通信
Application
Hardware
Userspace
Kernel
Socket
Netfilter Ingress
TC Ingress
Driver
TC Egress
Netfilter Egress
• 普通のアプリケーションで通信したい場合はこの方式
• パケット送受信時にsyscallが必要で、Linux
カーネル内でも様々な処理を行っているため、他の方式と比べると性能は低い
• tun/tapなどを使ってトンネリングするアプリケーションを実装することも可能
NIC
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
カーネルモジュール
Application
Hardware
Userspace
Kernel
Socket
Driver
• 新しいプロトコルやネットワークの機能をLinux自体に機能追加したいときに使う
• Netfilterやtcもカーネルモジュール
• 開発、運用の難易度が高く、実装をミスった場合、カーネル毎落ちるため危険
• ユーザスペースのアプリケーションと比較すると高性能
Netfilter
tc
カーネルモジュール
NIC
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
XDP
Application
Hardware
Userspace
Kernel
Socket
DriverNative XDP
Generic XDP
Offloaded XDP
• 高速にパケットを処理したいが、Linuxの機
能を使ったり、ユーザスペースのアプリケーションと同居させたいときに使う
• ロード時にVerifierによるチェックがあるためカーネルモジュールよりは安全
• 対応NIC(ドライバ)が限られている• 15種類のドライバが対応(5.4時点)• XDP_SETUP_PROGでdriversフォルダを
grepするとわかる
• ハードウェアオフロードに対応しているのはNetronomeのNICのみ(5.4時点)
• 使用例• bpfilter• OvS-AF_XDP• Cloudflare(DDoS Mitigation)• Facebook(Katran)• Cilium• XFLAG(Static NATなど)• LINE(L4LB, SRv6)• BBSakura(Mobile Core)
Netfilter
tc
AF_XDP socket
https://lwn.net/Articles/755919/http://docs.openvswitch.org/en/latest/intro/install/afxdp/https://blog.cloudflare.com/l4drop-xdp-ebpf-based-ddos-mitigations/https://engineering.fb.com/open-source/open-sourcing-katran-a-scalable-network-load-balancer/https://cilium.io/https://speakerdeck.com/mabuchin/zhuan-binagaramonetutowakuchu-li-wo-sohutoueadezi-zuo-siteikuhua?slide=14https://speakerdeck.com/line_developers/recent-updates-on-xdp
NIC
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
DPDK
Application
Hardware
Userspace
Kernel
• UIO(User space IO)を利用して、直接NICを制御する
• Linuxカーネル内の処理をスルーし、必要な処理だけを実行できるため高速
• 専用のCPUコアを割り当てないといけない
ため、他のアプリケーションとの同居がしづらい
• 必要な処理は全部DPDKのアプリケーションでやらないといけない
• 対応NICが限られている• AF_XDPの上で動作することも可能• 使用例
• OvS-DPDK• NTT(Lagopus)• NTT Com(Kamuee)• Cisco TRex
https://core.dpdk.org/supported/https://doc.dpdk.org/guides/nics/af_xdp.htmlhttp://docs.openvswitch.org/en/latest/intro/install/dpdk/http://www.lagopus.org/http://www.lagopus.org/https://trex-tgn.cisco.com/
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
ソフトウェア処理
• シングルコア性能は• DPDK > XDP >>>> カーネルモジュール >> ソケット通信• というイメージ• マルチコアではXDPがDPDKより性能が良いデータがある
• 実際の性能は使うハードウェアや作ったプログラムによってかなり異なるので、測ってみないとわかりませんが、
• 10G以上のNICで効率的にパケットを処理したい場合はXDPかDPDKというイメージ
https://raw.githubusercontent.com/tohojo/xdp-paper/master/xdp-the-express-data-path.pdf
パケット処理実装のまとめ(ハードウェア&ソフトウェア)
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
ハードウェアとソフトウェア処理の比較
ハードウェア専用回路を用いた処理
並列化による高速処理安定=遅延・性能の揺らぎが少
限られた範囲でのプログラミングアプリケーションとは離れた場所パケット処理専用ハードが必要(スイッチやFPGA搭載サーバー)
ソフトウェアCPUを用いた処理
マルチコアを使った並列処理開発の難易度は方式によって異なる
DPDK以外は他のアプリケーションとの同居がしやすい
XDP、DPDKでは対応NICが必要だが、大
抵の物理サーバや仮想サーバで動作可能
独自パケット処理の実装例
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
Segment Routing IPv6 for Mobile User PlaneRAN EPC SGi
Service Functions
Internet
Current (GTP network)
Future!? ( GTP/SRv6 mixed )
eNodeB SGW PGW GWGTP-U Tunnel GTP-U Tunnel VLAN, etc.
Service Functions
eNodeBSGW
PGW GWGTP-U Tunnel GTP-U Tunnel VLAN, etc.
SRv6 GWeNodeB
SRv6IPv6 Router SRv6 GW
MECMobile Edge Computing
Service Function ChainingUsing SRv6
GTP/SRv6 GW
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
GTP-U Echo SRv6 変換ルール(Internet-Draft)
https://datatracker.ietf.org/doc/draft-murakami-dmm-user-plane-message-encoding/https://datatracker.ietf.org/doc/draft-ietf-dmm-srv6-mobile-uplane/
注:Sequence番号は次のバージョンで追加予定
https://datatracker.ietf.org/doc/draft-murakami-dmm-user-plane-message-encoding/https://datatracker.ietf.org/doc/draft-murakami-dmm-user-plane-message-encoding/
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
GTP-U Echo SRv6変換処理
HOST#1SRGW
#1SRGW
#2R HOST#2
[GTP][UDP][IPv4] [SRH][IPv6] [GTP][UDP][IPv4]
[GTP][UDP][IPv4]
[SRH][IPv6]
[GTP][UDP][IPv4]
T.M.GTP4.D T.M.GTP4.E
End
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
GTP-U Header format
0 1 2 3 .0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Ver |P|R|E|S|N| Message Type | Length |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Tunnel Endpoint Identifier |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Sequence Number | N-PDU Number | Next-Ext-Hdr |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
[GTP][UDP][IPv4]
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
GTP-U Echo Request / Reply Message
GTP Echo request GTP Echo response
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
SRv6 (SRH) Header format
IPv6 Header
IPv6 Extension
Header
Payload
• Routing Type• 4 (Segment Routing)
• Segments Left• Index to the next segment in the
Segment List• Decremented on Endpoint node
• Last Entry• Index to the first segment in the
Segment List
• Segment List• Encoded starting from the last
segment of the path (Segment List [0] contains the last segment)
Reference: draft-ietf-6man-segment-routing-header
GTP-U Echo SRv6 変換ルール
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
GTP IPv4 Addr SRv6 Segment ID & Src Address
Destination Segment ID (Last Destination IPv6 Addr)0 127+-----------------------+-------+----------------+---------+| SRGW-IPv6-LOC-FUNC |IPv4 DA|Args.Mob.Session|0 Padded |+-----------------------+-------+----------------+---------+
128-a-b-c a b c
Source IPv6 Address0 127+----------------------+--------+--------------------------+| Source UPF Prefix |IPv4 SA | any bit pattern(ignored) |+----------------------+--------+--------------------------+
128-a-b a b
IPv4 SA
IPv4 DA
UDP
GTP-U
T.M.GTP4.D
T.M.GTP4.E
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
GTP-U Header SRv6 Segment ID (Args.Mob.Session)
0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| QFI |R|U| Sequence Number | Pad |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Pad(cont') |+-+-+-+-+-+-+-+-+
Args.Mob.Session format for Echo Request, Echo Reply and Error Indication
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Ver |P|R|E|S|N| Message Type | Length |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Tunnel Endpoint Identifier |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Sequence Number | N-PDU Number | Next-Ext-Hdr |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Echo Request/Response のTEID==0 のため、Seqを記憶
T.M.GTP4.D T.M.GTP4.E
パケット処理の独自実装や高速化手法の比較と実践|JANOG45@札幌|2020/01/24
GTP-U Message Type をエンコード
IPv6 Header
IPv6 Extension
Header
Payload
• Routing Type• 4 (Segment Routing)
• Segments Left• Index to the next segment in the
Segment List• Decremented on Endpoint node
• Last Entry• Index to the first segment in the
Segment List
• Segment List• Encoded starting from the last
segment of the path (Segment List [0] contains the last segment)
Reference: draft-ietf-6man-segment-routing-header
0 10 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+| Reserved |B3|B2|B1|B0|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Bit 0 [B0]: End MarkerBit 1 [B1]: Error IndicationBit 2 [B2]: Echo RequestBit 3 [B3]: Echo Reply
Recommended