APP下载

OpenStack云平台中的网络数据性能研究与优化

2018-05-17徐启后

电子设计工程 2018年9期
关键词:网络设备网卡内核

徐启后

(武汉邮电科学研究院湖北武汉430074)

进入新世纪以来,全球数据量的爆炸式增长,人们进入了一个信息爆炸的时代。每秒数以亿万计的数据在互联网上不断产生,如何获取、存储、管理、处理如此庞大的数据量成为了如今急需解决的问题[1-2]。为了解决这一问题,云计算被提出并寄予厚望。OpenStack作为当前解决云计算方案中最佳的开源项目,是全球各大公有云、私有云以及混合云提供商的首选云平台[3]。但是由于x86服务器架构是一种通用服务器平台,并非是专门针对OpenStack网络服务,x86服务器提供的数据平面性能在面临大量并发业务时捉襟见肘。同时现阶段所使用的技术限制了OpenStack的网络稳定性、灵活性和虚拟网络的吞吐量,制约了OpenStack云环境数据平面的传输能力,从而影响了OpenStack的进一步发展。因此需要引入更加先进和灵活的方法来解决上面提到的这些问题。

1 OpenStack及网络组件Neutron简介

OpenStack是由美国国家航空航天局(NASA)发起的开源软件项目,它是以Apache授权的自由软件和开源代码的软件开发项目[4]。OpenStack的社区现已发展成为由1 000多家公司和数以万计的开发者协作提供代码开发,版本升级的平台。作为公有云和私有云的开源云计算平台,OpenStack的主要任务是简化云计算平台的搭建过程和改善云数据中心的管理方式。

典型的OpenStack平台组网图如图1所示。将OpenStack的组件——包含了计算服务Nova、网络服务Neutron、镜像服务Glance、身份认证服务Keystone、对象存储服务Swift、用户Web页面服务Horizon等等组件分别部署在对应的节点上就组成一个简单的云平台。

图1 典型的OpenStack平台组网图

Neutron作为OpenStack中的核心组件之一,是OpenStack社区的核心项目之一,提供云计算环境下的虚拟网络功能[4-5]。在OpenStack云环境中的虚拟网络也如同物理网络一样,将网络、子网、端口、路由器等概念引入,组建一个虚拟网络就是将这几个基本概念有机的结合到一起。

图2所示为在OpenStack云环境内部组成虚拟网络的虚拟网络设备的组网结构。从图中可以看到虚拟网络设备分为以下几种:

1)内部端口:这是Linux中提供的虚拟接口设备,其中vnet设备是虚拟机的虚拟网卡设备,tap设备作为连接dhcp和Openvswitch虚拟交换机的接口设备,而qr/qg设备则连接Openvswitch虚拟交换机和qrouter命名空间[6-7]。

2)Openvswitch虚拟交换机:由Openvswitch软件创建的虚拟交换机,其中虚拟交换机br-int用于实现租户内的虚拟网络,而网络节点的br-ex用于实现外部网络,br-eth用于实现租户访问外网和租户之间相互访问的数据通道,同时也是节点出口。

3)veth pair:qvbqvo和 int-br-ethphy-br-eth设备对都是连接两个虚拟网桥的veth pair,相当于物理网络中的一根网线[8]。

4)Linux bridge:这是一种功能相对简单的虚拟网桥设备,通过访问内核协议栈实现数据交换[9]。如图2所示,qbr设备就是Linux bridge设备。

图2 OpenStack云平台虚拟网络设备结构图

针对虚拟机访问不同的访问对象,可以把虚拟机的数据包流向分为以下几种:

1)虚拟机访问同一计算节点同一租户的虚拟机。虚拟机VM1发出的数据包是通过vnet1接口到qbrXXX这个linux bridge上的,而qbrXXX与br-int之间用qvbqvo这种veth pair来连接。在同一租户中的数据包在br-int上会打上同一的vlan tag,而不同的租户的数据包打上不同的vlan tag,这样就实现了不同租户的隔离。

2)在虚机访问不同计算节点同一租户的虚拟机时,虚拟机发出的数据包由于需要访问的虚拟机不在同一个计算节点,数据包需要经过网络节点之后来访问另一个计算节点。因此,数据包从虚拟机发出,经过 br-int打上 vlan tag,在 br-eth上换上mod_vlan_id,然后从计算节点发送到网络节点的breth上,然后从网络节点发送到另外一个计算节点上,最终发到需要访问的虚拟机上。

