This series ties a BO's TTM LRU priority (i.e. how likely it is to be picked for eviction/shrinking under memory pressure) to how userspace is actually using the VM and BOs it belongs to, instead of treating every BO the same.
The reasoning behind the heuristic: - Kernel BOs, and any BO not private to a single VM (no vm_id, e.g. shared/exported buffers), are given the highest priority so they are the least likely to be evicted -- these are foundational or shared resources. - BOs private to a VM are then prioritized based on the highest priority band userspace has assigned to any exec queue attached to that VM: a VM with a HIGH priority exec queue keeps its BOs at the highest priority (matching kernel/shared BOs), a VM with only NORMAL priority queues (or none yet) gets the next priority band down, and a VM with only LOW priority queues gets the band below that. - The lowest priority band is reserved exclusively for BOs (private or shared) that have no VMA mappings left anywhere. This lets userspace use an unbind as a signal of "drop this from my working set, but keep the backing store around in case I need it again" -- the BO is retained, just made a preferred candidate for eviction/shrinking until it is rebound. Patch 1 adds the accounting: a per-priority-band count of exec queues attached to each user VM. Patch 2 introduces the actual heuristic and uses it both to set a BO's initial priority at creation time and to bulk re-prioritize a VM's existing private BOs when an exec queue is added or removed. Patch 3 fixes up staleness that these earlier mechanisms miss: BOs created before any exec queue exists, or bound late via VM_BIND, and BOs not tied to a single VM that get demoted to the lowest priority and then rebound. Patch 4 introduces the lowest-priority demotion itself, applied when a BO loses its last VMA mapping. Matt Matthew Brost (4): drm/xe: Track exec queue priority band counts for user VMs drm/xe: Re-prioritize VM's private BOs when adding an exec queue drm/xe: Fix up BO TTM priority for late VM binds drm/xe: Lower BO TTM priority to lowest when fully unmapped from VM drivers/gpu/drm/xe/xe_bo.c | 18 ++- drivers/gpu/drm/xe/xe_bo.h | 3 +- drivers/gpu/drm/xe/xe_bo_types.h | 3 + drivers/gpu/drm/xe/xe_dma_buf.c | 2 +- drivers/gpu/drm/xe/xe_vm.c | 205 +++++++++++++++++++++++++++++-- drivers/gpu/drm/xe/xe_vm.h | 1 + drivers/gpu/drm/xe/xe_vm_types.h | 7 ++ 7 files changed, 221 insertions(+), 18 deletions(-) -- 2.34.1
