正文
避免了内核态和用户态的报文拷贝;用户态下软件崩溃,不会影响系统的稳定性;
Intel提供的PMD驱动,充分利用指令和网卡的性能;
HugePage和m_buf管理
Ring
82599 SR-IOV NIC
Vector Instance /向量指令
项目规划
为了使DPDK更好的在我司使用与发扬光大,我大致规划了初期、中期与长期三步走策略实现目标。
初期目标
实现一个最简单的DNS demo.
需求:
中期目标
实现一个高性能高并发的DNS服务
需求:
长期目标
实现高性能高并发的网络加速平台与应用体系
需求:
-
平台具有可移植性。
-
可透明承载多种业务(UDP/TCP)服务。
-
平台与服务物理分离。
-
可承载其他高级语言与虚拟化。
开发初试
为了验证其的可行性,我们对它进行了最小原型开发,实现了一个最简单的DNS服务程序,使其网络可达,dig能正确响应。
由于刚开始对DPDK一无所知,为了网络可达首先要面对的问题是服务器IP在哪儿配置的问题(这也许是一些初学者会面对的幼稚问题),还好已有前辈在QQ大致网上了解一些原理与其源码示例,采用其源码examples目录下l3fwd为基础进行最小原型开发demo。
为了使网络可达,我们做了如下开发:
-
先在simpleDNS服务端中临时配置一个服务IP进行过滤.
-
在DNS客户端通过手工配置ARP表使得客户端ping/dig操作的请求包可达服务端,
-
在simpleDNS服务端做解析请求包,如果是DNS请求构造响应包,其他类型如ARP/ICMP请求则通过KNI入接口ingress()重入Linux内核由
其来处理后再通过KNI的egress()接口响应给客户端。
经过上述编码调试后,最简单的原型验证通过了,为下面的全面开发提供了参考依据。