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

Linux内核中打开文件时kmalloc分配struct file的位置查询

解答Linux内核中struct file结构体的分配位置问题

嘿,我来帮你理清这个困惑~你找不到直接的kmalloc调用是正常的,因为struct file的分配并没有直接用kmalloc,而是通过SLUB分配器的专属slab缓存来完成的,具体流程是这样的:

  • 内核为struct file专门创建了一个slab缓存,定义在fs/file_table.c中的file_cachep变量,通过kmem_cache_create完成初始化
  • 实际分配struct file的核心函数是get_empty_filp(部分内核版本可能会封装到alloc_file函数里),在这个函数里会调用kmem_cache_alloc(file_cachep, GFP_KERNEL),从专属缓存中分配结构体实例
  • 回到open系统调用的流程:sys_open/sys_openat最终会调用do_filp_open,而do_filp_open内部会调用get_empty_filp来获取空的struct file结构体,这才是分配发生的地方

验证小技巧

  • 直接在内核源码中搜索get_empty_filp,就能看到它调用slab缓存分配的代码
  • 如果想动态跟踪,可以用ftrace跟踪kmem_cache_alloc事件,并过滤file_cachep相关的调用,就能关联到open系统调用触发的分配操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:02:03