]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: Adjust long-running workload timeslices to reasonable values
authorMatthew Brost <matthew.brost@intel.com>
Fri, 12 Dec 2025 18:28:41 +0000 (10:28 -0800)
committerMatthew Brost <matthew.brost@intel.com>
Mon, 15 Dec 2025 21:52:25 +0000 (13:52 -0800)
A 10ms timeslice for long-running workloads is far too long and causes
significant jitter in benchmarks when the system is shared. Adjust the
value to 5ms for preempt-fencing VMs, as the resume step there is quite
costly as memory is moved around, and set it to zero for pagefault VMs,
since switching back to pagefault mode after dma-fence mode is
relatively fast.

Also change min_run_period_ms to 'unsiged int' type rather than 's64' as
only positive values make sense.

Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
Cc: stable@vger.kernel.org
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Link: https://patch.msgid.link/20251212182847.1683222-2-matthew.brost@intel.com
drivers/gpu/drm/xe/xe_vm.c
drivers/gpu/drm/xe/xe_vm_types.h

index ca546666a5c9ccea1ac982c8e07bd9d3da93108c..68dffbf9768085914d814f0e37e5f35cbd5246ca 100644 (file)
@@ -1508,7 +1508,10 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags, struct xe_file *xef)
        INIT_WORK(&vm->destroy_work, vm_destroy_work_func);
 
        INIT_LIST_HEAD(&vm->preempt.exec_queues);
-       vm->preempt.min_run_period_ms = 10;     /* FIXME: Wire up to uAPI */
+       if (flags & XE_VM_FLAG_FAULT_MODE)
+               vm->preempt.min_run_period_ms = 0;
+       else
+               vm->preempt.min_run_period_ms = 5;
 
        for_each_tile(tile, xe, id)
                xe_range_fence_tree_init(&vm->rftree[id]);
index 3bf912bfbdcc496fbeb1ab0ee2f65cd8024820c6..18bad1dd08e64c18ce1b2dc5021298ae9904885a 100644 (file)
@@ -263,7 +263,7 @@ struct xe_vm {
                 * @min_run_period_ms: The minimum run period before preempting
                 * an engine again
                 */
-               s64 min_run_period_ms;
+               unsigned int min_run_period_ms;
                /** @exec_queues: list of exec queues attached to this VM */
                struct list_head exec_queues;
                /** @num_exec_queues: number exec queues attached to this VM */