Re: [PATCH] drm/sched: Increase drm_mock_sched_job_wait_finished timeout when CONFIG_HZ=100
From: David Gow
Date: Mon Sep 14 2026 - 06:07:20 EST
Le 14/09/2026 à 4:49 PM, Tvrtko Ursulin a écrit :
>
> On 13/09/2026 09:41, David Gow wrote:
>> The drm_sched_scheduler_overhead_tests tests hardcode a timeout of 5x
>> total_us, and fail if it's exceeded. However, on systems with
>> CONFIG_HZ < 250, this tends to fail.
>
> Systems plural or just UML? I suppose if no hrtimer support and low HZ
> it is plausible since executing the tests needs 1000 x 1ms hrtimer
> callbacks to fire.
UML is the most important of the ones I tested (as it doesn't have a way
to increase HZ, though it did pass if I manually forced CONFIG_HZ=1000),
but even x86/x86_64 will trigger this if CONFIG_HZ_100=y.
For example, I can reproduce it with:
./tools/testing/kunit/kunit.py run --arch x86_64 --kconfig_add CONFIG_DRM=y --kconfig_add CONFIG_HZ_100=y drm_sched_scheduler_overhead_tests
>
> Anyway, increasing the tolerance is okay-ish, with the -ish part being
> that it would be even better to skip if test could know before hand on a
> particular system it would be uselessly slow. Hence I am curious whether
> it is just UML or you could point me to other specific platforms/kconfig
> combinations where you saw it fail. In which case maybe we can come up
> with a skip criteria.
I saw it passing relatively consistently on x86 (under qemu) with
CONFIG_HZ=250, and failing consistently on everything with
CONFIG_HZ=100.
I don't think it'd be a problem to either have the test depend
on CONFIG_HZ >= 250 or use that as criteria to skip the test
altogether.
I'm happy to send out a v2 of this patch which just uses the same
criteria (CONFIG_HZ < 250) to just skip the test if you'd prefer.
Cheers,
-- David
>
> Regards,
>
> Tvrtko
>
>> As it's possible to configure many architectures to use 100 Hz (and some,
>> such as UML, hardcode CONFIG_HZ=100), increase the timeout so that the
>> test
>> doesn't fail on these configurations.
>>
>> Fixes: 97ef806a5314 ("drm/sched: Add some scheduling quality unit tests")
>> Signed-off-by: David Gow <david@xxxxxxxxxxxx>
>> ---
>>
>> This failure showed up on UML when testing the addition of CONFIG_DRM to
>> the KUnit 'alltests' config[1]. Ideally, I'd like to see this test fixed
>> (or at least skipped/disabled) on these broken configurations so that the
>> alltests run is clean. (I don't actually run any CONFIG_HZ=100 configs
>> other than UML, but fixing them all is ideal if we can manage it.)
>>
>> If you'd rather a different implementation / magic number, let me know.
>> I picked 15 here as it gave me plenty of leeway: 10 worked most, but not
>> all, of the time under i386 qemu w/ CONFIG_HZ_100, and was fine with UML
>> on this machine.
>>
>> Thanks,
>> -- David
>>
>> [1]: https://lore.kernel.org/all/20260911-kunit-drm-v1-1-
>> c5c0f18fc7b0@xxxxxxxxxx/
>> ---
>> drivers/gpu/drm/scheduler/tests/tests_scheduler.c | 11 +++++++++--
>> 1 file changed, 9 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/scheduler/tests/tests_scheduler.c b/
>> drivers/gpu/drm/scheduler/tests/tests_scheduler.c
>> index 285546a2218f..02c83b5c2189 100644
>> --- a/drivers/gpu/drm/scheduler/tests/tests_scheduler.c
>> +++ b/drivers/gpu/drm/scheduler/tests/tests_scheduler.c
>> @@ -13,6 +13,13 @@
>> * logic.
>> */
>> +/* We need a more generous timeout when CONFIG_HZ=100. */
>> +#if CONFIG_HZ < 250
>> +#define TIMEOUT_MULTIPLIER 15
>> +#else
>> +#define TIMEOUT_MULTIPLIER 5
>> +#endif
>> +
>> static int drm_sched_scheduler_init(struct kunit *test)
>> {
>> struct drm_mock_scheduler *sched;
>> @@ -88,7 +95,7 @@ static void
>> drm_sched_scheduler_queue_overhead(struct kunit *test)
>> /* Wait with a safe margin to avoid every failing. */
>> done = drm_mock_sched_job_wait_finished(job,
>> - usecs_to_jiffies(total_us) * 5);
>> + usecs_to_jiffies(total_us) *
>> TIMEOUT_MULTIPLIER);
>> end = ktime_get();
>> KUNIT_ASSERT_TRUE(test, done);
>> @@ -149,7 +156,7 @@ static void drm_sched_scheduler_ping_pong(struct
>> kunit *test)
>> /* Wait with a safe margin to avoid every failing. */
>> done = drm_mock_sched_job_wait_finished(job,
>> - usecs_to_jiffies(total_us) * 5);
>> + usecs_to_jiffies(total_us) *
>> TIMEOUT_MULTIPLIER);
>> end = ktime_get();
>> KUNIT_ASSERT_TRUE(test, done);
>>
>