48
1 OPTIMIZE PERFORMANCE WITH DPDK OpenStack & SDN 开源解决方案优化验证测试 NOVEMBER 11, 2016 INTEL / CHINA UNIONPAY / 99CLOUD

OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

1

OPTIMIZE PERFORMANCE

WITH DPDK OpenStack & SDN 开源解决方案优化验证测试

NOVEMBER 11, 2016

INTEL / CHINA UNIONPAY / 99CLOUD

Page 2: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

2

目录 1. 概述 .......................................................................................................................................... 6

2. 方案简介 .................................................................................................................................. 7

2.1. 银联云使用现状及面临的挑战..................................................................................... 7

2.2. 解决方案 ........................................................................................................................ 7

2.2.1. 解决方案架构概述 ........................................................................................ 7

2.2.2. 解决方案关键技术 ........................................................................................ 8

2.3. 架构及性能验证综述 .................................................................................................... 9

3. 测试方案 ................................................................................................................................ 12

3.1. 测试方案架构 .............................................................................................................. 12

3.1.1. DPDK PktGen 性能测试 ............................................................................... 12

3.1.2. 虚拟机网络性能测试 .................................................................................. 12

3.2. 测试场景 ...................................................................................................................... 13

3.2.1. PktGen(普通 OVS) ........................................................................................ 13

3.2.2. PktGen(DPDK OVS) ....................................................................................... 13

3.2.3. VM iperf(普通 OVS) ..................................................................................... 13

3.2.4. VM iperf(DPDK OVS) .................................................................................... 14

4. 测试结果 ................................................................................................................................ 15

4.1. PktGen(普通 OVS) ........................................................................................................ 15

4.1.1. 64 字节包长 ................................................................................................. 15

4.1.2. 128 字节包长 ............................................................................................... 15

4.2. PktGen(DPDK OVS)........................................................................................................ 16

4.2.1. 64 字节包长 ................................................................................................. 16

Page 3: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

3

4.2.2. 128 字节包长 ............................................................................................... 17

4.3. VM iperf(普通 OVS) ...................................................................................................... 18

4.3.1. VLAN 网络 .................................................................................................... 18

4.3.2. VxLAN 网络 .................................................................................................. 19

4.4. VM iperf(DPDK OVS) ..................................................................................................... 21

4.4.1. VLAN 网络 .................................................................................................... 21

4.4.2. VxLAN 网络 .................................................................................................. 25

5. 测试分析 ................................................................................................................................ 28

5.1. 性能分析 ...................................................................................................................... 28

5.1.1. DPDK PktGen 性能测试 ............................................................................... 28

5.1.2. 虚拟机网络性能测试 .................................................................................. 29

5.2. 硬件性能优势 .............................................................................................................. 32

6. 测试案例搭建步骤................................................................................................................. 33

6.1. 测试用例 4.1 的配置 ................................................................................................... 33

6.1.1. 挂载 hugepage ............................................................................................. 33

6.1.2. 安装 dpdk 环境 ............................................................................................ 33

6.1.3. 安装 pktgen ................................................................................................. 33

6.1.4. 启动 pktgen 界面 ........................................................................................ 33

6.1.5. 开始发包 ...................................................................................................... 34

6.2. 测试用例 4.3.1 的配置 ................................................................................................ 34

6.2.1. 在两台物理机上安装 ovs ........................................................................... 34

6.2.2. 添加 bridge,port ....................................................................................... 34

6.2.3. 在两台物理机上分别启动两台虚拟机 ...................................................... 34

6.3. 测试用例 4.4.1 的配置 ................................................................................................ 35

Page 4: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

4

6.3.1. 在两台物理机上安装 dpdk 环境 ................................................................ 35

6.3.2. 分别安装 dpdk ovs ...................................................................................... 35

6.3.3. 启动 ovs ....................................................................................................... 36

6.3.4. 添加 bridge,port,建立隧道 ................................................................... 37

6.3.5. 在两台物理机上分别启动两台虚拟机 ...................................................... 38

6.4. 测试用例 4.3.2 的配置 ................................................................................................ 39

6.4.1. 在两台物理节点上安装 ovs ....................................................................... 39

6.4.2. 在两边添加 bridge,port ........................................................................... 40

6.4.3. 在两台物理机上分别启动两台虚拟机 ...................................................... 41

6.5. 测试用例 4.4.2 的配置 ................................................................................................ 42

6.5.1. 在两台物理机上安装 dpdk 环境 ................................................................ 42

6.5.2. 分别安装 dpdk ovs ...................................................................................... 42

6.5.3. 启动 ovs ....................................................................................................... 42

6.5.4. 添加 bridge,port,建立隧道 ................................................................... 44

6.5.5. 在两台物理机上分别启动两台虚拟机 ...................................................... 45

6.6. 交换机配置 .................................................................................................................. 47

7. 环境参数信息 ........................................................................................................................ 47

