我只對與Mac OS X相關的答案感興趣,因爲我會假設根據操作系統的答案會有所不同。如何瞭解DTrace的內核變量?
例如,Apple在這個document中提到了內核變量avenrun。我知道,還有更多的,我相信可以通過執行生成的完整列表:
nm -j /mach_kernel
然而,僅僅有名稱的列表,並沒有告訴我有關變量的任何結構或它們如何使用。
我想知道的是如何去了解可用的內核變量,如何使用它們以及如何使用它們。
我只對與Mac OS X相關的答案感興趣,因爲我會假設根據操作系統的答案會有所不同。如何瞭解DTrace的內核變量?
例如,Apple在這個document中提到了內核變量avenrun。我知道,還有更多的,我相信可以通過執行生成的完整列表:
nm -j /mach_kernel
然而,僅僅有名稱的列表,並沒有告訴我有關變量的任何結構或它們如何使用。
我想知道的是如何去了解可用的內核變量,如何使用它們以及如何使用它們。
最好的想法是查看內核源代碼,該代碼可以從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以查看如何閱讀它。