On Mon, 2025-02-03 at 15:30 +0000, Tvrtko Ursulin wrote: > 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: > > [15:16:33] ============ drm_sched_basic_tests (6 subtests) > ============ > [15:16:33] [PASSED] drm_sched_basic_submit > [15:16:33] [PASSED] drm_sched_basic_queue > [15:16:34] [PASSED] drm_sched_basic_chain > [15:16:34] [PASSED] drm_sched_basic_entities > [15:16:34] [PASSED] drm_sched_basic_entities_chain > [15:16:34] [PASSED] drm_sched_basic_entity_cleanup > [15:16:34] ============== [PASSED] drm_sched_basic_tests > ============== > [15:16:34] ========== drm_sched_basic_tdr_tests (1 subtest) > =========== > [15:16:36] [PASSED] drm_sched_basic_tdr > [15:16:36] ============ [PASSED] drm_sched_basic_tdr_tests > ============ > [15:16:36] ======= drm_sched_basic_priority_tests (2 subtests) > ======== > [15:16:37] [PASSED] drm_sched_priorities > [15:16:37] [PASSED] drm_sched_change_priority > [15:16:37] ========= [PASSED] drm_sched_basic_priority_tests > ========== > [15:16:37] ====== drm_sched_basic_modify_sched_tests (1 subtest) > ====== > [15:16:39] [PASSED] drm_sched_test_modify_sched > [15:16:39] ======= [PASSED] drm_sched_basic_modify_sched_tests > ======== > [15:16:39] > ============================================================ > [15:16:39] Testing complete. Ran 10 tests: passed: 10 > [15:16:39] Elapsed time: 13.442s total, 0.001s configuring, 4.117s > building, 9.248s running Thanks for working on this – as Christian said, this is really needed. I took a first look and don't see any big obstacles right now. I'll apply some comments at the places so you have some early feedback already Thx, P. > > Cc: Christian König <christian.koenig@xxxxxxx> > Cc: Danilo Krummrich <dakr@xxxxxxxxxx> > Cc: Matthew Brost <matthew.brost@xxxxxxxxx> > Cc: Philipp Stanner <phasta@xxxxxxxxxx> > > 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 TDR 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 | 260 ++++++++++ > .../gpu/drm/scheduler/tests/drm_sched_tests.h | 128 +++++ > .../scheduler/tests/drm_sched_tests_basic.c | 464 > ++++++++++++++++++ > 10 files changed, 1010 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 >