OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK -...

46
OpenStack Kilo with 6Wind VA High - Performance Networking Using DPDK 201632ネットワンシステムズ株式会社 東日本事業本部 第5営業部 技術第4チーム 雅善

Transcript of OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK -...

Page 1: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

OpenStack Kilo with 6Wind VA

High-Performance Networking Using DPDK

2016年3月2日ネットワンシステムズ株式会社東日本事業本部 第5営業部技術第4チーム岡 雅善

Page 2: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

© NetOneSystems Co., Ltd. All rights reserved.

1

Agenda

Page 3: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

2

Agenda

• DPDK

• 6WIND– 6WIND

– Simple Performance Test

• POC Evaluation Result– TCP Performance

– UDP Performance

– CPU Load

• Summary

Page 4: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

© NetOneSystems Co., Ltd. All rights reserved.

3

DPDK

Page 5: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

4

ネットワーク高速化への課題

IAサーバで、ネットワークスイッチと同じ感覚で64byteショートフレームで 10Gbps, 40Gbps だせる?

仮想化基盤でのネットワーキングへの期待

NICカード: 10G ⇒ 40G ⇒ 100G

Page 6: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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 の 処理サイクルでは限界

Page 7: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 8: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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にパケットが到達するのを常に監視

Page 9: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

用途に応じてスケールが可能

Page 10: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

© NetOneSystems Co., Ltd. All rights reserved.

9

6WIND

Page 11: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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/

Page 12: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

11

Intel DPDK and 6WIND

• Community (dpdk.org)

• Extension (6WIND)

6WIND は 下記を提供します。

機能、パフォーマンスの拡張

フルコマーシャルサポートとメンテナンス

最新のDPDKをサポートするバイナリパッケージ

Page 13: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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/

Page 14: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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/

Page 15: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

14

Architecture

Page 16: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 17: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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 がパケットを処理します。

Page 18: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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, 他) の場合でも依存性なく適用できます。

・フルコマーシャルサポート・メンテナンスを提供します。

Page 19: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

© NetOneSystems Co., Ltd. All rights reserved.

18

Simple Performance Test

Page 20: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

19

Bidirectional Traffic Pattern

Traffic Generator

Fedora 20

OpenvSwitch

10GE 10GE

Traffic Generator

Fedora 20

Fast-Path

10GE 10GE

OVS Performance 6WIND Performance

Page 21: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 22: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 23: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 24: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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/

Page 25: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

© NetOneSystems Co., Ltd. All rights reserved.

24

POC Evaluation Result

Page 26: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 27: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 28: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 29: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

© NetOneSystems Co., Ltd. All rights reserved.

28

TCP Performance

Page 30: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 31: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 32: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 33: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 34: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 35: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

© NetOneSystems Co., Ltd. All rights reserved.

34

UDP Performance

Page 36: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

35

UDP Performance with standard OVS

Page 37: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 38: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 39: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 40: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 41: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

© NetOneSystems Co., Ltd. All rights reserved.

40

CPU Load in UDP case

Page 42: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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

Page 43: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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 !!

Page 44: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

© NetOneSystems Co., Ltd. All rights reserved.

43

Summary

Page 45: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月

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 以上 など)

Page 46: OpenStack Kilo with 6Wind VA High-Performance Networking Using DPDK - OpenStack最新情報セミナー 2016年3月