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 上的檔案來停用將提交給該農場的所有作業。