基于多核平台的高速网络流量实时捕获方法

设计了基于DPDK的包捕获系统,以及把包分配到不同队列的hash算法且实现核心的负载均衡。

传统报文处理流程

缺点

  • 多次中断。
  • 多次拷贝,占用总线资源,降低cache利用率。

根据Linux报文处理,分析性能瓶颈

  • Linux下也有很多加速数据包捕获的技术。

NAPI技术:用于多个包连续到达的情况。使得一个CPU周期内捕获尽可能多的包。

RSS技术:数据包根据hash算法被分配到多个接收队列,每个队列绑定一个CPU核心和NAPI线程。并行化。

虽然有如此强劲的技术,但是还存在着技术瓶颈。

  • 针对单个数据包级别的资源分配和释放.每 当一个数据包到达网卡,系统就会分配一个分组描述符用于存储数据包的信息和头部,直到分组传送到用户态空间,其描述符才被释放。分配与释放造成了很大的资源浪费。
  • 流量串行访问。虽然说RSS技术具有并行化的优点。但是这只限于链路层,上层协议栈需要将RSS队列合并,这就造成了单一模块处理数据包、数据包可能乱序的问题。

  • 从NIC到用户空间,多次的拷贝浪费时间。
  • 中断造成的上下文切换浪费时间。
  • 缺少内存本地化,cache不断的被替换,造成miss次数增加。

对传统模式的一些改进

  • 预分配、重用内存资源。开始分组接收之前,预先分配好将要到达的数据包所需的内存空间用来存储数据和元数据(分组描述符)。来一个数据包,为之分配一个描述符。等它被送到用户空间时,它所携带的描述符也不会被释放,而是被收回留给下一个数据包使用。
  • 数据包采用并行直接通道传递。“RSS队列+CPU核心+用户应用程序”三者直接绑定增加并行性。缺点就是对RSS散列精准度有很大的要求。
  • 内存映射,零拷贝。
  • 亲和性与预取。
    • 内存亲和性: 为进程分配的内存,尽量分配到CPU正在访问的内存块附近。
    • CPU亲和性:进程或线程可以自主选择执行它的CPU核心。
    • 中断亲和性:软件硬件中断可以自主选择CPU核心来执行中断服务程序。

Intel DPDK

允许用户空间的进程使用DPDK所提供的库直接访问网卡而无需经过内核。

DPDK队列管理

librte_ring库提供的rte_ring无锁队列,环形,大小固定,先进先出,单/多生产者/消费者的排队场景,存储对象的指针。各个 P C 有指针来访问控制。相较于普通的用长度不限的双链表实现的队列,有两个好处:无锁、减少突发操作和大量数据传输导致的 cache miss。

DPDK的内存管理

EAL可以提供物理内存的映射,它会创建一个叫做RTE_memseg的表来将地址上不连续的物理内存映射为可连续访问的。然后将这些内存分成多个内存区域。这些区域是构建于DPDK库之上的应用使用内存的基本单元。这些基本单元用rte_ring来存放。

DPDK缓存管理

lib_mbuf库提供的缓冲区rte_mbuf。缓冲区会在应用程序实际运行之前就被创建出来并存放在内存池中。应用现在可以通过指定 mbuf来指定访问某一个mempool。释放一个rte_mbuf只是将回到它来自的mempool。为了容纳更大的数据包的元数据,可以将多个rte_mbuf链接在一起。说白了就是程序通过rte_mbuf来申请内存。

原文地址:https://www.cnblogs.com/031602523liu/p/9447950.html

时间: 2024-10-24 06:34:24

基于多核平台的高速网络流量实时捕获方法的相关文章

Ntopng 网络流量实时监控系统搭建

下面实现Ntopng的rpm包安装 关于使用源码包也很简单,主要是Centos要提前配置EPEL-RELEASE方便依赖包安装, 在编译源码包就OK Ntopng介绍: Ntopng是原ntop下一代版本,网络流量实时监控显示.Ntopng类似于RMON远端网络监控代理,具有内置的Web服务能力,使用redis键值服务按时间序列存储统计信息.你可以在任何指定的监控服务器上安装ntopng,只需使用任一web浏览器,就能实时访问服务器上的流量报告了. ntopng用户可以使用一个网页浏览器浏览的N

