suricata中DPDK收发包线程模型和配置说明

news2025/1/11 7:48:02

     《基于DPDK收包的suricata的安装和运行》中已经讲过基于DPDK收发包的suricata的安装过程,今天我们来看一下,suricata中DPDK的收发包线程模型以及相关的配置。

1、收发包线程模型:

通过分析代码,suricata中DPDK收发包线程模型如下:

        suricata按网卡指定收包线程,IPS模式下成对的网卡收包线程数必须得一样,在上图中,网卡1和网卡2是一对,每个网卡配置两个收包线程,网卡1的两个收包线程绑定cpu core1和core2,网卡2的两个收包线程绑定cpu core3和core4,网卡1的core1收包线程从网卡1的0号队列收报文,然后往网卡2的0号队列发,其它收包线程的收发报文关系见上图中的箭头。

分析一下上面的收包模型:

1)每个cpu core只处理某一个网卡的单个队列的报文,性能会高一些,但是会耗用更多的cpu。

2)在配置网卡RSS的情况下,相同五元组会话的报文,会在每个网卡的相同编号的队列进行处理,所以五元组会话是会存在多线程互斥访问的问题的。

3)每个发送队列只会有一个收包线程的cpu core进行调用,没有互斥的问题。但这种方式只适用于成对网口透明转发的情况,对二三层转发不太适合。

2、DPDK相关配置说明:

1)DPDK收包配置:

dpdk:

eal-params:

proc-type: primary

# DPDK capture support

# RX queues (and TX queues in IPS mode) are assigned to cores in 1:1 ratio

interfaces:

- interface: 0000:0b:00.0 # PCIe address of the NIC port

# Threading: possible values are either "auto" or number of threads

# - auto takes all cores

# in IPS mode it is required to specify the number of cores and the numbers on both interfaces must match

threads: 2

promisc: true # promiscuous mode - capture all packets

multicast: true # enables also detection on multicast packets

checksum-checks: true # if Suricata should validate checksums

checksum-checks-offload: false # if possible offload checksum validation to the NIC (saves Suricata resources)

mtu: 1500 # Set MTU of the device in bytes

# rss-hash-functions: 0x0 # advanced configuration option, use only if you use untested NIC card and experience RSS warnings,

# For `rss-hash-functions` use hexadecimal 0x01ab format to specify RSS hash function flags - DumpRssFlags can help (you can see output if you use -vvv option during Suri startup)

# setting auto to rss_hf sets the default RSS hash functions (based on IP addresses)

# To approximately calculate required amount of space (in bytes) for interface's mempool: mempool-size * mtu

# Make sure you have enough allocated hugepages.

# The optimum size for the packet memory pool (in terms of memory usage) is power of two minus one: n = (2^q - 1)

mempool-size: 65535 # The number of elements in the mbuf pool

# Mempool cache size must be lower or equal to:

# - RTE_MEMPOOL_CACHE_MAX_SIZE (by default 512) and

# - "mempool-size / 1.5"

# It is advised to choose cache_size to have "mempool-size modulo cache_size == 0".

# If this is not the case, some elements will always stay in the pool and will never be used.

# The cache can be disabled if the cache_size argument is set to 0, can be useful to avoid losing objects in cache

# If the value is empty or set to "auto", Suricata will attempt to set cache size of the mempool to a value

# that matches the previously mentioned recommendations

mempool-cache-size: 257

rx-descriptors: 1024

tx-descriptors: 1024

#

# IPS mode for Suricata works in 3 modes - none, tap, ips

# - none: IDS mode only - disables IPS functionality (does not further forward packets)

# - tap: forwards all packets and generates alerts (omits DROP action) This is not DPDK TAP

# - ips: the same as tap mode but it also drops packets that are flagged by rules to be dropped

copy-mode: ips

copy-iface: 0000:13:00.0 # or PCIe address of the second interface

- interface: 0000:13:00.0

threads: 2

promisc: true

multicast: true

checksum-checks: true

checksum-checks-offload: false

mtu: 1500

#rss-hash-functions: auto

mempool-size: 65535

mempool-cache-size: 257

rx-descriptors: 1024

tx-descriptors: 1024

copy-mode: ips

copy-iface: 0000:0b:00.0

需要重点关注的配置项如下:

  • interface

收包网口的pcie地址

  • threads

每个网口收包使用的收包线程数,suricata会配置该网口相同数量的队列数,该线程数必须与copy-iface指定网口的收包线程数一样

  • copy-mode

报文转发模式,目前有三种,none: 不转发; tap: 纯透明网桥,不丢包; ips: 按配置的规则,执行丢包动作

  • copy-iface

  对应转发网口的pcie地址

