[RFC 0/5] DRM scheduler kunit tests

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

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

-- 
2.48.0




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux