kmem_cache的初始化与调试


源码分析

分析方法

确定slab/slub/slob

查看/sys/kernel/目录,如果存在slab目录,就说明使用的是slab;

调试kmem_cache_cpu

kmem_cache_cpu是一个per_cpu变量,在gdb中直接调试kmem_cache会发现它是一个很小的数字:

这其实只是per_cpu段的偏移,看一个0地址会被gdb解释成fixed_percpu_data:

此时要想得到kmem_cache_cpu的真实地址,需要先查看gs_base寄存器的值,这个值是当前per_cpu段的基地址:

将这个基地址和上述偏移相加,即可得到kmem_cache_cpu的地址:

定位kmem_cache

使用全局变量kmem_caches即可:

telescope一下,可以看到好多kmem_cache的地址在里边(前提是已经初始化过了):

参考

https://zhuanlan.zhihu.com/p/639235764


文章作者: q1ming
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 q1ming !
  目录