linux服务器slab缓存回收方案设计

背景

自己写的回收slab内存ko,insmod报错“shrink_slab:unknown symbol _x86_indirect_thunk_rax(err 0)””;

分析

1.名词解释

在 x86 架构中,函数调用通常使用 call 指令来直接跳转到目标函数的地址。但是,当需要通过函数指针或动态链接调用函数时,就需要使用__x86_indirect_thunk_rax间接跳转。

__x86_indirect_thunk_rax 是一个汇编代码符号,用于在间接跳转时提供一个中间层。它的作用是将函数指针加载到 rax 寄存器中,并通过 jmp rax 指令间接跳转到目标函数的地址。

这个符号通常由编译器生成,并在链接过程中用于解决函数调用的间接跳转。如果你在编译或链接过程中遇到与 __x86_indirect_thunk_rax 相关的错误,可能是由于编译器或链接器配置不正确导致的。

2.定位原因

shrink_slab.ko源码

static int __init shrink_slab_init(void)
{
    unsigned long (*shrink_slab)(struct shrink_control *shrink,
                          unsigned long nr_pages_scanned,
                          unsigned long lru_pages);
    struct shrink_control shrink = {
        .gfp_mask = G

你可能感兴趣的:(云计算,linux内核相关,程序人生,云计算,虚拟化,Linux内核驱动,服务器运维)