SlideShare une entreprise Scribd logo
1  sur  19
FD.io VPP 事始め
Tetsuhiro Sato
自己紹介
 佐藤 哲大(tetz)
 某ネットワークベンダで、SDN(っぽい)仕事をしてます
 ネットワークプログラマビリティ勉強会の企画、運営をしてます
http://network-programmability.connpass.com/
2
FD.io
 FD.io
 Fast Data – Input/Output に関
連する複数のプロジェクトを運営する
Apache Foundation傘下のプロ
ジェクト
 VPPの他に、VPPの管理、VPPを用
いたユースケース、Testing等のプロ
ジェクトも管理
3
https://wiki.fd.io/view/VPP/Features
FD.io VPP
 VPP
 FD.ioの中核プロジェクト
 高性能かつ高機能な仮想スイッチ&ルータ
 DPDKを活用し、ユーザー空間のアプリケー
ションとして動作
4
Vector Packet Processing
 通常のコンピューティング処理にないパケット処理に
固有の難しさ(Instructionの観点から)
 10Gbps ラインレート=14.88Mfps = 67nsec per フレーム
 2GHz CPUコアのクロックサイクル= 0.5 nsec
 つまり、1フレームあたり134クロックサイクルの余地
 DRAM にアクセスしてしまうと、CPU サイクルがおよそ 60ns
ストールしてしまう
 Scalar Packet Processing
 パケット毎に処理
 割り込み
 コールスタックのトラバース(一連の機能を適用)
 ACL, NAT, QoS, VXLAN, etc
 Punt, drop, or rewrite/forward
 問題点
 I-cacheのスラッシング
 パケット毎に同様のI-cacheミスを繰り返す
 I-cacheを大きくしない限り、上記の問題は解決しない
 Vector Packet Processing
 複数のパケットを同時に処理
 先頭のパケットがI-cacheをWarm up
 後続のパケットにはI-cacheにHit!
5
http://stackoverflow.com/questions/4087280/approximate-cost-to-access-various-
caches-and-main-memory
豊富な機能
6
! とりあえず、いろんな機能をサポート
https://wiki.fd.io/view/VPP/Features
インストール
7
$ export UBUNTU="trusty"
$ export RELEASE=".stable.1609"
$ sudo rm /etc/apt/sources.list.d/99fd.io.list
$ echo "deb [trusted=yes] https://nexus.fd.io/content/repositories/fd.io$RELEASE.ubuntu.$UBUNTU.main/ ./" 
| sudo tee -a /etc/apt/sources.list.d/99fd.io.list
$ sudo apt-get update
$ sudo apt-get install vpp vpp-dpdk-dkms
 Yum、Aptなどのパッケージマネージャからインストールできる
https://wiki.fd.io/view/VPP/Installing_VPP_binaries_from_packages
(Ubuntu14.04の例)
コマンドライン接続
8
unix {
...
cli-listen localhost:5002
...
}
 /etc/vpp/startup.confに以下のように書いておくと、telnetでVPPのコマンドラインに接続できる
$ telnet localhost 5002
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
_______ _ _ _____ ___
__/ __/ _  (_)__ | | / / _ / _ 
_/ _// // / / / _  | |/ / ___/ ___/
/_/ /____(_)_/___/ |___/_/ /_/
vpp#
$ sudo vppctl show ver
vpp v17.04-rc0~227-g614ac5d built by tetsusat on ubuntu at Tue Feb 7 08:43:33 JST 2017
 もしくは、ホストLinux上で、vppctlに続けてVPPのコマンド実行できる
接続方法
 外部に接続するVPPインターフェイスの種類
9
接続方法 ユースケース(たぶん)
DPDK PDM(w/ Intel NIC, VMXNET3) ホストマシンのインターフェイスの利用
vhost KVMとの接続
veth コンテナとの接続
tap ホストマシンのLinuxサービス(DHCP等)を利用
DPDKの設定
10
$ sudo lshw -class network -businfo
Bus info Device Class Description
====================================================
pci@0000:02:00.0 eth1 network 82545EM Gigabit Ethernet Controller (Copper)
pci@0000:02:01.0 eth2 network 82545EM Gigabit Ethernet Controller (Copper)
pci@0000:03:00.0 eth0 network VMXNET3 Ethernet Controller
 DPDK対応NICのPCI IDを確認
