跳转至内容

Oberon/ETH Oberon/教程/性能分析器

来自 Wikibooks,开放世界中的开放书籍

这些教程页面由 André Fischer (afi) 编写,并由 Hannes Marais 提供编辑协助,托管在 ETHZ,并保留在 ETH 许可证 下。相关内容可以通过 Book.Tool 在系统中找到。扩展内容也可以在 纸质 上获得。一些教程页面位于 WayBack 档案 中。

性能分析器用户指南

教程目标

[编辑 | 编辑源代码]

了解如何测量系统扩展的执行速度。

预计时间:10 分钟。

使用性能分析器

[编辑 | 编辑源代码]

性能分析器是一个性能测量工具,仅包含五个 Oberon 命令,这些命令列在 Profiler.Tool 中,并在下面进行描述。

工作原理

[编辑 | 编辑源代码]

性能分析器在模块中过程的入口和出口点添加了性能分析代码。因此,需要模块源代码。这允许详细测量过程被调用的次数、在过程中的总花费时间以及每次过程调用花费的平均时间。由于测量本身会影响结果,因此必须将经过的时间相互比较。在 Macintosh 上,经过的时间以微秒为单位测量,而在基于英特尔的系统上,经过的时间以小于 1 微秒的时钟周期为单位测量。

性能分析器分为两个模块:Profiler,它实现仪器和用户界面,以及一个低级模块(cAP,即调用属性性能分析器或 Profiler0),它执行实际的测量。此模块不导入任何其他模块,因此即使在模块层次结构中最低的模块也可以导入它。

当前限制:性能分析器需要一些额外的存储空间用于调用跟踪。递归过程在进行性能分析时可能使用比正常情况更多的内存,并且在递归深度非常大的情况下,可能会导致内存分配错误。

性能分析器编译器 - Profiler.Compile

[编辑 | 编辑源代码]

Profiler.Compile {moduleName} ~ | ^ | * 编译指定的模块,向 Oberon 日志报告成功或失败。此编译器接受与 Compiler 相同的选项。

如果编译失败,错误将与 Compiler 完全相同的方式列在日志中,并且将打开一个未命名的文档查看器。它在标记的查看器中显示原始模块文本,并扩展了由 cAP 模块插入的性能分析代码。错误的位置适用于该查看器中的文本,并且可以使用 System.Locate 命令找到错误。可以使用下面描述的Profiler.ShowCode 命令随时显示相同的文本。

示例

与系统一起提供的 ProfilerExample.Mod 模块演示了两种简单数据输出到 Oberon 日志的不同实现之间的执行时间差异:一种使用 Out 模块,另一种使用写入器和 Texts 模块。

使用以下命令编译模块:

Profiler.Compile ProfilerExample.Mod ~

并执行命令:ProfilerExample.Do

显示性能分析器计数器 - Profiler.Show

[编辑 | 编辑源代码]

Profiler.Show 打开一个名为“Profiler.Show”的文档查看器,在表格中显示性能分析器计数器值。每个表格条目显示过程被调用的次数、每次过程调用花费的平均时间、在过程中的总花费时间以及在过程中的花费时间占所有模块中所有测量时间的百分比。无法测量 RETURN 语句中的花费时间。如果性能分析的模块调用未性能分析的过程,则未性能分析的代码中的花费时间将添加到性能分析的代码中的过程。

现在执行:Profiler.Show 以显示在执行先前命令期间收集的数据。

重置性能分析器计数器 - Profiler.Reset

[编辑 | 编辑源代码]

Profiler.Reset 重置性能分析器计数器。

显示性能分析器代码 - Profiler.ShowCode

[编辑 | 编辑源代码]

Profiler.ShowCode * 打开一个未命名的文档查看器,在标记的查看器中显示模块文本,并扩展了由 cAP 模块插入的性能分析代码。这对于调试目的很有用。

使用以下命令显示模块的文本:

  • 执行 Desktops.OpenDoc ProfilerExample.Mod
  • 标记(F1 键)刚刚打开的查看器
  • 然后执行:Profiler.ShowCode * 以查看文本是如何修改的。

显示内存转储 - Profiler.ShowMem(仅限 Windows)

[编辑 | 编辑源代码]

Profiler.ShowMem 打开一个名为“MemoryDump.Text”的文档查看器,显示模块分配的内存。内存转储显示模块数据的 size(代码 + 数据 + 类型描述符)、在堆上分配的对象的数量(使用该模块中声明的类型)及其总 size。size 包括类型标记指针的 size(4 字节)。目前,性能分析器无法识别所有分配的内存。转储的最后一部分指示有多少字节无法识别。

显示的信息与命令 System.ShowModules 提供的信息等效。System.Watch 也提供有关分配字节数量的信息。

下一步是什么?

[编辑 | 编辑源代码]

在开发您自己的系统扩展时,使用此宝贵的信息来源。


C

调用属性性能分析器,cAP

P

性能测量
Profiler.Compile
Profiler.Reset
Profiler.Show
Profiler.ShowCode
Profiler.ShowMem
Profiler.Tool


修订于 1996 年 12 月 1 日
安装于 1997 年 5 月 30 日


华夏公益教科书