检查内核栈使用情况

检查内核栈使用情况

在开发过程中,为了检测爆栈或者需要监测内核栈使用情况的时候,可以使用以下代码计算当前的内核栈使用情况。

fn check_stack_usage(){
    // 获取当前栈指针
    let rsp = rsp() as usize;
    // 由于栈是高地址往底地址生长,所以通过底地址对齐得到的值是free
    let free = rsp & (KernelStack::ALIGN - 1);
    let usage = KernelStack::SIZE - free;
    kdebug!("current rsp {rsp:x} stack use {usage} free {free}");
}
1 个赞

在riscv下也可以使用类似的方法,手动的去观察函数的栈使用情况。有时候因为函数内联或者是具有较大的局部变量的时候,就会观察到进入某函数之后,其栈使用量突然上升。