8

我需要知道 Linux (Fedora) 中特定内核模块(例如 iptable_mangle)的 CPU 使用率。我知道 top 或 mpstat 显示系统 CPU 使用率,这实际上是内核空间中的总 CPU 使用率。是否有任何选项可以了解特定内核对象的 CPU 使用情况?

4

1 回答 1

6

很抱歉让您失望,但没有办法实现您想要的——不是因为 Linux 没有这种能力,而是根据定义:

模块可以通过两种通用方式“插入”内核:通过安装回调(例如 proc 或 sys 文件、设备等),或启动内核线程。在您的情况下,iptable_mangle 通过在 iptables/netfilter 上设置回调来插入。这意味着模块代码作为网络堆栈的一部分执行(在 ksoftirqd 上下文中,更准确地说)。

如果这是在内核线程上下文中,Linux 会保留统计信息。但对于回调,情况并非如此。最终执行模块代码的线程做了很多其他的事情,所以仅仅隔离你的模块代码是不切实际的(当然,除非你拥有源代码,然后你可以很容易地添加时序语句) .

一种部分解决方案是使用内核 ftrace 机制——这允许在内核中进行函数调用跟踪——它的功能非常强大,并且可以根据特定函数向您显示统计信息。这不完全是您想要的,但它与您将得到的一样接近。

于 2013-05-24T19:56:35.493 回答