Commit f7ba887f authored by Alex Deucher's avatar Alex Deucher

drm/amdgpu: Adjust logic around GTT size (v3)

Certain GL unit tests for large textures can cause problems
with the OOM killer since there is no way to link this memory
to a process.  This was originally mitigated (but not necessarily
eliminated) by limiting the GTT size.  The problem is this limit
is often too low for many modern games so just make the limit 1/2
of system memory. The OOM accounting needs to be addressed, but
we shouldn't prevent common 3D applications from being usable
just to potentially mitigate that corner case.

Set default GTT size to max(3G, 1/2 of system ram) by default.

v2: drop previous logic and default to 3/4 of ram
v3: default to half of ram to align with ttm
v4: fix spelling in comment (Kent)

Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1942Reviewed-by: default avatarMarek Olšák <marek.olsak@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 1f43b890
...@@ -1798,18 +1798,26 @@ int amdgpu_ttm_init(struct amdgpu_device *adev) ...@@ -1798,18 +1798,26 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
DRM_INFO("amdgpu: %uM of VRAM memory ready\n", DRM_INFO("amdgpu: %uM of VRAM memory ready\n",
(unsigned) (adev->gmc.real_vram_size / (1024 * 1024))); (unsigned) (adev->gmc.real_vram_size / (1024 * 1024)));
/* Compute GTT size, either bsaed on 3/4th the size of RAM size /* Compute GTT size, either based on 1/2 the size of RAM size
* or whatever the user passed on module init */ * or whatever the user passed on module init */
if (amdgpu_gtt_size == -1) { if (amdgpu_gtt_size == -1) {
struct sysinfo si; struct sysinfo si;
si_meminfo(&si); si_meminfo(&si);
gtt_size = min(max((AMDGPU_DEFAULT_GTT_SIZE_MB << 20), /* Certain GL unit tests for large textures can cause problems
adev->gmc.mc_vram_size), * with the OOM killer since there is no way to link this memory
((uint64_t)si.totalram * si.mem_unit * 3/4)); * to a process. This was originally mitigated (but not necessarily
} * eliminated) by limiting the GTT size. The problem is this limit
else * is often too low for many modern games so just make the limit 1/2
* of system memory which aligns with TTM. The OOM accounting needs
* to be addressed, but we shouldn't prevent common 3D applications
* from being usable just to potentially mitigate that corner case.
*/
gtt_size = max((AMDGPU_DEFAULT_GTT_SIZE_MB << 20),
(u64)si.totalram * si.mem_unit / 2);
} else {
gtt_size = (uint64_t)amdgpu_gtt_size << 20; gtt_size = (uint64_t)amdgpu_gtt_size << 20;
}
/* Initialize GTT memory pool */ /* Initialize GTT memory pool */
r = amdgpu_gtt_mgr_init(adev, gtt_size); r = amdgpu_gtt_mgr_init(adev, gtt_size);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment