檢視原始碼 msacc (runtime_tools v2.1.1)

用於微狀態計帳的便利函式

此模組實作了一些用於分析微狀態計帳資料的便利函式。關於如何使用基本 API 以及不同狀態代表的詳細資訊,請參閱 erlang:statistics(microstate_accounting)

基本情境

1> msacc:start(1000).
ok
2> msacc:print().
Average thread real-time    : 1000513 us
Accumulated system run-time :    2213 us
Average scheduler run-time  :    1076 us

        Thread      aux check_io emulator       gc    other     port    sleep

Stats per thread:
     async( 0)    0.00%    0.00%    0.00%    0.00%    0.00%    0.00%  100.00%
     async( 1)    0.00%    0.00%    0.00%    0.00%    0.00%    0.00%  100.00%
       aux( 1)    0.00%    0.00%    0.00%    0.00%    0.00%    0.00%   99.99%
 scheduler( 1)    0.00%    0.03%    0.13%    0.00%    0.01%    0.00%   99.82%
 scheduler( 2)    0.00%    0.00%    0.00%    0.00%    0.03%    0.00%   99.97%

Stats per type:
         async    0.00%    0.00%    0.00%    0.00%    0.00%    0.00%  100.00%
           aux    0.00%    0.00%    0.00%    0.00%    0.00%    0.00%   99.99%
     scheduler    0.00%    0.02%    0.06%    0.00%    0.02%    0.00%   99.89%
ok

第一個指令啟用微狀態計帳 1000 毫秒。詳情請參閱 start/0stop/0reset/0start/1。第二個指令會印出該期間收集的統計資料。首先會印出三個一般統計資料。

  • 平均即時時間 - 執行緒中用於收集資料的平均時間。這應該與收集資料的時間接近。

  • 系統執行時間 - 系統中所有執行緒的總執行時間。如果您呼叫 msacc:stats(total_runtime,Stats).,則會得到此值。

  • 平均排程器執行時間 - 排程器的平均執行時間。這是排程器沒有進入休眠的平均時間。

然後,每個狀態會印出一欄,其中包含此執行緒在自己的即時時間中花費在此狀態的時間百分比。在執行緒特定時間之後,會以類似的格式印出每種執行緒類型的累積時間。

由於我們有平均即時時間和每個狀態花費的百分比,我們可以輕鬆地透過將 平均執行緒即時時間執行緒狀態 % 相乘來計算在每個狀態中花費的時間,也就是說,若要取得排程器 1 在模擬器狀態中花費的時間,我們需計算 1000513us * 0.13% = 1300us

摘要

類型

一個包含不同微狀態計帳狀態以及在該狀態中花費的微秒數的地圖。

可以提供給 print/2 的不同選項。

執行緒可以處於的不同狀態。詳細資訊請參閱 erlang:statistics(microstate_accounting)

一個包含不同微狀態計帳狀態的地圖。地圖中的每個值都包含另一個地圖,其中包含此執行緒在特定狀態中花費的時間百分比。 system 時間的百分比和特定 thread 的時間都是地圖的一部分。

一個包含關於特定執行緒資訊的地圖。地圖中的百分比可以是執行時間或即時時間,取決於從 stats/2 請求的是 runtime 還是 realtimesystem 是此特定執行緒的系統總時間百分比。

函式

此函式檢查微狀態計帳是否可用。

讀取 to_file(Filename) 產生的檔案傾印。

將目前的微狀態計帳列印到標準輸出。等同於 msacc:print(msacc:stats(), #{}).

將給定的微狀態統計值列印到標準輸出。當狀態很多時,這可能會很冗長。有關欄位含義的簡要說明,請參閱本參考手冊的頂部。

將給定的微狀態統計值列印到給定的檔案或裝置。其他引數的行為與 print/2 的行為相同。

重置微狀態計帳計數器。傳回是否啟用或停用。

開始微狀態計帳。傳回先前是否已啟用或停用。

重置所有計數器,然後開始微狀態計帳給定的毫秒數。

傳回 erlang:statistics(microstate_accounting) 所呈現的微狀態統計資料的獨立於執行時間系統的版本。所有計數器都已正規化為微秒解析度。

傳回給定微狀態統計值的系統時間。系統時間是所有執行緒的累積時間。

停止微狀態計帳。傳回先前是否已啟用或停用。

將目前的微狀態統計計數器傾印到可使用 file:consult/1 剖析的檔案。

類型

連結到此類型

msacc_data()

檢視原始碼 (未匯出) (自 OTP 19.0 起)
-type msacc_data() :: [msacc_data_thread()].
連結到此類型

msacc_data_counters()

檢視原始碼 (未匯出) (自 OTP 19.0 起)
-type msacc_data_counters() :: #{msacc_state() => non_neg_integer()}.

一個包含不同微狀態計帳狀態以及在該狀態中花費的微秒數的地圖。

連結到此類型

msacc_data_thread()

檢視原始碼 (未匯出) (自 OTP 19.0 起)
-type msacc_data_thread() ::
          #{'$type' := msacc_data,
            type := msacc_type(),
            id := msacc_id(),
            counters := msacc_data_counters()}.
連結到此類型

msacc_id()

檢視原始碼 (未匯出) (自 OTP 19.0 起)
-type msacc_id() :: non_neg_integer().
連結到此類型

msacc_print_options()

檢視原始碼 (未匯出) (自 OTP 19.0 起)
-type msacc_print_options() :: #{system => boolean()}.

可以提供給 print/2 的不同選項。

連結到此類型

msacc_state()

檢視原始碼 (未匯出) (自 OTP 19.0 起)
-type msacc_state() ::
          alloc | aux | bif | busy_wait | check_io | emulator | ets | gc | gc_fullsweep | nif | other |
          port | send | sleep | timers.

執行緒可以處於的不同狀態。詳細資訊請參閱 erlang:statistics(microstate_accounting)

連結到此類型

msacc_stats()

檢視原始碼 (未匯出) (自 OTP 19.0 起)
-type msacc_stats() :: [msacc_stats_thread()].
連結到此類型

msacc_stats_counters()

檢視原始碼 (未匯出) (自 OTP 19.0 起)
-type msacc_stats_counters() :: #{msacc_state() => #{thread := float(), system := float()}}.

一個包含不同微狀態計帳狀態的地圖。地圖中的每個值都包含另一個地圖,其中包含此執行緒在特定狀態中花費的時間百分比。 system 時間的百分比和特定 thread 的時間都是地圖的一部分。

連結到此類型

msacc_stats_thread()

檢視原始碼 (未匯出) (自 OTP 19.0 起)
-type msacc_stats_thread() ::
          #{'$type' := msacc_stats,
            type := msacc_type(),
            id := msacc_id(),
            system := float(),
            counters := msacc_stats_counters()}.

一個包含關於特定執行緒資訊的地圖。地圖中的百分比可以是執行時間或即時時間,取決於從 stats/2 請求的是 runtime 還是 realtimesystem 是此特定執行緒的系統總時間百分比。

連結到此類型

msacc_type()

檢視原始碼 (未匯出) (自 OTP 19.0 起)
-type msacc_type() :: aux | async | dirty_cpu_scheduler | dirty_io_scheduler | poll | scheduler.

函式

連結到此函式

available()

檢視原始碼 (自 OTP 19.0 起)
-spec available() -> boolean().

此函式檢查微狀態計帳是否可用。

連結到此函式

from_file(Filename)

檢視原始碼 (自 OTP 19.0 起)
-spec from_file(Filename) -> msacc_data() when Filename :: file:name_all().

讀取 to_file(Filename) 產生的檔案傾印。

連結到此函式

print()

檢視原始碼 (自 OTP 19.0 起)
-spec print() -> ok.

