您的位置:首页 > 其它

DPDK和DNS服务器关系

2016-04-05 15:15 176 查看
为了更好的抗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。

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

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

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

在simpleDNS服务端做解析请求包,如果是DNS请求构造响应包,其他类型如ARP/ICMP请求则通过KNI入接口ingress()重入Linux内核由

其来处理后再通过KNI的egress()接口响应给客户端。

经过上述编码调试后,最简单的原型验证通过了,为下面的全面开发提供了参考依据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: