You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sk_buff内存管理困惑及相关技术问题咨询

内核网络数据包内存管理与sk_buff相关疑问

背景

  • 本人20年前曾熟悉部分内核知识,如今重新学习内核,正尝试理解网络数据包的内存管理机制。
  • 当前驱动在被轮询时会调用以下函数之一:netif_receive_skb、napi_gro_receive。
  • 对零拷贝机制的理解:小包会由驱动分配缓冲区并复制数据包后挂载到sk_buff;大包则会将设备DMA写入的缓冲区从环形缓冲区移除并交给sk_buff,同时给环形缓冲区补充新缓冲区。

具体疑问

1. sk_buff的页抽象

作为用户态程序员,习惯使用char*这类缓冲区指针,但sk_buff采用页抽象:

  • 数据包负载是否未关联页表?
  • 为何要采用页抽象?

2. PFMEMALLOC skbs相关

__netif_receive_skb()中提到的PFMEMALLOC skbs是什么?何时、为何、由谁创建?

资料与驱动示例需求

  • 求介绍较新版本sk_buff的资料:2010年前的Linux书籍已完全过时,当前sk_buff结构体与旧版差异极大。
  • 求易于理解的简单NIC驱动:需要其将网络数据包转为sk_buff的代码易于跟进,高性能设备的驱动过于复杂。

题外话:Git提交筛选

无法找到仅列出内核源码中修改sk_buff结构体的Git提交的方法,阅读近十年的相关提交或许能理清其演化过程,请问该如何操作?


内容的提问来源于stack exchange,提问作者eof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:42:40