software forwarding path

30
Software Forwarding Path @Wakame Users Group December 2, 2016 Tomofumi Hayashi (s1061123)

Upload: tomofumi-hayashi

Post on 22-Jan-2018

484 views

Category:

Engineering


4 download

TRANSCRIPT

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はプログラムが占有するので他のプログラムは使用不可

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系列?

その他にいつかの参考実装を提供

odp-linux

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に利用

https://github.com/iij/ipgen

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の操作はeBPFで実施

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でトレース可能に

仮想マシンでのネットワーク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

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で指定

L2_switch

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

サイズの問題(Max 4k instructions)

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!