2011-06-22 29 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以查看如何閱讀它。