7.1. pci .................................................................................................................................. 47

7.2. cpu_layout .................................................................................................................... 47

7.3. cpuinfo .......................................................................................................................... 47

7.4. cmdline ......................................................................................................................... 47

8. 审阅 ........................................................................................................................................ 48

Page 5: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

5

Page 6: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

6

1. 概述

银联基于 OpenStack开源技术的金融云平台已运行 5年,目前已达数千台级物理服务

器规模,银联依据国际通行的云计算服务架构层次,在统一的计算、存储、网络的资源池之

上分别构建了以云资源管理平台与云集成开发与运行平台为核心的IaaS、PaaS服务,基于

IaaS、PaaS构建了智能支付终端平台的SaaS应用,并已成功通过国家云计算标准认证。目前,

银联私有云平台已作为公司核心支撑平台在生产环境落地应用,相关关键支付应用已由该平

台承载,有效支撑了银联业务创新,在支付产业日益开放和用户体验互联网化的趋势下,银

联也在积极探索更加开放和灵活的技术体系,探索云平台在服务内部需要的同时,兼顾未来

向外部开放,向金融行业提供开放的、共享的云服务。软件定义网络(Software-defined

networking ,即SDN)是这一演进过程中必须的技术组成。

然而SDN现阶段还处在发展和变革中,新兴的“软件定义”提供商主动开创却缺乏历史

积累,传统的“硬件设备”提供商顺应变革却局限于历史包袱,都在给SDN的技术选择上提

出了挑战。特别是在金融机构,SDN演进战略缺乏顶层指导、选型体系缺乏统一标准以及技

术数据缺乏中立来源三大问题影响了现阶段的技术决策。

本项目将对基于OpenStack环境下软件定义网络的可行性进行研究,同时对其重要性和

必要性通过测试进行说明。通过对基于OpenStack和SDN(软件定义网络)的下一代云平台的

研究和测试,从而验证软件定义网络(SDN)在银联创新实验环境的落地可行性与相关能力

表现。

中国银联电子支付研究院将负责本次项目的整体规划和管理,并提供银联目前的的使用

场景和需求,提供相应的管理和环境支持。

九州云和英特尔将从OpenStack和SDN的平台设计、部署和技术验证提供必要的技术支持

和服务。例如:在OpenStack和SDN方面所涉及到的Neutron、OVS、DPDK等关键技术。

Page 7: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

7

2. 方案简介

2.1. 银联云使用现状及面临的挑战

随着OpenStack和SDN的快速发展,软件定义网络以及网络功能虚拟化技术将进一步改变

和提高云计算环境下网络的能力。

从目前生产云计算环境的使用情况来看,当前所使用的传统网络中缺乏灵活性、对需求

变化的响应速度缓慢、无法实现网络的虚拟化。现阶段,通过命令行接口进行人工配置,一

直在阻碍网络向虚拟化迈进,并且它还导致了维护成本高昂、网络升级时间较长无法满足业

务需求、容易发生错误等问题。为此,银联需要通过相关技术验证,尤其是在OpenStack框

架下纯开源解决方案中,利用DPDK技术对OVS进行加速的尝试。

2.2. 解决方案

本次项目将基于OpenStack和SDN(软件定义网络)的下一代云平台来验证软件定义网络

(SDN)在银联创新实验环境的落地可行性与相关能力表现。

通过构建一个基于L版本的OpenStack和SDN验证环境,部署组件包括:horizon、

keystone、glance、nova、neutron、cinder、heat、manila、ironic。该环境可以用于验

证基于Neutron+OVS的纯粹开源版本的SDN环境,同时也验证英特尔DPDK技术在软件定义网络

上的加速能力,评测加速效果。

2.2.1. 解决方案架构概述

架构设计上我们借助OpenStack多区域的部署方式, 构建了多种SDN网络共存的环境,

不同的SDN环境的保持了独立性,并优化实现了多区域的异构SDN环境的互通,用于满足多种

场景的测试。架构如下图:

Page 8: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

8

在开源解决方案场景下,OpenStack + ODL + OVS的软件定义基础架构的整体架构图如

下,控制节点neutron server接收请求,ML2 plugin处理请求,由ODL mechanism driver将

请求发送给ODL控制器,ODL生成流表下发到计算节点的OVS上。Neutron的二层交换、三层路

由、LBaaS的功能都由OVS的流表实现,同时使用DPDK加速OVS,提升性能。

2.2.2. 解决方案关键技术

SDN使用纯开源解决方案中,将使用到以下关键技术。

ODL(OpenDayLight)是一个开源的SDN控制器,ODL在此方案中可以作为neutron ML2

plugin的mechanism driver和OpenStack集成,接管neutron对OVS进行控制。

Page 9: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

9

DPDK(Data Plane Development Kit)是一组用于快速处理包的库和驱动程序,主要包括

多核架构,huge page内存,PMD(poll-mode drivers)等库,此方案使用DPDK对OVS加速。

OVS(OpenvSwitch)是一个开源的虚拟交换机,支持openflow等协议,可以在SDN架构中

被SDN控制器管理,此方案使用ODL管理DPDK加速的OVS。

2.3. 架构及性能验证综述

在OpenStack环境下搭建四种3层转发场景,测试vlan模式下虚拟机之间经过三层转发的

iperf的性能,使用OpenStack社区版本L3 vRouter、厂商的vRouter、硬件交换机进行性能

测试对比。主要配置如下:

软件配置:

操作系统 Centos7

OpenStack Liberty

OVS 2.4.0

Libvirt 1.2.16

Mariadb 5.5.47

RabbitMQ 3.5.4

QEMU 2.1

硬件配置:

CPU Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz

网卡 Intel 82599ES

内存 128G

通过以上的环境及不同的测试场景,我们可以得出以下性能数据:

Page 10: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

10

从测结果可以看到,基于X86的开源方案(方案1)性能上相对硬件有较大的性能差距,

方案2(商业)在性能上有一定改进,主要原因还是由于二层还是通过了OVS开源模块造成的

瓶颈。为此我们将改变服务器配置和物理网卡型号以及引入DPDK技术,进行优化测试。

新环境的架构:搭建普通OVS和DPDK OVS两种环境,使用qemu在这两种环境上启动虚拟

机,测试以下四个场景下,虚拟机之间iperf的性能:

普通OVS + vlan

普通OVS + vxlan

DPDK OVS + vlan

DPDK OVS + vxlan

新环境的软硬件环境配置:

软件配置:

操作系统 Centos7

OVS master(Commit ID:cd8747c542544fcbfcc91dfb983915812922b4c4)

DPDK 16.04

QEMU 2.5.1.1

服务器硬件配置:

CPU Intel(R) Xeon(R) CPU E5-2695 v3 @ 2.30GHz

Page 11: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

11

网卡 Intel X710 for 10GbE

内存 160G

Page 12: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

12

3. 测试方案

3.1. 测试方案架构

3.1.1. DPDK PktGen 性能测试

两台服务器,分别在server1上安装PktGen,server2上安装native/DPDK OVS,server1

一个端口用PktGen发包,流量经过server2的OVS后回到server1另一个端口,查看两种OVS的

带宽,架构如下图。

测试DPDK数据平面转发的基本性能,具体测试用例参考3.2.1。

3.1.2. 虚拟机网络性能测试

分别在两台物理机上安装普通或DPDK OVS,将物理网卡加入DPDK,启动OVS,添加bridge

(VXLAN模式创建隧道),在两台物理机上分别使用QEMU启动虚拟机并连接到OVS上,使用

iperf测试性能,具体架构如下图。

Page 13: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

13

将从vlan/vxlan两种虚拟网络场景对dpdk ovs的转发性能进行测试,并与普通ovs进行

比对,具体测试用例参考3.2.2到3.2.5。

3.2. 测试场景

3.2.1. PktGen(普通 OVS)

两台服务器,分别在server1上安装PktGen,server2上安装普通OVS,将两台服务器的

四个port两两直连,server1启动PktGen,从port1发包,流量经过server2上的OVS后,回到

server1的port2,测试64字节和128字节两种包长下的带宽。

3.2.2. PktGen(DPDK OVS)

两台服务器,分别在server1上安装PktGen,server2上安装DPDK OVS,将两台服务器的

四个port两两直连,server1启动PktGen,从port1发包,流量经过server2上的OVS后,回到

server1的port2,测试64字节和128字节两种包长下的带宽。

3.2.3. VM iperf(普通 OVS)

在两台物理机上启动普通ovs并启动数对VM,互相用iperf3分别测试VLAN和VxLAN两种网

络下的TCP带宽,同时用ping和top记录延时和CPU使用率。

Page 14: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

14

3.2.4. VM iperf(DPDK OVS)

在两台物理机上启动dpdk ovs并启动数对VM,互相用iperf分别测试VLAN和VxLAN两种网

络下的TCP带宽,同时用ping和top记录延时和CPU使用率。

Page 15: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

15

4. 测试结果

4.1. PktGen(普通 OVS)

4.1.1. 64字节包长

PktGen发送64字节报文经过普通OVS的带宽结果是:877M,如下图:

4.1.2. 128字节包长

PktGen发送128字节报文经过普通OVS的带宽结果是:1531M,如下图:

Page 16: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

16

4.2. PktGen(DPDK OVS)

4.2.1. 64字节包长

PktGen发送64字节报文经过DPDK OVS的带宽结果是:5403M,如下图:

Page 17: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

17

4.2.2. 128字节包长

PktGen发送128字节报文经过DPDK OVS的带宽结果是:9716M,如下图:

Page 18: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

18

4.3. VM iperf(普通 OVS)

