OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK -...
-
Upload
virtualtech-japan-inc -
Category
Technology
-
view
2.774 -
download
2
Transcript of OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK -...
OpenStack Kilo with 6Wind VA
High-Performance Networking Using DPDK
2016年3月2日ネットワンシステムズ株式会社東日本事業本部 第5営業部技術第4チーム岡 雅善
© NetOneSystems Co., Ltd. All rights reserved.
1
Agenda
2
Agenda
• DPDK
• 6WIND– 6WIND
– Simple Performance Test
• POC Evaluation Result– TCP Performance
– UDP Performance
– CPU Load
• Summary
© NetOneSystems Co., Ltd. All rights reserved.
3
DPDK
4
ネットワーク高速化への課題
IAサーバで、ネットワークスイッチと同じ感覚で64byteショートフレームで 10Gbps, 40Gbps だせる?
仮想化基盤でのネットワーキングへの期待
NICカード: 10G ⇒ 40G ⇒ 100G
5
ネットワーク高速化への課題
L2 64byte : 10Gbps ⇒ 14.88Mpps ⇒ 67.2 ns/packetCPU 3.0GHz -> 67.2 ns -> 201.6 cycle 程度
L2 64byte : 40Gbps ⇒ 59.52Mpps ⇒ 16.8 ns/packetCPU 3.0Ghz -> 16.8 ns -> 50.4 cycle 程度
より少ないサイクルでの処理が求められる
システムコール、ハードウェア割り込み など様々なオーバーヘッドを持つ
既存の Linux Kernel の 処理サイクルでは限界
6
DPDK(Data Plane Development Kit) とは?
NIC
Kernel Space
User Space
Application
System CallContext Switching
Packet CopyingInterrupt handling
NIC
Kernel Space
User Space
Application
DPDK Library
Bypass
Kernel
Overhead
• ユーザスペースのアプリケーションから、直接 ネットワークパケットを高速処理できるようにする為のソフトウェアライブラリとドライバのセット
• Linux Kernelにおける様々なオーバーヘッドをバイパスすることが可能
一般的なアプリケーションの通信 DPDKを組み込んだ場合
uio/vfio
CPU affinity
hugetlbfs
PMD
7
主なDPDKライブラリとドライバ
NIC
Kernel Space
User Space
DPDK Application
DPDK Library
uio/vfio
CPU affinity
hugetlbfs
Poll Mode Driver (PMD)
Packet Flow Classification
Buffer Management
DPDK EAL
Queue/Ring FunctionsDPDK Application
DPDK Application
• バッファ・メモリマネージメント
– 固定バッファを事前に用意することで、バッファの確保・解放する処理を減らす
– メモリプール(HugePageメモリ)からメモリを割り当てる
• キューマネージャー
– ロックレスなキューを使用することにより処理の待ち時間を防ぐ
• フロークラシフィケーション
– ハッシュ計算を元にフロー毎にパケット処理を割り振る
• Poll Mode Driver (PMD)
– 専用のデバイスドライバー
– ユーザスペースより、占有したCPUコアに常駐して動作、NICにパケットが到達するのを常に監視
8
明示的なリソースの割り当て
• CPUコアの占有によるデータプレーンのパフォーマンスの向上
• コントロールプレーン、データプレーンへの適切なリソース割り当て
Linux Data
Plane
Data
Plane
Kernel Kernel Kernel Kernel Kernel DPDK DPDKKernel
Linux
Processor 0 Processor 1
C1 C2 C3 C4 C1 C2 C3 C4
Data PlaneControl Plane
LinuxLinux LinuxLinux
用途に応じてスケールが可能
© NetOneSystems Co., Ltd. All rights reserved.
9
6WIND
10
6WIND Introduction
設立 2000年
本社 フランス
拠点 アメリカ 中国 韓国 日本
社員 80人以上
事業内容
• 独立系のソフトウェア会社
• パケットプロセッシングソフトウェアを開発する会社
開発拠点はフランス
• 2007年に6WINDGateソフトウェアを提供開始
プロダクト
• 元々は6WINDGateソフトウェアのソースコードをOEMしていた会社
• その後、ソースコードをパッケージ化して、バイナリー提供を開始
• 2014年12月に Virtual Accelerator を販売開始
• 2015年3月に Turbo Appliances(TurboRouter,TurboIPsec)を販売開始
Source: http://www.6wind.com/products/
11
Intel DPDK and 6WIND
• Community (dpdk.org)
• Extension (6WIND)
6WIND は 下記を提供します。
機能、パフォーマンスの拡張
フルコマーシャルサポートとメンテナンス
最新のDPDKをサポートするバイナリパッケージ
12
6WIND Speed Series
• 6WIND Turbo Router
ハイパフォーマンスソフトウェアルータ
ベアメタル環境 または仮想マシンとしてデプロイ可能
• 6WIND Turbo IPsec
Turbo Router + IPSec 機能
高いIPSecパフォーマンスの提供
• 6WIND Virtual Accelerator
Accelerator for Virtual Switching (OVS, Linux bridge) and Networking
Source: http://www.6wind.com/products/
13
6WIND Virtual Accelerator
Virtual Accelerator - Benefit Accelerator for Virtual Switching (OVS, Linux bridge) and Networking
Intel DPDK as a basis technology
Linux および KVM におけるパフォーマンスのボトルネックを解決する
Avago/Emulex, Intel and Mellanox などマルチベンダーNICサポート
Multi Networking function (VXLAN/VLAN/GRE, Filtering/NAT, IP forwarding etc.) サポート
Source: http://www.6wind.com/products/6wind-virtual-accelerator/
14
Architecture
15
OpenStack and Fast-Path
physical nic
Kernel
User Space
Virtio
/ Fast vNIC
Virtio
/ Fast vNIC
Guest OS Guest OS
openvswitch
Control Plane
openvswitch
kernel module
NIC PMD
6WIND Virtual Accelerator
Fast-PathFlow Update
Neutron Plugin Agent
Can be using MultiQueue
Can be applying Security-Group for VM
Can be tunneling by VXLAN, VLAN, GRE
Flow Update
Application Application
vNIC PMD vNIC PMD
16
br-tun
OpenStack and Fast-Path
eth0
Guest OS
Application
tapXX
qvbXX
qbrXX
br-int
qvoXX
patch-tun
patch-int
eth1
eth0
Guest OS
Application
tapYY
qvbYY
qbrYY
qvoYY
Compute Node
6WIND Virtual Accelerator
Fast-Path
PMD PMD
PMD
Fast-Path は OVS Transparent として適用できる為、OVS上の論理的な構成は変わりませんが、実際には、Fast-Path がパケットを処理します。
17
6Wind Virtual Accelerator – Key Advantage
・OVS DPDK では OVS の機能のみサポートしています。6Wind VA では他にも様々なプロトコルをサポートしています。
例えば、Filtering, NETNS, NAT, Tunneling IPinIPVXLAN, VLAN, GRE, NVGRE in OVS, Linux bridge
・特定の Neutron plugin は必要としません。OVSのpluginのみで、パフォーマンスを必要とするコンピュートノードや、ネットワークノードに対してのみ、選択的に適用することができます。
・他のSDNコントローラ(Opendaylight, 他) の場合でも依存性なく適用できます。
・フルコマーシャルサポート・メンテナンスを提供します。
© NetOneSystems Co., Ltd. All rights reserved.
18
Simple Performance Test
19
Bidirectional Traffic Pattern
Traffic Generator
Fedora 20
OpenvSwitch
10GE 10GE
Traffic Generator
Fedora 20
Fast-Path
10GE 10GE
OVS Performance 6WIND Performance
20
Test Environment
• Server
– Dual socket CPUs in Intel(R) Xeon(R) CPU E5-2667 v3 @ 3.20GHz
– NIC cards are Intel 82599ES.
– Fedora 20
– Kernel used 3.18.9-100
• Tester
– IXIA XM12 with 10Gigabit Ethernet 2Ports
21
RFC2544 Performance Test (Bidirectional)
Packet/sec Performance
Frame
Size
[Byte]
Intel Xeon(R) CPU E5-2667 v3 and Intel 82599ES 10G NIC
10G Wire-Rate
[Packet/sec]
OVS
[Packet/sec]
6WIND VA
[Packet/sec]
6WIND VA
[Packet/sec]
- - 1 Cores 2 Cores
64 29,761,905 1,800,773 10,217,285 21,758,357
128 16,891,892 1,796,565 10,302,328 16,394,849
256 9,057,971 1,770,545 9,054,425 9,054,681
512 4,699,248 1,630,429 4,697,648 4,697,800
1024 2,394,636 1,622,191 2,393,906 2,394,040
1280 1,923,077 1,622,791 1,922,527 1,922,596
1518 1,625,488 1,595,344 1,625,035 1,625,084
22
Percentage to 10G wire-rate
RFC2544 Performance Test (Bidirectional)
Frame
Size
[Byte]
Intel Xeon(R) CPU E5-2667 v3 and
Intel 82599ES 10G NIC
OVS
[%]
6WIND VA
[%]
6WIND VA
[%]
- 1 Cores 2 Cores
64 6.051 34.330 73.108
128 10.636 60.990 97.058
256 19.547 99.961 99.964
512 34.696 99.966 99.969
1024 67.743 99.970 99.975
1280 84.385 99.971 99.975
1518 98.146 99.972 99.975
23
[Supp.] 6WIND Virtual Accelerator - Performance
• 6WIND Virtual Accelerator improves standard Linux VM forwarding performance by 8x,
using 3x less hypervisor cores.
• On Intel’s Xeon E5-2600 v2 family, 6WIND Virtual Accelerator provides 20 Gbps of Open vSwitch (OVS) bandwidth per core, scaling linearly with the number of cores.
Source: http://www.6wind.com/products/6wind-virtual-accelerator/
© NetOneSystems Co., Ltd. All rights reserved.
24
POC Evaluation Result
25
POC Topology
Mellanox SW
Controller / Network Node Compute Node 1 Compute Node 2
Guest Instance
Mellanox NIC
OVS
Guest Instance
Mellanox NIC
Fast-Path Fast-Path
VM VM VM VM
OVS
Mellanox NIC
VXLAN
6Wind VA is enabled
Evaluation target
OVS
26
Test Environment
Physical Server- HP ProLiant DL360 Gen9
- CPU: Intel Xeon E5-2690v3 2.60GHz 1P/12C x2 Dual
- Memory: DDR4 88GB
- NIC: Mellanox ConnectX3-Pro 40G
Software Version- Ubuntu Server 14.04.3 LTS / Kernel 3.13.0-63-generic
- OpenStack Kilo
- 6WIND Virtual Accelerator Release 1.2.0
- 6WIND Application Note OpenStack Support 1.1.6
- その他- Libvirt 1.2.12-0ubuntu14.2~cloud0
- Qemu 1:2.2+dfsg-5expubuntu9.3~cloud0
- OpenvSwitch 2.3.2.5ea61a-6windgate.4.9.0
27
“vcpu_pin_set” in nova.conf
パフォーマンスの理由により、仮想マシンの vcpu が Fast-Path の使用する CPU にピニングされるべきではありません。これを回避する為、nova.conf において、”vcpu_pin_set” オプションを設定する必要があります。Intel Xeon E5-2690v3 dual socket は ハイパースレッディングにより 48 vcpus が使用可能です。下記の例では、この内 Fast-Path が使用する 8,9,10,11 の vcpu を除外しています。
下記は Intel Xeon E5-2690v3 x2 sockets の場合の vCPU の論理図です。真ん中の数字が vCPUの番号。
socket 0 socket 1
0 24 1 25
Core 0 Core 1
2 26 3 27
Core 2 Core 3
4 28 5 29
Core 4 Core 5
6 30 7 31
Core 6 Core 7
8 32 9 33
Core 8 Core 9
10 34 11 35
Core 10 Core 11
12 36 13 37
Core 0 Core 1
14 38 15 39
Core 2 Core 3
16 40 17 41
Core 4 Core 5
18 42 19 43
Core 6 Core 7
20 44 21 45
Core 8 Core 9
22 46 23 47
Core 10 Core 11
[DEFAULT]
vcpu_pin_set = 0-47,^8,9,10,11
Example) /etc/nova/nova.conf
For Fast-PathFor Fast-Path
© NetOneSystems Co., Ltd. All rights reserved.
28
TCP Performance
29
Test Method (TCP)
KVM
Compute Node-2
OVS
VXLAN
VM VM VM VM
KVM
Compute Node-1
OVS
VM VM VM VM
Image Ubuntu 14.04.3 cloud image
vCPUs 1
Memory 2048
Hugepages 1024 x 2048Kbytes
iperf3 iperf 3.0.11
1. Deploy VMs(Max:16) on each node.
2. Execute the iperf3 commands on each VM at the same time.
Sender (iperf3 –c) Receiver (iperf3 –s)
Sender (iperf3 –c)
Receiver (iperf3 –s)
$ iperf3 -c <target-VM> -M 1410 (*MSS:MTU(1450B) – 40B) -P 4 –t 60
$ iperf3 -s
Total 16 VMs Total 16 VMs
30
Test Result (TCP)
MSS=1410 (L3:1450B)
Bandwidth(GBps) - DPDK enabled
0.000
5.000
10.000
15.000
20.000
25.000
30.000
35.000
1-1 2-2 4-4 8-8 16-16
Bandwidth(GBps) DPDK (6Wind VA) - MSS = 1410 (L3:1450B)
Total Average / VM
(Gbps) 1-1 2-2 4-4 8-8 16-16
Total 13.033 24.033 33.090 30.693 30.833
Average / VM 13.033 12.017 8.273 3.837 1.927
The number of parallel VMs
“1-1” is from 1 VM to 1 VM
“16-16” is from 16 VMs to 16 VMs
“Total” is total of all the iperf results
“Average” is “Total” divided by VMs
31
[Supp.] Multi-Queue for Guest-VM
c0 c1 c2 c3
Fast-Path
c0
vNIC
q0
Performance between Guest and Host is limited
Guest
c0 c1 c2 c3
Fast-Path
c0 c1 c2 c3
vNIC
q0
Guest
(1) Single queue (Previous result) (2) Multi queue (Next result)
q1 q2 q3
cX
qX
vcpu
Queue
32
Test Method (TCP and multi-queue: 4 )
KVM
Compute Node-2
OVS
VXLAN
VM VM VM VM
KVM
Compute Node-1
OVS
VM VM VM VM
Image Ubuntu 14.04.3 cloud image
vCPUs 4
Memory 4096
Hugepages 1024 x 2048Kbytes
Multi-queue 4
iperf3 iperf 3.0.11
1. Deploy VMs(Max:16) on each node.
2. Execute the iperf3 commands on each VM at the same time.
Sender (iperf3 –c) Receiver (iperf3 –s)
Sender (iperf3 –c)
Receiver (iperf3 –s)
$ iperf3 -c <target-VM> -M 1410 (*MSS:MTU(1450B) – 40B) -P 4 –t 60 –p 5201
$ iperf3 -c <target-VM> -M 1410 (*MSS:MTU(1450B) – 40B) -P 4 –t 60 –p 5202
$ iperf3 -c <target-VM> -M 1410 (*MSS:MTU(1450B) – 40B) -P 4 –t 60 –p 5203
$ iperf3 -c <target-VM> -M 1410 (*MSS:MTU(1450B) – 40B) -P 4 –t 60 –p 5204
$ iperf3 –s –p 5201
$ iperf3 –s –p 5202
$ iperf3 –s –p 5203
$ iperf3 –s –p 5204
Total 4 VMs Total 4 VMs
33
MSS=1410 (L3:1450B)
Bandwidth(GBps) - DPDK enabled
Multi-Queue for Guest-VM: 4 Queues
0.000
5.000
10.000
15.000
20.000
25.000
30.000
35.000
1-1 2-2 4-4 - -
Bandwidth(GBps) DPDK (6Wind VA) - MSS = 1410 (L3:1450B)
Total Average / VM
(Gbps) 1-1 2-2 4-4 - -
Total 32.767 31.403 27.943
Average / VM 32.767 15.702 6.986
Test Result (TCP and multi-queue: 4 )
The number of parallel VMs
“1-1” is from 1 VM to 1 VM
“16-16” is from 16 VMs to 16 VMs
“Total” is total of all the iperf results
“Average” is “Total” divided by VMs
© NetOneSystems Co., Ltd. All rights reserved.
34
UDP Performance
35
UDP Performance with standard OVS
36
Test Method (UDP, L2-length: 64-1468)
KVM
Compute Node-2
OVS
VXLAN
VM VM VM VM
KVM
Compute Node-1
OVS
VM VM VM VM
Image Ubuntu 14.04.3 cloud image
vCPUs 1
Memory 2048
Hugepages 1024 x 2048Kbytes
iperf3 iperf 3.0.11
1. Deploy VMs(Max:16) on each node.
2. Execute the iperf3 commands on each VM at the same time.
Sender (iperf3 –c) Receiver (iperf3 –s)
Sender (iperf3 –c)
Receiver (iperf3 –s)
$ iperf3 -c <target-VM> -u -l (L2-length: 64-1468) –b 40G -P 4 –t 60
$ iperf3 -s
Total 16 VMs Total 16 VMs
37
Test Result (UDP, L2-length: 64-1468)
Total L1 Bandwidth(MBps) - DPDK (6Wind VA)
L2 (byte) 1-1 2-2 4-4 8-8 16-16
64 200.9 379.5 1033.0 3348.2 2702.6
128 315.1 647.9 1995.9 5406.0 4509.5
256 543.5 1425.6 4044.3 9276.6 8555.6
512 948.1 2252.4 7754.0 12164.1 12175.0
1024 2290.6 4096.4 13880.4 26741.6 21849.7
1280 2299.1 5535.0 21424.6 30971.5 26548.9
1468 2700.2 5829.9 18403.2 34090.8 29816.0
Packets / sec - DPDK (6Wind VA)
L2 (byte) 1-1 2-2 4-4 8-8 16-16
64 299,031 564,801 1,537,243 4,982,385 4,021,730
128 266,092 547,253 1,685,707 4,565,851 3,808,740
256 246,160 645,667 1,831,663 4,201,368 3,874,839
512 222,767 529,222 1,821,896 2,858,110 2,860,678
1024 274,259 490,475 1,661,922 3,201,819 2,616,107
1280 221,065 532,212 2,060,053 2,978,029 2,552,782
1468 226,832 489,746 1,545,971 2,863,814 2,504,701
0
5,000
10,000
15,000
20,000
25,000
30,000
35,000
40,000
1-1 2-2 4-4 8-8 16-16
Total L1 Bandwidth(MBps) - DPDK (6Wind VA)
64 128 256 512 1024 1280 1468
0
1,000,000
2,000,000
3,000,000
4,000,000
5,000,000
6,000,000
1-1 2-2 4-4 8-8 16-16
Packets / sec - DPDK (6Wind VA)
64 128 256 512 1024 1280 1468
38
Test Method (UDP and multi queues: 4 )
KVM
Compute Node-2
OVS
VXLAN
VM VM VM VM
KVM
Compute Node-1
OVS
VM VM VM VM
Image Ubuntu 14.04.3 cloud image
vCPUs 4
Memory 4096
Hugepages 1024 x 2048Kbytes
Multi-queue 4
iperf3 iperf 3.0.11
1. Deploy VMs(Max:16) on each node.
2. Execute the iperf3 commands on each VM at the same time.
Sender (iperf3 –c) Receiver (iperf3 –s)
Sender (iperf3 –c)
Receiver (iperf3 –s)
$ iperf3 -c <target-VM> -u -l (L2-length: 64-1468) –b 40G -P 4 –t 60 –p 5201
$ iperf3 -c <target-VM> -u -l (L2-length: 64-1468) –b 40G -P 4 –t 60 –p 5202
$ iperf3 -c <target-VM> -u -l (L2-length: 64-1468) –b 40G -P 4 –t 60 –p 5203
$ iperf3 -c <target-VM> -u -l (L2-length: 64-1468) –b 40G -P 4 –t 60 –p 5204
$ iperf3 –s –p 5201
$ iperf3 –s –p 5202
$ iperf3 –s –p 5203
$ iperf3 –s –p 5204
Total 4 VMs Total 4 VMs
39
Total L1 Bandwidth(MBps) - DPDK (6Wind VA)
Test Result (UDP and multi queues: 4 )
L2 (byte) 1-1 2-2 4-4 - -
64 981.8 1979.2 2673.1
128 1369.9 3200.8 4505.7
256 2724.3 6552.1 7143.3
512 5458.9 11512.0 12850.8
1024 11462.7 23494.1 22421.0
1280 12243.3 29144.4 27833.8
1468 15478.5 30545.3 29848.0
0
5,000
10,000
15,000
20,000
25,000
30,000
35,000
40,000
1-1 2-2 4-4 - -
Total L1 Bandwidth(MBps) - DPDK (6Wind VA)
64 128 256 512 1024 1280 1468
Multi-Queue for Guest-VM: 4 Queues
Packets / sec - DPDK (6Wind VA)
L2 (byte) 1-1 2-2 4-4 - -
64 1,460,987 2,945,310 3,977,764
128 1,157,006 2,703,395 3,805,525
256 1,233,822 2,967,458 3,235,192
512 1,282,625 2,704,896 3,019,454
1024 1,372,454 2,812,995 2,684,509
1280 1,177,241 2,802,348 2,676,328
1468 1,300,275 2,565,966 2,507,396
0
1,000,000
2,000,000
3,000,000
4,000,000
5,000,000
6,000,000
1-1 2-2 4-4 - -
Packets / sec - DPDK (6Wind VA)
64 128 256 512 1024 1280 1468
Multi-Queue for Guest-VM: 4 Queues
© NetOneSystems Co., Ltd. All rights reserved.
40
CPU Load in UDP case
41
[OpenvSwitch] CPU Load in 16VMs to 16VMs and UDP case
top - 15:17:14 up 55 days, 17:24, 2 users, load average: 6.28, 5.22, 3.57Tasks: 665 total, 7 running, 658 sleeping, 0 stopped, 0 zombie%Cpu(s): 12.1 us, 7.6 sy, 0.0 ni, 72.1 id, 0.0 wa, 0.0 hi, 8.2 si, 0.0 stKiB Mem: 98878056 total, 71717728 used, 27160324 free, 151008 buffersKiB Swap: 33554428 total, 2245140 used, 31309288 free. 55694040 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND11413 libvirt+ 20 0 4037340 656504 11436 S 56.9 0.7 298:29.95 qemu-sys+10561 libvirt+ 20 0 4041704 694912 11436 S 56.4 0.7 222:06.48 qemu-sys+14568 libvirt+ 20 0 4037460 640972 11436 S 55.9 0.6 93:07.44 qemu-sys+11862 libvirt+ 20 0 4038364 667400 11528 S 54.4 0.7 93:35.31 qemu-sys+14303 libvirt+ 20 0 4037116 665300 11436 S 53.5 0.7 96:29.53 qemu-sys+11860 libvirt+ 20 0 4051212 709176 11436 S 53.0 0.7 168:57.77 qemu-sys+14553 libvirt+ 20 0 4045236 696156 11436 S 52.0 0.7 92:50.31 qemu-sys+11416 libvirt+ 20 0 4037608 659444 11436 S 51.5 0.7 163:50.04 qemu-sys+12703 libvirt+ 20 0 4038264 647092 11436 S 51.5 0.7 93:33.22 qemu-sys+14555 libvirt+ 20 0 4050836 689804 11436 S 51.5 0.7 93:39.68 qemu-sys+10872 libvirt+ 20 0 3906912 671808 11436 S 50.5 0.7 220:27.58 qemu-sys+10564 libvirt+ 20 0 4037592 662920 11436 S 50.0 0.7 162:37.55 qemu-sys+14557 libvirt+ 20 0 3961148 702628 11436 S 47.0 0.7 93:37.40 qemu-sys+10876 libvirt+ 20 0 3905872 828092 11436 S 44.5 0.8 374:15.93 qemu-sys+10874 libvirt+ 20 0 4045800 698260 11436 S 42.6 0.7 163:48.48 qemu-sys+14571 libvirt+ 20 0 3905592 682884 11436 S 42.1 0.7 95:19.23 qemu-sys+11431 root 20 0 0 0 0 R 23.8 0.0 63:17.80 vhost-11+11864 root 20 0 0 0 0 S 23.3 0.0 67:05.53 vhost-11+14607 root 20 0 0 0 0 S 22.8 0.0 21:48.53 vhost-14+11432 root 20 0 0 0 0 S 22.3 0.0 161:31.71 vhost-11+10618 root 20 0 0 0 0 S 21.8 0.0 110:59.55 vhost-10+10880 root 20 0 0 0 0 R 21.8 0.0 109:18.56 vhost-10+12707 root 20 0 0 0 0 S 21.8 0.0 22:45.95 vhost-12+14306 root 20 0 0 0 0 R 21.3 0.0 23:02.03 vhost-14+14608 root 20 0 0 0 0 S 21.3 0.0 22:45.85 vhost-14+14609 root 20 0 0 0 0 R 20.8 0.0 22:24.72 vhost-14+11863 root 20 0 0 0 0 S 20.3 0.0 21:14.57 vhost-11+10879 root 20 0 0 0 0 S 17.8 0.0 65:16.49 vhost-10+10912 root 20 0 0 0 0 S 17.3 0.0 241:12.39 vhost-10+14577 root 20 0 0 0 0 R 17.3 0.0 21:14.65 vhost-14+14576 root 20 0 0 0 0 S 16.8 0.0 22:26.62 vhost-14+10617 root 20 0 0 0 0 S 16.3 0.0 66:04.95 vhost-10+
3 root 20 0 0 0 0 S 8.9 0.0 28:17.24 ksoftirq+110 root 20 0 0 0 0 S 7.9 0.0 21:29.97 ksoftirq+
top - 15:17:15 up 55 days, 17:23, 1 user, load average: 8.39, 7.13, 4.73Tasks: 662 total, 17 running, 645 sleeping, 0 stopped, 0 zombie%Cpu(s): 6.1 us, 4.5 sy, 0.0 ni, 58.1 id, 0.0 wa, 0.0 hi, 31.3 si, 0.0 stKiB Mem: 98878056 total, 71094648 used, 27783408 free, 150084 buffersKiB Swap: 33554428 total, 1396352 used, 32158076 free. 55228916 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND11813 root 20 0 0 0 0 R 99.8 0.0 188:52.18 vhost-11+9515 root 20 0 0 0 0 R 99.3 0.0 187:41.66 vhost-95+
10241 root 20 0 0 0 0 R 99.3 0.0 276:43.67 vhost-10+12041 root 20 0 0 0 0 R 99.3 0.0 188:50.07 vhost-12+13196 root 20 0 0 0 0 R 99.3 0.0 84:12.31 vhost-13+13994 root 20 0 0 0 0 R 99.3 0.0 83:32.14 vhost-13+14330 root 20 0 0 0 0 R 99.3 0.0 86:33.68 vhost-14+14402 root 20 0 0 0 0 R 99.3 0.0 84:30.72 vhost-14+15042 root 20 0 0 0 0 R 99.3 0.0 85:34.47 vhost-15+15236 root 20 0 0 0 0 R 99.3 0.0 82:48.04 vhost-15+17608 root 20 0 0 0 0 R 99.3 0.0 83:05.90 vhost-17+8967 root 20 0 0 0 0 R 98.8 0.0 370:10.61 vhost-89+
12136 root 20 0 0 0 0 R 98.8 0.0 272:24.44 vhost-12+13708 root 20 0 0 0 0 R 98.8 0.0 82:46.15 vhost-13+
802143 root 20 0 0 0 0 R 98.8 0.0 238:14.02 vhost-80+12026 root 20 0 0 0 0 R 97.9 0.0 187:24.53 vhost-12+10226 libvirt+ 20 0 4037440 657484 9740 S 31.3 0.7 147:32.09 qemu-sys+13673 libvirt+ 20 0 4046056 663400 9740 S 31.3 0.7 87:54.70 qemu-sys+14324 libvirt+ 20 0 4037488 701672 9740 S 26.4 0.7 90:57.23 qemu-sys+15036 libvirt+ 20 0 3906760 644728 9740 S 24.5 0.7 82:43.38 qemu-sys+12129 libvirt+ 20 0 4037716 640944 9740 S 23.5 0.6 142:02.56 qemu-sys+13169 libvirt+ 20 0 4038620 710328 9828 S 23.5 0.7 84:11.37 qemu-sys+11799 libvirt+ 20 0 4039660 645260 9740 S 22.5 0.7 115:13.27 qemu-sys+15217 libvirt+ 20 0 4037832 651796 9740 S 21.0 0.7 91:54.03 qemu-sys+12023 libvirt+ 20 0 4037712 728828 9828 S 20.1 0.7 121:36.35 qemu-sys+17607 libvirt+ 20 0 4037308 650648 9740 S 19.1 0.7 84:44.68 qemu-sys+2646 root 20 0 2037188 967628 14952 S 18.1 1.0 2916:49 ceph-osd
802140 libvirt+ 20 0 3770856 720772 11604 S 18.1 0.7 81:04.31 qemu-sys+12021 libvirt+ 20 0 4038716 660468 9740 S 16.1 0.7 108:32.67 qemu-sys+9514 libvirt+ 20 0 3905632 695796 9740 S 13.7 0.7 113:09.00 qemu-sys+8927 libvirt+ 20 0 3972612 724940 9740 S 13.2 0.7 178:05.62 qemu-sys+
14400 libvirt+ 20 0 4047116 656852 9740 S 13.2 0.7 80:17.35 qemu-sys+3 root 20 0 0 0 0 S 2.9 0.0 5:24.93 ksoftirq+
365 root 25 5 0 0 0 S 2.9 0.0 347:52.70 ksmd
Sender (iperf3 –c)Receiver (iperf3 –s)
533,690 pps
99% Usage
x 16 Processes
(by all the VMs)
Output of “top”
on the hypervisor
Output of “top”
on the hypervisor
High CPU Load
Low performance
Not so good
42
[Fast-Path] CPU Load in 16VMs to 16VMs and UDP case
Fast path CPU usage:cpu: %busy cycles8: 95% 4984406819: 96% 50053642410: 92% 47939128611: 96% 501856782average cycles/packets received from NIC: 3808 (1980225173/519995)
top - 23:29:15 up 4:55, 3 users, load average: 9.08, 7.39, 6.75Tasks: 692 total, 2 running, 690 sleeping, 0 stopped, 0 zombie%Cpu(s): 22.7 us, 2.9 sy, 0.0 ni, 74.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem: 82362992 total, 63257132 used, 19105860 free, 49528 buffersKiB Swap: 33554428 total, 5812 used, 33548616 free. 12344292 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND27348 root 20 0 35.064g 431192 410040 R 399.3 0.5 1019:46 fp-rte:837533 libvirt+ 20 0 3639500 95476 11032 S 69.0 0.1 12:51.21 qemu-sys+38856 libvirt+ 20 0 3646532 103176 11032 S 62.5 0.1 12:31.19 qemu-sys+37852 libvirt+ 20 0 3639216 96724 11032 S 56.6 0.1 11:49.29 qemu-sys+37171 libvirt+ 20 0 3772416 99008 11204 S 54.6 0.1 12:31.78 qemu-sys+38513 libvirt+ 20 0 3769608 94008 11040 S 53.1 0.1 10:52.68 qemu-sys+38173 libvirt+ 20 0 3771732 96716 11096 S 52.6 0.1 12:20.09 qemu-sys+34131 libvirt+ 20 0 3778660 105380 11220 S 51.1 0.1 29:14.09 qemu-sys+36140 libvirt+ 20 0 3640252 98272 11048 S 50.1 0.1 27:49.69 qemu-sys+35123 libvirt+ 20 0 3638508 96488 11032 S 47.6 0.1 27:28.72 qemu-sys+35802 libvirt+ 20 0 3786736 109800 11060 S 47.6 0.1 27:56.13 qemu-sys+34468 libvirt+ 20 0 3768864 92200 11088 S 46.6 0.1 28:21.27 qemu-sys+35461 libvirt+ 20 0 3769600 95520 11052 S 45.1 0.1 27:35.48 qemu-sys+36470 libvirt+ 20 0 3770600 95760 11216 S 45.1 0.1 10:19.57 qemu-sys+33771 libvirt+ 20 0 3769544 93268 11036 S 44.2 0.1 28:51.40 qemu-sys+36790 libvirt+ 20 0 3770444 102176 11044 S 43.7 0.1 10:50.81 qemu-sys+
4 root 20 0 0 0 0 S 4.5 0.0 1:21.54 kworker/+44314 root 20 0 0 0 0 S 4.0 0.0 0:12.87 kworker/+
111 root 20 0 0 0 0 S 3.5 0.0 0:53.02 kworker/+40565 root 20 0 0 0 0 S 3.5 0.0 0:52.25 kworker/+550 root 20 0 0 0 0 S 3.0 0.0 0:40.02 kworker/+
82505 root 20 0 0 0 0 S 3.0 0.0 0:04.57 kworker/+84948 root 20 0 0 0 0 S 3.0 0.0 0:00.98 kworker/+85809 root 20 0 0 0 0 S 3.0 0.0 0:00.54 kworker/+
546 root 20 0 0 0 0 S 2.5 0.0 0:48.83 kworker/+551 root 20 0 0 0 0 S 2.5 0.0 0:38.52 kworker/+
18530 root 20 0 0 0 0 S 2.5 0.0 0:14.62 kworker/+19943 root 20 0 0 0 0 S 2.5 0.0 0:10.64 kworker/+
Fast path CPU usage:cpu: %busy cycles8: 100% 5192160159: 100% 519510793
10: 100% 51960263111: 100% 519213267average cycles/packets received from NIC: 3333 (2077542706/623203)
top - 23:29:15 up 1 day, 11:37, 3 users, load average: 7.97, 7.35, 6.98Tasks: 704 total, 2 running, 702 sleeping, 0 stopped, 0 zombie%Cpu(s): 23.2 us, 1.6 sy, 0.0 ni, 75.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem: 98878056 total, 69169312 used, 29708748 free, 176700 buffersKiB Swap: 33554428 total, 0 used, 33554428 free. 17946668 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND10625 root 20 0 35.066g 431328 410140 R 399.4 0.4 8520:04 fp-rte:8
245354 libvirt+ 20 0 3770504 93728 11100 S 75.9 0.1 13:44.26 qemu-sys+244116 libvirt+ 20 0 3638488 95212 11024 S 73.9 0.1 13:17.98 qemu-sys+244411 libvirt+ 20 0 3770612 95628 11060 S 57.1 0.1 12:08.95 qemu-sys+244708 libvirt+ 20 0 3770528 93888 11024 S 56.6 0.1 12:52.81 qemu-sys+243816 libvirt+ 20 0 3769556 97796 11116 S 55.1 0.1 12:59.54 qemu-sys+245027 libvirt+ 20 0 3770600 93408 11060 S 55.1 0.1 12:32.99 qemu-sys+242861 libvirt+ 20 0 3770588 95560 11060 S 54.1 0.1 30:05.29 qemu-sys+243511 libvirt+ 20 0 3786744 115216 11116 S 45.6 0.1 10:33.09 qemu-sys+240973 libvirt+ 20 0 3770624 95772 11116 S 45.1 0.1 30:35.13 qemu-sys+243187 libvirt+ 20 0 3770624 95604 11144 S 44.2 0.1 10:09.08 qemu-sys+241926 libvirt+ 20 0 3639036 97248 11048 S 43.7 0.1 30:09.02 qemu-sys+242232 libvirt+ 20 0 3770636 93584 11108 S 43.7 0.1 29:42.02 qemu-sys+227915 libvirt+ 20 0 3770552 95824 11088 S 43.2 0.1 30:57.46 qemu-sys+241291 libvirt+ 20 0 3653756 111896 11032 S 42.7 0.1 30:05.04 qemu-sys+242549 libvirt+ 20 0 3638532 92976 11032 S 42.7 0.1 29:53.18 qemu-sys+
528 root 20 0 0 0 0 S 2.0 0.0 0:39.34 kworker/+532 root 20 0 0 0 0 S 2.0 0.0 0:28.49 kworker/+1410 root 20 0 0 0 0 S 2.0 0.0 30:58.76 fct0-smp
115851 root 20 0 0 0 0 S 2.0 0.0 0:16.42 kworker/+257812 root 20 0 0 0 0 S 2.0 0.0 0:08.81 kworker/+276505 root 20 0 0 0 0 S 2.0 0.0 0:05.25 kworker/+281367 root 20 0 0 0 0 S 2.0 0.0 0:03.54 kworker/+284579 root 20 0 0 0 0 S 2.0 0.0 0:09.71 kworker/+291611 root 20 0 0 0 0 S 2.0 0.0 0:02.21 kworker/+
533 root 20 0 0 0 0 S 1.5 0.0 0:27.87 kworker/+536 root 20 0 0 0 0 S 1.5 0.0 0:25.01 kworker/+
114018 root 10 -10 2067604 378876 169820 S 1.5 0.4 20:21.97 ovs-vswi+
Sender (iperf3 –c)Receiver (iperf3 –s)
4,021,730 pps
Output of “top”
on the hypervisor
400% Usage
x 1 Process
(by Fast-Path)
Output of “top”
on the hypervisor
Fixed CPU Load
High performance
Good !!
© NetOneSystems Co., Ltd. All rights reserved.
43
Summary
44
まとめ
・6WIND VA により、スタンダードOVSと比較した TCPアプリケーションのパフォーマンスは改善、UDPアプリケーションでもまた、パフォーマンスは大きく改善します。
・Data Plane の処理は 6WIND Fast-Path によって占有したCPUコアで動作します。仮想マシンの数が増え、Data Plane の負荷が高くなったとしても、CPUの負荷は割り当てられたCPUコアで制限され、ハイパーバイザーを圧迫することありません。
・今回のPOCでは 24 CPUコアの内、4 CPUコアをFast-Path に割り当てました。ハイパーバイザーのData Plane 性能が足りない場合は、追加のCPUコアをFast-Pathに割り当てることが可能であり、コアの数に比例して、パフォーマンスのスケールが可能です。
・Multi-Queue の機能を組み合わせることで、マルチvCPUの仮想マシンにおけるパフォーマンスを最大化することができます。(4 vCPU の仮想マシン1つで、30Gbps 以上 など)