我有来自内核的以下调用跟踪和信息:
INFO: task raw_device_benc:9684 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
raw_device_be D c1e5c800 5984 9684 9683
ed9e9d5c 00000046 c1e5c800 c1e5c800 ed9e9d14 587dc805 00001e62 e884be00
e884c054 c1e5c800 00000000 ed9e8000 f6333b80 00000000 00000000 001eda69
00000000 e884be00 00000000 e884be00 c044319a 00000000 ed9e9d58 c013e912
Call Trace:
[<c044319a>] ? _spin_unlock_irqrestore+0x36/0x3c
[<c013e912>] ? trace_hardirqs_on+0xe9/0x111
[<c044126d>] io_schedule+0x1e/0x28
[<c018ec95>] __blockdev_direct_IO+0x9a9/0xaf2
[<c014e2da>] ? generic_file_buffered_write+0x116/0x4e1
[<c017efa6>] ? mnt_drop_write+0x4f/0xbc
[<c018db1a>] blkdev_direct_IO+0x30/0x35
[<c018da31>] ? blkdev_get_blocks+0x0/0xb9
[<c014e067>] generic_file_direct_IO+0xda/0x125
[<c014eecf>] generic_file_aio_read+0x9c/0x49f
[<c013f7d1>] ? __lock_acquire+0xaea/0xb32
[<c016c2c3>] do_sync_read+0xab/0xe9
[<c0132f0d>] ? autoremove_wake_function+0x0/0x33
[<c044192d>] ? mutex_unlock+0x8/0xa
[<c018cb2d>] ? block_llseek+0xbe/0xcc
[<c016c218>] ? do_sync_read+0x0/0xe9
[<c016c9bc>] vfs_read+0x8a/0x106
[<c016cdef>] sys_read+0x3b/0x60
[<c0103809>] sysenter_past_esp+0x6a/0xb1
=======================
no locks held by raw_device_benc/9684.
但是,我不太清楚这一部分是什么意思:
raw_device_be D c1e5c800 5984 9684 9683
ed9e9d5c 00000046 c1e5c800 c1e5c800 ed9e9d14 587dc805 00001e62 e884be00
e884c054 c1e5c800 00000000 ed9e8000 f6333b80 00000000 00000000 001eda69
00000000 e884be00 00000000 e884be00 c044319a 00000000 ed9e9d58 c013e912
任何人都可以向我解释一下吗?这些注册值是?更具体地说,我想知道是否可以从这些值推断出在调用跟踪中传递给函数的参数。 谢谢。
答案 0 :(得分:2)
以下行的含义是:
raw_device_be D c1e5c800 5984 9684 9683
挂起进程名称为raw_device_be,处于D状态,进程pc为c1e5c800,可用堆栈空间为5984,进程的pid为9684,进程的父进程为9683。
剩下的几行:
ed9e9d5c 00000046 c1e5c800 c1e5c800 ed9e9d14 587dc805 00001e62 e884be00
e884c054 c1e5c800 00000000 ed9e8000 f6333b80 00000000 00000000 001eda69
00000000 e884be00 00000000 e884be00 c044319a 00000000 ed9e9d58 c013e912
是堆栈数据。将从该过程的当前堆栈指针(sp)开始打印24字(96字节)的堆栈数据。如果您知道堆栈如何增长和收缩并拥有vmlinux的反汇编代码,您可以找到函数的参数。当然,您提供的堆栈数据有限。