【海云捷迅云课堂】DPDK技术分享文档

海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情回复。

概述

随着网络的普及,为了满足日益增长的需求、应对大量的用户请求,对网络流量的要求越来越高。而网络通讯的的核心是报文的转发,Linux通过内核协议栈进行转发。在转发的过程中,报文先进入内核区然后拷贝到用户区,供给上层应用程序处理,再加上协议栈中嵌入了大量用于对接的接口,对性能也造成了大量消耗,不适合于处理大规模网络数据包。

如果能让应用程序直接接管网络数据包处理、内存管理以及CPU调度,那么性能可以得到一个质的提升,因而DPDK技术应时而生。

Intel® DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,它不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。目前已经验证可以运行在大多数Linux操作系统上,包括FreeBSD 9.2、Fedora release18、Ubuntu 12.04 LTS、RedHat Enterprise Linux 6.3和Suse EnterpriseLinux 11 SP2等。

DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。Linux内核将DPDK应用程序看作是一个普通的用户态进程,包括它的编译、连接和加载方式和普通程序没有什么两样。

1 DPDK实现原理

DPDK实现提升速度的主要模块如下:

网络层模块

内存管理模块

内核管理模块

 

  • 网络模块

传统Linux网络层数据包流程:

硬件中断—>向内核线程分发数据包—>软件中断—>线程在协议栈中处理数据包—>通知用户层—>用户层接收数据包—>网络层—>逻辑层—>业务层

DPDK网络层数据包流程:

硬件中断—>放弃中断—>用户层通过设备映射接收数据包—>用户层协议栈—>网络层—>逻辑层—>业务层

如上述流程所示,DPDK拦截中断机制,不触发后续中断和流程流程,绕过协议栈直接从网卡驱动获取到数据包,把包提交给用户空间,减去了中断和内核中内存拷贝消耗的时间,加快了数据包的处理速度。

  • 内存管理模块

HugePages相比默认4k页表的优点:

1、HugePages 会在系统启动时,直接分配并保留对应大小的内存区域,没有管理员的介入,是不会释放和改变的。

2、HugePages 不会swap,没有页表的换入和换出。

3、降低Page Table查询负载。

4、由于虚拟内存需要两步操作才能实际对应到物理内存地址,因此更少的Pages减轻了Page Table访问热度,避免了Page Table热点瓶颈问题。

DPDK使用HugePage的思想就是让程序尽量独占内存防止内存换出,扩大页表提高Hash命中率;此外,DPDK在内存分配上还可通过proc提供的内存信息,使CPU尽量使用靠近其所在NUMA节点的内存,避免访问远程内存影响效率。

  • 内核管理模块

Affinity是进程的一个属性,这个属性指明了进程调度器能够把这个进程调度到哪些CPU上。在Linux中,可利用CPU Affinity 把一个或多个进程绑定到一个或多个CPU上。CPU Affinity分为2种,分别为soft affinitysoft affinity和hard affinity。soft affinity仅是一个建议,如果不可避免,调度器还是会把进程调度到其它的CPU上。hard affinity是调度器必须遵守的规则。

使用Affinity的优点:

1、增加CPU缓存的命中率。CPU之间是不共享缓存的,如果进程频繁的在各个CPU间进行切换,需要不断的使旧CPU的Cache失效。如果进程只在某个CPU上执行,则不会出现失效的情况。在多个线程操作的是相同的数据的情况下,如果把这些线程调度到一个处理器上,大大的增加了CPU缓存的命中率。

2、适合Time-Sensitive应用。在Real-Time或Time-Sensitive应用中,我们可以把系统进程绑定到某些CPU上,把应用进程绑定到剩余的CPU上。典型的设置是,把应用绑定到某个CPU上,把其它所有的进程绑定到其它的CPU上

2 OVS-DPDK和原生OVS对比

  • 原生OVS数据流处理过程如下

    首先查看有没有事先订阅的事件,如果有直接转交给该对应的处理函数,然后匹配流表,最后按照传统网络协议栈进行处理【海云捷迅云课堂】DPDK技术分享文档

  • 1、数据包到达物理网卡后上传给Datapath;

    2、 Datapath 检查缓存中的是否有Fast Path可以直接转发这个包,如果在缓存中没有找到记录,内核通过Netlink将消息发送给用户态。在用户态有线程监听消息,一旦有消息,则触发用户空间的数据包upcall处理;3、vswitchd检查数据库以查看数据包的目的端口位置;

    4、vswitchd对未知路径的数据包寻找流表规则,刷新内核态流表内容;

    5、 将流表信息发送给Datapath,刷新内核态流表内容,重发数据包;

    6、再次查询流表,按照所获取数据包精确转发规则进行数据包转发操作。

    OVS-DPDK方式数据流处理如下

  • 【海云捷迅云课堂】DPDK技术分享文档

  • 用户态进程直接接管网卡收发的数据包,采用“IO独占核”技术,即每个端口分配一个核专门用于数据收发,轮询式处理方式代替中断式处理,显著提高IO性能。

    DPDK技术在AWCloud产品中的应用

    AWCloud云计算管理平台使用DPDK技术,配合CPU Affinity和HugePages技术,加速虚拟机和物理机处理数据包的速度。

    产品中携带OVS-DPDK软件,可用于替换原生OVS,在用户进行开启DPDK操作后,原OVS软件包即刻进行卸载,更替为OVS-DPDK版本,调整所有OVS网桥相关设备的属性,并且保留原有的OVS上的所有网桥、端口设备;该操作在物理机重启后仍然生效。

  • 【海云捷迅云课堂】DPDK技术分享文档

  •