From 5a2ea92d17ad2a769dce0bbd88aa1e981500939c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ADra=20Canal?= Date: Fri, 27 Feb 2026 13:55:29 -0300 Subject: [PATCH 1/2] drm/v3d: Only use Big/Super Pages if BO >= 512KB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Considering that the Raspberry Pi is an embedded device with limited memory, memory fragmentation is an important aspect for performance. Using Big/Super Pages has clear benefits when it comes to reducing TLB misses, but also has an impact on memory fragmentation as we need to allocate aligned contiguous memory, increasing compaction pressure and memory waste for small BOs. As Big/Super Pages only have benefits for larger BOs, create a minimum BO size to use the THP partition. After testing different thresholds, 512KB provides the most balanced results with clear improvements and no significant regressions. This means that Big/Super Pages will only be used for BOs of at least 512KB. Signed-off-by: Maíra Canal --- drivers/gpu/drm/v3d/v3d_bo.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/v3d/v3d_bo.c b/drivers/gpu/drm/v3d/v3d_bo.c index c41476ddde686c..50c9cd07b38374 100644 --- a/drivers/gpu/drm/v3d/v3d_bo.c +++ b/drivers/gpu/drm/v3d/v3d_bo.c @@ -116,7 +116,7 @@ v3d_bo_create_finish(struct drm_gem_object *obj) align = SZ_4K; else if (obj->size >= SZ_1M) align = SZ_1M; - else if (obj->size >= SZ_64K) + else if (obj->size >= SZ_512K) align = SZ_64K; else align = SZ_4K; @@ -150,10 +150,14 @@ struct v3d_bo *v3d_bo_create(struct drm_device *dev, struct drm_file *file_priv, struct drm_gem_shmem_object *shmem_obj; struct v3d_dev *v3d = to_v3d_dev(dev); struct v3d_bo *bo; + size_t size = PAGE_ALIGN(unaligned_size); int ret; - shmem_obj = drm_gem_shmem_create_with_mnt(dev, unaligned_size, - v3d->gemfs); + if (size >= SZ_512K) + shmem_obj = drm_gem_shmem_create_with_mnt(dev, size, v3d->gemfs); + else + shmem_obj = drm_gem_shmem_create(dev, size); + if (IS_ERR(shmem_obj)) return ERR_CAST(shmem_obj); bo = to_v3d_bo(&shmem_obj->base); From ba81860a99e8840908fab74b1bfeb66bd5966328 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ADra=20Canal?= Date: Sat, 14 Mar 2026 18:27:19 -0300 Subject: [PATCH 2/2] configs: enable CONFIG_TRANSPARENT_HUGEPAGE=y MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maíra Canal --- arch/arm64/configs/bcm2711_defconfig | 2 ++ arch/arm64/configs/bcm2712_defconfig | 2 ++ 2 files changed, 4 insertions(+) diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig index c59f9253dff1eb..2eb1969cfdf028 100644 --- a/arch/arm64/configs/bcm2711_defconfig +++ b/arch/arm64/configs/bcm2711_defconfig @@ -85,6 +85,8 @@ CONFIG_MAC_PARTITION=y CONFIG_BINFMT_MISC=m CONFIG_ZSWAP=y # CONFIG_COMPAT_BRK is not set +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y CONFIG_CMA=y CONFIG_CMA_AREAS=7 CONFIG_LRU_GEN=y diff --git a/arch/arm64/configs/bcm2712_defconfig b/arch/arm64/configs/bcm2712_defconfig index c4fb7babd9a437..e13fbb8839a04f 100644 --- a/arch/arm64/configs/bcm2712_defconfig +++ b/arch/arm64/configs/bcm2712_defconfig @@ -88,6 +88,8 @@ CONFIG_MAC_PARTITION=y CONFIG_BINFMT_MISC=m CONFIG_ZSWAP=y # CONFIG_COMPAT_BRK is not set +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y CONFIG_CMA=y CONFIG_CMA_AREAS=7 CONFIG_LRU_GEN=y