DRM子系统的自动化测试¶
简介¶
确保对核心或驱动程序的更改不会引入回归问题,在需要测试大量不同的硬件配置时,可能非常耗时。此外,让每个对此测试感兴趣的人员都必须获取和维护可能相当数量的硬件是不切实际的。
此外,开发者最好自己检查代码中的回归问题,而不是依赖维护者发现它们并报告回来。
gitlab.freedesktop.org 中有一些工具可以自动测试 Mesa,这些工具也可以用于测试 DRM 子系统。本文档介绍了对此测试感兴趣的人员如何使用此共享基础设施来节省大量时间和精力。
相关文件¶
drivers/gpu/drm/ci/gitlab-ci.yml¶
这是 GitLab CI 的根配置文件。除了其他不太重要的部分外,它还指定要使用的脚本的特定版本。有一些变量可以修改以更改管道的行为
- DRM_CI_PROJECT_PATH
包含 Mesa 软件基础设施以进行 CI 的仓库
- DRM_CI_COMMIT_SHA
要使用的该仓库的特定修订版本
- UPSTREAM_REPO
包含目标分支的 git 仓库的 URL
- TARGET_BRANCH
此分支要合并到的分支
- IGT_VERSION
正在使用的 igt-gpu-tools 的修订版本,来自 https://gitlab.freedesktop.org/drm/igt-gpu-tools
drivers/gpu/drm/ci/testlist.txt¶
要在所有驱动程序上运行的 IGT 测试(除非在驱动程序的 *-skips.txt 文件中提到,请参见下文)。
drivers/gpu/drm/ci/${DRIVER_NAME}-${HW_REVISION}-fails.txt¶
列出了给定驱动程序在特定硬件修订版上的已知失败。
drivers/gpu/drm/ci/${DRIVER_NAME}-${HW_REVISION}-flakes.txt¶
列出了已知在特定硬件修订版上的给定驱动程序上行为不可靠的测试。无论结果如何,这些测试都不会导致作业失败。 它们仍然会运行。
每个新的 flake 条目都必须与报告该错误的电子邮件的链接相关联,该错误报告给受影响的驱动程序的作者或相关的 GitLab 问题。 该条目还必须包括板名称或设备树名称、第一个受影响的内核版本、用于测试的 IGT 版本以及失败率的近似值。
它们应以下列格式提供
# Bug Report: $LORE_URL_OR_GITLAB_ISSUE
# Board Name: broken-board.dtb
# Linux Version: 6.6-rc1
# IGT Version: 1.28-gd2af13d9f
# Failure Rate: 100
flaky-test
使用下面的相应链接创建 GitLab 问题: amdgpu 驱动程序: https://gitlab.freedesktop.org/drm/amd/-/issues i915 驱动程序: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues msm 驱动程序: https://gitlab.freedesktop.org/drm/msm/-/issues xe 驱动程序: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues
drivers/gpu/drm/ci/${DRIVER_NAME}-${HW_REVISION}-skips.txt¶
列出了在特定硬件修订版上的给定驱动程序上不会运行的测试。 这些通常是由于挂起机器、导致 OOM、花费太长时间等而干扰测试列表运行的测试。
如何在您的树上启用自动化测试¶
1. 如果您还没有 Linux 树,请在 https://gitlab.freedesktop.org/ 中创建一个
2. 在您的内核仓库的配置中(例如 https://gitlab.freedesktop.org/janedoe/linux/-/settings/ci_cd),将 CI/CD 配置文件从 .gitlab-ci.yml 更改为 drivers/gpu/drm/ci/gitlab-ci.yml。
3. 请求添加到 drm/ci-ok 组,以便您的用户具有在 https://gitlab.freedesktop.org/drm/ci-ok 上运行 CI 的必要权限
4. 下次您推送到此仓库时,您将看到正在创建的 CI 管道(例如 https://gitlab.freedesktop.org/janedoe/linux/-/pipelines)
5. 将运行各种作业,并且在管道完成后,除非发现回归,否则所有作业都应该是绿色的。
6. 管道中的警告表明在测试期间检测到 lockdep(参见 运行时锁定正确性验证器)问题。
如何更新测试预期结果¶
如果您的代码更改修复了任何测试,您将必须从 drivers/gpu/drm/ci/${DRIVER_NAME}_*_fails.txt 中的一个或多个文件中删除一行或多行,对于每个受更改影响的测试平台。
如何扩展覆盖范围¶
如果您的代码更改使得可以运行更多测试(例如,通过解决可靠性问题),您可以从 flakes 和/或 skips 列表中删除测试,然后删除已知的失败的预期结果(如果有)。
如果需要更新正在使用的 IGT 版本(可能您已向其中添加了更多测试),请更新 gitlab-ci.yml 文件顶部的 IGT_VERSION 变量。
如何测试您对脚本的更改¶
为了测试对 drm-ci 仓库中脚本的更改,请更改 drivers/gpu/drm/ci/gitlab-ci.yml 中的 DRM_CI_PROJECT_PATH 和 DRM_CI_COMMIT_SHA 变量以匹配您的项目 fork(例如 janedoe/drm-ci)。 此 fork 需要在 https://gitlab.freedesktop.org/ 中。
如何在测试中合并外部修复¶
通常,其他树中的回归问题会阻止测试在被测树本地的更改。 这些修复程序将在构建作业期间从目标树中命名为 ${TARGET_BRANCH}-external-fixes 的分支自动合并。
如果管道不在合并请求中,并且本地树中存在同名分支,则也会合并该分支中的提交。
如何处理可能关闭的自动化测试实验室¶
如果硬件农场已关闭,从而导致本来可以通过的管道失败,则可以通过编辑 https://gitlab.freedesktop.org/gfx-ci/lab-status/-/blob/main/lab-status.yml 上的文件来禁用将提交给该农场的所有作业。