DPDK-POLL MODE DRIVER

来源:互联网 发布:材料库存软件 编辑:程序博客网 时间:2024/06/08 11:53

0x01 缘由

     网卡接受数据包时常见为异步中断模式,而DPDK采用轮询模式,以及混合中断轮询模式,然后做了较多的优化,如Burst收发包、批处理和时延隐藏、Intel SIMD指令。虽然这些特点今后可能不会用到,但是了解毕竟只有好处。

0x02 DPDK 此库特点

     DPDK包括1Gb,10Gb,40Gb和半虚拟化抽象层的轮询模式驱动(PMD, Poll Mode Driver)。PMD由用户空间的特定的驱动程序提供的API组成,用于对设备和它们相应的队列进行设置。抛弃了基于中断的异步信号发送机制为该架构带来很大的开销节省。避免中断性能瓶颈是DPDK提升数据包处理速度的关键之一。
     DPDK环境为数据包处理应用考虑了两种模型:运行至完成(run-to-completion)模型和管道(pipeline)模型。在运行至完成模型中,一个API向某个特定端口的接收描述符环轮询以接收数据包。接着这个数据包在同一个核上被处理,之后被一个发送用API放到端口的传输描述符环上;在管道模型中,一个核心会通过API对一个或多个端口的接收描述符环进行轮询,数据包通过环被接收和传递给另一个核心,然后在这个核心上被处理,之后可能被发送用API放到端口的传输描述符环上。
     运行至完成是一个同步模型,每个指派给DPDK的逻辑核心执行如下所示的循环:
     通过PMD接收用API来提取输出数据包
     根据转发,一一处理收到的数据包
     通过PMD发送用API发送输出数据包
     相反,管道模型是一个异步模型,有的逻辑核心只执行数据包提取,而有的只执行处理,收到的数据包在这些逻辑核心之间通过环来传递。提取核心执行如下的循环:
     通过PMD接收用API来提取输出数据包
     通过队列提供数据包给处理核心
     处理核心执行如下的循环:
     从队列中提取数据包
     根据重传(如果被转发)处理数据包
     为了避免不必要的中断性能瓶颈,执行环境禁止任何异步通知机制的使用。在任何需要或合适的时候,异步通信都应尽可能采用环的方式。
     在多核环境中避免锁竞争是一个重要的问题。为了处理这个问题,PMD被设计为可以尽可能地在单核私有资源下工作。例如,PMD为每个核心每个端口提供一个单独的队列。同样的,每个端口的接收队列只会被指派给唯一一个逻辑核心并接收它的轮询。
原创粉丝点击