aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu.h
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2016-08-17 17:49:27 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-08-30 17:54:30 -0400
commit95844d20ae024b5d553c9923a0d3145c3956bf69 (patch)
treea2b95c430ed82db0b2085379c451499c5638b698 /drivers/gpu/drm/amd/amdgpu/amdgpu.h
parent15f441db96adcac1dc86196b301f4204452bfe0c (diff)
drm/amdgpu: throttle buffer migrations at CS using a fixed MBps limit (v2)
The old mechanism used a per-submission limit that didn't take previous submissions within the same time frame into account. It also filled VRAM slowly when VRAM usage dropped due to a big eviction or buffer deallocation. This new method establishes a configurable MBps limit that is obeyed when VRAM usage is very high. When VRAM usage is not very high, it gives the driver the freedom to fill it quickly. The result is more consistent performance. It can't keep the BO move rate low if lots of evictions are happening due to VRAM fragmentation, or if a big buffer is being migrated. The amdgpu.moverate parameter can be used to set a non-default limit. Measurements can be done to find out which amdgpu.moverate setting gives the best results. Mainly APUs and cards with small VRAM will benefit from this. For F1 2015, anything with 2 GB VRAM or less will benefit. Some benchmark results - F1 2015 (Tonga 2GB): Limit MinFPS AvgFPS Old code: 14 32.6 128 MB/s: 28 41 64 MB/s: 15.5 43 32 MB/s: 28.7 43.4 8 MB/s: 27.8 44.4 8 MB/s: 21.9 42.8 (different run) Random drops in Min FPS can still occur (due to fragmented VRAM?), but the average FPS is much better. 8 MB/s is probably a good limit for this game & the current VRAM management. The random FPS drops are still to be tackled. v2: use a spinlock Signed-off-by: Marek Olšák <marek.olsak@amd.com> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu.h')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 4cfcf9c37800..938ef1cb68cc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -64,6 +64,7 @@
64extern int amdgpu_modeset; 64extern int amdgpu_modeset;
65extern int amdgpu_vram_limit; 65extern int amdgpu_vram_limit;
66extern int amdgpu_gart_size; 66extern int amdgpu_gart_size;
67extern int amdgpu_moverate;
67extern int amdgpu_benchmarking; 68extern int amdgpu_benchmarking;
68extern int amdgpu_testing; 69extern int amdgpu_testing;
69extern int amdgpu_audio; 70extern int amdgpu_audio;
@@ -2034,6 +2035,14 @@ struct amdgpu_device {
2034 atomic64_t num_evictions; 2035 atomic64_t num_evictions;
2035 atomic_t gpu_reset_counter; 2036 atomic_t gpu_reset_counter;
2036 2037
2038 /* data for buffer migration throttling */
2039 struct {
2040 spinlock_t lock;
2041 s64 last_update_us;
2042 s64 accum_us; /* accumulated microseconds */
2043 u32 log2_max_MBps;
2044 } mm_stats;
2045
2037 /* display */ 2046 /* display */
2038 bool enable_virtual_display; 2047 bool enable_virtual_display;
2039 struct amdgpu_mode_info mode_info; 2048 struct amdgpu_mode_info mode_info;