如何在openstack环境下实现高性能的网络服务

news2024/9/22 9:39:12

大家晚上好。那我们开始吧。主要还是抛装引玉,互相学习交流。今天和大家分享下面一些内容:

1.关于openstack中VNF网络性能的一些思考和思路

2.相关的开源项目

3.OVS 2.4 DPDK with IVSHMEM/vHost-user(w/DPDK) 和vHost (w/oDPDK)性能测试数据

4.后续可以一起来做的一些工作

第一部分 关于openstack中VNF网络性能的一些思考和思路

先来介绍一下背景,目前openstack社区版本的一些网络服务如routing,fip,snat,fw,V**,lb,数据平面都是linux network stack来实现的,linux network stack的性能其实不是很好,尤其是对小包的处理。

如果我们看pps的话,通常一个core可以支持0.2M~0.5M packet per second,而如果需要在10g网卡上实现64byte小包的线速转发,需要14.88Mpps的处理能力,所以这里还是有很大的提升空间。

像brocade的vrouter和其它的一些商业方案,据说已经可以支持10Mpps以上的处理能力。从vswitch的角度,OVS2.4已经增加了对DPDK tunnel和DPDK vhost的支持。虽然ovs在它的文档上有说明,这些还只是实验性质的,但我们认为这块的支持最终会走向成熟,我们再测试ovs dpdk的性能时,在两块物理网卡之间已经可以支持10Mpps的转发能力。如果ovs dpdk最终被采纳的话,那么openstack网络中的一些vnf将成为瓶颈。

所以我们研究的方向是如何在openstack环境下实现高性能的网络服务OpenStackOpenStack L3-agent, LBaaS, FWaaS, V**aaS, etc。为了实现这个目标,有两部分主要的工作需要考虑:

✔其一,需要高性能的userspace network stack,并且可以使用dpdk来做完网络i/o接口;

✔其二,需要在openstack环境下实现相应的driver,包括创建userspace ovs,创建vnf实例,创建vnf到ovs的特殊的通道(vHost-user or IVSHMEM)。

第二部分 相关开源项目openstack和opnfv

openstack那个项目我们有尝试去使用,不过还没有成功。下面我们来看一下实现高性能网络服务需要考虑的一些因素(这几个图片其实是取自intel的一些文档):

vnf虚拟网络接口的选择直接影响到性能和后续相关的工作,A和B的性能完全不能满足要求,这个通道的瓶颈在0.3Mpps左右,C和D是不错的选择,其实D性能更好,后面我们的测试就是针对B,C,D三种情况。E,F可以不用考虑了,因为直接使用物理网卡,中间没有使用虚拟交换机,像vxlan封装这样的事情需要vnf或物理交换机来做,这样会增加实现的复杂度。再来看看,整体的picture如下:

这里ovs-switchd是运行在用户态的进程,通过dpdk pmd直接从物理网卡抓取和发送报文,要实现高性能的vnf,需要:

✔高性能的ovs

✔高性能的vnf到ovs的通道

✔高性能的vnf 网络堆栈

关于高性能的网络堆栈,其实有一些选择,intel也给了一些推荐

当然这些项目在实际去用的时候还有许多坑,文档也不够,需要投入人力去尝试,intel这个链接有更详细的介绍:

https://software.intel.com/en-us/blogs/2015/06/12/user-space-networking-fuels-nfv-performance

我们尝试过rumpkernel,花了好些时间终于跑通了,但是性能还是没有达到预期,大概能到1Mpps,比linux好一点点,有可能是没有配置好的原因,后面会进行更多的尝试。关于用户态网络堆栈的介绍就到这。

第三部分 OVS 2.4 DPDK withIVSHMEM/vHost-user(w/DPDK)和vHost (w/oDPDK)性能测试

下面介绍一下ovs2.4的测试,后面我会把这个测试报告和大家分享,这个报告主要测试的是ovs连接虚拟网卡的性能。

连接物理网卡的性能比虚拟网卡来说还是好很多,使用10G物理网卡时,单向流量,128byte以上基本上可以达到线速,刚才的介绍有提到,vnf是通过虚拟网卡连接到ovs的,所以我们更关心虚拟网卡的性能。

1. Toolsused

✔Packet Generators

a) Dpdk-Pktgenfor max pps measurements.

b) Netperfto measure bandwidth and latency.

✔Test servers

a) CPU:2 sockets Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz, 10 cores per scoket.

b) RAM:64 Gbytes.

✔NIC cards are Intel10-Gigabit X540-AT2.

✔Kernel used is Linux3.13.0-53-generic .

第一个实验是测试IVSHMEM的pps,我们使用dpdk-pktgen来产生报文,基本上可以打出线速的报文。虚拟机转发的程序使用ring client,在ovs的安装目录下有。

类似的拓扑用来测vhost user和vhost

测vhost的时候用的是ovs 的kernel datapath

下面是用netperf测试性能的拓扑

用netperf测试vhost-user和vhost的拓扑与上图类似,我就不在贴了,下面看一下最后的数据:

可以看到ovs+dpdk比ovs kernel datapath在小包的处理上优势还是很明显的。ivshmem性能更是强上一大截,如图:

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! !   

这个是netperf的,大家看到ovs+vhost只有不到2G,可能会认为和平时使用的感觉不一致,这主要是因为我们测试的vnf没有使用gro的原因。

第四部分 后续可以一起来做的一些工作

最后再介绍一下后续可以做的一些工作,有兴趣的同学可以私聊,一起来做一些研究:

1、测试ovs 2.4 dpdk vxlan的性能和ovs 2.4 user space patch interface的性能

2、研究用户态网络堆栈与dpdk的集成,比如Libuinet, mTCP, libusnet

3、在openstack环境下用新的neutron L2 driver来使用ovs+dpdk

其中第3个主要是去试用刚才说的两个开源项目,可参考如下链接:

https://github.com/stackforge/networking-ovs-dpdk

https://wiki.opnfv.org/open_vswitch_for_nfv

好,时间有点超过了,我的介绍就到这。

Q&A

Q1:Ovs 2.4快要release

A:ovs 2.4应该是8月24日就release了

Q2:正常大包的开销低。你这个测试小包性能高,有问题。

A:前面那个单位是pps,是报文的个数,大包到后面就已经到线速了,没法再高了

Q3:1500是0.8,64是6。那个大那个小?你这结果有问题,再好好测测

A:64byte虽然是6mpps,但是只只是达到线速的6/14.88=43%,1500是0.8,但是已经是线速的0.8/0.82=97%。测试数据是pps 你换算成bps就直观了,1500的包,在0.8pps的速率时已经接近线速了

Q3:对于DPDK门外汉,问个问题如何可以降低学习成本或者比较好的学习路线

A:dpdk有一些example,可以去跑这些example;dpdk的包中包含example的source code;dpdk的文档也有介绍这些example如何使用,及example的代码介绍

Q4:你的测试都在Openstack里做的么?其实我真正的问题是openstack 多少特性用了dpdk?

A:测试没有在openstack的环境,目前社区版本的openstack还没有使用dpdk

Q5:目前这些实现, 能挂仪表测性能吗? Smartbits or STC

A:可以挂物理测试仪从物理网卡打包,但是因为我们测试的是虚拟网卡的性能所以用物理仪器打包并不是关键

Q6:你们的研究是用在nfv项目吗?对于neutron项目也适用吗?

A:最终是做到集成到neutron中使用

Q7:userspace network stack 后续你们会重点做吗?

A:yes

Q8:听说Intel之前有 Neutreon OVS DPDK 优化的 open stack 版本,后来砍掉了往主线trunk版本里merge,你们会利用吗?

A:我想你说的那个就是我刚才介绍的openstack当中那个项目。

Q9:你们做的事情能不能独立出来,所有stack都能用?网络归网络,理论上没必要跟openstack紧耦合啊

A:是的,但目前在OpenStack的应用更迫切一些。

原文链接:如何在openstack环境下实现高性能的网络服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.55 OrCAD中怎么批量修改属性值字体的大小?OrCAD的Occurrence属性与Instance属性是什么含义?

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

[附源码]java毕业设计疫情防控下高校教职工健康信息管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

TypeScript(五)知识扩展

TypeScript TypeScript模块化 JavaScript 有一个很长的处理模块化代码的历史,TypeScript 从 2012 年开始跟进,现在已经实现支持了很多格式。但是随着 时间流逝,社区和 JavaScript 规范已经使用为名为 ES Module的格式,这也就是我…

【Mysql】表的增删查改

文章目录前言一.表中插入数据1.1 全列增加1.2 指定列增加1.3 一次性插入多行数据1.4. 插入查询结果二.表的更新和替换2.1. 表的插入更新2.2. 替换三.表的查询3.1. 全列查询3.2. 指定列查询3.3. 查询字段为表达式并取别名3.4. 结果去重3.4. where条件3.5. 结果排序3.6. 分页查询…

【正点原子FPGA连载】第九章 按键控制LED实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第九章 按键控制…

骨传导耳机是怎么传声的?骨传导耳机到底有哪些好处?

骨传导耳机最近在网上也是越来越火了,作为一种可以开放双耳的耳机,对比一般的耳机,它可以做到开放双耳,不堵耳道,保持耳朵健康卫生。 但是随着这种耳机的逐渐崛起,很多人也对这种耳机产生了疑惑&#xff1…

正版软件|WonderFox Photo Watermark 图片水印批量处理软件

Photo Watermark 可以为您做什么?水印是最有效的方法,可防止他人擅自使用您的照片。只需单击几下,Watermark Software 将为您的图像文件提供不可磨灭的保护。 可自定义的水印 文本水印 只需按键即可创建支持丰富字体,符号&#x…

Redis进阶(主从复制、Redis集群、缓存穿透、缓存击穿、缓存雪崩)

目录 1、主从复制(读写分离) 1.1、什么是主从复制 1.2、主从复制的作用 1.3、环境搭建 1.4、一主二仆 1.5、注意事项 1.6、反客为主 1.7、哨兵模式(sentinel) 2、Redis集群 2.1、什么是集群 2.2、什么是redis集群 2.3…

报表工具使用之FineReport大数据集导出插件

1. 概述 1.1 版本 报表服务器版本 插件版本 功能变更 11.0 V1.0.0 - 11.0.10 V1.1.16 1)插件名称变更为:大数据集导出插件 2)支持导出为 CSV 类型文件 1.2 应用场景 大批量数据导出的时候,会对服务器、网络传输、数据库…

Python eval()函数详解

一、eval()函数 用来执行一个字符串表达式,并返回表达式的值。可以把字符串转化为list,dict ,tuple。 二、eval()函数源码 三、eval()函数语法 eval(*args, **kwargs) 说明: expression -- 表达式。globals -- 变量作用域,全局命名空间&…

设计模式之美——单元测试和代码可测性

最可落地执行、最有效的保证重构不出错的手段应该就是单元测试(Unit Testing)。 什么是单元测试? 单元测试由研发工程师自己来编写,用来测试自己写的代码的正确性。我们常常将它跟集成测试放到一块来对比。单元测试相对于集成测…

【PyTorch】Torchvision Models

文章目录六、Torchvision Models1、VGG1.1 add1.2 modify2、Save and Load2.1 模型结构 模型参数2.2 模型参数(官方推荐)2.3 Trap六、Torchvision Models 1、VGG VGG参考文档:https://pytorch.org/vision/stable/models/vgg.html 以VGG16为…

apache-atlas-hbase-hook源码分析

元数据类型 Hbase元数据类型, 包括命令空间、表、列族、列 public enum HBaseDataTypes {// ClassesHBASE_NAMESPACE,HBASE_TABLE,HBASE_COLUMN_FAMILY,HBASE_COLUMN;public String getName() {return name().toLowerCase();} }Hbase元数据采集实现 1)批量采集HBa…

【windows】实战部署二(使用)SVNserver服务端+SVNclient客户端

SVN服务器应用 创建版本库 1、打开VisualSVN Server: 2、建立版本库: 需要右键单击左边窗口的Repositores,在弹出的右键菜单中选择Create New Repository或者新建-Repository 3、默认选择,点击 “下一步” 按钮: Regular FSFS…

物联网安全年报漏洞情况

物联网 威胁分析漏洞篇物联网威胁分析—漏洞篇 引言 本章将从漏洞利用角度对物联网威胁进行分析。首先,我们分析了 NVD和 Exploit-DB中的物联网 年度漏洞及利用 1 变化趋势;之后统计了绿盟威胁捕获系统捕获到的物联网漏洞利用的整体情况;最…

Matlab深度学习实战一:LeNe-5图像分类篇MNIST数据集分十类且matlab提供模型框架全网为唯一详细操作流程

1.数据集简介下载与准备 2.matlab搭建模型相关知识 3.matlab软件的操作过程: (1)界面操作 (2)深度学习设计器使用 (3)图像数据导入 (4)训练可视化 一、数据集简介下载与…

mysql基本命令操作

MySQL数据库管理 SQL语句 SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能 DDL:数据定义语言,用于创建数据库对象,如库、表、索引等 DML:数据操纵语言,用于对表中的数据进行…

[附源码]计算机毕业设计JAVA民宿网站管理系统

[附源码]计算机毕业设计JAVA民宿网站管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

Android 10.0 11.0 12.0 启动模拟器教程

Android 10.0 11.0 12.0 启动模拟器教程 一、android 12.0 模拟器二、创建模拟器设备三、创建删除路经文件夹avd和配置环境变量四、启动模拟器一、android 12.0 模拟器 Android 10.0 11.0 12.0 启动模拟器都行,我选择android 12.0 模拟器 二、创建模拟器设备 第一步骤:在 …

i211网卡在Monterey及以上驱动方法

两种方法:一、驱动换成别人修改后的AppleIGB.kext。这么做一般情况用着没问题。但是如果你虚拟机桥接到这个网卡,可以获取到IP,网关等所有参数,就是不能上网 二、刷网卡固件,将i211刷成i210,直接免驱。 macos下操作 …