[PATCH v3 1/2] drm/buddy: Optimize free block management with RB tree
Matthew Auld
matthew.auld at intel.com
Fri Aug 22 12:28:54 UTC 2025
On 22/08/2025 09:37, Matthew Auld wrote:
> On 21/08/2025 16:06, Arunpravin Paneer Selvam wrote:
>> Replace the freelist (O(n)) used for free block management with a
>> red-black tree, providing more efficient O(log n) search, insert,
>> and delete operations. This improves scalability and performance
>> when managing large numbers of free blocks per order (e.g., hundreds
>> or thousands).
>>
>> In the VK-CTS memory stress subtest, the buddy manager merges
>> fragmented memory and inserts freed blocks into the freelist. Since
>> freelist insertion is O(n), this becomes a bottleneck as fragmentation
>> increases. Benchmarking shows list_insert_sorted() consumes ~52.69% CPU
>> with the freelist, compared to just 0.03% with the RB tree
>> (rbtree_insert.isra.0), despite performing the same sorted insert.
>>
>> This also improves performance in heavily fragmented workloads,
>> such as games or graphics tests that stress memory.
>>
>> v3(Matthew):
>> - Remove RB_EMPTY_NODE check in force_merge function.
>> - Rename rb for loop macros to have less generic names and move to
>> .c file.
>> - Make the rb node rb and link field as union.
>>
>> Signed-off-by: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam at amd.com>
>
> CI is reporting a crash in rb_erase when running the drm_buddy kunit,
> somewhere in drm_test_buddy_alloc_clear it seems.
Found one bug in the second patch:
--- a/drivers/gpu/drm/drm_buddy.c
+++ b/drivers/gpu/drm/drm_buddy.c
@@ -507,6 +507,8 @@ static int split_block(struct drm_buddy *mm,
return -ENOMEM;
}
+ mark_split(mm, block);
+
if (drm_buddy_block_is_clear(block)) {
mark_cleared(block->left);
mark_cleared(block->right);
@@ -516,8 +518,6 @@ static int split_block(struct drm_buddy *mm,
mark_free(mm, block->left);
mark_free(mm, block->right);
- mark_split(mm, block);
-
return 0;
}
Otherwise the mark_split might get the wrong rb root if we reset the
clear state first. Might help with this crash.
More information about the Intel-xe
mailing list