Linux下网络流量实时监控工具

Linux下网络流量实时监控工具大全 在工作中发现,经常因为业务的原因,需要即时了解某台服务器网卡的流量,虽然公司也部署了cacti软件,但cacti是五分钟统计的,没有即时性,并且有时候打开监控页面不方便,个人喜欢随手在某台服务器上输入一个命令,查看网卡即时流量.百度了一下,发现有这么几种方法,现对此类软件进行了一个总结.一.iptraf软件   rhel的iso里有包含,我公司的系统,并没有默认安装,它功能强大,可以按照协议,网卡等进行分析.1.1 iptraf安装源码安装wget ftp:

ntopng网络流量实时监控

High-Speed Web-based Traffic Analysis and Flow Collection ntopng is the next generation version of the original ntop, a network traffic probe that monitors network usage. ntopng is based on libpcapand it has been written in a portable way in order to

Linux网络流量实时监控ifstat iftop命令详解(转载)

转自:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858923.html ifstat 介绍 ifstat工具是个网络接口监测工具,比较简单看网络流量 实例 默认使用 #ifstat eth0 eth1 KB/s in KB/s out KB/s in KB/s out 0.07 0.20 0.00 0.00 0.07 0.15 0.58 0.00 默认ifstat不监控回环接口,显示的流量单位是KB. 监控所有网络接口 # ifst

ifstat和iftop网络流量实时监控

ifstat 系统自带的网络接口流量检测工具,比较简单 [[email protected] ~]# ifstat -a #16202.1804289383 sampling_interval=1 time_const=60 Interface        RX Pkts/Rate    TX Pkts/Rate    RX Data/Rate    TX Data/Rate RX Errs/Drop    TX Errs/Drop    RX Over/Rate    TX Coll/Rat

Linux网络流量实时监控ifstat iftop命令详解

ifstat 介绍 ifstat工具是个网络接口监测工具,比较简单看网络流量 实例 默认使用 #ifstat eth0 eth1 KB/s in KB/s out KB/s in KB/s out 0.07 0.20 0.00 0.00 0.07 0.15 0.58 0.00 默认ifstat不监控回环接口,显示的流量单位是KB. 监控所有网络接口 # ifstat -a lo eth0 eth1 KB/s in KB/s out KB/s in KB/s out KB/s in KB/s ou

Linux下网络流量实时监控工具大全

在工作中发现,经常因为业务的原因,需要即时了解某台服务器网卡的流量,虽然公司也部署了cacti软件,但cacti是五分钟统计的,没有即时性,并且有时候打开监控页面不方便,个人喜欢随手在某台服务器上输入一个命令,查看网卡即时流量.百度了一下,发现有这么几种方法,现对此类软件进行了一个总结.一.iptraf软件   rhel的iso里有包含,我公司的系统,并没有默认安装,它功能强大,可以按照协议,网卡等进行分析.1.1 iptraf安装源码安装wget ftp://iptraf.seul.org/p

linux网络流量实时监控工具之iptraf

这个工具还是很强大 [我的Linux,让Linux更易用]IPTraf是一个网络监控工具,功能比nload更强大,可以监控所有的流量,IP流量,按协议分的流量,还可以设置过滤器等,如下图 对监控网络来说,这个更适合也更强大,但在总的流量显示上,没nload直观和方便 官网及下载 http://iptraf.seul.org/download.htmlftp://the.wiretapped.net/pub/security/network-monitoring/iptraf/iptraf-3..

linux网络流量实时监控工具之nload

Install nload on a CentOS/RHEL/Red Hat/Fedora Linux First, turn on EPEL repo on a CentOS or RHEL based system. Type the following yum command to install nload: # yum install nload Install nload on a Debian or Ubuntu Linux Type the following apt-get c