源码分析
分析方法
确定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的地址在里边(前提是已经初始化过了):