Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
1
OPTIMIZE PERFORMANCE
WITH DPDK OpenStack & SDN 开源解决方案优化验证测试
NOVEMBER 11, 2016
INTEL / CHINA UNIONPAY / 99CLOUD
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
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
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
5
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等关键技术。
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环境的互通,用于满足多种
场景的测试。架构如下图:
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进行控制。
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
通过以上的环境及不同的测试场景,我们可以得出以下性能数据:
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
11
网卡 Intel X710 for 10GbE
内存 160G
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测试性能,具体架构如下图。
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使用率。
14
3.2.4. VM iperf(DPDK OVS)
在两台物理机上启动dpdk ovs并启动数对VM,互相用iperf分别测试VLAN和VxLAN两种网
络下的TCP带宽,同时用ping和top记录延时和CPU使用率。
15
4. 测试结果
4.1. PktGen(普通 OVS)
4.1.1. 64字节包长
PktGen发送64字节报文经过普通OVS的带宽结果是:877M,如下图:
4.1.2. 128字节包长
PktGen发送128字节报文经过普通OVS的带宽结果是:1531M,如下图:
16
4.2. PktGen(DPDK OVS)
4.2.1. 64字节包长
PktGen发送64字节报文经过DPDK OVS的带宽结果是:5403M,如下图:
17
4.2.2. 128字节包长
PktGen发送128字节报文经过DPDK OVS的带宽结果是:9716M,如下图:
18
4.3. VM iperf(普通 OVS)
4.3.1. VLAN网络
使用VLAN模式,基于普通OVS,在两台不同物理主机上启动测试用虚拟机,在1对VM之间
使用iperf进行测试,具体结果如下:
bandwidth 9.27G
latency 1.334ms
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
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
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
22
latency 0.186ms
使用VLAN模式,基于DPDK OVS,在两台不同物理主机上启动测试用虚拟机,在2对VM之
间使用iperf进行测试,其中第一对VM的测试结果:
bandwidth 4.65G
latency 0.332ms
23
使用VLAN模式,基于DPDK OVS,在两台不同物理主机上启动测试用虚拟机,在2对VM之
间使用iperf进行测试,其中第二对VM的测试结果:
bandwidth 4.67G
latency 0.329ms
24
使用VLAN模式,基于DPDK OVS,在一台相同物理主机上启动测试用虚拟机,在1对VM之
间使用iperf进行测试,测试结果如下;
bandwidth 20.2G
latency 0.220ms
s
25
4.4.2. VxLAN 网络
使用VxLAN模式,基于DPDK OVS,在两台不同物理主机上启动测试用虚拟机,在1对VM之
间使用iperf进行测试,具体结果如下:
bandwidth 4.93G
latency 0.061ms
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
27
使用VxLAN模式,基于DPDK OVS,在一台物理主机上启动测试用虚拟机,在1对VM之间使
用iperf进行测试,测试结果:
bandwidth 4.62G
latency 0.078ms
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
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
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
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
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自动进行相关的网络控制以及应用之间的隔离。
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
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 \
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
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
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
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 \
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
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
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
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
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
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:
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 \
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
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
48
8. 审阅
公司名: 公司名:
代表人姓名: 代表人姓名:
时间: 时间: