桔妹导读:随着云规模不断扩大以及业务层面对延迟、带宽的要求越来越高,采用DPDK 加速网络报文处理的方式在横向纵向扩展都出现了局限性。可编程芯片成为业界热点。本文主要讲述了可编程网卡芯片在滴滴云网络中的应用实践,遇到的问题、带来的收益以及开源社区贡献。 1. 数据中心面临的问题随着滴滴云规模的不断扩大,业务层面对延迟以及带宽的要求越来越高。2018年滴滴云网络团队上线了基于开源社区的OVS-DPDK方案。DPDK是X86平台报文快速处理的库和驱动的集合, 其主要优势为通过Bypass Linux内核,Hugepage内存以及PMD(Poll Mode Driver)模型驱动的方式实现加速。我们为OVS-DPDK提供了在线热升级功能,该功能保证了在升级过程中虚拟机业务无感知,并且网络Downtime时间为毫秒级别。同时我们优化了OVS-DPDK数据转发平面。实现了不同物理主机上的虚拟机网络延迟<150us,单核性能约~400w pps(双向)。 滴滴内部上云、高性能计算HPC,以及机器学习,对网络提出了更高的要求。通过CPU DPDK处理报文的方式,虽然在性能以及延迟方面远优于基于Linux 内核的转发实现。但CPU DPDK已经不能满足数据中心流量激增带来的需求。 2. 技术方案选择云网络环境中,在计算节点DPDK不会占用过多的CPU,否则会影响CPU售卖,一般会使用1-2 CPU用于数据报文处理。同时DPDK 处理数据报文的性能强依赖CPU算力。因此在计算节点网络的横向扩展以及纵向扩展都具有局限性。 在边际网关节点,我们可以通过扩展服务器的方式,提高网络处理容量进而满足业务需求。但是大规模的扩展服务器,需要承担更多的机器、功耗以及运维成本。 软件定义网络(Software Defined Network,SDN)是一种新型网络创新架构,是网络虚拟化的一种实现方式。其核心思想是将网络设备的控制面与数据面分离开来。控制层面可以通过集中控制的方式实现不同的业务逻辑:拓扑发现,路由管理,安全策略,网络虚拟化等。数据平面更专注在数据报文转发。2018年AWS re:Invent,AWS 介绍了Nitro System。该系统通过硬件芯片加速虚拟机IO处理(网络、存储、安全等)。 目前工业界,加速网络处理的焦点聚集到了硬件层面:AISC,FPGA,P4,可编程网卡,以及智能网卡等。 3. 基于可编程芯片的解决方案3.1 硬件芯片选择
3.2 转发模型为了满足网元业务灵活性、多样性的需求,我们将网元业务和底层平台功能分离,舍去了传统的数据面Pipeline转发模型,采用了类似Open Flow的macth+action的方式。这样不同的match规则和不同action 匹配能够实现不同的业务逻辑。这种弱依赖的关系能够剥离了业务和底层细节,方便业务功能迭代、快速上线,同时底层可编程芯片的更新不会对业务逻辑产生影响。 3.3 网络平台化随着云上业务场景的复杂化,以及上云的客户越来越多,云上网络的功能也复杂化。为了统一计算节点以及网关节点功能,我们实现了统一的编程框架。这样能够快速开发不同功能的网关节点,减少运维负担。 3.4 落地实践我们基于OVS-DPDK Offload 框架实现流表规则offload。OVS 采用首个报文触发的方式下发硬件流表规则,该方式的优点为在必须的时候下发规则,能够达到节省流表的目的,但是缺点却会导致首个报文延迟。经调研我们发现网卡支持至少百万级流表量(使用x86内存或者其他扩展内存),最终我们舍去OVS-DPDK ofproto 转发层,使用dpctl 接口下发流表,这样就不存在首个报文延迟问题,同时也缩减了使用TC Flower时数据面过多问题(这些转发平面包括:硬件芯片转发,TC数据面,OVS Linux 内核模块转发,以及ofproto层)。我们修改了OVS-DPDK 流表老化方式,保证通过dpctl 下发的规则不会被删除。最后通过upcall limit 限制了upcall 报文处理。滴滴云网络数据平面主要分为两大部分:计算节点和网关节点。计算节点主要负责虚拟机、容器网络的虚拟化,网关节点主要负责各种边际节点业务如:SLB负载均衡、vRouter EIP报文处理,分流器、SNAT、FullNAT、云企业网等。可编程网卡芯片通过平台化的方式在两个主要节点均有应用。
3.5 遇到的问题在调研开发过程中遇到诸多问题,在这里和大家总结分享下:
调用DPDK Meter API 接口导致crash。目前该问题已经修复,发送到社区并接收。 修改OVS 配置导致删除offload flow crash,目前该问题已经修复,发送到社区并接收。https://github.com/openvswitch/ovs/commit/058b80d3de31b2c539d9e6f5f6687bde78ef08e9
https://git./pub/scm/linux/kernel/git/netdev/net-next.git/commit/? id=24319258660a84dd77f4be026a55b10a12524919 3.6 性能数据以实现的vRouter 弹性公网网关为例(基础网络10Gpbs):
业务延迟数据如下(使用pktgen-dpdk latency):
4. 开源社区贡献除了为开源社区提供 bug patch,我们也将新增特性、性能优化patch回馈至开源社区:OVS、DPDK、Linux 内核社区(约80+ patch), 其中Linux 内核补丁列表如下: 团队介绍 滴滴云平台事业群滴滴SDN网络团队负责云网络产品的规划、设计、以及研发等工作。为公有云提供负载均衡SLB、专有网络VPC、弹性公网EIP、SNAT 以及云互联等服务。团队针对云网络业务需求,在Linux 内核网络虚拟化、DPDK、OVS、可编程芯片、RDMA、智能网卡以及系统优化等领域均有广泛深入的研究。团队具有多名开源社区contributor,涉及OVS、DPDK、Linux 内核等。 作者介绍 专注于高性能网络技术,从事云网络研发工作。活跃于Linux 内核、OVS、DPDK开源社区。 延伸阅读 内容编辑 | Charlotte & Teeo
|
|