From 0f64def6be69538449bb0ab0e2122367a9c814b1 Mon Sep 17 00:00:00 2001 From: Alexander Daichendt Date: Wed, 3 May 2023 20:13:47 +0200 Subject: [PATCH] feat: add post about vram freq --- src/routes/blog/+page.server.ts | 2 +- .../blog/memory-frequency-amd-gpu/+page.md | 59 ++++++++++++++++++ .../images/_120hz.png | Bin 0 -> 11864 bytes .../images/_144hzlow.png | Bin 0 -> 11734 bytes 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/routes/blog/memory-frequency-amd-gpu/+page.md create mode 100644 src/routes/blog/memory-frequency-amd-gpu/images/_120hz.png create mode 100644 src/routes/blog/memory-frequency-amd-gpu/images/_144hzlow.png diff --git a/src/routes/blog/+page.server.ts b/src/routes/blog/+page.server.ts index 0a2d14b..ad67cf8 100644 --- a/src/routes/blog/+page.server.ts +++ b/src/routes/blog/+page.server.ts @@ -15,7 +15,7 @@ export const load: PageServerLoad = async () => { const path = Object.keys(modules)[index]; const { metadata } = file; - if (!metadata.hidden) posts.push({ ...metadata, href: `blog/${removeExtension(path)}` }); + if (!metadata?.hidden) posts.push({ ...metadata, href: `blog/${removeExtension(path)}` }); }); posts.sort((a, b) => new Date(b.created).valueOf() - new Date(a.created).valueOf()); diff --git a/src/routes/blog/memory-frequency-amd-gpu/+page.md b/src/routes/blog/memory-frequency-amd-gpu/+page.md new file mode 100644 index 0000000..6fe6864 --- /dev/null +++ b/src/routes/blog/memory-frequency-amd-gpu/+page.md @@ -0,0 +1,59 @@ +--- +created: '2023-03-12' +title: '[Workaround] High idle power consumption with AMD GPUs' +description: There is a bug with AMD gpus on Linux that causes the memory to run at full speed even when the GPU is idle for certain refresh rates and resolutions. This causes high idle power consumption. This post explains how to fix it. +keywords: + - AMD + - amdgpu + - gpu + - idle power + - power consumption + - memory frequency + - memory scaling + - memory clock + - memory speed + - memory + - linux + - linux kernel + - kernel +hidden: false +--- + + + +For many years, AMD GPUs have had a bug that causes the memory to run at full speed even when the GPU is idle for certain refresh rates and resolutions. For example, I am running a 34' UWQHD 3440x1440 monitor with 144Hz refresh rate. My GPU is a 6700 XT with 16GB of VRAM. When I set the resolution to 3440x1440 and the refresh rate to 144Hz, the memory frequency is stuck at 1000 MHz, or as Windows would report it 2000 Mhz. The high memory frequency consumes about 30 W of power - not doing anything at all. + +High power draw and high mem frequency + +This bug apparently existed on Windows as well, but was fixed some time in 2021. There were some tries to fix the issue on Linux in the past, but obviously nothing worked - as I found out now running the latest kernel 6.2. + +As a non-feasible workaround, you could lower the refresh rate to 50Hz or 60Hz. This would reduce the memory frequency and therefore also the power draw. However, nobody enjoys to watch their mouse stutter at 50Hz when you spent money on a 1440Hz monitor. + +Some interesting links to read up on the topic: + +- https://gitlab.freedesktop.org/drm/amd/-/issues/1403 +- https://gitlab.freedesktop.org/drm/amd/-/issues/1709 + +## Workaround + +A user in a [Gitlab issue](https://gitlab.freedesktop.org/drm/amd/-/issues/1655) reported that a different xrandr profile with different timings would fix the issue. I can confirm that it works for me as well. However, a small downside is that infrequenctly - every few minutes or so a small flicker occurs. I'll test this setup for a bit and figure out if I'd rather have high power draw or an occasional flicker. + +```bash +#!/bin/sh +xrandr --newmode "3440x1440_143.92" 891.4 3440 3536 3600 3920 1440 1446 1466 1580 +hsync -vsync +xrandr --addmode DisplayPort-0 3440x1440_143.92 +xrandr --output DisplayPort-0 --mode 3440x1440_143.92 +``` + +I added the script to my i3 config so that it is executed once I sign in. + +The power draw is now as expected at around 8W. The memory downclocks to 96Mhz. Whenever I move my mouse I can observe a rise in GPU freqency and power draw to around 12W. This is much better. + +This might not seem like a lot, but in situations like this I have to think about how many GPUs were sold globally and are affected by this bug. It's is not an insignificant amount of power that is wasted on a global scale. + +High power draw and high mem frequency diff --git a/src/routes/blog/memory-frequency-amd-gpu/images/_120hz.png b/src/routes/blog/memory-frequency-amd-gpu/images/_120hz.png new file mode 100644 index 0000000000000000000000000000000000000000..af548f33bc716b3e3198c5c09a198e74cdad95b7 GIT binary patch literal 11864 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 literal 0 HcmV?d00001