基于DPDK的高性能Snort DAQ模块软件 =============================== # **介绍**   Snort从2.9开始在数据包捕获模块中引入了数据采集(Data Acquisition)库DAQ,用于数据包的I/O,DAQ利用一个抽象层libdaq替换了对libpcap函数的直接调用,使得Snort本身不用修改就可以对不同的软、硬件接口进行方便的操作。
  Snort在选择具体DAQ接口时可以通过命令行参数或者配置文件进行配置。目前业界实现的数据包捕获模块主要提供了以下几种类型的模块:Pcap、AFPacket、Bpf、Dump、Fst、Trace,这些接口的数据采集方式大都不同程度上依赖于内核态驱动,并通过多层内存拷贝才能将数据上送至应用程序,使得数据包捕获模块成为整体系统的性能瓶颈之一。
  基于飞腾平台高性能网络数据采集软件的封装接口,本软件实现了高性能Snort DAQ模块DPDK_DAQ,基于DPDK的零拷贝、应用层驱动轮询等技术,可成倍提升Snort数据包捕获模块的处理性能。
# **环境要求** `硬件:`FT2000+服务器或者D2000桌面机+X710网卡
`操作系统:`Centos7.6
`软件依赖:` Gcc9.3.1、Cmake3.12.0、DPDK19.15
# **编译和安装** `步骤一` 下载Libdaq。
git clone https://gitee.com/phytium_software/Phytium-snort3-libdaq.git
`步骤二` 配置和生成Makefile。
cd libdaq
./bootstrap
./configure
`步骤三` 编译和安装。
make;make install
`步骤四` 建立软连接。
ln -s /usr/local/lib/libdaq.so.3.0.0 /usr/lib64/libdaq.so
# **性能对比** Libdaq中包含测试Demo,可以对各种DAQ进行性能比较。运行命令如下:
./daqtest-static -i enp4s0f2 -d dpdk -z 10 -p -k
./daqtest-static -i enp4s0f2 -d pcap -p -k
./daqtest-static -i enp4s0f2 -d afpacket -p -k
飞腾版DAQ相较于Libpcap和Afpacket性能提升24.8和19.3倍,性能提升显著。
性能提升的原因,一部分是飞腾版DAQ能够支持多线程模式以及飞腾平台NUMA架构特性,另一部分是因为采用用户态驱动和轮询的模式来替换内核驱动和中断模式,减少了报文拷贝次数。