2)CPU绑定配置:

threading:

set-cpu-affinity: yes

# Tune cpu affinity of threads. Each family of threads can be bound

# to specific CPUs.

#

# These 2 apply to the all runmodes:

# management-cpu-set is used for flow timeout handling, counters

# worker-cpu-set is used for 'worker' threads

#

# Additionally, for autofp these apply:

# receive-cpu-set is used for capture threads

# verdict-cpu-set is used for IPS verdict threads

#

cpu-affinity:

- management-cpu-set:

cpu: [ 0 ] # include only these CPUs in affinity settings

- receive-cpu-set:

cpu: [ 0 ] # include only these CPUs in affinity settings

- worker-cpu-set:

cpu: [ 1,2,3,4 ]

mode: "exclusive"

# Use explicitly 3 threads and don't compute number by using

# detect-thread-ratio variable:

# threads: 3

prio:

low: [ 0 ]

medium: [ "1-2" ]

high: [ 3 ]

default: "medium"

需要重点关注的配置项如下:

  • set-cpu-affinity

线程绑定cpu开关

  • worker-cpu-set

收包线程绑定的cpu

        启动suricata进程,使用命令top -H -p $(pidof suricata),选择显示Last Used Cpu,如下图所示,可以看到suricata启动了4个收包线程,线程命名格式:w#队列编号-pcie地址缩写,4个收包线程分别绑定cpu 1,2,3,4。

        好了,suricata DPDK的收包模型以及相关配置说明,就讲到这里了,下一篇我们看看suricata DPDK收包的相关源码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C高级 day03

1.编写一个名为myfirstshell.sh的脚本,它包括以下内容。 1、包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的 2、和当前用户说“hello 用户名” 3、显示您的机器名 hostname 4、显示上一级目录中的所有文件的列表 5、显示变量PATH和HOM…

采药 DP 裸01背包 java

&#x1f351; 采药 import java.util.*;class Main{static int N 1010;static int[] f new int[N];public static void main(String[] aaa){Scanner sc new Scanner(System.in);int m sc.nextInt();int n sc.nextInt();for(int i 0; i < n; i){int v sc.nextInt()…

s2021ss62找规律

代码&#xff1a; #include<bits/stdc.h> using namespace std; int n,m,ans; int main() {cin>>n>>m;for(int i1;i<n-1;i)ansi;cout<<ansm;return 0; }

一文了解支付卡行业数据安全标准(PCI DSS 4.0)新要求

在接下来不到一年的时间里&#xff0c;将有越来越多的企业要遵守支付卡行业数据安全标准 (PCI DSS) 4.0 版的多项新要求。 关于 PCI DSS PCI DSS 包含 12 项保护支付卡数据的要求&#xff0c;在过去十年中都没有更新。但经过三年的商讨&#xff0c;现在已经进行了重大改革。 …

JavaScript基础语法篇超详解

目录 一. 什么是JavaScript? 概念 JavaScript可以做的事情 JavaScript和HTML, CSS之间的关系 JavaScript运行过程 二. 基础语法篇 第一个JavaScript程序 JS的书写形式 JS的代码注释 输入输出 变量的使用 变量命名 数据类型 变量的声明和使用 理解动态类型 JS变量类型 JS数组…

一百一十一、Hive——从HDFS到Hive的数据导入(静态分区、动态分区)

一、分区的定义 分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹&#xff0c; Hive 中的分区就是分目录 &#xff0c;把一个大的数据集根据业务需要分割成小的数据集。 在查询时通过 where 子句中的表达式选择查询所需要的指定的分区&#xff0c;这样的查询效率 会…

【教程】手把手教你用Clion进行STM32开发【如何优雅の进行嵌入式开发】

通过Clion进行嵌入式开发 一、工具安装 1、安装Clion 因为众所周知的原因&#xff0c;Clion的安装就不解释了&#xff0c;有需要的同学自行检索 2、安装STM32CubeMX 正常去官网下载最新版的安装就行了&#xff1a;STM32CubeMX - STM32Cube initialization code generator …

2673. 使二叉树所有路径值相等的最小代价(dfs+bfs)

题目描述 评论 (23) 题解 (54) 提交记录 2673. 使二叉树所有路径值相等的最小代价 难度 中等 14 给你一个整数 n 表示一棵 满二叉树 里面节点的数目&#xff0c;节点编号从 1 到 n 。根节点编号为 1 &#xff0c;树中每个非叶子节点 i 都有两个孩子&#xff0c;分别是左孩子 2 …

image adaptive 3dlut based on deep learning

文章目录 image adaptive 3dlut based on deep learning1. Learning Image-adaptive 3D Lookup Tables for High Performance Photo Enhancement in Real-time2. CLUT-Net: Learning Adaptively Compressed Representations of 3DLUTs for Lightweight Image Enhancement2.1 3d…

平安大视野解读主动健康:以运动改变生命轨迹,以名医权益为健康保驾护航

“每个人都会老&#xff0c;这不可避免&#xff0c;但是能不能老的迟一点&#xff1f;让我们能够活到一百岁还能够运动&#xff0c;不需要别人照顾&#xff0c;这是最大的成功&#xff1b;而科学运动是最关键的方式。”5月6日&#xff0c;在平安私人银行联合平安健康举办的“平…

Echarts使用本地JSON文件加载不出图表的解决方法以及Jquery访问本地JSON文件跨域的解决方法

前言 最近需要做一个大屏展示&#xff0c;需要用原生html5cssjs来写&#xff0c;所以去学了一下echarts的使用。在使用的过程中难免碰到许多BUG&#xff0c;百度那是必不可少的&#xff0c;可是这些人写的牛头不对马嘴&#xff0c;简直是标题党一大堆&#xff0c;令我作呕&…

使用pytest和allure框架实现自动化测试报告优化

目录 -x出现一条测试用例失败就退出测试 生成测试报告json pytest&#xff1a; 需要安装pytest和pytest-html(生成html测试报告&#xff09; pip install pytest 和 pip install pytest-html 命名规则 Pytest单元测试中的类名和方法名必须是以test开头,执行中只能找到test开头…

DeepLab v1

SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS 基于深度卷积网络和全连通CRFS的语义图像分割 ABSTRACT 深度卷积神经网络&#xff08;DCNNs&#xff09;最近在高级视觉任务中表现出了最新的性能&#xff0c;如图像分类和物体检测。这…

Docker | docker安装MySQL

知识目录 一、前言二、安装Docker镜像2.1 什么是docker2.2 为什么安装docker2.3 安装docker 三、Docker安装MySQL3.1 常用docker命令3.2 docker安装MySQL 四、结语 一、前言 大家好&#xff01;这篇文章主要讲解 如何在Centos7中安装Docker以及Docker安装MySQL:5.7.42 。 ✨本…

深度学习模型复杂度评估(时间复杂度、空间复杂度)

目录 1、两个指标 2、复杂度对模型的影响 1、两个指标 时间复杂度和空间复杂度是衡量一个算法的两个重要指标,用于表示算法的最差状态所需的时间增长量和所需辅助空间. 在深度学习神经网络模型中我们也通过&#xff1a; 计算量/FLOPS&#xff08;时间复杂度&#xff09;即…

VS Code 常用插件推荐

VS Code 常用插件推荐 1. Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code 适用于 VS Code 的中文&#xff08;简体&#xff09;语言包 2. Auto Rename Tag 自动关闭标签&#xff0c;写 html 标签的时候可以重命名标签名。 现在 vscode 已经内置了&…

大项目内训 2023.5.11

目录 分别介绍一下消息处理相关的MQ、WebSocket、分布式事务 介绍一下异步消息传输 如何配置websocket ​编辑 oatpp是什么&#xff1f; cinatra是什么&#xff1f; 我们教育最大的缺失, 是缺乏阅读、写作和逻辑训练 佳作推荐 分别介绍一下消息处理相关的MQ、WebSocket、…

CTF-PWN学习-为缺少指导的同学而生

很抱歉&#xff0c;博主也是个PWN的入门者。PWN的入门不可能是无痛的。能做到的只是减少一点初学者的痛苦。这篇博客会长期维护&#xff0c;也会越来越好。后期还可能会在B站出视频&#xff08;博主社恐&#xff0c;要迈出这一步可能需要好长时间&#xff09;。 PWN是个啥&…

QT + OpenGL + FFmpeg写的一个全景视频播放器

临时被分配了一个任务 写一个C版本的全景视频播放器 网上搜了搜 基于前辈的基础上 写的差不多了 测试视频源是用ffmpeg拉RTSP的流 最终是要嵌入到别的一个视频播放器模块 所以解码这块我不用太关注 只要实现渲染就可以了 效果如下 左边的窗口用于输入视频源 以及显示…

dtb展开成device_node

dtb展开成device_node 文章目录 dtb展开成device_node设备树是如何传递给内核的&#xff1f;设备树相关结构体举例of操作函数与查找节点有关的 OF 函数1、of_find_node_by_name 函数2、of_find_node_by_type 函数3、of_find_compatible_node 函数4、of_find_matching_node_and_…