Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Yadav, Arvind" <arvind.yadav@intel.com>
To: "Matthew Auld" <matthew.auld@intel.com>,
	"Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
	intel-xe@lists.freedesktop.org
Cc: <matthew.brost@intel.com>, <himal.prasad.ghimiray@intel.com>
Subject: Re: [RFC PATCH 0/9] drm/xe/madvise: Add support for purgeable buffer objects
Date: Wed, 29 Oct 2025 14:10:55 +0530	[thread overview]
Message-ID: <24e496a4-7573-409a-92fa-875553204b33@intel.com> (raw)
In-Reply-To: <dda281c6-5b38-47aa-b8fe-b515f4c9f0d4@intel.com>


On 28-10-2025 18:32, Matthew Auld wrote:
> On 28/10/2025 12:37, Thomas Hellström wrote:
>> On Tue, 2025-10-28 at 17:54 +0530, Arvind Yadav wrote:
>>> This patch series introduces support for purgeable buffer objects
>>> (BOs) in the Xe driver.
>>> This feature allows userspace applications to provide memory usage
>>> hints to the kernel,
>>> enabling more effective memory management, especially under system
>>> memory pressure.
>>>
>>> When an application no longer needs the contents of a buffer, it can
>>> mark it as DONTNEED
>>> via the DRM_XE_MADVISE ioctl. This makes the BO a candidate for
>>> purging. If the kernel
>>> experiences memory pressure, it can reclaim the backing store of
>>> these BOs,
>>> freeing up GPU memory and helping to prevent Out-Of-Memory (OOM)
>>> situations.
>>>
>>> The lifecycle of a purgeable BO is as follows:
>>>
>>> A BO starts in the default WILLNEED state.
>>> Userspace marks it as DONTNEED when its contents are discardable.
>>> Under memory pressure, the kernel may purge the BO, transitioning it
>>> to the PURGED state.
>>> Any attempt to use a purged BO (e.g., binding, mapping, or CPU
>>> access) will result in an error,
>>> signaling to the application that the contents are gone. The
>>> application can then re-validate
>>> the BO by marking it WILLNEED, at which point new backing store is
>>> allocated. To prevent data corruption,
>>> a critical safety check ensures that only non-shared buffers can be
>>> marked as purgeable.
>>
>> What happens if the bo is bound to multiple address ranges? Do we
>> require all of them to be marked purged?
Currently, purging is applied to all address ranges, even if the user 
requested it for only one. Since the DONTNEED request comes from a user, 
it's assumed user are aware that the buffer object (BO) may be used 
across other address ranges as well.
However, if preferred, we can update the logic to purge the BO only when 
all associated address ranges have explicitly requested DONTNEED. 
Otherwise, the BO will remain WILLNEED. Let me know if this approach 
works, and we will proceed with the changes.

