| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> dpdk从给定的port/queue捕获流量 -> 正文阅读 |
|
[游戏开发]dpdk从给定的port/queue捕获流量 |
简介dpdk编程之从给定的port/queue tuple捕获流量。 rte_lcore_idrte_lcore_id()返回当前运行的lcore id。 lcore指的是EAL linux线程。 EAL创建和管理eal线程通过remote_launch来实现任务分配。 在每个EAL线程中,有一个称为_lcore_id TLS是线程的独一无二的id。 通常EAL线程绑定物理cpu,lcore_id通常等于cpu?id。 当使用多线程时,绑定不再在线程和指定物理cpu之间总是1:1,EAL线程设为对cpu集的亲和性,而lcore id不再和cpu?id一样。所以dpdk 提供了EAL选项-lcores,设置lcore的cpu亲和性,指定lcore id或组对EAL线程设置cpu set。 EAL为环境抽象层,DPDK运行时对linux操作系统进行初始化,并为用户态 DPDK App提供了一个通用接口,隐藏封装了与底层交互能力。做了一些实dpdk运行初始化工作,大页内存分配、numa亲和性、cpu绑定、内存/buffer/ring分配等,并通过 UIO 或 VFIO 技术将 PCI/PCIe 设备地址映射到用户空间。 rte_eth_rx_burstnb_rx = rte_eth_rx_burst(arg0,arg1,arg2,arg3)从物理网口批量收包函数。 最大收包数量由args3决定。 arg0为port id,arg1为queue id。 arg2为数据包buffers数组类型为struct rte_mbuf *bufs[arg3];。 返回值nb_rx为实际接收的数据包数量,有效提供给bufs数组的指向rte_mbuf结构的指针数量。 rte_ring_enqueue_burstnb_rx_enqueued = rte_ring_enqueue_burst(arg0,arg1,arg2)在ring上入队packet bufs。 根据ring创建时指定的默认行为,调用多生产者or单生产者。通常rte_ring支持多生产者入队和多消费者出队并且是非抢占的。 arg0为ring。 arg2为packet bufs。 arg3为nb_rx。 返回值nb_rx_enqueued为入队的实际数据包数 丢包统计nb_rx与nb_rx_enqueued差值就是丢失数据包个数。 通过rte_pktmbuf_free把不能入队的数据包结构体free掉。 demo code
消费数据包统计分析 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/16 21:45:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |