alloc_skb申请函数分析

alloc_skb函数是Linux内核中用于分配sk_buff结构的内存,它同时分配数据缓冲区和sk_buff描述结构。根据参数fclone,可以从不同缓存分配内存,确保数据包处理的效率。函数内部涉及内存分配、初始化以及错误处理流程。
摘要由CSDN通过智能技术生成

alloc_skb()用于分配缓冲区的函数。由于"数据缓冲区"和"缓冲区的描述结构"(sk_buff结构)是两种不同的实体,这就意味着,在分配一个缓冲区时,需要分配两块内存(一个是缓冲区,一个是缓冲区的描述结构sk_buff)。

首先看alloc_skb
  1. static inline struct sk_buff *alloc_skb(unsigned int size,
  2.                     gfp_t priority)
  3. {
  4.     return __alloc_skb(size, priority, 0, -1);
  5. }
这个函数比较简单,参数中的size不用解释,为skb数据段的大小,但是第二个参数priority名字比较奇怪。叫优先级,实际上则是GFP MASK宏,如GFP_KERNEL,GFP_ATOMIC等。
 __alloc_skb()调用kmem_cache_alloc()从缓存中获取一个sk_buff结构,并调用kmalloc_track_caller分配缓冲区

接下来看__alloc_skb
  1. /*
  2. 参数:
  3. size:skb的数据大小
  4. gfp_mask:不用解释
  5. fclone:表示从哪个cache中分配
  6.        当fclone为1时,从skbuff_fclone_cache上分配
  7.        当fclone为0时,从skbuff_head_cache上分配
  8. node: NUMA节点
  9. */
  10. struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
  11.              int fclone, int node)
  12. {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值