2011-11-25 36 views
5

我正在尋找一種方法來檢索有關在程序執行過程中如何完成調度的信息:哪些進程在哪些調度程序中,如果它們發生更改,哪些進程在每個調度程序中處於活動狀態,調度程序運行在一個核心等...Erlang VM:調度程序運行時信息

任何想法或相關文檔/文章/任何東西?

回答

5

我建議你採取以下追蹤/分析選項一看:

erlang:system_profile/2

它有監控調度和運行隊列(runnable_procs)的活動方案。 調度選項將報告

{profile, scheduler, Id, State, NoScheds, Ts} 

是:國家會告訴你,如果它處於活動狀態。 NoScheds報告當前活動調度程序的數量(如果我沒有記錯的話)。

runnable_procs選項會讓您知道是否將某個進程放入特定調度程序的運行隊列或從該特定調度程序的運行隊列中移除。

+0

謝謝!我有R14A,它總是返回undefined,但我升級到R14B04,它現在工作正常:D – raymond

+0

當它在運行隊列上時,它不僅在實際運行時處於活動狀態,對吧? – raymond

+0

是的,它在運行時(在運行隊列中)或實際運行時都被視爲活動,否則被視爲活動。 – psyeugenic

4

如果您的系統支持DTrace,則可以使用正在開發的erlang dtrace探針來準確查看進程調度事件的發生時間。

例如,我寫了一個simple one-liner表示你,將消息發送到一個進程和具有該接收進程被調度執行(±跨核心時鐘方差和進程,幾個納秒之間通過納秒數這樣)。

+0

我喜歡dtrace,太糟糕了,它只適用於mac和solaris(以及其他一些),但不適用於linux。 @Dustin,在erlang/dtrace impl上做的很好。 – psyeugenic

+0

systemtap做同樣的東西的作品。您始終可以使用非Linux或Windows的東西來研究事物的工作方式,然後將這些知識應用到Linux部署中。 – Dustin

+0

有趣,我一定會檢查DTrace/SystemTrap! – raymond