4.3.1. VLAN网络

使用VLAN模式,基于普通OVS,在两台不同物理主机上启动测试用虚拟机,在1对VM之间

使用iperf进行测试,具体结果如下:

bandwidth 9.27G

latency 1.334ms

Page 19: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

19

在此场景下,使用VLAN模式,基于普通OVS,在一台物理主机上启动测试用虚拟机,在

1对VM之间使用iperf进行测试,具体结果如下:

bandwidth 23.1G

latency 7.123ms

4.3.2. VxLAN 网络

使用VxLAN模式,基于普通OVS,在两台不同物理主机上启动测试用虚拟机,在1对VM之

间使用iperf进行测试,具体结果如下:

bandwidth 3.53G

latency 1.802ms

Page 20: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

20

使用VxLAN模式,基于普通OVS,在两台不同物理主机上启动测试用虚拟机,在2对VM之

间使用iperf进行测试,其中第一对VM的测试结果:

bandwidth 3.71G

latency 2.052ms

使用VxLAN模式,基于普通OVS,在两台不同物理主机上启动测试用虚拟机,在2对VM之

间使用iperf进行测试,其中第二对VM的测试结果:

bandwidth 3.98G

latency 1.201ms

Page 21: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

21

使用VxLAN模式,基于普通OVS,在一台物理主机上启动测试用虚拟机,在1对VM之间使

用iperf进行测试,测试结果:

bandwidth 19.3G

latency 8.395ms

4.4. VM iperf(DPDK OVS)

4.4.1. VLAN网络

使用VLAN模式,基于DPDK OVS,在两台不同物理主机上启动测试用虚拟机,在1对VM之

间使用iperf进行测试,具体结果如下:

bandwidth 7.49G

Page 22: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

22

latency 0.186ms

使用VLAN模式,基于DPDK OVS,在两台不同物理主机上启动测试用虚拟机,在2对VM之

间使用iperf进行测试,其中第一对VM的测试结果:

bandwidth 4.65G

latency 0.332ms

Page 23: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

23

使用VLAN模式,基于DPDK OVS,在两台不同物理主机上启动测试用虚拟机,在2对VM之

间使用iperf进行测试,其中第二对VM的测试结果:

bandwidth 4.67G

latency 0.329ms

Page 24: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

24

使用VLAN模式,基于DPDK OVS,在一台相同物理主机上启动测试用虚拟机,在1对VM之

间使用iperf进行测试,测试结果如下;

bandwidth 20.2G

latency 0.220ms

s

Page 25: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

25

4.4.2. VxLAN 网络

使用VxLAN模式,基于DPDK OVS,在两台不同物理主机上启动测试用虚拟机,在1对VM之

间使用iperf进行测试,具体结果如下:

bandwidth 4.93G

latency 0.061ms

Page 26: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

26

使用VxLAN模式,基于DPDK OVS,在两台不同物理主机上启动测试用虚拟机,在2对VM之

间使用iperf进行测试,其中第一对VM的测试结果:

bandwidth 4.41G

latency 0.081ms

使用VxLAN模式,基于DPDK OVS,在两台不同物理主机上启动测试用虚拟机,在2对VM之

间使用iperf进行测试,其中第二对VM的测试结果

bandwidth 4.14G

latency 0.112ms

Page 27: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

27

使用VxLAN模式,基于DPDK OVS,在一台物理主机上启动测试用虚拟机,在1对VM之间使

用iperf进行测试,测试结果:

bandwidth 4.62G

latency 0.078ms

Page 28: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

28

5. 测试分析

5.1. 性能分析

通过对第四章节的测试结果进行汇总如下;

5.1.1. DPDK PktGen 性能测试

吞吐量(Gbps)

普通 OVS 64 字节包长 0.877

普通 OVS 128 字节包长 1.531

DPDK OVS 64 字节包长 5.403

DPDK OVS 128 字节包长 9.716

通过上图,我们可以看到DPDK OVS在小包的性能上有明显优势,可以达到10Mpps,而普

通OVS的pps的瓶颈非常明显,极限只有1.5Mpps左右。

0.8771.531

5.403

9.716

0

2

4

6

8

10

12

64 128

吞吐

量(G

bp

s)

包大小(字节)

DPDK PktGen性能测试

普通OVS

DPDK OVS

Page 29: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

29

5.1.2. 虚拟机网络性能测试

单对 vm 吞吐

量(Gbps)

单对 vm 时延

(ms)

达到最大吞

吐量时的虚

拟机对数

总吞吐量

(Gbps)

平均时延

(ms)

Vlan+ovs 9.27 1.334 1 9.27 1.334

VLAN+dpdk-

ovs

7.49 0.168 2 9.32 0.330

VxLan+ovs 3.53 1.802 未测试 3

对,2 对不

满,预计 3

对打满

未测试 3

对,2 对总吞

吐量 7.69

1.627

VxLan+dpdk-

ovs

4.93 0.061 2 8.55 0.097

9.27

3.53

7.49

4.93

0

1

2

3

4

5

6

7

8

9

10

VLAN VXLAN

吞吐

量(G

bp

s/s)

网络模式

单对vm吞吐量测试

普通OVS

DPDK OVS

Page 30: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

30

1.334

1.802

0.1680.061

0

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

VLAN VXLAN

时延

(ms)

网络模式

单对vm时延测试

普通OVS

DPDK OVS

9.27

7.69

9.328.55

0

1

2

3

4

5

6

7

8

9

10

VLAN VXLAN

总吞

吐量

(Gb

ps)

网络模式

2对vm吞吐量测试

普通OVS

DPDK OVS

Page 31: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

31

通过对数据进行对比和观察,我们可以看出:

DPDK OVS对传输时延有显著优化,所有数据中的时延都基本可以下降到普通ovs的

10%以上。

单对VM iperf的带宽,VLAN模式下普通OVS接近线速,因为这种场景下的包大小比

较大,并且普通OVS默认开启了TSO和GRO。而DPDK OVS带宽在7.5G左右,因为DPDK

OVS的代码中还没有开启GRO,在虚拟机的场景下,TSO和GRO对性能的影响非常显著。

VXLAN模式下DPDK OVS的带宽相对于普通ovs有接近40%的提升

2对VM iperf的带宽,VLAN模式普通OVS和DPDK OVS都接近线速。VXLAN模式下DPDK

OVS的带宽比普通OVS略高。

综合分析上述DPDK OVS测试数据,银联确认相关的性能指标能充分满足现有业务系统

的需要,特别是VXLAN场景下的数据,完全证明开源的OpenStack + ODL + OVS能满足银联对

云环境下SDN的使用场景的开源、可控、灵活、可用的业务使用要求,在新的服务器配置加

X710万兆网卡的配合下,比第一阶段开源OVS的测试结果有很大的性能提升。

1.334

1.627

0.33

0.097

0

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

VLAN VXLAN

平均

时延

(ms)

网络模式

2对vm时延测试

普通OVS

DPDK OVS

Page 32: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

32

5.2. 硬件性能优势

基于前述的网络性能压力测试,DPDK OVS相对原生OVS在传输时延上有较大提升,

同时在VXLAN场景上性能提高较大,满足银联对VXLAN使用场景的要求。在VLAN场景下,

考虑到实际生产环境下一个物理服务器下多VM的部署,DPDK OVS和原生OVS基本上都能

达到物理网卡的极限传输性能。

综合分析上述数据,产生性能差距的主要原因既有DPDK,也有物理硬件。

Intel Xeon E5 2695 v3处理器提供比Xeon E5 2680 v2处理器多达60%的计算能力,

可满足大量虚拟机运行时所需的处理器资源;

Intel X710万兆网卡同Intel Xeon E5 2600 v3处理器相结合,提供更多的网络性

能加速和优化,包括:

X710通过Intel提供的虚拟化技术(Intel VT)提供创新性的用于服务器虚拟

化场景的I/O虚拟化功能,包括新一代的VMDq、SR-IOV、VEB,通过提供针对虚

拟机网络包的智能化卸载功能,降低I/O导致的网络性能瓶颈。

Intel Xeon E5 2600 v3处理器可以同X710网卡无缝配合,提供智能化网络处

理卸载,减少CPU的使用。智能化网络处理卸载包括TSO、VMDq、RSS、LSO、GSO、

较验和、主机iSCSI Initiator。

X710具有灵活的过滤机制(Application Target Routing, Flow Director) ,

有英特尔Data Plane Developers Kit (DPDK) 优化包,同时支持以太网和存

储网协议融合(LAN, iSCSI),支持8个优先级的Datacenter Bridging (DCB),

从而显著增加各级每秒交易数量,降低云应用的延时。

X710支持VXLAN,NVGRE和GENEVE等协议的无状态卸载,并且能把网络业务送往多个

CPU核进行并行处理,从而在构建于Overlay Network上的应用中达到传统网络应用

类似的性能。使用基于X710上的VXLAN技术,可以极大降低云和虚拟化环境下的网

络管理的复杂性,不用在每台物理交换设备上手工维护相关的VLAN信息,只需在统

一的SDN控制器上集中地管理VXLAN及其它的网络策略并分发到相关的虚拟交换机

上,从而对连接到虚拟交换机的VM自动进行相关的网络控制以及应用之间的隔离。

Page 33: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

33

6. 测试案例搭建步骤

6.1. 测试用例 4.1的配置

6.1.1. 挂载 hugepage

mkdir -p /mnt/huge

mkdir -p /mnt/huge_2mb

mount -t hugetlbfs hugetlbfs /mnt/huge

mount -t hugetlbfs none /mnt/huge_2mb -o pagesize=2MB

6.1.2. 安装 dpdk 环境

下载 dpdk-16.04压缩包并解压

在解压后的目录下:

export RTE_TARGET=x86_64-native-linuxapp-gcc

export RTE_SDK=/root/dpdk

make install T=x86_64-native-linuxapp-gcc

6.1.3. 安装 pktgen

下载 pktgen-2.9.18压缩包并解压

export RTE_TARGET=x86_64-native-linuxapp-gcc

export RTE_SDK=/root/dpdk

cd pktgen-dpdk

make

6.1.4. 启动 pktgen 界面

cd pktgen-dpdk

Page 34: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

34

app/app/x86_64-native-linuxapp-gcc/app/pktgen -c 7 -- -T -P -m "[1:2].0"

6.1.5. 开始发包

start 0

6.2. 测试用例 4.3.1 的配置

6.2.1. 在两台物理机上安装 ovs

git clone https://github.com/openvswitch/ovs.git

cd ovs

git checkout cd8747c542544fcbfcc91dfb983915812922b4c4

./boot.sh

./configure

make install

6.2.2. 添加 bridge,port

ovs-vsctl add-br br0

ovs-vsctl add-port br0 eth5

6.2.3. 在两台物理机上分别启动两台虚拟机

物理节点 1:

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm05.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net \

nic,macaddr=00:00:00:00:00:05,model=virtio,netdev=nic-0 -netdev tap,id=nic-

0,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown,vhost=on

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm06.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net \

Page 35: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

35

nic,macaddr=00:00:00:00:00:06,model=virtio,netdev=nic-0 -netdev tap,id=nic-

0,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown,vhost=on

物理节点 2:

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm07.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net \

nic,macaddr=00:00:00:00:00:07,model=virtio,netdev=nic-0 -netdev tap,id=nic-

0,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown,vhost=on

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm08.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net \

nic,macaddr=00:00:00:00:00:08,model=virtio,netdev=nic-0 -netdev tap,id=nic-

0,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown,vhost=on

6.3. 测试用例 4.4.1 的配置

6.3.1. 在两台物理机上安装 dpdk环境

下载 dpdk-16.04压缩包并解压

在解压后的目录下:

export RTE_TARGET=x86_64-native-linuxapp-gcc

export RTE_SDK=/root/dpdk

6.3.2. 分别安装 dpdk ovs

#install ovs

git clone https://github.com/openvswitch/ovs.git

cd ovs

git checkout cd8747c542544fcbfcc91dfb983915812922b4c4

Page 36: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

36

export DPDK_DIR=/root/dpdk/

export OVS_DIR=`pwd`

./boot.sh

./configure --with-dpdk="$DPDK_DIR/x86_64-native-linuxapp-gcc/"

make install

6.3.3. 启动 ovs

#start ovs

export OVS_DIR=/root/ovs

pkill -9 ovs

rm -rf /usr/local/var/run/openvswitch

rm -rf /usr/local/etc/openvswitch/

rm -f /usr/local/etc/openvswitch/conf.db

mkdir -p /usr/local/etc/openvswitch

mkdir -p /usr/local/var/run/openvswitch

cd $OVS_DIR

./ovsdb/ovsdb-tool create

/usr/local/etc/openvswitch/conf.db ./vswitchd/vswitch.ovsschema

./ovsdb/ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --

remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach

./utilities/ovs-vsctl --no-wait init

modprobe openvswitch

export DB_SOCK=/usr/local/var/run/openvswitch/db.sock

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true

Page 37: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

37

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-

mem=2048

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-

mask=01000000001

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-hugepage-

dir=/dev/hugepages

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:n-dpdk-rxqs=2

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-

mask=1E00000001E

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:max-idle=30000

./vswitchd/ovs-vswitchd unix:$DB_SOCK --

pidfile=/usr/local/var/run/openvswitch/ovs-vswitchd.pid --log-

file=../ovsdpdk.log --detach

6.3.4. 添加 bridge,port,建立隧道

export OVS_DIR=/root/ovs

$OVS_DIR/utilities/ovs-vsctl show

$OVS_DIR/utilities/ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev

$OVS_DIR/utilities/ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0

type=dpdk

$OVS_DIR/utilities/ovs-vsctl add-port br0 vhost-user1 -- set Interface vhost-

user1 type=dpdkvhostuser

$OVS_DIR/utilities/ovs-vsctl add-port br0 vhost-user2 -- set Interface vhost-

user2 type=dpdkvhostuser

Page 38: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

38

6.3.5. 在两台物理机上分别启动两台虚拟机

物理节点 1:

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm01.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net none \

-chardev socket,id=char1,path=/usr/local/var/run/openvswitch/vhost-user1 \

-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \

-device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1 \

-object memory-backend-file,id=mem,size=2048M,mem-path=/dev/hugepages,share=on

\

-numa node,memdev=mem -mem-prealloc

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm02.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net none \

