如何了解DTrace的内核变量?

时间:2011-06-22 14:22:08

标签: macos dtrace

我只对与Mac OS X相关的答案感兴趣,因为我认为基于操作系统的答案会有所不同。

例如,Apple在此document中提到了内核变量avenrun。我知道还有更多,我相信可以通过以下方式生成完整的列表:

nm -j /mach_kernel

然而,只是拥有一个名单并没有告诉我任何有关变量结构或如何使用它们的信息。

我想知道的是如何学习可用的内核变量,如何使用它们以及如何使用它们。

1 个答案:

答案 0 :(得分:1)

最好的想法是查看内核源代码,可以从Apple的下载页面获得。你可以在http://www.opensource.apple.com/source/xnu/

获得

不幸的是,只知道内核变量对你来说并不是很有帮助;这实际上取决于你想要实现的目标。如果你纯粹是为了学习内核的目的,那么源代码是一个更好的学习场所。但是,变量所做的并不像找出特定问题的解决方案那么重要,在这种情况下没有说明。

如果您运行'uname -a',您将获得相关内核版本的链接:

$ uname -a
Darwin my.host.name 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:32:41 PDT 2011; root:xnu-1504.15.3~1/RELEASE_X86_64 x86_64

所以这是基于1504.15.3,位于:http://www.opensource.apple.com/source/xnu/xnu-1504.15.3/

大多数有用的信息都可以通过'sysctl -a kern。'访问,但这是在bsd / kern / kern_sysctl文件中实现的,该文件位于:

http://www.opensource.apple.com/source/xnu/xnu-1504.15.3/bsd/kern/kern_sysctl.c

不幸的是,这并没有具体告诉我们这个avenrun变量。但是,如果你查看host.c:

http://www.opensource.apple.com/source/xnu/xnu-1504.15.3/osfmk/kern/host.c

它显示为用于计算平均主机负载的变量。因此,您可以使用它来确定系统在任何时候的负载。

但是,如果您的问题是“我如何找到系统的负载?”然后我会运行'sysctl -a | grep load'并提出'vm.loadavg',然后在http://www.opensource.apple.com/source/xnu/xnu-1504.15.3/bsd/sys/sysctl.h的sysctl中查找它,看看如何阅读它。