可以发现无论是访问同一节点的还是不同节点的虚拟机,都需要虚拟机发出的数据包都需要经过依次经过Linux Bridge、Openvswitch、物理网卡等设备,提升这些设备的性能成为了优化OpenStack网络的关键。

2 OpenStack网络性能瓶颈

从云平台的整体来看,通过分析OpenStack云环境的网络组成,可以将其分为两个部分,一是由物理网络设备组成的网络,另一种是由软件模拟的网络设备组成的虚拟网络。物理网络的性能由物理设备——交换机、路由器等网络设备的性能决定,是虚拟网络的承载。物理网络的性能可以通过选用更好性能的物理网络设备,增加物理网络设备的数量来提高。而OpenStack云平台中网络性能主要受制于虚拟网络的性能瓶颈[10]。虚拟网络设备的性能由虚拟软件的性能和x86平台的性能决定。OpenStack虚拟网络主要由Openvswitch和Linux Bridge这两个软件生成的虚拟网络设备组成。由Linux Bridge生成的网络设备是用于安全组功能的qbr设备,每一个qbr设备连接一台虚拟机,通过测试原生的Linux Bridge设备性能满足一台虚拟机的性能要求。而由Openvswitch生成的设备有用于实现租户网络的brint,有节点出口br-eth,还有外网出口br-ex。但是经过测试发现原生Openvswtich的包转发率仅有0.75Mbps,由于在云平台中有众多虚拟机通过Openvswitch相连,Openvswitch的数据包转发性能会直接影响整个云环境的网络性能[11]。

从数据包在云平台中的传输过程来看,云平台的网络性能由以下两方面影响:一是数据包有从物理交换机到达物理网卡的过程;二是从物理网卡到虚拟机的过程。交换机到网卡的部分已经由物理网络硬件解决,在此本文讨论数据包从网卡到虚拟机的过程。一个数据包从网卡到达虚拟机的过程可以分为两部分。第一,从网卡到虚拟交换机;第二,从虚拟交换机到虚拟机。

1)数据包从网卡到虚拟交换机。其实可以认为是从网卡到一个应用程序的过程。数据包到达网卡,网卡接收到电信号并将其转化为数字信号存储到网卡寄存器进入网卡收包队列后,网卡会产生硬件中断,发送中断请求给CPU触发CPU的中断,进入中断服务程序。然后需要由Openvswitch的内核态快速通路openvswitch.ko进行内核态的包处理,然后从内核态进入用户态与抽象的网络设备的交互,到达Openvswitch主进程ovs-vswitchd。数据包从网卡到达CPU寄存器是基于异步中断信号模式的收包,是不断的在做中断处理,上下文切换,每次处理这种开销是固定的,累加起来的负荷是非常明显的。数据包从内核态openvswitch.ko到ovs-vswitchd需要从内核态切换到用户态,这种切换伴随这内存拷贝和上下文的切换[10,12]。

2)数据包从虚拟交换机到虚拟机。从性能和安全两方面综合考虑,虚拟机的I/O一般使用半虚拟化方案——virtio/virtio-net[10]。当虚拟机发送报文时,它会利用消息通知机制通知KVM(Kernel-based Virtual Machine),并退出到用户空间Qemu进程,然后由Qemu开始对Tap设备进行读写。这个过程中,在数据通道从Tap设备到Qemu的报文拷贝和Qemu到虚拟机的报文拷贝,两次报文拷贝导致报文发送上的性能瓶颈;在消息通知路径上,当报文到达Tap设备时内核发送到Qemu通知消息,然后Qemu利用ioctl向KVM请求中断,KVM发送中断到虚拟机,这样也会带来不必要的性能开销[11]。

当然数据包从虚拟机到达网卡的过程与以上过程是一个相反的类似过程,在此不在赘述。

3 OpenStack网络优化设计

