On Mon, 2025-03-24 at 09:26 +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 series 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.
> 
> Only some simple basic tests get added in the series and hopefully it
> is easy to
> understand what tests are doing.
> 
> An obligatory "screenshot" for reference:
> 
> [14:09:05] ============ drm_sched_basic_tests (3 subtests)
> ============
> [14:09:06] [PASSED] drm_sched_basic_submit
> [14:09:06] ================== drm_sched_basic_test 
> ===================
> [14:09:06] [PASSED] A queue of jobs in a single entity
> [14:09:06] [PASSED] A chain of dependent jobs across multiple
> entities
> [14:09:06] [PASSED] Multiple independent job queues
> [14:09:06] [PASSED] Multiple inter-dependent job queues
> [14:09:07] ============== [PASSED] drm_sched_basic_test
> ===============
> [14:09:07] [PASSED] drm_sched_basic_entity_cleanup
> [14:09:07] ============== [PASSED] drm_sched_basic_tests
> ==============
> [14:09:07] ======== drm_sched_basic_timeout_tests (1 subtest)
> =========
> [14:09:08] [PASSED] drm_sched_basic_timeout
> [14:09:08] ========== [PASSED] drm_sched_basic_timeout_tests
> ==========
> [14:09:08] ======= drm_sched_basic_priority_tests (2 subtests)
> ========
> [14:09:10] [PASSED] drm_sched_priorities
> [14:09:10] [PASSED] drm_sched_change_priority
> [14:09:10] ========= [PASSED] drm_sched_basic_priority_tests
> ==========
> [14:09:10] ====== drm_sched_basic_modify_sched_tests (1 subtest)
> ======
> [14:09:11] [PASSED] drm_sched_test_modify_sched
> [14:09:11] ======= [PASSED] drm_sched_basic_modify_sched_tests
> ========
> [14:09:11] ======== drm_sched_basic_credits_tests (1 subtest)
> =========
> [14:09:12] [PASSED] drm_sched_test_credits
> [14:09:12] ========== [PASSED] drm_sched_basic_credits_tests
> ==========
> [14:09:12]
> ============================================================
> [14:09:12] Testing complete. Ran 11 tests: passed: 11
> [14:09:13] Elapsed time: 13.539s total, 0.001s configuring, 3.004s
> building, 10.462s running
> 
> v2:
>  * Parameterize a bunch of similar tests.
>  * Improve test commentary.
>  * Rename TDR test to timeout. (Christian)
>  * Improve quality and consistency of naming. (Philipp)
> 
> RFC v2 -> series v1:
>  * Rebased for drm_sched_init changes.
>  * Fixed modular build.
>  * Added some comments.
>  * Filename renames. (Philipp)
> 
> v2:
>  * Dealt with a bunch of checkpatch warnings.
> 
> v3:
>  * Some mock API renames, kerneldoc grammar fixes and indentation
> fixes.
> 
> v4:
>  * Fix use after free caused by relying on scheduler fence for
> querying status.
>  * Kerneldoc fixes.
> 
> v5:
>  * Cleanup in-flight jobs on scheduler shutdown.
>  * Change hang_limit to 1.
> 
> v6:
>  * Use KUNIT_ASSERT_TRUE/FALSE.
>  * Fixed patch titles.
>  * Added credit_limit test.
>  * Added CONFIG_DRM_SCHED_KUNIT_TEST_ASPIRATIONAL.
> 
> v7:
>  * v6 omitted to send the first patch by mistake.
> 
> v8:
>  * Removed CONFIG_DRM_SCHED_KUNIT_TEST_ASPIRATIONAL for now.
>  * Added Christian's acks.
> 
> v9:
>  * Fixed a potential memory leak caused by a race condition on mock
> scheduler
>    shutdown. In order to reliably clean up everything, we have keep
> track of
>    jobs even past the signalling stage, all until either DRM sched
> core managed
>    to run the ->free_job() callback, or until mock scheduler teardown
> from the
>    test.
> 
> v10:
>  * Rebase for a merge conflict in Kconfig.
> 
> Cc: Christian König <christian.koe...@amd.com>
> Cc: Danilo Krummrich <d...@kernel.org>
> Cc: Matthew Brost <matthew.br...@intel.com>
> Cc: Philipp Stanner <pha...@kernel.org>
> 
> Tvrtko Ursulin (6):
>   drm: Move some options to separate new Kconfig
>   drm/sched: Add scheduler unit testing infrastructure and some basic
>     tests
>   drm/sched: Add a simple timeout test
>   drm/sched: Add basic priority tests
>   drm/sched: Add a basic test for modifying entities scheduler list
>   drm/sched: Add a basic test for checking credit limit
> 
>  drivers/gpu/drm/Kconfig                       | 110 +---
>  drivers/gpu/drm/Kconfig.debug                 | 116 +++++
>  drivers/gpu/drm/scheduler/.kunitconfig        |  12 +
>  drivers/gpu/drm/scheduler/Makefile            |   2 +
>  drivers/gpu/drm/scheduler/tests/Makefile      |   7 +
>  .../gpu/drm/scheduler/tests/mock_scheduler.c  | 359 +++++++++++++
>  drivers/gpu/drm/scheduler/tests/sched_tests.h | 226 +++++++++
>  drivers/gpu/drm/scheduler/tests/tests_basic.c | 476
> ++++++++++++++++++
>  8 files changed, 1203 insertions(+), 105 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/mock_scheduler.c
>  create mode 100644 drivers/gpu/drm/scheduler/tests/sched_tests.h
>  create mode 100644 drivers/gpu/drm/scheduler/tests/tests_basic.c
> 


Applied to drm-misc-next

Thanks for your endurance!
P.

Reply via email to