专栏名称: 运维帮
互联网技术分享平台,分享的力量。帮主一直坚信技术可以改变世界,从毕业到现在干了15年运维,有许多话要和你说。
目录
相关文章推荐
51好读  ›  专栏  ›  运维帮

基于DPDK开发高性能DNS服务器实践总结

运维帮  · 公众号  · 运维  · 2017-04-07 17:09

正文

请到「今天看啥」查看全文


  • 避免了内核态和用户态的报文拷贝;用户态下软件崩溃,不会影响系统的稳定性;

  • Intel提供的PMD驱动,充分利用指令和网卡的性能;

  • HugePage和m_buf管理

    • 提供2M和1G的巨页,减少了TLB Miss,TLB Miss严重影响报文转发性能;

    • 高效的m_buf管理,能够灵活的组织报文,包括多buffer接收,分片/重组,都能够轻松应对;

    Ring

    • 无锁化的消息队列,实际验证,性能充足;

    82599 SR-IOV NIC

    • 实现虚拟化下高速吞吐;

    Vector Instance /向量指令

    • 明显的降低内存等待开销,提升CPU的流水线效率。

    项目规划

    为了使DPDK更好的在我司使用与发扬光大,我大致规划了初期、中期与长期三步走策略实现目标。

    初期目标

    实现一个最简单的DNS demo.

    需求:

    • 网络可达。

    • Dig示例域名可正确响应。

    中期目标

    实现一个高性能高并发的DNS服务

    需求:

    • 单机性能提高5倍以上。

    • 形成完整DNS产品服务(XNS、public DNS)。

    • 平台与服务逻辑分离。

    长期目标

    实现高性能高并发的网络加速平台与应用体系

    需求:

    • 平台具有可移植性。

    • 可透明承载多种业务(UDP/TCP)服务。

    • 平台与服务物理分离。

    • 可承载其他高级语言与虚拟化。

    开发初试

    为了验证其的可行性,我们对它进行了最小原型开发,实现了一个最简单的DNS服务程序,使其网络可达,dig能正确响应。

    由于刚开始对DPDK一无所知,为了网络可达首先要面对的问题是服务器IP在哪儿配置的问题(这也许是一些初学者会面对的幼稚问题),还好已有前辈在QQ大致网上了解一些原理与其源码示例,采用其源码examples目录下l3fwd为基础进行最小原型开发demo。

    为了使网络可达,我们做了如下开发:

    1. 先在simpleDNS服务端中临时配置一个服务IP进行过滤.

    2. 在DNS客户端通过手工配置ARP表使得客户端ping/dig操作的请求包可达服务端,

    3. 在simpleDNS服务端做解析请求包,如果是DNS请求构造响应包,其他类型如ARP/ICMP请求则通过KNI入接口ingress()重入Linux内核由
      其来处理后再通过KNI的egress()接口响应给客户端。

      经过上述编码调试后,最简单的原型验证通过了,为下面的全面开发提供了参考依据。







    请到「今天看啥」查看全文