首先,针对Openvswitch的数据包转发性能问题,根据上一节中对Openvswitch的数据包转发流程的分析,跟数据包转发性能相关的主要有两个组件:ovs-vswitch(用户态慢速通道)和openvswitch.ko(内核态快速通道)。为了减少网卡在接收和发送数据包过程中的CPU的中断次数,文中在云环境中使用高性能的向量化PMD(Poll-mode driver)代替异步中断模式[13]。这样在有大量的数据包需要发送或者接收的时候,会触发一个收包或者发包中断,唤醒应用程序的收发包进程,应用程序进行轮询收发包,这样CPU在有大量数据包需要处理的时候不会收到中断信号,同时也不会让轮询收发包进程一直占用CPU。为了减少Openvswitch转发过程中内核态和用户态之间切换,如图3所示文中给出了一种数据包不经过内核态openvswitch.ko处理直接到达用户态的方式。通过向量指令将使得vSwitch netdev可以在用户态访问数据包所存储的内存地址,同时通过dpif和dpif-netdev实现用户态的快速数据通路。

图3 优化后Openvswitch的数据通道

其次,针对虚拟交换机到虚拟机的两次拷贝和一次用户态和内核态的切换所带来的性能损耗,文中采用vhost-user方式实现优化。vhost的库实现了以下特性:

1)实现了一种用户态中的vhost-backend,使得数据包从虚拟机到后端驱动不需要切换CPU特权等级。

2)实现了对virtio网络设备的管理,包括virtionet设备的创建和销毁[14];

3)通过IVSHMEM将宿主机内存和虚拟机共享,将虚拟机的物理地址映射到vhost-user的地址空间,实现了数据包从虚拟机到后端驱动的零内存拷贝[15];

4)通过eventfd接收来自虚拟机的接收报文消息通知vhost接收来自虚拟机的报文,同时通过eventfd通知虚拟机接收报文;

图4 使用vhost-user后虚拟机到网卡结构图

如图4所示是使用vhost-user后虚拟机到网卡的结构图。图中当虚拟机发送数据包时,数据包经由virtio driver的两个虚拟队列——tx发送。tx将数据包发送给用户态中的vhost,同时virtio driver通过eventfd通知vhost接收数据包。由于虚拟机的物理地址映射到了vhost的地址空间,因此virtio只需要通过eventfd将数据包所在内存地址告诉vhost,这样vhost就可以通过地址偏移计算出数据包所在虚拟机物理地址[13]。当虚拟机从Openvswitch接收数据包时,数据包会被存储到vhost的地址空间,同时vhost通过eventfd发送通知消息给virtio driver让其接收报文,并告知virtio driver数据包所在地址空间。由于虚拟机的地址空间和vhost地址空间是共享的,这样virtio driver只需要找到对应的地址就可以使得虚拟机接收到数据包。

图5 优化后虚拟网络结构图

经过以上方法优化后,一台虚拟机在OpenStack云平台中的虚拟网络如图5所示。虚拟机通过vhost-user接口连接到虚拟交换机上,由于没有了linux bridge简化了虚拟网络的结构,但是也同时无法使用内核态的iptables实现安全组功能,因此需要使用安全组的另一种实现方式,Openflow流表实现。因此在OpenStack的配置文件需要加入以Open⁃vswitch为驱动的firewall_driver。

4 测试方案与结果分析

文中的测试是通过对比原生的OpenStack和优化后OpenStack的二层/三层转发性能得出测试结论。测试方案如图6所示,在测试优化后的转发能力测试中,将一台服务器1作为转发服务器,一台服务器2作为测试服务器。其中转发服务器作为OpenStack中的计算节点,在上面创建一台虚拟机,并在虚拟机上安装L2/L3转发程序:dpdk_l2_forwarding和dpdk_l3_forwarding。图6中服务器2通过DPDK Pktgen程序从eth0网卡发送数据包,通过服务器2和服务器1之间的网线发送到Openvswitch+这个虚拟交换机上,并通过修改Openvswitch上的流表规则将发送到服务器1的eth0网卡上的数据包都发送给vhost-user1这个接口,数据包通过虚拟机的virtio接口将数据包交给虚拟机中的L2/L3 Forwarding程序处理,通过配置L2/L3 Forwarding程序将数据包由vhost-user2这个接口发送出虚拟机,最终发送回DPDK Pktgen程序,并由其进行测量[16]。在测试过程中,原生的OpenStack在二层/三层转发测试的过程中发现在小包的处理上有明显的丢包现象,而由于使用大页内存技术和轮询技术,极大的提高了虚拟交换机收包的能力,使得在优化后的测试中没有出现丢包现象。同时通过如图7和8所示优化后性能是原生OpenStack的6~7倍。

