小编CH_*_*kar的帖子

在linux中计算页面错误导致混乱的结果

我正在编写程序来计算linux系统中页面错误的时间.更确切地说,时间内核执行该功能__do_page_fault.
并不知我写了两个全局变量,命名pfcount_at_begpfcount_at_end,当功能,增加一次__do_page_fault在函数的不同地点被执行.

为了说明,修改后的功能如下:

unsigned long pfcount_at_beg = 0;
unsigned long pfcount_at_end = 0;
static void __kprobes
__do_page_fault(...)
{
    struct vm_area_sruct *vma;
    ...    // VARIABLES DEFINITION 
    unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;   
    pfcount_at_beg++;        // I add THIS
    ...
    ... 
    // ORIGINAL CODE OF THE FUNCTION
    ...
    pfcount_at_end++;        // I add THIS
}
Run Code Online (Sandbox Code Playgroud)

我预计pfcount_at_end的值小于pfcount_at_beg的值.

因为,我认为,每次内核执行代码指令时pfcount_at_end++,它都必须执行pfcount_at_beg++(每个函数都从代码的最开始处开始).
另一方面,由于return这两行代码之间存在许多条件.

然而,结果反过来说.值pfcount_at_end大于pfcount_at_beg.的值.
我用来printk通过自定义打印这些内核变量syscall.我写了用户级程序来调用system …

linux kernel virtual-memory

5
推荐指数
1
解决办法
158
查看次数

标签 统计

kernel ×1

linux ×1

virtual-memory ×1