23.3. Myricom

来源:https://blog.inliniac.net/2012/07/10/suricata-on-myricom-capture-cards/

本指南将介绍如何使用Myricom的libpcap支持。假设您已正确安装网卡、加载Sniffer驱动并确保一切正常工作。请确认 dmesg 显示网卡处于嗅探模式:

[ 2102.860241] myri_snf INFO: eth4: Link0 is UP
[ 2101.341965] myri_snf INFO: eth5: Link0 is UP

我已将Myricom运行时库安装在 /opt/snf 目录下。

针对Myricom的libpcap编译Suricata:

./configure --with-libpcap-includes=/opt/snf/include/ --with-libpcap-libraries=/opt/snf/lib/ --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make
sudo make install

接下来配置环形缓冲区数量。本例使用8个缓冲区,因为我的四核超线程CPU有8个逻辑处理器。*下文*将详述buffer-size参数。

pcap:
  - interface: eth5
    threads: 8
    buffer-size: 512kb
    checksum-checks: no

设置8个线程会使Suricata为eth5创建8个读取线程。Myricom驱动确保每个线程绑定独立的环形缓冲区。

按以下方式启动Suricata:

SNF_NUM_RINGS=8 SNF_FLAGS=0x1 suricata -c suricata.yaml -i eth5 --runmode=workers

如需16个环形缓冲区,将配置文件中"threads"值改为`16`并启动:

SNF_NUM_RINGS=16 SNF_FLAGS=0x1 suricata -c suricata.yaml -i eth5 --runmode=workers

注意:使用Myricom网卡时,上述 pcap.buffer-size 配置项当前会被忽略。该值会传递至Suricata源码中的 pcap_set_buffer_size libpcap接口。Myricom技术支持说明:

"Sniffer10G的libpcap接口会忽略pcap_set_buffer_size()的设定值。snf_open()调用使用零作为dataring_size参数,这表示让Sniffer库使用默认值或SNF_DATARING_SIZE环境变量设定的值。"

Myricom在libpcap项目中提交的PR显示,未来SNF软件版本可能支持通过pcap.buffer-size yaml配置项设置SNF_DATARING_SIZE:

在此之前,可分别使用SNF_DATARING_SIZE和SNF_DESCRING_SIZE环境变量显式设置数据环和描述符环的大小。

SNF_DATARING_SIZE是用于存储入站报文数据的总内存量,该值在所有环形缓冲区间共享。 SNF_DESCRING_SIZE是用于存储报文元信息(包长、偏移量、时间戳)的总内存量,同样在所有环形缓冲区间共享。

Myricom建议描述符环设为数据环的1/4大小,但该比例可根据流量特征调整。 若未显式设置,Myricom默认使用:SNF_DATARING_SIZE = 256MB,SNF_DESCRING_SIZE = 64MB。

扩展上述16线程示例,以下命令可启动带16GB数据环和4GB描述符环的Suricata:

SNF_NUM_RINGS=16 SNF_DATARING_SIZE=17179869184 SNF_DESCRING_SIZE=4294967296 SNF_FLAGS=0x1 suricata -c suricata.yaml -i eth5 --runmode=workers

23.3.1. 调试信息

Myricom还提供获取调试信息的方法,可用于验证配置和收集额外信息。 设置SNF_DEBUG_MASK=3启用调试信息,可选设置SNF_DEBUG_FILENAME指定输出文件位置。

延续示例:

SNF_NUM_RINGS=16 SNF_DATARING_SIZE=17179869184 SNF_DESCRING_SIZE=4294967296 SNF_FLAGS=0x1 SNF_DEBUG_MASK=3 SNF_DEBUG_FILENAME="/tmp/snf.out" suricata -c suricata.yaml -i eth5 --runmode=workers

23.3.2. 补充信息