1.DPDK概述
用软件的方式在通用多核处理器上,演绎着数据包处理的新篇章
2.数据包处理的主流硬件平台
1)硬件加速器
2)网络处理器
3)多核处理器
DPDK主要是以IA(Intel architecture)多核处理器为目标平台
3.IA本身衍化过程
问题1:CPU核数增多,然后内核驱动的收发包处理和用户态线程,依旧由操作系统调度执行,这个会造成什么新的问题?
4.DPDK大神来啦
几个技术点
1)轮询
2)用户态驱动:既避免了不必要的内存拷贝,又避免了系统调用
3)亲和性与独占:特定任务指定在某个核上工作,避免了线程在不同核间频繁切换,核间切换容易导致因cache miss 和 cache write back 造成的大量性能损失
4)降低访存开销:
5)软件调优
6)利用IA新硬件技术
7)充分挖掘网卡的潜能
5.DPDK 不断升级 的方法论
1)针对包处理能力的天花板
DPDK加速网络节点:DPDK系统报文吞吐能力上限,已经不再受限于CPU的核数,而是系统所能提供的所有 PCIe LANE的带宽,能插入多少个高速以太网接口卡
DPDK加速计算节点
DPDK加速存储节点
2)针对转发吞吐能力的天花板
6.DPDK实例
1)helloworld:启动基础运行环境
启动基础运行环境
编译可以使用的core
在每个core上,启动被指定的线程
int main(int argc, char const *argv[])
{
int ret;
unsigned lcore_id;
ret = rte_eal_init(argc, argv); // 启动基础运行环境
if(ret < 0)
rte_panic("Cannot init EAL\n")
/*call lcore_hello() on every slave lcore*/
RTE_LCORE_FOREACH_SLAVE(lcore_id) { // 遍历所有ELA指定可以使用的lcore
rte_eal_remote_launch(lcore_hello,NULL,lcore_id); // 在每个核上,启动被指定的线程
}
/* call it on master lcore too */
lcore_hello(NULL)
rte_eal_mp_wait_lcore();
return 0;
}