DPDK和DNS服务器关系

来源:互联网 发布:mac如何查看qq群相册 编辑:程序博客网 时间:2024/05/16 11:47

为了更好的抗DDOS攻击与服务更多的用户,需求单机处理千万级别的DNS服务器。

要达到单机处理千万级别的只能采用轮询而非中断方式,在市面上的可实现技术方案有DPDK/pf_ring/netmap等.

 其中DPDK为Intel公司主推,并有BAT之类的大型公司进行商用,而且也比较适合处理UDP类型协议。

DPDK 的组成架构如下图所示,相关技术原理概述如下:



在最底部的内核态(Linux Kernel)DPDK 有两个模块:KNI 与 IGB_UIO。
  其中,KNI 提供给用户一个使用 Linux 内核态的协议栈,以及传统的 Linux 网络工具(如ethtool, ifconfig)。IGB_UIO(igb_uio.ko 和
  kni.ko. IGB_UIO)则借助了 UIO 技术,在初始化过程中将网卡硬件寄存器映射到用户态。


DPDK 的上层用户态由很多库组成,主要包括核心部件库(Core Libraries)、平台相关模块(Platform)、网卡轮询模式驱动模块(PMD-Natives&
  Virtual)、QoS 库、报文转发分类算法(Classify)等几大类,用户应用程序可以使用这些库进行二次开发.


用户态模式下的PMD Driver

  • 去除了中断影响,减少了操作系统内核的开销,消除了IO吞吐瓶颈;
  • 避免了内核态和用户态的报文拷贝;用户态下软件崩溃,不会影响系统的稳定性;
  • Intel提供的PMD驱动,充分利用指令和网卡的性能;

HugePage和m_buf管理

  • 提供2M和1G的巨页,减少了TLB Miss,TLB Miss严重影响报文转发性能;
  • 高效的m_buf管理,能够灵活的组织报文,包括多buffer接收,分片/重组,都能够轻松应对;

Ring

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

82599 SR-IOV NIC

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

Vector Instance /向量指令

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

采用其源码examples目录下l3fwd为基础进行最小原型开发demo。

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

  1. 先在simpleDNS服务端中临时配置一个服务IP进行过滤.
  2. 在DNS客户端通过手工配置ARP表使得客户端ping/dig操作的请求包可达服务端,
  3. 在simpleDNS服务端做解析请求包,如果是DNS请求构造响应包,其他类型如ARP/ICMP请求则通过KNI入接口ingress()重入Linux内核由
    其来处理后再通过KNI的egress()接口响应给客户端。

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


0 0