狠狠撸

狠狠撸Share a Scribd company logo
Software Forwarding Path
@Wakame Users Group
December 2, 2016
Tomofumi Hayashi (s1061123)
Software Forwarding?
ソフトウェア でパケット"転送する"
ソフトウェアでパケット"転送処理を書く"
本日のお題はソフトウェア(CPU)でパケットを転送するお話です。
Hardware Forwarding and Software Forwarding
Processing ASIC FPGA/CPLD/or so Software
Packet Forwarding Hardware Forwarding
by ASIC
Cisco/Juniper
Alaxala (onsale!)
Programabble Chip
Forwarding
IXP200, Cisco QFP,
Barefood Networks
Tofino
Software Forwarding
Today's Topic
Speed Fast Middle Slow
Feature Fixed On-demand On-demand
Cost Expensive Bit expensive Inexpensive
Software Forwarding Technology
Forwarding Framework
Intel DPDK (Data Plane Development Kit)
ODP (Open Data Plane project)
netmap
XDP (eXpress Data Path)
Forwarding Application
Open vSwitch
Lagopus
Software Forwarding Technology
Forwarding Framework
Intel DPDK (Data Plane Development Kit)
ODP (Open Data Plane project)
netmap
XDP (eXpress Data Path)
DPDK
http://dpdk.org
2011にIntel (+6wind?)で立ち上げ
APIと実装を提供 (コードは主にBSD License)
Linux/FreeBSDの上でDPDKのライブラリを使ってアプリケーションが動く
x86_64, ARM64, ppcをサポート
Environment Abstraction Layer = EAL等でCPUのスケジュールも抽象化
NICはInterruptではなくPollで動作 → Driverの修正が必要
NICはプログラムが占有するので他のプログラムは使用不可
DPDKの動作
Kernel
NIC
Process
Kernel
NIC
Process
DPDK
EAL
● Kernel/プロセス間のメモリコピー
● NICからのCPU割り込みによるCPUの処理の発生
● CPUのコンテキストスイッチ
● 物理メモリを直接プロセスにマップ
● NICをKernel管理下からProcess直下に
● NICの割り込みは無効に
● CPUは占有させてLinuxのスケジューラから独立
=> ネットワーク専用としての独立したリソースへ
DPDKの実装例を見る
http://dpdk.org/browse/dpdk/tree/
http://dpdk.org/browse/dpdk/tree/examples/l2fwd/main.c
RTE: Run Time Environment
EAL: Environment Abstraction Layer
DPDKのパフォーマンス
"Intel? Open Network Platform Release 2.1 Performance Test Report"によると
Xeon E5-2695 v4で
2 Core利用 (全18Core, HyperThread/SMT無効, Tx,Rxに1Core)で
128 bytes以上のパケットの場合に
物理間のL3のパケット転送で
40G Wire rate (33,783,767 pps)を達成
ODP (Open Data Plane)
http://www.opendataplane.org/
2013にLinaroが開始
APIの策定が主な作業
いくつかの実装を提供 (BSD License)
内容はほぼDPDKと同じ
CAVIUM, freescale, TI, Linaroなどがチップ向けに実装を提供
ARM系の非Intel系列?
その他にいつかの参考実装を提供
netmap
http://info.iet.unipi.it/~luigi/netmap/
Luigi Rizzo (Università di Pisa)が2011年に発表
APIと実装を提供 (BSD License?)
OSのドライバに修正が必要
割り込み+Pollのハイブリッド
VALEというswitch実装を提供
FreeBSDには2011年からHEADにmerge済み
IIJではpacket generatorに利用
XDP (eXpress Data Path)
2015年にLinux FoundationがIO Visor Projectを開始 (SUSEが立ち上げ?)
XDPはIO Visorの一部
APIと実装を提供 (Apache 2.0 License)
LinuxのDatapathの上に実装
XDPではPacketがkernelに来てほぼ一番最初のタイミングでフィルター等が可
能
DDoS等のパケットを ドロップさせる等の軽めな処理が可能
LinuxのIP/TCPスタックもそのまま利用可能
XDP (eXpress Data Path) = eBPF?
2015年にLinuxのkprobeがeBPFをカーネル内に実装 (sandbox+JIT)
eBPF = BFPのVMなどを拡張した形
(https://events.linuxfoundation.org/sites/events/files/slides/tracing-linux-
ezannoni-linuxcon-ja-2015_0.pdf)
IO VisorのbccでLLVM/clangを使ってCからeBPFのコードを生成可能
bcc = BPF Compiler Collection
(ほぼ)なんでもeBPFでトレース可能に
Software forwarding path
仮想マシンでのネットワークIO
→ Qemuでパケットはどう取り扱うのか?
コントロール (仮想NICの制御) とデータ (仮想NICからのデータパス)
virtio-net (VMに適したNIC実装, 仮想/物理の割り込みを削減)
vhost-net (仮想物理間のデータ転送を最適化/i.e. qemu - tap間)
vhost-user (dpdkユーザプロセス間/VM間でのzero-copyを可能に)
server/client形式
Hugetlbが必要
qemuはclientのみ可能
Guest
qemu
kernel
virtio-net
vhost-net
dpdk
app
vhost-user
Software Forwarding Technology
Forwarding Framework
Intel DPDK (Data Plane Development Kit)
ODP (Open Data Plane project)
netmap
XDP (eXpress Data Path)
Forwarding Application
Open vSwitch
Lagopus
Software Forwarding Technology
Forwarding Application
Open vSwitch
Lagopus
VPP (fd.io)
Open vSwitch
http://openvswitch.org/
Niciraのコードがベースで、その後Linux foundation projectに (Apache 2
license)
Open Flowのswitchとして開発, forwardingはkernelで実施
OpenFlowベースでのフォワーディング
多くのアプリケーションが利用
Wakame-vdc
OpenVNet
OpenStack
Lagopus
http://www.lagopus.org/
NTTの研究所で2014年から開発 (Apache 2.0ライセンス)
OpenFlowでのフォワーディングコントロール
最近はGoBGPとの連携等を予定
Version 0.3 (2016 Q4)
Routing stack integration (Quaga, GOBGP, opensnaproute)
Segment Routing (SPRING) routing stack and its extension for Lagopus
GRPC-based switch control and flow control
Support of YANG-model or OpenConfig
VPP (fd.io)
http://fd.io/
CiscoのコードがベースでLinux foundation projectに (Apache 2 license)
IP/TCP ベースのフォワーディング
VLAN, IPv4/v6, NAT, MAP-E等サポート
https://wiki.fd.io/view/VPP/Features
Pluginの拡張によってフォワーディングを追加することが可能
CLIでの操作も可能だが、Netconf/YANGやPython/C APIでの操作も可能
Software Forwarding Technology
Forwarding Framework
Intel DPDK (Data Plane Development Kit)
ODP (Open Data Plane project)
netmap
XDP (eXpress Data Path)
Forwarding Application
Open vSwitch
Lagopus
Software forwarding path
P4: Program Protocol-independent Packet Processors
http://p4.org/
2013年にBarefood Networks/Stanford Univ./Princeton Univ.で開発開始
ONOSとかのコンテキストで開発?
Open vSwitchのテストでも活用
P4: Program Protocol-independent Packet Processors
http://p4.org/
2013年にBarefood Networks/Stanford Univ./Princeton Univ.で開発開始
ONOSとかのコンテキストで開発?
Open vSwitchのテストでも活用
P4: Program Protocol-independent Packet Processors
http://p4.org/
2013年にBarefood Networks/Stanford Univ./Princeton Univ.で開発開始
ONOSとかのコンテキストで開発?
Open vSwitchのテストでも活用 ? M4
P4 and OpenFlow?
OpenFlowと同じでforwardingのモデル/記述化
OpenFlowと違うのはtext notationであるということ
OpenFlowはコンポーネント間のプロトコルを規定
P4はInputを規定していて、outputは気にしない
p4 -> VHDL等に変換、専用のチップに入れることを想定
実装は各種ベンダに依存
Barefood Networks / Tofino
Netronome / Agilio CX/LX
P4 on Software Forwarding?
P4 "behavioral-model" (bmv2)
https://github.com/p4lang/behavioral-model
v1(p4c-behavioral) -> v2へ
P4をp4c-bmでjsonに変換、targetに対して使用
Targetとは?
P4のフォワーディングモデル例でありシミュレーター
simple_router
single pipeline ? egress_portで指定
P4 on Software Forwarding? (Cont'd)
P4 to eBPF
iovisor bcc supports P4 to eBPF
Ben Pfaff (Nicira/VMWare?)が"P4 and Open vSwitch"
http://openvswitch.org/support/slides/p4.pdf
https://github.com/blp/ovs-reviews/releases/tag/p4-workshop
2015で停止
William (Cheng-chun) Tu from VMwareさんがOVSにeBPFの実装を発表
http://openvswitch.org/support/ovscon2016/7/1120-tu.pdf
Software Forwarding Technology
Forwarding Framework
Intel DPDK (Data Plane Development Kit)
ODP (Open Data Plane project)
netmap
XDP (eXpress Data Path)
Forwarding Application
Open vSwitch
Lagopus
Thank you!

More Related Content

Software forwarding path

Editor's Notes

  • #8: ...
  • #28: http://lists.p4.org/pipermail/p4-dev_lists.p4.org/2016-May/000328.html