[RFC] drm: property: use vzalloc() instead of kvzalloc() for large blobs
Ville Syrjälä
ville.syrjala at linux.intel.com
Wed Mar 8 20:26:27 UTC 2023
On Wed, Mar 08, 2023 at 12:02:42PM -0800, Abhinav Kumar wrote:
> For DRM property blobs created by user mode using
> drm_property_create_blob(), if the blob value needs to be updated the
> only way is to destroy the previous blob and create a new one instead.
>
> For some of the property blobs, if the size of the blob is more
> than one page size, kvzalloc() can slow down system as it will first
> try to allocate physically contiguous memory but upon failure will
> fall back to non-contiguous (vmalloc) allocation.
>
> If the blob property being used is bigger than one page size, in a
> heavily loaded system, this causes performance issues because
> some of the blobs are updated on a per-frame basis.
>
> To mitigate the performance impact of kvzalloc(), use it only when
> the size of allocation is less than a page size when creating property
> blobs
Not sure how badly this will eat into the vmalloc area.
Is there no GFP flag to avoid the expensive stuff instead?
>
> Signed-off-by: Abhinav Kumar <quic_abhinavk at quicinc.com>
> ---
> drivers/gpu/drm/drm_property.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_property.c b/drivers/gpu/drm/drm_property.c
> index dfec479830e4..40c2a3142038 100644
> --- a/drivers/gpu/drm/drm_property.c
> +++ b/drivers/gpu/drm/drm_property.c
> @@ -561,7 +561,11 @@ drm_property_create_blob(struct drm_device *dev, size_t length,
> if (!length || length > INT_MAX - sizeof(struct drm_property_blob))
> return ERR_PTR(-EINVAL);
>
> - blob = kvzalloc(sizeof(struct drm_property_blob)+length, GFP_KERNEL);
> + if (sizeof(struct drm_property_blob) + length > PAGE_SIZE)
> + blob = vzalloc(sizeof(struct drm_property_blob)+length);
> + else
> + blob = kvzalloc(sizeof(struct drm_property_blob)+length, GFP_KERNEL);
> +
> if (!blob)
> return ERR_PTR(-ENOMEM);
>
> --
> 2.7.4
--
Ville Syrjälä
Intel
More information about the dri-devel
mailing list