drm/amdgpu: implement lru amdgpu_queue_mgr policy for compute v4
authorAndres Rodriguez <andresx7@gmail.com>
Mon, 6 Mar 2017 21:27:55 +0000 (16:27 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 31 May 2017 20:49:02 +0000 (16:49 -0400)
commit795f2813e628bcf57a69f2dfe413360d14a1d7f4
treef60bfe602590fde4bd170c263a569cd8147ffdd0
parenteffd924d2f3b9c52d5bd8137c3803e83f719a290
drm/amdgpu: implement lru amdgpu_queue_mgr policy for compute v4

Use an LRU policy to map usermode rings to HW compute queues.

Most compute clients use one queue, and usually the first queue
available. This results in poor pipe/queue work distribution when
multiple compute apps are running. In most cases pipe 0 queue 0 is
the only queue that gets used.

In order to better distribute work across multiple HW queues, we adopt
a policy to map the usermode ring ids to the LRU HW queue.

This fixes a large majority of multi-app compute workloads sharing the
same HW queue, even though 7 other queues are available.

v2: use ring->funcs->type instead of ring->hw_ip
v3: remove amdgpu_queue_mapper_funcs
v4: change ring_lru_list_lock to spinlock, grab only once in lru_get()

Signed-off-by: Andres Rodriguez <andresx7@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h