如何解决为什么内核函数调用clear_huge_page还是会出现?
我的操作系统是最新的 CentOS 7。我在 cmdline 中设置了 isolcpus 和 transparent_hugepage=never default_hugepagesz=1G hugepagesz=1G 来隔离 cpus 并启用每页 1G 的大页面。我移动了所有可以绑定到指定 cpu 内核的 irq。
bool initSharedMemory(const char* nm,std::size_t bytes){
int tid = ftok(nm,'R');
if (tid == -1) {
fprintf(stderr,"ftok error: %d - %s\n",tid,strerror(-tid));
return false;
}
mSHMID = shmget(tid,bytes,SHM_HUGETLB | IPC_CREAT | SHM_R | SHM_W);
if (mSHMID < 0) {
fprintf(stderr,"shmget error: %d - %s\n",mSHMID,strerror(-mSHMID));
return false;
}
mMemory = (uint8_t*)shmat(mSHMID,nullptr,0);
if (mMemory == (uint8_t*)(-1)) {
fprintf(stderr,"shmat error\n");
return false;
}
mSize = bytes;
return true;
}
我使用任务集和性能记录运行我的程序。我发现有一些关于大页面清除的 kallsyms,
99.73% test_stx2 test_stx2 [.] Stx::run [.] Stx::run -
0.03% test_stx2 [kernel.kallsyms] [k] clear_page [k] clear_page_c_e -
0.03% test_stx2 [kernel.kallsyms] [k] clear_huge_page [k] _cond_resched -
0.03% test_stx2 [kernel.kallsyms] [k] _cond_resched [k] clear_huge_page -
0.03% test_stx2 [kernel.kallsyms] [k] clear_huge_page [k] clear_page -
0.02% test_stx2 [kernel.kallsyms] [k] clear_page_c_e [k] clear_huge_page -
0.02% test_stx2 [kernel.kallsyms] [k] clear_huge_page [k] clear_huge_page -
0.02% test_stx2 test_stx2 [.] std::__fill_n_a<unsigned long*,unsigned long,unsigned long> [.] std::__fill_n_a<unsigned long*,unsigned long> -
0.00% test_stx2 [kernel.kallsyms] [.] retint_userspace_restore_args [.] retint_userspace_restore_args -
0.00% test_stx2 [kernel.kallsyms] [k] task_tick_fair [k] task_tick_fair -
0.00% test_stx2 [kernel.kallsyms] [k] irq_exit [k] irq_exit -
0.00% test_stx2 [kernel.kallsyms] [k] zone_statistics [k] zone_statistics -
0.00% test_stx2 [kernel.kallsyms] [k] do_softirq [k] do_softirq -
0.00% test_stx2 [kernel.kallsyms] [k] __update_cpu_load [k] __update_cpu_load -
0.00% test_stx2 [kernel.kallsyms] [k] scheduler_tick [k] scheduler_tick -
0.00% test_stx2 [kernel.kallsyms] [k] trigger_load_balance [k] trigger_load_balance -
0.00% test_stx2 [kernel.kallsyms] [k] __hrtimer_run_queues [k] __hrtimer_run_queues -
0.00% test_stx2 [kernel.kallsyms] [k] run_posix_cpu_timers [k] run_posix_cpu_timers -
0.00% test_stx2 [kernel.kallsyms] [k] zone_statistics [k] __inc_zone_state -
0.00% test_stx2 [kernel.kallsyms] [.] retint_userspace_restore_args [.] irq_return -
0.00% test_stx2 [kernel.kallsyms] [k] __inc_zone_state [k] zone_statistics -
0.00% test_stx2 [kernel.kallsyms] [.] handle_mm_fault [.] handle_mm_fault -
0.00% test_stx2 [kernel.kallsyms] [.] __do_page_fault [.] __do_page_fault -
0.00% test_stx2 [kernel.kallsyms] [k] __x86_indirect_thunk_rax [k] read_tsc
我不明白为什么会有一些 clear_page 操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。