$ sudo ifconfig eth1 down
$ sudo ifconfig eth2 down
$ sudo ip addr flush dev eth1
$ sudo ip addr flush dev eth2
 インターフェイスの設定をクリア
DPDK の設定(つづき)
dpdk {
socket-mem 1024
dev 0000:02:00.0
dev 0000:02:01.0
}
 /etc/vpp/startup.confにdpdkに関する設定を追加して、VPPを起動
 socket-memはパケットバッファ、hugepagesからアロケートされる
 socket-memは明示的に指定しないと、CPUソケット(NUMAノード)毎に512Mを確保
 VPP側では、GigabitEthernetX/X/Xとして認識される
vpp# show int
Name Idx State Counter Count
GigabitEthernet2/0/0 1 down
GigabitEthernet2/1/0 2 down
...
vhostの設定
vpp# create vhost socket /tmp/sock0.sock server
 vhost socketを作成
vpp# show int
Name Idx State Counter Count
VirtualEthernet0/0/0 3 down
...
<qemu:commandline>
<!-- vhost-user -->
<qemu:arg value='-chardev'/>
<qemu:arg value='socket,id=char0,path=/tmp/sock0.sock’/>
<qemu:arg value=’-netdev’/>
<qemu:arg value=’vhost-user,id=mynet,chardev=char0'/>
<qemu:arg value='-device'/>
<qemu:arg value='virtio-net-pci,netdev=mynet,mac=52:54:00:01:00:33'/>
<qemu:arg value='-object'/>
<qemu:arg value='memory-backend-file,id=mem,size=16384M,mem-path=/run/hugepages/kvm,share=on'/>
<qemu:arg value='-numa'/>
<qemu:arg value='node,memdev=mem'/>
<qemu:arg value='-mem-prealloc'/>
</qemu:commandline>
 livbirt XML定義ファイルでvhost-userの設定(XRvの場合)
 VPP側では VirtualEthernet0/0/Xと認識される
vethの設定
$ sudo ip link add vpp1 type veth peer name veth1
 ホストでvpp1とveth1というvethペアを作成
vpp# create host-interface name vpp1
host-vpp1
 VPP側ではhost-vpp1と認識される
 veth1をコンテナ等に接続
vpp# show int
Name Idx State Counter Count
host-vpp1 4 down
…
 VPP側ではhost-vpp1と認識される
tapの設定
vpp# tap connect taphost
tap-0
 taphostというtapインターフェイスを作成
vpp# show int
Name Idx State Counter Count
tap-0 5 down
...
 VPP側ではtap-Xと認識される
 ホスト側ではtaphostとして認識される
$ ip link
...
7: taphost: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
UNKNOWN mode DEFAULT group default qlen 1000
link/ether 4e:00:94:42:8d:35 brd ff:ff:ff:ff:ff:ff
デモ L2設定
15
vpp# create host-interface name vpp1
host-vpp1
vpp# set interface state host-vpp1 up
vpp# set interface l2 bridge host-vpp1 1
vpp# create host-interface name vpp2
host-vpp2
vpp# set interface state host-vpp2 up
vpp# set interface l2 bridge host-vpp2 1
 VPPにvethを認識させ、L2ポートとしてBridge
Domain 1に接続
L3ポートL2ポート
Bridge Domain 1
C1 C2
veth
pair
veth
pair
eth0 eth0
Network Namespace: default
Network Namespace:
ns1
Network Namespace:
ns2
10.0.0.1 10.0.0.2
host-vpp1 host-vpp2
デモ L3設定
16
vpp# create loopback interface
loop0
vpp# set interface l2 bridge loop0 1 bvi
vpp# set interface state loop0 up
vpp# set interface ip address loop0 10.0.0.254/24
vpp# create host-interface name vpp3
host-vpp3
vpp# set interface state host-vpp3 up
vpp# set interface ip address host-vpp3 10.0.1.254/24
 Bridge Domain 1 に BVI インターフェイスを設定
 VPPにvethを認識させ、L3ポートとして設定
VPP Router
L3ポートL2ポート
Bridge Domain 1
C1 C2 C3
veth
pair
veth
pair
veth
pair
eth0 eth0 eth0
Network Namespace: default
Network Namespace:
ns1
Network Namespace:
ns2
Network Namespace:
ns3
10.0.0.254
10.0.1.254
10.0.0.1 10.0.0.2 10.0.1.1
host-vpp1 host-vpp2 host-vpp3
loop0(bvi)
落穂拾い
17
unix {
...
startup-config /home/userid/setup.cfg
...
}
 起動時に(仮想スイッチ&ルータとしての)VPPの設定を読み込ませるに
は、/etc/vpp/startup.confのunix句で設定ファイルを指定
落穂拾い(cont.)
18
vpp# show trace
------------------- Start of thread 0 vpp_main -------------------
Packet 1
00:13:25:316687: af-packet-input
af_packet: hw_if_index 1 next-index 1
tpacket2_hdr:
status 0x1 len 98 snaplen 98 mac 66 net 80
sec 0x5890503a nsec 0x22819a55 vlan 0
00:13:25:316712: ethernet-input
IP4: 06:28:d8:1d:3c:f2 -> 4a:74:64:4d:bd:0a
00:13:25:316721: l2-input
l2-input: sw_if_index 1 dst 4a:74:64:4d:bd:0a src 06:28:d8:1d:3c:f2
00:13:25:316725: l2-learn
l2-learn: sw_if_index 1 dst 4a:74:64:4d:bd:0a src 06:28:d8:1d:3c:f2 bd_index
1
00:13:25:316728: l2-fwd
l2-fwd: sw_if_index 1 dst 4a:74:64:4d:bd:0a src 06:28:d8:1d:3c:f2 bd_index
1
00:13:25:316730: l2-output
l2-output: sw_if_index 2 dst 4a:74:64:4d:bd:0a src 06:28:d8:1d:3c:f2
00:13:25:316733: host-vpp2-output
host-vpp2
IP4: 06:28:d8:1d:3c:f2 -> 4a:74:64:4d:bd:0a
ICMP: 10.0.0.1 -> 10.0.0.2
tos 0x00, ttl 64, length 84, checksum 0x476a
fragment id 0xdf3c, flags DONT_FRAGMENT
ICMP echo_request checksum 0xebee
 /etc/vpp/startup.confのapi-trace
をonに編集
api-trace {
on
}
vpp# trace add af-packet-input 10
 traceを有効化
vpp# clear trace
 trace結果をクリア
 trace結果の確認
おわり
ご清聴、ありがとうございました
m(_ _)m
19

Contenu connexe

Tendances

Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケットTakaaki Hoyo
 
大規模DCのネットワークデザイン
大規模DCのネットワークデザイン大規模DCのネットワークデザイン
大規模DCのネットワークデザインMasayuki Kobayashi
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwardingMasakazu Asama
 
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...Tomoya Hibi
 
閉域網接続の技術入門
閉域網接続の技術入門閉域網接続の技術入門
閉域網接続の技術入門Masayuki Kobayashi
 
TCAMのしくみ
TCAMのしくみTCAMのしくみ
TCAMのしくみogatay
 
さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築Tomocha Potter
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化Takuya ASADA
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越Kentaro Ebisawa
 
NFVアプリケーションをOpenStack上で動かす為に - OpenStack最新情報セミナー 2017年7月
NFVアプリケーションをOpenStack上で動かす為に - OpenStack最新情報セミナー 2017年7月NFVアプリケーションをOpenStack上で動かす為に - OpenStack最新情報セミナー 2017年7月
NFVアプリケーションをOpenStack上で動かす為に - OpenStack最新情報セミナー 2017年7月VirtualTech Japan Inc.
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめTetsuya Hasegawa
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!Hirotaka Sato
 
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27Kentaro Ebisawa
 
HPCユーザが知っておきたいTCP/IPの話 ~クラスタ・グリッド環境の落とし穴~
HPCユーザが知っておきたいTCP/IPの話 ~クラスタ・グリッド環境の落とし穴~HPCユーザが知っておきたいTCP/IPの話 ~クラスタ・グリッド環境の落とし穴~
HPCユーザが知っておきたいTCP/IPの話 ~クラスタ・グリッド環境の落とし穴~Ryousei Takano
 

Tendances (20)

Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
大規模DCのネットワークデザイン
大規模DCのネットワークデザイン大規模DCのネットワークデザイン
大規模DCのネットワークデザイン
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwarding
 
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
 
Multi Chassis LAG for Cloud builders
Multi Chassis LAG for Cloud buildersMulti Chassis LAG for Cloud builders
Multi Chassis LAG for Cloud builders
 
閉域網接続の技術入門
閉域網接続の技術入門閉域網接続の技術入門
閉域網接続の技術入門
 
TCAMのしくみ
TCAMのしくみTCAMのしくみ
TCAMのしくみ
 
さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
NFVアプリケーションをOpenStack上で動かす為に - OpenStack最新情報セミナー 2017年7月
NFVアプリケーションをOpenStack上で動かす為に - OpenStack最新情報セミナー 2017年7月NFVアプリケーションをOpenStack上で動かす為に - OpenStack最新情報セミナー 2017年7月
NFVアプリケーションをOpenStack上で動かす為に - OpenStack最新情報セミナー 2017年7月
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
AS45679 on FreeBSD
AS45679 on FreeBSDAS45679 on FreeBSD
AS45679 on FreeBSD
 
3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
 
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
 
HPCユーザが知っておきたいTCP/IPの話 ~クラスタ・グリッド環境の落とし穴~
HPCユーザが知っておきたいTCP/IPの話 ~クラスタ・グリッド環境の落とし穴~HPCユーザが知っておきたいTCP/IPの話 ~クラスタ・グリッド環境の落とし穴~
HPCユーザが知っておきたいTCP/IPの話 ~クラスタ・グリッド環境の落とし穴~
 

En vedette

いんふらフレンズ
いんふらフレンズいんふらフレンズ
いんふらフレンズMiho Yamamoto
 
物理ネットワーク受け入れテストの自動化を考える
物理ネットワーク受け入れテストの自動化を考える物理ネットワーク受け入れテストの自動化を考える
物理ネットワーク受け入れテストの自動化を考えるskipping classes
 
ネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらいネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらいnpsg
 
自動化と画面を考えてみました
自動化と画面を考えてみました自動化と画面を考えてみました
自動化と画面を考えてみましたskipping classes
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよnpsg
 
CDP Indicator
CDP IndicatorCDP Indicator
CDP Indicatornpsg
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSnpsg
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Tomoya Hibi
 
ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会Tomoya Hibi
 
API イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMXAPI イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMXnpsg
 
Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析npsg
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたnpsg
 
ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視npsg
 
Telemetry事始め
Telemetry事始めTelemetry事始め
Telemetry事始めnpsg
 
NetOpsCoding#5 introduction
NetOpsCoding#5 introductionNetOpsCoding#5 introduction
NetOpsCoding#5 introductionTaiji Tsuchiya
 
Ansible x napalm x nso 解説・比較パネルディスカッション nso
Ansible x napalm x nso 解説・比較パネルディスカッション nsoAnsible x napalm x nso 解説・比較パネルディスカッション nso
Ansible x napalm x nso 解説・比較パネルディスカッション nsoAkira Iwamoto
 
ネットワーク運用とIoT
ネットワーク運用とIoTネットワーク運用とIoT
ネットワーク運用とIoTcloretsblack
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyYahoo!デベロッパーネットワーク
 

En vedette (20)

いんふらフレンズ
いんふらフレンズいんふらフレンズ
いんふらフレンズ
 
物理ネットワーク受け入れテストの自動化を考える
物理ネットワーク受け入れテストの自動化を考える物理ネットワーク受け入れテストの自動化を考える
物理ネットワーク受け入れテストの自動化を考える
 
ネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらいネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらい
 
自動化と画面を考えてみました
自動化と画面を考えてみました自動化と画面を考えてみました
自動化と画面を考えてみました
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
CDP Indicator
CDP IndicatorCDP Indicator
CDP Indicator
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaS
 
Contiv
ContivContiv
Contiv
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
 
ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会
 
API イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMXAPI イントロダクション APIC-EM, Prime Infrastructure & CMX
API イントロダクション APIC-EM, Prime Infrastructure & CMX
 
Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみた
 
ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視
 
Ansible npstudy-shtsuchi
Ansible npstudy-shtsuchiAnsible npstudy-shtsuchi
Ansible npstudy-shtsuchi
 
Telemetry事始め
Telemetry事始めTelemetry事始め
Telemetry事始め
 
NetOpsCoding#5 introduction
NetOpsCoding#5 introductionNetOpsCoding#5 introduction
NetOpsCoding#5 introduction
 
Ansible x napalm x nso 解説・比較パネルディスカッション nso
Ansible x napalm x nso 解説・比較パネルディスカッション nsoAnsible x napalm x nso 解説・比較パネルディスカッション nso
Ansible x napalm x nso 解説・比較パネルディスカッション nso
 
ネットワーク運用とIoT
ネットワーク運用とIoTネットワーク運用とIoT
ネットワーク運用とIoT
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
 

Similaire à VPP事始め

Openvswitch vps 20120429資料
Openvswitch vps 20120429資料Openvswitch vps 20120429資料
Openvswitch vps 20120429資料Daisuke Nakajima
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419エイシュン コンドウ
 
「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例SAKURA Internet Inc.
 
Nsegソフトウェアルータvyatta
NsegソフトウェアルータvyattaNsegソフトウェアルータvyatta
Nsegソフトウェアルータvyattajem 3
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~npsg
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_finalKazumasa Ikuta
 
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitchkazuyas
 
Opencontraildays2014dist 140514051248-phpapp01
Opencontraildays2014dist 140514051248-phpapp01Opencontraildays2014dist 140514051248-phpapp01
Opencontraildays2014dist 140514051248-phpapp01ozkan01
 
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Tomoya Hibi
 
ミドクラ様講演 OpenStack最新情報セミナー 2014年4月
ミドクラ様講演 OpenStack最新情報セミナー 2014年4月ミドクラ様講演 OpenStack最新情報セミナー 2014年4月
ミドクラ様講演 OpenStack最新情報セミナー 2014年4月VirtualTech Japan Inc.
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Sho Shimizu
 
近頃のDockerネットワーク
近頃のDockerネットワーク近頃のDockerネットワーク
近頃のDockerネットワークYuji Oshima
 
OpenStackネットワーキング管理者入門 - OpenStack最新情報セミナー 2014年8月
OpenStackネットワーキング管理者入門 - OpenStack最新情報セミナー 2014年8月OpenStackネットワーキング管理者入門 - OpenStack最新情報セミナー 2014年8月
OpenStackネットワーキング管理者入門 - OpenStack最新情報セミナー 2014年8月VirtualTech Japan Inc.
 
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
第20回 OpenStack勉強会 Neutron Deep Dive - DVR第20回 OpenStack勉強会 Neutron Deep Dive - DVR
第20回 OpenStack勉強会 Neutron Deep Dive - DVRToru Makabe
 
JOSUG 9th Study
JOSUG 9th StudyJOSUG 9th Study
JOSUG 9th Studyirix_jp
 
『WAN SDN Controller NorthStarご紹介 & デモ』
『WAN SDN Controller NorthStarご紹介 & デモ』『WAN SDN Controller NorthStarご紹介 & デモ』
『WAN SDN Controller NorthStarご紹介 & デモ』Juniper Networks (日本)
 
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...VirtualTech Japan Inc.
 

Similaire à VPP事始め (20)

Openvswitch vps 20120429資料
Openvswitch vps 20120429資料Openvswitch vps 20120429資料
Openvswitch vps 20120429資料
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
 
「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例
 
Nsegソフトウェアルータvyatta
NsegソフトウェアルータvyattaNsegソフトウェアルータvyatta
Nsegソフトウェアルータvyatta
 
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
WAN SDN 実践入門! ~ OpenDayLightのPCEP/BGPに触れてみる ~
 
