2011-06-22 103 views
1

我只对与Mac OS X相关的答案感兴趣,因为我会假设根据操作系统的答案会有所不同。如何了解DTrace的内核变量?

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

nm -j /mach_kernel 

然而,仅仅有名称的列表,并没有告诉我有关变量的任何结构或它们如何使用。

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

回答

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/

大部分有用的信息是通过入店,但在BSD /克恩/ kern_sysctl文件,该文件位于实现“的sysctl -a克恩。”:

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加载',并提出'vm.loadavg',然后在sysctl中查找http://www.opensource.apple.com/source/xnu/xnu-1504.15.3/bsd/sys/sysctl.h以查看如何阅读它。