將目前的微狀態計帳列印到標準輸出。等同於 msacc:print(msacc:stats(), #{}).

連結到此函式

print(DataOrStats)

檢視原始碼 (自 OTP 19.0 起)
-spec print(DataOrStats) -> ok when DataOrStats :: msacc_data() | msacc_stats().

等同於 print(DataOrStats, #{})

連結到此函式

print(DataOrStats, Options)

檢視原始碼 (自 OTP 19.0 起)
-spec print(DataOrStats, Options) -> ok
               when DataOrStats :: msacc_data() | msacc_stats(), Options :: msacc_print_options().

將給定的微狀態統計值列印到標準輸出。當狀態很多時,這可能會很冗長。有關欄位含義的簡要說明,請參閱本參考手冊的頂部。

可以先使用 stats/2 操作 DataOrStats 來列印更具體的統計類型。例如,如果您想列印每個執行緒的執行時間百分比,您可以執行

msacc:print(msacc:stats(runtime, msacc:stats())).

如果您只想列印每個執行緒類型的執行時間,您可以執行

msacc:print(msacc:stats(type, msacc:stats(runtime, msacc:stats()))).

選項

  • system - 印出每個狀態在系統時間以及執行緒時間中所花費的時間百分比。預設值:false。
連結到此函式

print(FileOrDevice, DataOrStats, Options)

檢視原始碼 (自 OTP 19.0 起)
-spec print(FileOrDevice, DataOrStats, Options) -> ok
               when
                   FileOrDevice :: file:filename() | io:device(),
                   DataOrStats :: msacc_data() | msacc_stats(),
                   Options :: msacc_print_options().

將給定的微狀態統計值列印到給定的檔案或裝置。其他引數的行為與 print/2 的行為相同。

連結到此函式

reset()

檢視原始碼 (自 OTP 19.0 起)
-spec reset() -> boolean().

重置微狀態計帳計數器。傳回是否啟用或停用。

連結到此函式

start()

檢視原始碼 (自 OTP 19.0 起)
-spec start() -> boolean().

開始微狀態計帳。傳回先前是否已啟用或停用。

連結到此函式

start(Time)

檢視原始碼 (自 OTP 19.0 起)
-spec start(Time) -> true when Time :: timeout().

重置所有計數器,然後開始微狀態計帳給定的毫秒數。

連結到此函式

stats()

檢視原始碼 (自 OTP 19.0 起)
-spec stats() -> msacc_data().

傳回 erlang:statistics(microstate_accounting) 所呈現的微狀態統計資料的獨立於執行時間系統的版本。所有計數器都已正規化為微秒解析度。

連結到此函式

stats/2

檢視原始碼 (自 OTP 19.0 起)
-spec stats(Analysis, Stats) -> non_neg_integer()
               when Analysis :: system_realtime | system_runtime, Stats :: msacc_data();
           (Analysis, Stats) -> msacc_stats() when Analysis :: realtime | runtime, Stats :: msacc_data();
           (Analysis, StatsOrData) -> msacc_data() | msacc_stats()
               when Analysis :: type, StatsOrData :: msacc_data() | msacc_stats().

傳回給定微狀態統計值的系統時間。系統時間是所有執行緒的累積時間。

  • realtime - 傳回所有執行緒記錄的所有時間。

  • runtime - 傳回所有執行緒執行工作所花費的所有時間,也就是所有沒有花在 sleep 狀態的時間。

從給定的微狀態統計值中,返回各個執行緒在即時或執行時所花費的時間比例。

返回一個微狀態統計值列表,其中相同類型的所有執行緒的值已合併。

連結到此函式

stop()

檢視原始碼 (自 OTP 19.0 起)
-spec stop() -> boolean().

停止微狀態計帳。傳回先前是否已啟用或停用。

連結到此函式

to_file(Filename)

檢視原始碼 (自 OTP 19.0 起)
-spec to_file(Filename) -> ok | {error, file:posix()} when Filename :: file:name_all().

將目前的微狀態統計計數器傾印到可使用 file:consult/1 剖析的檔案。