~Arvind
>>
>> Also with i915, when someone called WILLNEED on a purged bo, there was
>> an error rather than an attempt to rebind. What's the reasoning behind
>> re-allocating backing store here? Doesn't that mean we need to keep
>> vmas around even if we purge?
>
> Yeah, IIRC in Mesa/iris it used some kind of BO pool, marking stuff as 
> DONTNEED when "freeing" to the pool, and then when something was 
> allocated again from the pool it's first marked as WILLNEED, but if it 
> was purged they would simply discard the BO and try the next available 
> BO in the pool, which is hopefully not purged. So sounds like 
> re-allocating could potentially end up with undesired behaviour where 
> it now just always re-allocates instead of trying to re-use an 
> existing non-purged BO which might already have pages ready to go.
>
>>
>> /Thomas
>>
>>>
>>> Arvind Yadav (7):
>>>    drm/xe/bo: Add purgeable bo state tracking and field madv to xe_bo
>>>    drm/xe/madvise: Implement purgeable buffer object support
>>>    drm/xe/bo: Prevent purging of shared buffer objects
>>>    drm/xe/bo: Handle CPU faults on purged buffer objects
>>>    drm/xe/bo: Prevent mmap of purged buffer objects
>>>    drm/xe/vm: Prevent binding of purged buffer objects
>>>    drm/xe: Add support for querying purgeable BO states
>>>
>>> Himal Prasad Ghimiray (2):
>>>    drm/xe/uapi: Add UAPI support for purgeable buffer objects
>>>    drm/xe/uapi: Add UAPI for purgeable bo state to madvise query
>>> response
>>>
>>>   drivers/gpu/drm/xe/xe_bo.c         | 91 ++++++++++++++++++++++++++--
>>> -- 
>>>   drivers/gpu/drm/xe/xe_bo.h         | 51 +++++++++++++++++
>>>   drivers/gpu/drm/xe/xe_bo_types.h   |  3 +
>>>   drivers/gpu/drm/xe/xe_vm.c         | 11 ++++
>>>   drivers/gpu/drm/xe/xe_vm_madvise.c | 67 ++++++++++++++++++++++
>>>   include/uapi/drm/xe_drm.h          | 34 +++++++++++
>>>   6 files changed, 245 insertions(+), 12 deletions(-)
>>>
>>
>

  reply	other threads:[~2025-10-29  8:41 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-28 12:24 [RFC PATCH 0/9] drm/xe/madvise: Add support for purgeable buffer objects Arvind Yadav
2025-10-28 12:24 ` [RFC PATCH 1/9] drm/xe/uapi: Add UAPI " Arvind Yadav
2025-10-28 12:24 ` [RFC PATCH 2/9] drm/xe/bo: Add purgeable bo state tracking and field madv to xe_bo Arvind Yadav
2025-10-28 12:24 ` [RFC PATCH 3/9] drm/xe/madvise: Implement purgeable buffer object support Arvind Yadav
2025-10-29  8:55   ` Thomas Hellström
2025-10-29 10:51     ` Thomas Hellström
2025-10-30  7:03       ` Yadav, Arvind
2025-10-30  8:17         ` Thomas Hellström
2025-11-06  9:58           ` Yadav, Arvind
2025-10-28 12:24 ` [RFC PATCH 4/9] drm/xe/bo: Prevent purging of shared buffer objects Arvind Yadav
2025-10-28 12:24 ` [RFC PATCH 5/9] drm/xe/bo: Handle CPU faults on purged " Arvind Yadav
2025-10-28 12:24 ` [RFC PATCH 6/9] drm/xe/bo: Prevent mmap of " Arvind Yadav
2025-10-28 12:24 ` [RFC PATCH 7/9] drm/xe/vm: Prevent binding " Arvind Yadav
2025-10-28 12:24 ` [RFC PATCH 8/9] drm/xe/uapi: Add UAPI for purgeable bo state to madvise query response Arvind Yadav
2025-10-28 12:24 ` [RFC PATCH 9/9] drm/xe: Add support for querying purgeable BO states Arvind Yadav
2025-10-28 12:37 ` [RFC PATCH 0/9] drm/xe/madvise: Add support for purgeable buffer objects Thomas Hellström
2025-10-28 13:02   ` Matthew Auld
2025-10-29  8:40     ` Yadav, Arvind [this message]
2025-10-28 13:23 ` ✗ CI.checkpatch: warning for " Patchwork
2025-10-28 13:24 ` ✓ CI.KUnit: success " Patchwork
2025-10-28 14:12 ` ✗ Xe.CI.BAT: failure " Patchwork
2025-10-28 19:44 ` ✗ Xe.CI.Full: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=24e496a4-7573-409a-92fa-875553204b33@intel.com \
    --to=arvind.yadav@intel.com \
    --cc=himal.prasad.ghimiray@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=matthew.auld@intel.com \
    --cc=matthew.brost@intel.com \
    --cc=thomas.hellstrom@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox