热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

大家晚上好。那我们开始吧。主要还是抛装引玉,互相学习交流。今天和大家分享下面一些内容:1.关于openstack中VNF网络性能的一些思考和思路2.相关

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

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环境下实现高性能的网络服务


推荐阅读
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文详细介绍了cisco路由器IOS损坏时的恢复方法,包括进入ROMMON模式、设置IP地址、子网掩码、默认网关以及使用TFTP服务器传输IOS文件的步骤。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • HSRP热备份路由器协议的应用及配置
    本文介绍了HSRP热备份路由器协议的应用及配置方法,包括设计目标、工作原理、配置命令等。通过HSRP协议,可以实现在主动路由器故障时自动切换到备份路由器,保证网络连通性。此外,还介绍了R1和R2路由器的配置方法以及Sw1和Sw2交换机的配置方法,最后还介绍了测试连通性和路由追踪的方法。 ... [详细]
author-avatar
狂浪的眼神
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有