[RFC v2 0/5] DRM scheduler kunit tests
Tvrtko Ursulin
tvrtko.ursulin at igalia.com
Fri Feb 7 14:33:32 UTC 2025
There has repeatedly been quite a bit of apprehension when any change to the DRM
scheduler is proposed, with two main reasons being code base is considered
fragile, not well understood and not very well documented, and secondly the lack
of systematic testing outside the vendor specific tests suites and/or test
farms.
This RFC is an attempt to dislodge this status quo by adding some unit tests
using the kunit framework.
General approach is that there is a mock "hardware" backend which can be
controlled from tests, which in turn allows exercising various scheduler code
paths.
I am sending this early as an RFC so we can get alignment on the general idea
and high level approach. Once past that point we can polish and then hopefully
people can go crazy and start adding more advanced tests, testing corner cases
and what not.
Only some simple basic tests get added in the series and hopefully it is easy to
understand what tests are doing.
My usage of the kunit framework may not be perfect though, since this series is
my first attempt to use it.
An obligatory "screenshot" for reference:
[14:29:37] ============ drm_sched_basic_tests (3 subtests) ============
[14:29:38] [PASSED] drm_sched_basic_submit
[14:29:38] ================== drm_sched_basic_test ===================
[14:29:38] [PASSED] A queue of jobs in a single entity
[14:29:38] [PASSED] A chain of dependent jobs across multiple entities
[14:29:38] [PASSED] Multiple independent job queues
[14:29:38] [PASSED] Multiple inter-dependent job queues
[14:29:38] ============== [PASSED] drm_sched_basic_test ===============
[14:29:38] [PASSED] drm_sched_basic_entity_cleanup
[14:29:38] ============== [PASSED] drm_sched_basic_tests ==============
[14:29:38] ======== drm_sched_basic_timeout_tests (1 subtest) =========
[14:29:40] [PASSED] drm_sched_basic_timeout
[14:29:40] ========== [PASSED] drm_sched_basic_timeout_tests ==========
[14:29:40] ======= drm_sched_basic_priority_tests (2 subtests) ========
[14:29:42] [PASSED] drm_sched_priorities
[14:29:42] [PASSED] drm_sched_change_priority
[14:29:42] ========= [PASSED] drm_sched_basic_priority_tests ==========
[14:29:42] ====== drm_sched_basic_modify_sched_tests (1 subtest) ======
[14:29:43] [PASSED] drm_sched_test_modify_sched
[14:29:43] ======= [PASSED] drm_sched_basic_modify_sched_tests ========
[14:29:43] ============================================================
[14:29:43] Testing complete. Ran 10 tests: passed: 10
[14:29:43] Elapsed time: 13.330s total, 0.001s configuring, 4.005s building, 9.276s running
v2:
* Parameterize a bunch of similar tests.
* Improve test commentary.
* Rename TDR test to timeout. (Christian)
* Improve quality and consistency of naming. (Philipp)
Cc: Christian König <christian.koenig at amd.com>
Cc: Danilo Krummrich <dakr at kernel.org>
Cc: Matthew Brost <matthew.brost at intel.com>
Cc: Philipp Stanner <phasta at kernel.org>
Tvrtko Ursulin (5):
drm: Move some options to separate new Kconfig.debug
drm/scheduler: Add scheduler unit testing infrastructure and some
basic tests
drm/scheduler: Add a simple timeout test
drm/scheduler: Add basic priority tests
drm/scheduler: Add a basic test for modifying entities scheduler list
drivers/gpu/drm/Kconfig | 98 +----
drivers/gpu/drm/Kconfig.debug | 104 +++++
drivers/gpu/drm/scheduler/.kunitconfig | 12 +
drivers/gpu/drm/scheduler/Makefile | 1 +
drivers/gpu/drm/scheduler/tests/Makefile | 4 +
.../gpu/drm/scheduler/tests/drm_mock_entity.c | 29 ++
.../gpu/drm/scheduler/tests/drm_mock_job.c | 3 +
.../drm/scheduler/tests/drm_mock_scheduler.c | 261 +++++++++++
.../gpu/drm/scheduler/tests/drm_sched_tests.h | 132 ++++++
.../scheduler/tests/drm_sched_tests_basic.c | 416 ++++++++++++++++++
10 files changed, 967 insertions(+), 93 deletions(-)
create mode 100644 drivers/gpu/drm/Kconfig.debug
create mode 100644 drivers/gpu/drm/scheduler/.kunitconfig
create mode 100644 drivers/gpu/drm/scheduler/tests/Makefile
create mode 100644 drivers/gpu/drm/scheduler/tests/drm_mock_entity.c
create mode 100644 drivers/gpu/drm/scheduler/tests/drm_mock_job.c
create mode 100644 drivers/gpu/drm/scheduler/tests/drm_mock_scheduler.c
create mode 100644 drivers/gpu/drm/scheduler/tests/drm_sched_tests.h
create mode 100644 drivers/gpu/drm/scheduler/tests/drm_sched_tests_basic.c
--
2.48.0
More information about the dri-devel
mailing list