amdgpu: fix inefficient vamgr algorithm
authorChunming Zhou <david1.zhou@amd.com>
Thu, 8 Feb 2018 06:35:26 +0000 (14:35 +0800)
committerChunming Zhou <david1.zhou@amd.com>
Thu, 8 Feb 2018 06:35:47 +0000 (14:35 +0800)
issue: UMD allocates top 4GB, but don't do anything, just reserve top 4GB space,
but the performance of VP13 drops from 162fps to 99fps.

root cause:
our va hole list of vamgr is too long by time going.

fix:
reusing old hole as much as possible can make the list shortest.

result:
performance recovers as non-list path, next patch will remove non-list code path.

Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
amdgpu/amdgpu_vamgr.c

index ab425ef..a2852b5 100644 (file)
@@ -80,9 +80,7 @@ amdgpu_vamgr_find_va(struct amdgpu_bo_va_mgr *mgr, uint64_t size,
                return AMDGPU_INVALID_VA_ADDRESS;
 
        pthread_mutex_lock(&mgr->bo_va_mutex);
-       /* TODO: using more appropriate way to track the holes */
-       /* first look for a hole */
-       LIST_FOR_EACH_ENTRY_SAFE(hole, n, &mgr->va_holes, list) {
+       LIST_FOR_EACH_ENTRY_SAFE_REV(hole, n, &mgr->va_holes, list) {
                if (base_required) {
                        if (hole->offset > base_required ||
                            (hole->offset + hole->size) < (base_required + size))