我有 kworker 进程,它们经常进入 D 状态。我的电脑也变得卡顿,我认为这可能是由于 D 状态的 kworkers 造成的。通常,这些进程使用类似这样的命令运行:kworker/u16:2
有人告诉我,D 状态进程可能是由不良驱动程序或硬件引起的。我想找出受影响的驱动程序或硬件。我如何才能找出这些进程中的哪些做了什么?
有什么办法可以调查此事吗?
答案1
RedHat 有一篇很好的文章,介绍了如何找出 kworker 线程正在运行的代码。请参阅https://access.redhat.com/solutions/4388131
以下是该文章的摘录:
在 Red Hat Enterprise Linux 7 上,ftrace 子系统和 trace-cmd 命令可以提供有关 kworker 和 softirq 内核线程正在运行的功能的信息。
# trace-cmd record -e workqueue:workqueue_queue_work
# trace-cmd report > trace.log
您可以使用以下命令获取最常排队到最不常排队的工作队列函数列表:
# grep -o -e "function=[_a-zA-Z_][_a-zA-Z0-9]*" trace.log|sort|uniq -c |sort -rn