msacc

msacc

模块

姆萨克

模块摘要

微观会计的方便函数

描述

该模块实现了用于分析微观账户数据的一些便利功能。有关如何使用基本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).Average scheduler run-time调度程序的平均运行时间,这就是您所得到的结果。这是调度程序没有睡眠的平均时间。

然后,每个状态的一列将以该线程在该状态中花费的实时时间百分比来打印。在线程特定的时间之后,每种线程的累计时间以类似的格式打印。

因为我们有即时平均在每个州度过,我们可以很容易地通过相乘计算每个状态所花费的时间的百分比Average thread real-timeThread state %,即获得在我们做的仿真器状态的时间安排器1000513us * 0.13% = 1300us

数据类型

msacc_data() = [msacc_data_thread()]

msacc_data_thread() =

#{'$type' := msacc_data,

type :=msacc_type(),

id :=msacc_id(),

counters :=msacc_data_counters()}

msacc_data_counters() = #{msacc_state()=> integer() >= 0}

包含不同微观会计状态的地图,以及在其中花费的微秒数。

msacc_stats() = [msacc_stats_thread()]

msacc_stats_thread() =

#{'$type' := msacc_stats,

type :=msacc_type(),

id :=msacc_id(),

system := float(),

counters :=msacc_stats_counters()}

包含有关特定线程的信息的映射。地图中的百分比可以是运行时的,也可以是实时的,具体取决于runtimerealtime被要求stats/2...system此特定线程的系统总时间百分比。

msacc_stats_counters() =

#{msacc_state()=> #{thread := float(), system := float()}}

包含不同微观会计状态的地图。映射中的每个值都包含另一个映射,该映射包含此线程在特定状态下花费的时间百分比。两者的百分比system时间和时间thread是地图的一部分。

msacc_type() = scheduler | aux | async

msacc_id() = integer() >= 0

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_print_options() = #{system => boolean()}

可以给予的不同选项print/2

出口

available() - > boolean()

此函数检查是否可用微观状态会计。

start() - > boolean()

启动微观会计。返回以前是否已启用或禁用。

开始(时间) - > true

类型

重置所有计数器,然后开始计算给定毫秒的微状态。

stop() - > boolean()

停止微观会计。返回以前是否已启用或禁用。

reset() - > boolean()

重置微状态记帐计数器。返回是否已启用或禁用。

print() - >确定

打印当前的微观会计标准。同msacc:print(msacc:stats(),#{}).

打印(DataOrStats) - >确定

类型

将给定的微状态统计值打印到stdout。同msacc:print(DataOrStats,#{}).

打印(DataOrStats,选项) - >确定

类型

打印给定的微状态统计值以进行标准输出。对于许多状态,这可能是相当冗长的。有关字段含义的简要说明,请参阅本参考手册的顶部。

通过首先操作DataOrStats使用stats/2.例如,如果要打印每个线程的运行时百分比,则可以:

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

如果希望只打印每个线程类型的运行时,可以:

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

备选方案

system打印系统时间和线程时间在每个状态中花费的时间百分比。默认值:假。

打印(FileOrDevice,DataOrStats,选项) - >确定

类型

将给定的微观统计值打印到给定的文件或设备。其他论点的行为方式与之相同print/2

stats() - > msacc_data()

返回微状态统计数据的运行时系统独立版本。erlang:statistics(microstate_accounting)所有计数器都已归一化为微秒分辨率。

stats(Analysis,Stats) - > integer()> = 0

类型

返回给定微状态统计值的系统时间。系统时间是所有线程的累积时间。

realtime返回所有线程记录的所有时间。runtime返回为所有线程工作所花费的所有时间,即所有未在sleep状态。

统计(分析,统计) - > msacc_stats()

类型

从给定的微状态统计值中返回用于各种线程的实时或运行时的分数。

统计信息(Analysis,StatsOrData) - > msacc_data()|msacc_stats()

类型

返回微状态统计值列表,其中所有相同类型线程的值都已合并。

to_file(文件名) - > ok | {error,file:posix()}

类型

将当前微观状态统计信息计数器转储到可以解析的文件file:consult/1

from_file(文件名) - > msacc_data()

类型

读取由to_file(Filename)...