我一直在对代码进行一些性能测试,发现+RTS -s
标志显示了有关程序执行情况的大量指标。但是我无法找到有关如何解释输出的完整说明。
我发现了一些关于火花的资源,并解释了它们是线程池的任务。
Tasks
是什么意思?
如何使用INIT
,MUT
等读取表格?
Productivity
在这种情况下是什么意思?
10:23:12 decision-tree-haskell $ stack exec -- performance-test +RTS -A200M -N -s
4,952,803,088 bytes allocated in the heap
5,277,992 bytes copied during GC
1,438,264 bytes maximum residency (2 sample(s))
70,552 bytes maximum slop
816 MB total memory in use (0 MB lost due to fragmentation)
Tot time (elapsed) Avg pause Max pause
Gen 0 22 colls, 22 par 0.036s 0.011s 0.0005s 0.0058s
Gen 1 2 colls, 1 par 0.004s 0.001s 0.0006s 0.0010s
Parallel GC work balance: 8.43% (serial 0%, perfect 100%)
TASKS: 10 (1 bound, 9 peak workers (9 total), using -N4)
SPARKS: 48 (48 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)
INIT time 0.009s ( 0.009s elapsed)
MUT time 9.846s ( 9.895s elapsed)
GC time 0.040s ( 0.013s elapsed)
EXIT time 0.001s ( 0.000s elapsed)
Total time 9.963s ( 9.916s elapsed)
Alloc rate 503,030,959 bytes per MUT second
Productivity 99.5% of total user, 99.8% of total elapsed
gc_alloc_block_sync: 808
whitehole_spin: 0
gen[0].sync: 9
gen[1].sync: 0
答案 0 :(得分:2)
您看过《 GHC用户手册》吗?
[...]接下来是经过的CPU时间和挂钟时间,由运行时系统当时的工作细分。 INIT是运行时系统初始化。 MUT是更改器时间,即实际运行代码所花费的时间。 GC是花费在垃圾收集上的时间。 RP是花费在进行保持器性能分析上的时间。 PROF是花费在执行其他分析上的时间。 EXIT是运行系统关闭时间。最后,Total当然是总数。
%GC时间会告诉您GC占Total的百分比。 “分配速率”告诉您“堆中分配的字节数”除以MUT CPU时间。 “生产率”告诉您在转换器(MUT)中花费了CPU和墙上时钟总消耗时间的百分比。
因此,INIT是启动GHC运行时系统所花费的时间,EXIT是关闭它所花费的时间,GC是垃圾收集器运行的时间,而MUT是实际程序的时间正在做有用的工作。
“经过”时间是实际的时钟时间,而第一个数字是CPU时间。 (例如,如果您有4核CPU,则CPU时间可能比墙上时间要长很多。不确定如何花时间等待I / O因素。)
出于某种原因,我似乎无法从手册中找到报价,但我认为“生产率”是运行代码所花费的墙上时间的百分比(而不是运行垃圾收集器,等待I / O等)。