AWSY

Are We Slim Yet 项目(通常称为 AWSY)跟踪跨构建的内存使用情况。

在 Treeherder 上,AWSY 构建列在 SY 的子组中。

AWSY 测试包含三种类型:TP5*、TP6 和基础内存使用情况。

*TP5 测试已过时,不再维护。这些测试计划删除: https://bugzilla.mozilla.org/show_bug.cgi?id=1712406

Awsy 测试

基础 (FF)
  • 本地运行命令

./mach awsy-test --base

负责人: :mccr8 和性能测试团队

  • 测试任务:
    • test-linux1804-64-clang-trunk-qr/opt
      • awsy-base: 无

      • awsy-base-dmd: 无

    • test-linux1804-64-qr/opt
      • awsy-base: 无

      • awsy-base-dmd: 无

    • test-linux1804-64-shippable-qr/opt
      • awsy-base: trunk

      • awsy-base-dmd: 无

    • test-macosx1015-64-shippable-qr/opt
      • awsy-base: trunk

      • awsy-base-dmd: 无

    • test-windows11-32-2009-qr/opt
      • awsy-base: 无

      • awsy-base-dmd: 无

    • test-windows11-32-2009-shippable-qr/opt
      • awsy-base: 无

      • awsy-base-dmd: 无

    • test-windows11-64-2009-qr/opt
      • awsy-base: 无

      • awsy-base-dmd: 无

    • test-windows11-64-2009-shippable-qr/opt
      • awsy-base: trunk

      • awsy-base-dmd: 无

dmd (FF)
  • 本地运行命令

./mach awsy-test --dmd

负责人: :mccr8 和性能测试团队

  • 测试任务:
    • test-linux1804-64-clang-trunk-qr/opt
      • awsy-base-dmd: 无

      • awsy-dmd: 无

    • test-linux1804-64-qr/opt
      • awsy-base-dmd: 无

      • awsy-dmd: 无

    • test-linux1804-64-shippable-qr/opt
      • awsy-base-dmd: 无

      • awsy-dmd: 无

    • test-macosx1015-64-shippable-qr/opt
      • awsy-base-dmd: 无

      • awsy-dmd: 无

    • test-windows11-32-2009-qr/opt
      • awsy-base-dmd: 无

      • awsy-dmd: 无

    • test-windows11-32-2009-shippable-qr/opt
      • awsy-base-dmd: 无

      • awsy-dmd: 无

    • test-windows11-64-2009-qr/opt
      • awsy-base-dmd: 无

      • awsy-dmd: 无

    • test-windows11-64-2009-shippable-qr/opt
      • awsy-base-dmd: 无

      • awsy-dmd: 无

tp5 (FF)
  • 本地运行命令

./mach awsy-test --tp5

负责人: :mccr8 和性能测试团队

  • 测试任务:
    • test-linux1804-64-clang-trunk-qr/opt

    • test-linux1804-64-qr/opt

    • test-linux1804-64-shippable-qr/opt

    • test-macosx1015-64-shippable-qr/opt

    • test-windows11-32-2009-qr/opt

    • test-windows11-32-2009-shippable-qr/opt

    • test-windows11-64-2009-qr/opt

    • test-windows11-64-2009-shippable-qr/opt

tp6 (FF)
  • 本地运行命令

./mach awsy-test

负责人: :mccr8 和性能测试团队

  • 测试任务:
    • test-linux1804-64-clang-trunk-qr/opt
      • awsy-tp6: 无

    • test-linux1804-64-qr/opt
      • awsy-tp6: 无

    • test-linux1804-64-shippable-qr/opt
      • awsy-tp6: trunk

    • test-macosx1015-64-shippable-qr/opt
      • awsy-tp6: trunk

    • test-windows11-32-2009-qr/opt
      • awsy-tp6: 无

    • test-windows11-32-2009-shippable-qr/opt
      • awsy-tp6: 无

    • test-windows11-64-2009-qr/opt
      • awsy-tp6: 无

    • test-windows11-64-2009-shippable-qr/opt
      • awsy-tp6: trunk

在本地运行 AWSY

在本地运行测试很可能仅用于调试测试中发生的情况,因为测试输出仅报告为原始 JSON。CLI 通过以下方式记录

./mach awsy-test --help

目前所有测试都会下载 TP5,即使它没有被使用,请参阅: https://bugzilla.mozilla.org/show_bug.cgi?id=1683920

TP5 测试

./mach awsy-test --tp5

TP6 测试

./mach awsy-test

基础内存使用情况测试

./mach awsy-test --base

在 Try 上运行 AWSY

可以通过 mach try 模糊查找器生成 AWSY 运行

./mach try fuzzy

对“awsy”的查询将返回所有 AWSY 测试。默认测试是 TP5,TP6 和基础测试名称将分别包含 tp6base

以下文档列出了我们目前为 AWSY 运行的所有测试。以下内容已从 https://wiki.mozilla.org/AWSY/Tests 迁移,并将更新以阐明 TP5/TP6 测试与基础测试: https://bugzilla.mozilla.org/show_bug.cgi?id=1714600

TP5/TP6 测试

以下测试适用于 TP5 和 TP6。默认情况下,运行 ./mach awsy-test 将运行 TP6 测试*。要运行 TP5 测试,请添加 –tp5 标志:./mach awsy-test –tp5

*TP5 测试已过时,不再维护。这些测试计划删除: https://bugzilla.mozilla.org/show_bug.cgi?id=1712406

显式内存

  • 这是由内存报告器明确报告的内存。它包括通过对堆分配函数(例如 malloc 和 new)的显式调用分配的所有内存,以及一些(仅限于内存报告器覆盖的)通过对非堆分配函数(例如 mmap 和 VirtualAlloc)的显式调用分配的内存。

可能的回归原因

  • 此方面的回归通常意味着新功能正在使用或保留更多内存,应予以关注。这些更容易诊断,因为我们可以比较内存报告。

有关更多详细信息,请参阅 about:memory mdn 页面

未分类堆

待办事项:添加测试定义

图像

  • 这是“显式”度量的子集,重点关注用于渲染图像的内存。

可能的回归原因

  • 此方面的回归可能表明图像子系统中存在泄漏或内存使用效率低下。过去,这是一个持续存在的问题。

JS

待办事项:添加测试定义

驻留内存

  • 这是操作系统提供的更高级别的度量。我们将“驻留”内存 (RSS) 与内容进程的驻留唯一内存相加。它非常嘈杂且很大,因此在检测较小的回归方面不太有用。

可能的回归原因

  • 此方面的回归通常会跟踪显式和未分类堆中的回归。如果我们在驻留内存中看到回归,但在其他报告中没有看到,这可能表明我们正在泄漏未跟踪的内存(可能是通过共享内存、图形分配、文件句柄等)。

基础内容测试

  • 一项专注于支持 Fission 的更新测试。它衡量空内容进程的基本开销。它跟踪驻留唯一、未分类堆、JS 和显式内存指标,并将完整的内存报告存储为工件。每个指标的中值来自所有内容进程。它对发出警报的阈值低得多,并在 Perfherder 中记录。

基础内容显式

可能的回归原因

更改导致在启动时或在空白页面中加载了更多 JavaScript

  • 常见解决方案:延迟加载您依赖的任何新模块

  • 常见解决方案:将代码拆分出来,以便最初仅加载最少的必要内容。您修改了 JS 引擎,它正在使用更多内存

  • 常见解决方案:尝试减少通用情况下的对象大小,这些对象往往会累积!您在 JavaScript 中实现了一个新功能

  • 常见解决方案:用编译代码(C++/Rust)编写大部分(或全部)。这将减少开销并通常提高性能。

基础内容未分类堆

  • “未分类堆”值表示任何内存报告器都未测量的堆分配内存。这通常占“显式”的 10-20%。

可能的回归原因

  • 此方面的回归可能表明我们正在泄漏内存,或者应该添加其他内存报告器。

  • 改进可能表明泄漏已修复或我们添加了新的内存报告器。

有关更多详细信息,请参阅 about:memory mdn 页面

基础内容 JS

  • 这是 about:memory 中的“js-main-runtime/”值,它是归因于 javascript 引擎的所有内存。

可能的回归原因

  • 此数字的回归可能表明 JS 引擎中存在泄漏、以牺牲更多内存为代价考虑性能的优化或垃圾回收器存在问题。

基础内容驻留唯一内存

待办事项:添加测试定义

其他参考

Are We Slim Yet MDN 网页文档