Intel Linux Graphics Driver Patches For Fast Soft-RC6 Yield Big Energy Use Improvement
Longtime open-source Intel Linux graphics driver developer Chris Wilson has sent out a set of 19 patches for what he calls fast soft-RC6 support and is a "substantial" improvement over the current driver code for Intel graphics power-savings.
Chris simply wrote at the start of the patch series, "In my very simple testing of scrolling through firefox, this brings up back into line with HW rc6 energy usage, a substantial improvement over current -tip."
That's enough to make me intrigued! He didn't provide any hard data on the "substantial" improvement compared to the previous RC6 power-savings state.
When digging through the patches he explained one of the issues with the current Intel Linux driver code prior to these patches:
The patches also now track engine round-trip times for better determining between slow systems or potentially hung engines and other improvements.
The work is too late for appearing as a feature for the upcoming 5.5 merge window, but since it is fixing a regression after all stemming from RC6 power savings breakage, perhaps we'll still see these patches materialize in the forthcoming kernel cycle. Stay tuned and some fresh power benchmarks as soon as I find the extra time.
Update: More information on the change and its reasoning.
Chris simply wrote at the start of the patch series, "In my very simple testing of scrolling through firefox, this brings up back into line with HW rc6 energy usage, a substantial improvement over current -tip."
That's enough to make me intrigued! He didn't provide any hard data on the "substantial" improvement compared to the previous RC6 power-savings state.
When digging through the patches he explained one of the issues with the current Intel Linux driver code prior to these patches:
The major drawback of commit 7e34f4e4aad3 ("drm/i915/gen8+: Add RC6 CTX corruption WA") is that it disables RC6 while Skylake (and friends) is active, and we do not consider the GPU idle until all outstanding requests have been retired and the engine switched over to the kernel context. If userspace is idle, this task falls onto our background idle worker, which only runs roughly once a second, meaning that userspace has to have been idle for a couple of seconds before we enable RC6 again. Naturally, this causes us to consume considerably more energy than before as powersaving is effectively disabled while a display server (here's looking at you Xorg) is running.
As execlists will get a completion event as the last context is completed and the GPU goes idle, we can use our submission tasklet to notice when the GPU is idle and kick the retire worker. Thus during light workloads, we will do much more work to idle the GPU faster... Hopefully with commensurate power saving!
The patches also now track engine round-trip times for better determining between slow systems or potentially hung engines and other improvements.
The work is too late for appearing as a feature for the upcoming 5.5 merge window, but since it is fixing a regression after all stemming from RC6 power savings breakage, perhaps we'll still see these patches materialize in the forthcoming kernel cycle. Stay tuned and some fresh power benchmarks as soon as I find the extra time.
Update: More information on the change and its reasoning.
6 Comments