v6 TLDR: Change igt_dmem_driver API by moving handle array allocation out of it and into the test itself and including dmem.max new behavior test.
This patchset is based on the work of Thomas Hellström at [1] and a followup I have submitted at [2]. With this version, I reverted the order in which to apply the patchsets, as this one adds the infrastructure and the drivers mechanisms, and a test for dmem.current and its behavior around dmem.max that is currently supported in the kernel. As for the new dmem.max eviction behavior, introduced by [3], it has been now included since it has been merged to Linux v7.3-rc1. I have run the tests, including the ones that test dmem.max eviction behavior on a system with a 1GiB VRAM amdgpu card. Rodrigo Siqueira helped me run it on a Xe system. We have had applied the patchset at [3] on top of then current linux origin/master [5], with a fixup for the amdgpu driver. This latest version has not been tested on Xe, except for the dmem.current behavior, which was tested with a 7.0 kernel. Latest tests for amdgpu used v7.3-rc1. Now, for the changes since v1 [2]: - Changed the test name from drv_dmem_cgroups to dmem_cgroups. - Have system includes before igt ones. - Documented the current SUBTEST. - Changed free_vram driver hook to only release a given BO. This allows for the eviction trigger by a new allocation added by write_eviction_nonblock subtest. - Changed allocate_vram to keep more state necessary for releasing a single BO. - Added a global free_vram helper to free all allocated VRAM. Compared to v3 of [1]: - I have kept wait_for_usage_drop as release can be lazy and we test for it on test_current SUBTEST, but had USAGE_DROP_TIMEOUT_MS be a little longer. - Changed BO_SIZE and EVICT_STEP to allow for more than two eviction steps on a 1GiB VRAM system. - Reduced USAGE_SLACK to avoid false positives, but still allow for some page table accounting. Compared to v2 of this one [6]: - Ignore -ENOMEM and -ENOSPC when trying to fill VRAM. - When limiting max memory, allow for some slack, as there might be some overhead. - On Xe, allocate GEM object with no deferred backing, and skip binding. Compared to v3 of this one [7]: - Merge dmem_cgroups tests into cgroup_dmem and making cgroup_dmem original test a subtest. - Remove assertion when trying to verify allocations have failed as amdgpu will fallback to GTT. Compared to v4 of this one [8]: - Removed the creation of vm in Xe, that was leading to extra bytes being used and was no longer necessary. - Removed the USAGE_SLACK that was necessary due to the extra bytes allocated due to the use of vm in Xe. Compared to v5 of this one [10]: - Documented igt_dmem_driver structure. - Simplified igt_dmem_driver API, such that handle array allocation is not done, and handles are returned as part of allocation. - Make get_region_name callback use the context, instead of fd, which avoids repeating the vram region lookup for Xe. - Moved handle array allocation into the test. - init/deinit the igt_dmem_driver per driver, not per subtest. [1] https://patchwork.freedesktop.org/series/163935/#rev3 [2] https://patchwork.freedesktop.org/series/166496/ [3] https://lore.kernel.org/dri-devel/[email protected]/ [4] https://gitlab.freedesktop.org/cascardo/igt-gpu-tools/-/commits/dmem_max?ref_type=heads [5] 502d801f0ab0 ("Merge tag 'erofs-for-7.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs") [6] https://lore.kernel.org/dri-devel/[email protected]/ [7] https://lore.kernel.org/dri-devel/[email protected]/ [8] https://lore.kernel.org/dri-devel/[email protected]/ [9] https://lore.kernel.org/dri-devel/[email protected]/ [10] https://lore.kernel.org/dri-devel/[email protected]/ To: [email protected] Cc: [email protected] Cc: Thadeu Lima de Souza Cascardo <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: Christian Koenig <[email protected]> Cc: [email protected] Cc: Thomas Hellström <[email protected]> Cc: Kamil Konieczny <[email protected]> Cc: Janusz Krzysztofik <[email protected]> Cc: Vitaly Prosyak <[email protected]> Cc: Natalie Vock <[email protected]> Cc: Tvrtko Ursulin <[email protected]> Cc: [email protected] -- 2.47.3 --- Thadeu Lima de Souza Cascardo (4): lib/xe: Introduce dmem driver and implement Xe support lib/amdgpu: add amdgpu_cgroup_region_name lib/amdgpu: add amdgpu support to igt_dmem_driver tests/cgroup_dmem: add test for dmem.current Thomas Hellström (5): lib/igt_cgroup: add cgroup v2 and dmem controller helpers tests/cgroup_dmem: add dmem cgroup controller test lib/xe: add xe_cgroup_region_name() helper tests/cgroup_dmem: add dmem cgroup eviction test tests/cgroup_dmem: add write_eviction_nonblock subtest lib/amdgpu/amd_dmem.c | 90 +++++++ lib/amdgpu/amd_memory.c | 25 ++ lib/amdgpu/amd_memory.h | 2 + lib/igt.h | 1 + lib/igt_cgroup.c | 638 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_cgroup.h | 56 +++++ lib/igt_dmem_driver.h | 35 +++ lib/meson.build | 3 + lib/xe/xe_dmem.c | 97 ++++++++ lib/xe/xe_query.c | 32 +++ lib/xe/xe_query.h | 2 + tests/cgroup_dmem.c | 524 +++++++++++++++++++++++++++++++++++++++ tests/meson.build | 1 + 13 files changed, 1506 insertions(+) --- base-commit: aafc4bcf336167ad12356050b2e1da7e8c314555 change-id: 20260902-dmem_max-1a5e837347a8 Best regards, -- Thadeu Lima de Souza Cascardo <[email protected]>