-chardev socket,id=char1,path=/usr/local/var/run/openvswitch/vhost-user2 \

-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \

-device virtio-net-pci,mac=00:00:00:00:00:02,netdev=mynet1 \

-object memory-backend-file,id=mem,size=2048M,mem-path=/dev/hugepages,share=on

\

-numa node,memdev=mem -mem-prealloc

物理节点 2:

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm03.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net none \

Page 39: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

39

-chardev socket,id=char1,path=/usr/local/var/run/openvswitch/vhost-user1 \

-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \

-device virtio-net-pci,mac=00:00:00:00:00:03,netdev=mynet1 \

-object memory-backend-file,id=mem,size=2048M,mem-path=/dev/hugepages,share=on

\

-numa node,memdev=mem -mem-prealloc

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm04.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net none \

-chardev socket,id=char1,path=/usr/local/var/run/openvswitch/vhost-user2 \

-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \

-device virtio-net-pci,mac=00:00:00:00:00:04,netdev=mynet1 \

-object memory-backend-file,id=mem,size=2048M,mem-path=/dev/hugepages,share=on

\

-numa node,memdev=mem -mem-prealloc

6.4. 测试用例 4.3.2 的配置

6.4.1. 在两台物理节点上安装 ovs

git clone https://github.com/openvswitch/ovs.git

cd ovs

git checkout cd8747c542544fcbfcc91dfb983915812922b4c4

./boot.sh

./configure

make install

Page 40: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

40

6.4.2. 在两边添加 bridge,port

物理节点 1:

#VXLAN add bridge and ports

export OVS_DIR=/root/ovs

$OVS_DIR/utilities/ovs-vsctl add-br br0

ifconfig br0 10.1.1.47/24

./utilities/ovs-appctl ovs/route/add 10.1.1.43/24 br0

$OVS_DIR/utilities/ovs-vsctl add-br br-int

ifconfig br-int 10.0.0.47/24

./utilities/ovs-vsctl add-port br-int vxlan0 -- set Interface vxlan0 type=vxlan

options:remote_ip=10.1.1.43 options:key=1000

物理节点 2:

#VXLAN add bridge and ports

export OVS_DIR=/root/ovs

$OVS_DIR/utilities/ovs-vsctl add-br br0

ifconfig br0 10.1.1.43/24

./utilities/ovs-appctl ovs/route/add 10.1.1.47/24 br0

$OVS_DIR/utilities/ovs-vsctl add-br br-int

ifconfig br-int 10.0.0.43/24

Page 41: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

41

./utilities/ovs-vsctl add-port br-int vxlan0 -- set Interface vxlan0 type=vxlan

options:remote_ip=10.1.1.47 options:key=1000

6.4.3. 在两台物理机上分别启动两台虚拟机

物理节点 1:

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm05.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net \

nic,macaddr=00:00:00:00:00:05,model=virtio,netdev=nic-0 -netdev tap,id=nic-

0,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown,vhost=on

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm06.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net \

nic,macaddr=00:00:00:00:00:06,model=virtio,netdev=nic-0 -netdev tap,id=nic-

0,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown,vhost=on

物理节点 2:

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm07.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net \

nic,macaddr=00:00:00:00:00:07,model=virtio,netdev=nic-0 -netdev tap,id=nic-

0,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown,vhost=on

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm08.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net \

nic,macaddr=00:00:00:00:00:08,model=virtio,netdev=nic-0 -netdev tap,id=nic-

0,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown,vhost=on

Page 42: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

42

6.5. 测试用例 4.4.2 的配置

6.5.1. 在两台物理机上安装 dpdk环境

下载 dpdk-16.04压缩包并解压

在解压后的目录下:

export RTE_TARGET=x86_64-native-linuxapp-gcc

export RTE_SDK=/root/dpdk

6.5.2. 分别安装 dpdk ovs

#install ovs

git clone https://github.com/openvswitch/ovs.git

cd ovs

git checkout cd8747c542544fcbfcc91dfb983915812922b4c4

export DPDK_DIR=/root/dpdk/

export OVS_DIR=`pwd`

./boot.sh

./configure --with-dpdk="$DPDK_DIR/x86_64-native-linuxapp-gcc/"

make install

6.5.3. 启动 ovs

#start ovs

export OVS_DIR=/root/ovs

pkill -9 ovs

rm -rf /usr/local/var/run/openvswitch

rm -rf /usr/local/etc/openvswitch/

rm -f /usr/local/etc/openvswitch/conf.db

Page 43: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

43

mkdir -p /usr/local/etc/openvswitch

mkdir -p /usr/local/var/run/openvswitch

cd $OVS_DIR

./ovsdb/ovsdb-tool create

/usr/local/etc/openvswitch/conf.db ./vswitchd/vswitch.ovsschema

./ovsdb/ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --

remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach

./utilities/ovs-vsctl --no-wait init

