橙姐导读:随着云规模的不断扩大,以及业务层面对时延和带宽的要求越来越高,使用DPDK加速网络数据包处理的方法在纵向和横向扩展上都存在局限性。 可编程芯片已成为业界的热门话题。 本文主要介绍可编程网卡芯片在滴滴云网络的应用实践、遇到的问题、带来的利润以及开源社区的贡献。
1.
数据中心面临的问题
随着滴滴云规模不断扩大,业务层面对时延、带宽的要求越来越高。 2018年,滴滴云网络团队基于开源社区推出了OVS-DPDK解决方案。 DPDK 是用于在 X86 平台上快速处理消息的库和驱动程序的集合。 它的主要优点是通过Linux内核、显存和PMD()模型驱动来实现加速。 我们为OVS-DPDK提供在线热升级功能,保证升级过程中虚拟机服务无感知,网络时间在微秒级。 同时,我们对OVS-DPDK数据转发平面进行了优化。 为不同化学主机上的虚拟机实现了网络延迟)
滴滴内部云接入、高性能计算HPC、机器学习对网络提出了更高的要求。 通过处理消息的形式在性能和延迟方面远远优于基于Linux内核的转发实现。 然而早已无法满足数据中心流量剧增带来的需求。
2.
技术方案选择
在云网络环境下,估计节点DPDK不会占用太多CPU,否则会影响CPU销量物理网卡mac怎么修改,通常使用1-2个CPU进行数据包处理。 同时物理网卡mac怎么修改,DPDK处理数据包的性能强烈依赖于CPU的计算能力。 因此,估计节点网络的纵向扩展和横向扩展都存在局限性。
在边缘网段节点,我们可以通过扩展服务器来增加网络处理能力,以满足业务需求。 而且服务器的大规模扩容需要更多的机器、功耗和运维成本。
软件定义网络(SDN)是一种新的网络创新架构,也是网络虚拟化的一种方法。 其核心思想是将网络设备的控制平面和数据平面分离。 控制平面可以通过集中控制实现不同的业务逻辑:拓扑发现、路由管理、安全策略、网络虚拟化等。数据平面更专注于数据包转发。 在 AWSre: 2018 上,AWS 推出了 Nitro。 系统通过硬件芯片加速虚拟机IO处理(网络、存储、安全等)。
目前业界加速网络处理的重点在硬件层面:AISC、FPGA、P4、可编程网卡、智能网卡等。
3.
基于可编程芯片的解决方案
▍3.1 硬件芯片选型
传统 AISC 卡
该卡相对成熟,但业务逻辑固定,难以适应云上复杂的业务场景。
可编程门队列 FPGA
FPGA实现网络加速需要专业的FPGA技术人员,以及专业的网络研发人员。 同时,成本和开发周期必然有一定的限制。
P4
P4具有灵活的可编程性,更适合网段节点的数据处理。 它不适合在估计节点中使用。 同时,价格也是一个考虑的诱因。
可编程网卡芯片
通过检查发现,可编程网卡不仅具有通用网卡的功能,还可以实现报文匹配,并对报文进行特定操作,如:修改、封装、转发、上报等通过发布流表规则。 文本到CPU等。这些灵活可编程的硬件芯片可以满足快速迭代的需求。
▍3.2 转发模型
为了满足网元业务灵活性和多样性的要求,我们将网元业务与底层平台功能分离,放弃传统的数据平面转发模型,采用类似于的macth+的形式。 这样,不同的匹配规则、不同的匹配就可以实现不同的业务逻辑。 这些弱依赖关系能否剥离业务和底层细节,方便业务功能迭代,快速上线,同时底层可编程芯片的更新不会影响业务逻辑。
▍3.3 网络平台化
随着云上业务场景的复杂化以及使用云的客户数量的不断增加,云上网络的功能也变得更加复杂。 为了统一估计节点和网段节点的功能,我们实现了统一的编程框架。 这样可以快速开发不同功能的网段节点,减轻运维负担。
▍3.4 落地练习
我们基于OVS-DPDK框架实现流表规则。 OVS以第一条消息触发的形式发送硬件流表规则。 这种方式的优点是需要的时候才下发规则,达到保存流表的目的,缺点是首条消息会有延迟。 经过检查,我们发现网卡至少支持百万级流表(使用x86显存或者其他扩展显存),最后我们放弃了OVS-DPDK转发层,使用dpctl套接字下发流表,这样就没有第一条消息的延迟问题,也减少了使用TC时数据平面过多的问题(那些转发平面包括:硬件芯片转发、TC数据平面、内核模块转发、层)。 我们更改了OVS-DPDK流表老化方法,以确保通过dpctl下发的规则不会被删除。 最后,消息处理受到限制。
滴滴云的网络数据面主要分为两部分:估算节点和网段节点。 估算节点主要负责虚拟机和容器网络的虚拟化,网段节点主要负责各种边缘节点服务如:SLB负载均衡、EIP包处理、分流器、SNAT、云企业网等。可编程网卡芯片通过平台方式应用于两个主要节点。
SLB负载均衡
提供四层负载均衡,根据用户策略将网络报文分发到虚拟网络服务节点。
提供弹性EIP服务。 用户可以将网段IP地址绑定到虚拟机、容器或裸机上,以获得网段访问功能。
通过连接滴滴数据中心和滴滴云虚拟网络,滴滴数据中心可以方便快捷地访问云端资源。
网络地址转换
提供虚拟机、容器、裸金属的接入网段服务。
云企业网络互联
互联服务支持将滴滴云上的多个VPC网络添加到云互联中,任意两个VPC网络都可以实现资源之间的相互访问。
估计节点
估算节点上主要有两种应用场景:一种场景是为估算节点上的虚拟机和容器提供VPC服务(网络隧道、限速、转发、换包、网段服务)和RDMA网络。 另一种场景是使用智能网卡为裸金属提供VPC服务。
▍3.5 遇到的问题
在调研开发过程中遇到诸多问题,在这里和大家总结分享下:
OVS-DPDK 支持有限
首先,OVS社区对DPDK套接字()的支持有限:实现极其有限。 用户需要独立完成开发:如设置、计量、vxlan隧道报文处理等。
端口转发限制
目前网卡芯片不支持从芯片的一个PF端口到另一端口的转发。 最后我们通过SRIOV+方法解决了这个问题。 据了解,后续网卡芯片开始支持该功能(该功能也受到固件的限制)。
打开崩溃
当包含仪表流表的规则被删除时,OVS进程退出。 这个问题确实是DPDK的一个bug。 目前该问题已修复,发送至社区并已接收。
调用 套接字会导致崩溃。 目前该问题已修复,发送至社区并已接收。
更改 OVS 配置导致 被删除。 目前该问题已修复并发送给社区并已接收。
仪表
OVS社区并没有实现这个功能。 我们根据业务特点创建了一个,并在OVS中实现了一个meter。 该系列补丁文件正在OVS社区发布,即将上线。
Decap/Encap 流表限制
早上下发多条带decap/encap的流表规则报错。 这个问题最终确实是DPDK的一个bug,而且这个问题已经被修复了,并且已经和社区合作修复了。
开盖+仪表限制
使用 decap+meter 作为交付规则时失败。 这个问题最终确实是DPDK的一个bug。 目前该问题已经修复,社区正在共同修复 id=
性能问题
在高并发的情况下,网卡芯片的性能会提升40%左右,最终确认是网卡驱动的问题。 目前该问题已得到确认并给出修复方案。
流表限制
通过移除流表盖来修复问题:
MAC地址对VxLAN的影响
化学主机的源MAC地址改变后,vxlan报文仍然使用原来的MAC地址,会导致收不到响应报文:
编号=
多次修改消息不生效的问题
使用多次更改消息,但问题不生效。 最后确认是内核驱动问题:
编号=
和mac配置不当导致=
编号=
▍3.6 性能数据
以实现的弹性网段为例(基础网络):
每秒(64B)
Mpbs(64B)
每秒(1500B)
兆比特(1500B)
8660.25
10067.98
服务延迟数据如下(使用-dpdk):
背景流量
段延迟
10W流表,并发流量
3你
10W流表,并发流量
6u
4.
开源社区贡献
不仅为开源社区提供,我们还会向开源社区反馈新功能和性能优化补丁:OVS、DPDK、Linux内核社区(约80+个补丁),Linux内核补丁列表如下如下:
团队介绍
▬
滴滴云平台事业群滴滴SDN网络团队负责云网络产品的规划、设计和开发。 为公有云提供负载均衡SLB、私网VPC、弹性网段EIP、SNAT、云互联等服务。 团队在Linux内核网络虚拟化、DPDK、OVS、可编程芯片、RDMA、智能网卡、云网络业务需求的系统优化等领域有着广泛而深入的研究。 团队拥有多个开源社区,涉及OVS、DPDK、Linux内核等。
关于作者
▬
专注高性能网络技术,从事云网络研发。 活跃于 Linux 内核、OVS 和 DPDK 开源社区。