linux – 为什么“echo l> / proc / sysrq-trigger”调用跟踪输出总是相似?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 为什么“echo l> / proc / sysrq-trigger”调用跟踪输出总是相似?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1398字,纯文字阅读大概需要2分钟。
内容图文
![linux – 为什么“echo l> / proc / sysrq-trigger”调用跟踪输出总是相似?](/upload/InfoBanner/zyjiaocheng/966/f69449f2575f4aed82c8b779627871fe.jpg)
根据the official kernel.org documentation echo l> / proc / sysrq-trigger应该给我所有CPU的当前调用跟踪.但是当我这样做几次并且在看到dmesg之后,呼叫痕迹看起来完全相似.这是为什么?
解决方法:
相同的回溯解释
在您的情况下,您的CPU#0回溯显示它正在执行您的sysrq命令(通过write_sysrq_trigger()函数判断):
delay_tsc+0x1f/0x70
arch_trigger_all_cpu_backtrace+0x10a/0x140
__handle_sysrq+0xfc/0x160
write_sysrq_trigger+0x2b/0x30
proc_reg_write+0x39/0x70
vfs_write+0xb2/0x1f0
SyS_write+0x42/0xa0
system_call_fast_compare_end+0x10/0x15
并且CPU#1回溯显示它处于IDLE状态(通过cpuidle_enter_state()函数判断):
cpuidle_enter_state+0x40/0xc0
cpu_startup_entry+0x2f8/0x400
start_secondary+0x20f/0x2d0
尝试非常密集地加载系统,然后执行sysrq命令以获得新的回溯.您将看到一个CPU正在执行您的sysrq命令,而第二个CPU不再处于IDLE状态,而是执行一些实际工作.
用户空间回溯
关于内核回溯的用户空间函数:虽然代表用户空间进程执行了system call(在内核空间中)(请参阅CPU0的回溯中的Comm:bash),但是无法使用标准打印用户空间进程回溯内核回溯机制(在dump_stack()函数中实现).问题是内核堆栈不包含任何用户空间进程调用(这就是为什么你只能在回溯中看到内核函数).
用户空间进程调用可以在用户空间堆栈中找到相应的进程.为此,我建议你使用OProfile探查器.当然,它只会给你一个二进制堆栈.为了获得实际的函数名,您需要向gdb提供符号信息.
细节:
[1] kernel stack and user-space stack
[2] how to dump kernel stack in syscall
[3] How to print the userspace stack trace in linux kernelspace
内容总结
以上是互联网集市为您收集整理的linux – 为什么“echo l> / proc / sysrq-trigger”调用跟踪输出总是相似?全部内容,希望文章能够帮你解决linux – 为什么“echo l> / proc / sysrq-trigger”调用跟踪输出总是相似?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。