图6 优化后二层/三层转发测试模型图

图7 二层转发测试数据

图8 三层转发测试数据

5 结束语

文中首先对OpenStack云平台及其网络组件Neutron进行了研究,并通过研究影响Nuetron虚拟网络的因素,发现通过减少中断处理、内存拷贝、系统调用和协议处理的开销可以优化OpenStack的虚拟网络的性能。通过优化网卡数据包到达Open⁃vswitch的途径和引入vhost-user接口提升了Open⁃Stack数据网络中二层和三层的转发性能。经过测试,OpenStack环境优化后可以将二层和三层转发性能提高6-7倍,大大改善了OpenStack的网络性能。

参考文献:

[1]刘辉邦,罗萱,黄保青,等.云计算中虚拟网络服务的性能测量及运营实践[C]//中国高等教育学会教育信息化分会第十二次学术年会论文集,2014.

[2]王喜文.试析中国云计算产业的发展路径[J].物联网技术,2014(3):4-5.

[3]张丽梅.基于负载均衡的云资源调度策略研究[D].银川:宁夏大学,2014.

[4]陈陶,顾双双,柳钮滔,等.基于OpenStack Juno版的私有云平台部署及实践[J].物联网技术,2015(6):64-67.

[5]张华,向辉,刘艳凯.深入浅出Neutron:OpenStack网络技术[M].北京:清华大学出版社,2015.

[6]李莉,李纪成,张超然,等.基于OpenStack云平台Neutron关键技术研究[J].长春理工大学学报自然科学版,2015,38(6):114-117.

[7]俞淑妍.基于OpenFlow的软件定义网络缓存加速系统的研究与实现[D].北京:北京邮电大学,2014.

[8]D Zhou,B Fan,H Lim,et al.Scalable,High Perfor⁃mance Ethernet Forwarding with CuckooSwitch[C].Proceedings of the 2013 ACM International Confer⁃ence on Emerging Networking Experiments and Technologies,USA,2013:97-108.

[9]Rizzo L,Carbone M,Catalli G.Transparent accel⁃eration of software packet forwarding using netmap[C]//INFOCOM,2012 Proceedings IEEE.IEEE,2012:2471-2479.

[10]Paolino M, Nikolaev N, Fanguede J, et al.SnabbSwitch user space virtual switch benchmark and performance optimization for NFV[C]//Net⁃work Function Virtualization and Software Defined Network.IEEE,2016:86-92.

[11]Koka P,Mccracken M O,Schwetman H D,et al.Combining a remote TLB lookup and a subsequent cache miss into a single coherence operation:US,US9003163[P].2015.

[12]Casoni M,Grazia C A,Patriciello N.On the perfor⁃mance of Linux Container with Netmap/VALE for networks virtualization[C]//2013 19th IEEE Inter⁃nationalConferenceonNetworks(ICON).2013:1-6.

[13]朱河清.深入浅出DPDK[M].北京:机械工业出版社,2016.

[14]刘萌萌.基于SDN的全网路由虚拟化组件的研究与实现[D].北京:北京邮电大学,2015.

[15]Patni S,George J,Lahoti P,et al.A zero-copy fast channel for inter-guest and guest-host commu⁃nication using VirtIO-serial[C]//International Con⁃ference on Next Generation Computing Technolo⁃gies.IEEE,2015:6-9.

[16]刘志聪,李秦伟,王胜俊.OpenStack云平台Neu⁃tron的研究与测试[J].自动化与仪器仪表,2015(6):85-87.

猜你喜欢

网络设备网卡内核
网络设备的安装与调试课程思政整体设计
强化『高新』内核 打造农业『硅谷』
一种基于C# 的网络设备自动化登录工具的研制
Server 2016网卡组合模式
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
微生物内核 生态型农资
挑战Killer网卡Realtek网游专用Dragon网卡
读编往来
无线网卡种类有什么区别?