云数据中心网络与SDN:1.6.4 VEB性能优化
1.6.4 VEB性能优化
前面提到过,VN-TAG和VEPA的设计在很大程度上是为了解决服务器团队和网络团队的管理定界问题。不过后来随着以OpenvSwitch为代表的开源VEB在OpenStack大潮中迅速成熟,业界看到了VEB在自动化与灵活性上无与伦比的优势,因此VEB在虚拟机接入这一块又形成了绝对的优势,VN-TAG和VEPA的技术标准之争还没打响也就匆匆结束了,而VEB性能方面的问题则再次被搬上了台面。
VEB的性能优化是个很大的话题,大体而言可以分为两个方向:一是IO,二是转发通道。其中,涉及大量x86体系架构和内核领域的知识,超越了本书的覆盖范围,这里只能粗略地对这两个方向进行介绍。
IO的优化,又大致可以分为“虚拟机IO优化”以及“物理网卡IO优化”两个方面。传统的VEB通常工作在内核态,而虚拟机则运行在用户态,这意味着在“虚拟机–虚拟机”以及“虚拟机–物理网卡”间进行IO时,每个包都需要进行多次的空间切换与数据拷贝,构成了VEB IO瓶颈的主要来源,因此“虚拟机IO优化”以及“物理网卡IO优化”都是围绕着这一问题所展开的。“虚拟机IO优化”主要涉及虚拟化的技术,其演化主线为“全虚拟化—virtio—vhost-net—vhost-user”,目前来看最理想的方式是将VEB从内核态完全转移到用户态,从而实现虚拟机与VEB间IO的零切换和零拷贝。“物理网卡IO优化”主要涉及内核旁路的技术,包括PF_RING、Netmap、DPDK等,允许用户态VEB绕过低效的内核协议栈直接访问网卡的缓冲区,实现物理网卡与用户态VEB间的零拷贝。另外,Intel的VT-d+SR-IOV允许在虚拟机与物理网卡间实现IO直通,这种方式性能最好,但由于绕过了VEB,因此无法提供复杂的接入功能。不过用户态VEB也可以通过SR-IOV与物理网卡实现IO直通,再加上通过vhost-user与虚拟机间实现的零切换、零拷贝IO,即可获得相当可观的IO性能。
转发通道的优化,目标是提高L2/L3转发的效率。数据包通过IO输入VEB后,转发通道上主要会经历包头解析、表项查找、动作执行三个阶段,其中以表项查找的开销最大,通常的做法是优化表项的数据结构以及相应的查找算法,并合理地构建Cache。不过,无论是内核态VEB还是用户态VEB,即使转发通道上的结构和算法设计得再为精巧,转发的过程也不可避免地会消耗掉大量的CPU,减少了虚拟机可用的CPU资源。前面提到过,VN-TAG和VEPA的思路是复杂的转发功能交给物理网络去实现,但是损失掉了VEB的自动化和灵活性,业界最近流行起来的思路是保留VEB的全部能力,在此基础上通过服务器网卡对VEB进行硬件加速。这种网卡被称为SmartNIC,它需要具备非常灵活的能力,因此通常会使用更多的DRAM,一些实现中还要借助于FGPA。SmartNIC的加速机制,是通过配套的软件去同步VEB中的转发规则与状态,然后更新到网卡的硬件中,于是SmartNIC即可代替VEB行使其转发功能,遇到无法处理的数据包再交给VEB进行分析,因此实际上可以把SmartNIC看作VEB的硬件Cache。SmartNIC目前虽然还没有大规模的使用,不过在一些大型OTT数据中心内部已经有了成功落地的案例,SmartNIC未来的发展值得期待。
- 点赞
- 收藏
- 关注作者
评论(0)