DPDKを拡張してみた話し
DPDKを拡張してみた話しDPDKを拡張してみた話し
DPDKを拡張してみた話し
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_final
 
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitch
 
Open contraildays2014
Open contraildays2014Open contraildays2014
Open contraildays2014
 
Opencontraildays2014dist 140514051248-phpapp01
Opencontraildays2014dist 140514051248-phpapp01Opencontraildays2014dist 140514051248-phpapp01
Opencontraildays2014dist 140514051248-phpapp01
 
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
 
P2Pって何?
P2Pって何?P2Pって何?
P2Pって何?
 
ミドクラ様講演 OpenStack最新情報セミナー 2014年4月
ミドクラ様講演 OpenStack最新情報セミナー 2014年4月ミドクラ様講演 OpenStack最新情報セミナー 2014年4月
ミドクラ様講演 OpenStack最新情報セミナー 2014年4月
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像
 
近頃のDockerネットワーク
近頃のDockerネットワーク近頃のDockerネットワーク
近頃のDockerネットワーク
 
OpenStackネットワーキング管理者入門 - OpenStack最新情報セミナー 2014年8月
OpenStackネットワーキング管理者入門 - OpenStack最新情報セミナー 2014年8月OpenStackネットワーキング管理者入門 - OpenStack最新情報セミナー 2014年8月
OpenStackネットワーキング管理者入門 - OpenStack最新情報セミナー 2014年8月
 
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
第20回 OpenStack勉強会 Neutron Deep Dive - DVR第20回 OpenStack勉強会 Neutron Deep Dive - DVR
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
 
JOSUG 9th Study
JOSUG 9th StudyJOSUG 9th Study
JOSUG 9th Study
 
『WAN SDN Controller NorthStarご紹介 & デモ』
『WAN SDN Controller NorthStarご紹介 & デモ』『WAN SDN Controller NorthStarご紹介 & デモ』
『WAN SDN Controller NorthStarご紹介 & デモ』
 
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenSta...
 

