netmap内存池初始化流程
来源:互联网 发布:linux route 编辑:程序博客网 时间:2024/05/16 04:24
netmap_adapter 的申请
在 e1000probe() -> e1000netmapattach() -> netmapattache() 中: 申请 netmapadapter 并且通过 WNA(ifp) = na; 保存至netdevice 的ax25_ptr 指针中。
在linuxnetmapopen 中会申请netmapprivd 结构priv, 然后存储在 file->private_data 域中.
在ioctl (NIOCGINFO) 中调用 至: linuxnetmapioctl -> netmapioctl 的 Case NIOCGINFO中, 进而调用netmapgetmemorylocked(priv) . 此时, priv 中的npifp = NULL, 因此NA=NULL,所以: nmd = nmmem. 接下来调用至netmapmemglobalfinalize. 在该函数中先调netmapmemoryconfig 进行参数配置,比如页对齐等,然后调用netmapmemfinalizeall , 调用 netmapfinalizeobj_allocator 分配内存,设置虚 拟地址和物理地址映射查找表。至此,设置 全局配置:
netmap_buf_size = nmd->pools[NETMAP_BUF_POOL]._objsize;
netmap_total_buffers = nmd->pools[NETMAP_BUF_POOL].objtotal;
netmap_buffer_lut = nmd->pools[NETMAP_BUF_POOL].lut;
netmap_buffer_base = nmd->pools[NETMAP_BUF_POOL].lut[0].vaddr;在 ioctl (NIOCREGIF) 中通过 getifp 获取到 netdevice 的ifp , 然后在netmapdoregif 中, priv->npifp = ifp; 将当前的netdevice 保存至 file->private->npifp. 同时此时 通过 ifp 指针能够获取到保存在其中的 netmapadapter 结构.
通过 netmapifnew 调用 netmapmemifnew 分配netmapadapter的netmapring 管理结构体, 调用netmapnew_bufs 给每个ring的每个slot向netmap缓存区申请内存.
下面是内存管理结构图:
文章版权归属yynote.com.转载请标明出处.
本文地址: http://yynote.com/blog/detail/networking/netmap-memory-pool-init-follow
- netmap内存池初始化流程
- netmap
- netmap
- Qemu创建KVM虚拟机内存初始化流程
- 内存初始化
- 内存初始化
- 内存初始化
- 内存初始化
- 内存初始化
- 内存初始化
- netmap源码分析(二)内核态关键结构的初始化
- netmap userguide
- netmap 小结
- netmap 介绍
- suricata在netmap模式用autofp方式抓包有内存泄漏的相关信息
- Struts框架初始化流程
- WorldWind初始化流程
- MTK Phonebook初始化流程
- Ruby on Rails性能优化七剑
- python yield 进阶(二)
- 详细解析Java中抽象类和接口的区别
- Google Code Jam 2014 Qualification Round:Problem B. Cookie Clicker Alpha
- 针对目录中文件创建MD5值
- netmap内存池初始化流程
- input-dev输入子系统
- 苹果审核Metadata Rejected解决
- 使用HTML5的canvas做一个会动的时钟
- 侧滑删除 仿微信
- 银块破解版
- linux-2.6.30-4内核常用头文件
- [HAOI2010]最长公共子序列
- 加密你的SQLite