网卡驱动描述符助手功能浅析
- 前言
网卡驱动里,CPU和MAC控制器都需要对DMA描述符空间进行读取或者写入。DMA描述符空间又会采用到CACHE和零拷贝技术,以往都是驱动自己去申请、关联内存和刷新(flush和invalidate)CACHE。
描述符助手则是把这些工作在内核里完成,对驱动提供接口即可,此文就对这些接口功能做一些分析。 - 创建
实现发送静态内存空间申请、发送零拷贝内存创建(但不申请空间)、接收静态内存空间申请、接收零拷贝内存空间申请,及CACHE刷新。函数原型及入参如程序清单 2.1:
程序清单 2.1
/* create descriptor helper /
struct netdev_desc_helper *
netdev_desc_helper_create (size_t each_buf_size, / 每帧大小 /
size_t pad_size, / PAD /
int cache_ts_en, / 发送静态内存cache刷新使能 /
int cache_rs_en, / 接收静态内存cache刷新使能 /
int cache_zc_en, / 接收零拷贝内存cache刷新使能 /
int tx_buf_cnt, / 发送描述符数 /
int rx_buf_cnt, / 接收描述符数 /
int tx_zc_en, / 发送零拷贝使能 /
int rx_zc_cnt) / 接收零拷贝池数 */
可知,接收零拷贝是默认使能的,且零拷贝池数是接收描述符数的2倍即申请2倍空间(下文会对此分析)。创建流程如图 2.1:
图 2.1 描述符助手创建
这里需要关注的是,零拷贝池的每个节点大小是帧大小加上节点头大小,帧对应pbuf空间,而实际数据的存储则又是pbuf里的payload空间。关系如图 2.2:
图 2.2 零拷贝池节点结构 - 发送
发送需要关注两个函数,发送前prepare即将上层要发送的pbuf->payload关联到发送描述符,发送后clean即是把该pbuf空间释放掉。如图 3.1:
图 3.1 发送流程 - 接收
接收同样是关注两个函数,接收前input取出内容,接收后refill重关联描述符与零拷贝池。但多一个流程,初始化时先把零拷贝地址池关联到接收描述符并写入MAC控制器。如图 4.1:
图 4.1 接收流程
这里对为什么接收零拷贝池申请2倍内存做一个推测,由于其他空间是用完后即可再次利用,而接收描述符空间是要等上层归还到零拷贝池链表后,当上层归还不及时时,零拷贝池数量实际就没申请的那么多,所以直接采取极端情形即申请2倍。
网卡驱动描述符助手功能浅析相关推荐
- Nginx文件描述符泄露?浅析FD_CLOEXEC文件描述符标志
很精彩的一篇文章. 1. 引子 事情是这样的,最近我们线上一个基于nginx的http服务经常报警,具体如下: accept() failed (24: Too many open files) wh ...
- dpdk-16.04 扩展新网卡驱动过程
编译相关配置添加 1. 确定网卡的 vendor id 与 device id,在 rte_pci_dev_ids.h 中添加新的设备定义 示例信息如下: #ifndef RTE_PCI_DEV_ID ...
- Linux系统学习笔记:文件描述符标志
文件描述符标志的概念 文件描述符标志(目前就只有一个close-on-exec): 它仅仅是一个标志,当进程fork一个子进程的时候,在子进程中调用了exec函数时就用到了这个标志.意义是执行exec ...
- python 描述符类_python的黑魔法--描述符
python的黑魔法 描述符 官方定义:python描述符是一个"绑定行为"的对象属性,在描述符协议中,它可以通过方法重写属性的访问.这些方法有 get(), set(), 和de ...
- Embeded linux之网卡驱动
一.配置菜单 Device Drivers [*] Network device support ---> 网络设备驱动.网卡驱动 < > Bonding driver s ...
- java中的scr是什么意思,javascrpt中属性描述符的理解与使用
javascrpt中属性描述符的理解与使用 属性描述符是ES5出现的概念.顾名思义:它用于描述对象里面的属性应该是什么样,例如是否只读,能否可枚举,能否可配置等.怎样?好理解吧. 既然是对象里面的属性 ...
- js属性中的数据描述符,访问描述符(writable,configurable,enumerable)
1.属性描述符 也称元属性.有四个值.数据属性包含一个数据值的位置,在这个位置可以读取和写入值.数据属性有4个描述其行为的特性. 可配置性 [[Configurable]] : 表示能否通过del ...
- dpdk报文收发流程--理解dma控制器、UIO驱动、描述符空间、mbuf空间、KNI
1. dpdk报文收发流程 1.1 报文接收流程 传统方式接收报文时,当网卡接收到报文后会产生硬件中断,进而报文会通过协议栈,最后到达应用层,这个过程需要内核协议栈的处理. 和传统报文接收不同,当应用 ...
- usb声卡驱动(一):USB描述符
usb声卡驱动(一) 前面看了内核的启动,接下来就是驱动的学习. 正好手边有一个USB声卡,就准备以此为基础,进行usb声卡驱动的学习. 因此,在学些usb声卡之前,先看看usb驱动.然后再是alsa ...
最新文章
- mysql客户端指令_mysql command line client(mysql命令行客户端)
- 【c语言】测量字符串长度
- PYTHON线程知识再研习F---队列同步Queue
- Windows10怎么在当前目录,打开cmd命令窗口?
- React Native获取手机的各种高度
- CSS命名规则--参考表
- js按键处理demo
- 如何使得账户密码永不过期
- Python爬虫(二十一)_Selenium与PhantomJS
- matlab反拉氏变换,matlab拉普拉斯变换.doc
- snipaste滚动截图方法_【软件工具】超强干货|不同级别的截图工具,快来按需领取吧...
- 区块如何防篡改_区块链为什么能防篡改?
- 成绩不高?校园招聘了解一下!春招公司大全!
- android 输入法 sd卡,关于安卓手机内置或外置SD卡中各文件夹的名称和作用
- python实现ID3
- UCF Local Programming Contest 2012(Practice)E. Pete's Pantry 【模拟】
- 【海神】各种工作特色比照和介绍
- linux 卸载nexus,CentOS7安装Nexus
- js 所有空格替换成任意字符
- 艺术探索笔记:IPC