VPP事始め

  • 2. 自己紹介  佐藤 哲大(tetz)  某ネットワークベンダで、SDN(っぽい)仕事をしてます  ネットワークプログラマビリティ勉強会の企画、運営をしてます http://network-programmability.connpass.com/ 2
  • 3. FD.io  FD.io  Fast Data – Input/Output に関 連する複数のプロジェクトを運営する Apache Foundation傘下のプロ ジェクト  VPPの他に、VPPの管理、VPPを用 いたユースケース、Testing等のプロ ジェクトも管理 3 https://wiki.fd.io/view/VPP/Features
  • 4. FD.io VPP  VPP  FD.ioの中核プロジェクト  高性能かつ高機能な仮想スイッチ&ルータ  DPDKを活用し、ユーザー空間のアプリケー ションとして動作 4
  • 5. Vector Packet Processing  通常のコンピューティング処理にないパケット処理に 固有の難しさ(Instructionの観点から)  10Gbps ラインレート=14.88Mfps = 67nsec per フレーム  2GHz CPUコアのクロックサイクル= 0.5 nsec  つまり、1フレームあたり134クロックサイクルの余地  DRAM にアクセスしてしまうと、CPU サイクルがおよそ 60ns ストールしてしまう  Scalar Packet Processing  パケット毎に処理  割り込み  コールスタックのトラバース(一連の機能を適用)  ACL, NAT, QoS, VXLAN, etc  Punt, drop, or rewrite/forward  問題点  I-cacheのスラッシング  パケット毎に同様のI-cacheミスを繰り返す  I-cacheを大きくしない限り、上記の問題は解決しない  Vector Packet Processing  複数のパケットを同時に処理  先頭のパケットがI-cacheをWarm up  後続のパケットにはI-cacheにHit! 5 http://stackoverflow.com/questions/4087280/approximate-cost-to-access-various- caches-and-main-memory
  • 7. インストール 7 $ export UBUNTU="trusty" $ export RELEASE=".stable.1609" $ sudo rm /etc/apt/sources.list.d/99fd.io.list $ echo "deb [trusted=yes] https://nexus.fd.io/content/repositories/fd.io$RELEASE.ubuntu.$UBUNTU.main/ ./" | sudo tee -a /etc/apt/sources.list.d/99fd.io.list $ sudo apt-get update $ sudo apt-get install vpp vpp-dpdk-dkms  Yum、Aptなどのパッケージマネージャからインストールできる https://wiki.fd.io/view/VPP/Installing_VPP_binaries_from_packages (Ubuntu14.04の例)
  • 8. コマンドライン接続 8 unix { ... cli-listen localhost:5002 ... }  /etc/vpp/startup.confに以下のように書いておくと、telnetでVPPのコマンドラインに接続できる $ telnet localhost 5002 Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. _______ _ _ _____ ___ __/ __/ _ (_)__ | | / / _ / _ _/ _// // / / / _ | |/ / ___/ ___/ /_/ /____(_)_/___/ |___/_/ /_/ vpp# $ sudo vppctl show ver vpp v17.04-rc0~227-g614ac5d built by tetsusat on ubuntu at Tue Feb 7 08:43:33 JST 2017  もしくは、ホストLinux上で、vppctlに続けてVPPのコマンド実行できる
  • 9. 接続方法  外部に接続するVPPインターフェイスの種類 9 接続方法 ユースケース(たぶん) DPDK PDM(w/ Intel NIC, VMXNET3) ホストマシンのインターフェイスの利用 vhost KVMとの接続 veth コンテナとの接続 tap ホストマシンのLinuxサービス(DHCP等)を利用
  • 10. DPDKの設定 10 $ sudo lshw -class network -businfo Bus info Device Class Description ==================================================== pci@0000:02:00.0 eth1 network 82545EM Gigabit Ethernet Controller (Copper) pci@0000:02:01.0 eth2 network 82545EM Gigabit Ethernet Controller (Copper) pci@0000:03:00.0 eth0 network VMXNET3 Ethernet Controller  DPDK対応NICのPCI IDを確認 $ sudo ifconfig eth1 down $ sudo ifconfig eth2 down $ sudo ip addr flush dev eth1 $ sudo ip addr flush dev eth2  インターフェイスの設定をクリア
  • 11. DPDK の設定(つづき) dpdk { socket-mem 1024 dev 0000:02:00.0 dev 0000:02:01.0 }  /etc/vpp/startup.confにdpdkに関する設定を追加して、VPPを起動  socket-memはパケットバッファ、hugepagesからアロケートされる  socket-memは明示的に指定しないと、CPUソケット(NUMAノード)毎に512Mを確保  VPP側では、GigabitEthernetX/X/Xとして認識される vpp# show int Name Idx State Counter Count GigabitEthernet2/0/0 1 down GigabitEthernet2/1/0 2 down ...
  • 12. vhostの設定 vpp# create vhost socket /tmp/sock0.sock server  vhost socketを作成 vpp# show int Name Idx State Counter Count VirtualEthernet0/0/0 3 down ... <qemu:commandline> <!-- vhost-user --> <qemu:arg value='-chardev'/> <qemu:arg value='socket,id=char0,path=/tmp/sock0.sock’/> <qemu:arg value=’-netdev’/> <qemu:arg value=’vhost-user,id=mynet,chardev=char0'/> <qemu:arg value='-device'/> <qemu:arg value='virtio-net-pci,netdev=mynet,mac=52:54:00:01:00:33'/> <qemu:arg value='-object'/> <qemu:arg value='memory-backend-file,id=mem,size=16384M,mem-path=/run/hugepages/kvm,share=on'/> <qemu:arg value='-numa'/> <qemu:arg value='node,memdev=mem'/> <qemu:arg value='-mem-prealloc'/> </qemu:commandline>  livbirt XML定義ファイルでvhost-userの設定(XRvの場合)  VPP側では VirtualEthernet0/0/Xと認識される
  • 13. vethの設定 $ sudo ip link add vpp1 type veth peer name veth1  ホストでvpp1とveth1というvethペアを作成 vpp# create host-interface name vpp1 host-vpp1  VPP側ではhost-vpp1と認識される  veth1をコンテナ等に接続 vpp# show int Name Idx State Counter Count host-vpp1 4 down …  VPP側ではhost-vpp1と認識される
  • 14. tapの設定 vpp# tap connect taphost tap-0  taphostというtapインターフェイスを作成 vpp# show int Name Idx State Counter Count tap-0 5 down ...  VPP側ではtap-Xと認識される  ホスト側ではtaphostとして認識される $ ip link ... 7: taphost: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000 link/ether 4e:00:94:42:8d:35 brd ff:ff:ff:ff:ff:ff
  • 15. デモ L2設定 15 vpp# create host-interface name vpp1 host-vpp1 vpp# set interface state host-vpp1 up vpp# set interface l2 bridge host-vpp1 1 vpp# create host-interface name vpp2 host-vpp2 vpp# set interface state host-vpp2 up vpp# set interface l2 bridge host-vpp2 1  VPPにvethを認識させ、L2ポートとしてBridge Domain 1に接続 L3ポートL2ポート Bridge Domain 1 C1 C2 veth pair veth pair eth0 eth0 Network Namespace: default Network Namespace: ns1 Network Namespace: ns2 10.0.0.1 10.0.0.2 host-vpp1 host-vpp2
  • 16. デモ L3設定 16 vpp# create loopback interface loop0 vpp# set interface l2 bridge loop0 1 bvi vpp# set interface state loop0 up vpp# set interface ip address loop0 10.0.0.254/24 vpp# create host-interface name vpp3 host-vpp3 vpp# set interface state host-vpp3 up vpp# set interface ip address host-vpp3 10.0.1.254/24  Bridge Domain 1 に BVI インターフェイスを設定  VPPにvethを認識させ、L3ポートとして設定 VPP Router L3ポートL2ポート Bridge Domain 1 C1 C2 C3 veth pair veth pair veth pair eth0 eth0 eth0 Network Namespace: default Network Namespace: ns1 Network Namespace: ns2 Network Namespace: ns3 10.0.0.254 10.0.1.254 10.0.0.1 10.0.0.2 10.0.1.1 host-vpp1 host-vpp2 host-vpp3 loop0(bvi)
  • 17. 落穂拾い 17 unix { ... startup-config /home/userid/setup.cfg ... }  起動時に(仮想スイッチ&ルータとしての)VPPの設定を読み込ませるに は、/etc/vpp/startup.confのunix句で設定ファイルを指定
  • 18. 落穂拾い(cont.) 18 vpp# show trace ------------------- Start of thread 0 vpp_main ------------------- Packet 1 00:13:25:316687: af-packet-input af_packet: hw_if_index 1 next-index 1 tpacket2_hdr: status 0x1 len 98 snaplen 98 mac 66 net 80 sec 0x5890503a nsec 0x22819a55 vlan 0 00:13:25:316712: ethernet-input IP4: 06:28:d8:1d:3c:f2 -> 4a:74:64:4d:bd:0a 00:13:25:316721: l2-input l2-input: sw_if_index 1 dst 4a:74:64:4d:bd:0a src 06:28:d8:1d:3c:f2 00:13:25:316725: l2-learn l2-learn: sw_if_index 1 dst 4a:74:64:4d:bd:0a src 06:28:d8:1d:3c:f2 bd_index 1 00:13:25:316728: l2-fwd l2-fwd: sw_if_index 1 dst 4a:74:64:4d:bd:0a src 06:28:d8:1d:3c:f2 bd_index 1 00:13:25:316730: l2-output l2-output: sw_if_index 2 dst 4a:74:64:4d:bd:0a src 06:28:d8:1d:3c:f2 00:13:25:316733: host-vpp2-output host-vpp2 IP4: 06:28:d8:1d:3c:f2 -> 4a:74:64:4d:bd:0a ICMP: 10.0.0.1 -> 10.0.0.2 tos 0x00, ttl 64, length 84, checksum 0x476a fragment id 0xdf3c, flags DONT_FRAGMENT ICMP echo_request checksum 0xebee  /etc/vpp/startup.confのapi-trace をonに編集 api-trace { on } vpp# trace add af-packet-input 10  traceを有効化 vpp# clear trace  trace結果をクリア  trace結果の確認