modprobe openvswitch

export DB_SOCK=/usr/local/var/run/openvswitch/db.sock

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-

mem=2048

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-

mask=01000000001

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-hugepage-

dir=/dev/hugepages

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:n-dpdk-rxqs=2

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-

mask=1E00000001E

./utilities/ovs-vsctl --no-wait set Open_vSwitch . other_config:max-idle=30000

./vswitchd/ovs-vswitchd unix:$DB_SOCK --

pidfile=/usr/local/var/run/openvswitch/ovs-vswitchd.pid --log-

file=../ovsdpdk.log --detach

Page 44: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

44

6.5.4. 添加 bridge,port,建立隧道

物理节点 1:

export OVS_DIR=/root/ovs

$OVS_DIR/utilities/ovs-vsctl show

$OVS_DIR/utilities/ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev

ifconfig br0 10.1.1.45/24

$OVS_DIR/utilities/ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0

type=dpdk

./utilities/ovs-appctl ovs/route/add 10.1.1.44/24 br0

$OVS_DIR/utilities/ovs-vsctl add-br br-int -- set bridge br-int

datapath_type=netdev

ifconfig br-int 10.0.0.45/24

$OVS_DIR/utilities/ovs-vsctl add-port br-int vhost-user1 -- set Interface

vhost-user1 type=dpdkvhostuser

$OVS_DIR/utilities/ovs-vsctl add-port br-int vhost-user2 -- set Interface

vhost-user2 type=dpdkvhostuser

./utilities/ovs-vsctl add-port br-int vxlan0 -- set Interface vxlan0 type=vxlan

options:remote_ip=10.1.1.44 options:key=1000

物理节点 2:

Page 45: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

45

export OVS_DIR=/root/ovs

$OVS_DIR/utilities/ovs-vsctl show

$OVS_DIR/utilities/ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev

ifconfig br0 10.1.1.44/24

$OVS_DIR/utilities/ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0

type=dpdk

./utilities/ovs-appctl ovs/route/add 10.1.1.45/24 br0

$OVS_DIR/utilities/ovs-vsctl add-br br-int -- set bridge br-int

datapath_type=netdev

ifconfig br-int 10.0.0.44/24

$OVS_DIR/utilities/ovs-vsctl add-port br-int vhost-user1 -- set Interface

vhost-user1 type=dpdkvhostuser

$OVS_DIR/utilities/ovs-vsctl add-port br-int vhost-user2 -- set Interface

vhost-user2 type=dpdkvhostuser

./utilities/ovs-vsctl add-port br-int vxlan0 -- set Interface vxlan0 type=vxlan

options:remote_ip=10.1.1.45 options:key=1000

6.5.5. 在两台物理机上分别启动两台虚拟机

物理节点 1:

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm01.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net none \

-chardev socket,id=char1,path=/usr/local/var/run/openvswitch/vhost-user1 \

-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \

Page 46: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

46

-device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1 \

-object memory-backend-file,id=mem,size=2048M,mem-path=/dev/hugepages,share=on

\

-numa node,memdev=mem -mem-prealloc

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm02.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net none \

-chardev socket,id=char1,path=/usr/local/var/run/openvswitch/vhost-user2 \

-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \

-device virtio-net-pci,mac=00:00:00:00:00:02,netdev=mynet1 \

-object memory-backend-file,id=mem,size=2048M,mem-path=/dev/hugepages,share=on

\

-numa node,memdev=mem -mem-prealloc

物理节点 2:

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm03.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net none \

-chardev socket,id=char1,path=/usr/local/var/run/openvswitch/vhost-user1 \

-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \

-device virtio-net-pci,mac=00:00:00:00:00:03,netdev=mynet1 \

-object memory-backend-file,id=mem,size=2048M,mem-path=/dev/hugepages,share=on

\

-numa node,memdev=mem -mem-prealloc

Page 47: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

47

qemu-system-x86_64 -m 2048 -smp 4 -cpu host -hda ~/vm04.qcow2 -boot c -enable-

kvm -no-reboot -nographic -net none \

-chardev socket,id=char1,path=/usr/local/var/run/openvswitch/vhost-user2 \

-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \

-device virtio-net-pci,mac=00:00:00:00:00:04,netdev=mynet1 \

-object memory-backend-file,id=mem,size=2048M,mem-path=/dev/hugepages,share=on

\

-numa node,memdev=mem -mem-prealloc

6.6. 交换机配置

连接四个服务器的端口都是 access模式

7. 环境参数信息

7.1. pci

参见lspci.txt

7.2. cpu_layout

参见cpu_layout.txt

7.3. cpuinfo

参见cpuinfo.txt

7.4. cmdline

参见cmdline.txt

Page 48: OPTIMIZE PERFORMANCE WITH DPDK - intel.cn

48

8. 审阅

公司名: 公司名:

代表人姓名: 代表人姓名:

时间: 时间: