Over the weekend I released benchmarks showing the Linux 3.12 kernel bringing big AMD Radeon performance improvements. Those benchmarks of a Radeon HD 4000 series GPU showed the Linux 3.12 kernel bringing major performance improvements over Linux 3.11 and prior. Some games improved with just low double-digit gains while other Linux games were nearly 90% faster! Interestingly, the AMD Radeon Linux developers were even surprised by these findings. After carrying out additional tests throughout the weekend, I can confirm these truly incredible performance improvements on other hardware. In this article are results from ten different AMD Radeon graphics cards.
The Linux 3.12 kernel brings several improvements for the Radeon DRM graphics driver within the kernel, including initial support for AMD "Berlin" APUs, DPM and ASPM power management for Radeon HD 8000 "Sea Islands" GPUs, major ring handling cleanups, replacing 3D blit code with the CP DMA / sDMA engines, many bug-fixes, and other changes. Dynamic Power Management still isn't enabled by default on the Linux 3.12 kernel. When running the RV770 benchmarks originally, it was thought the performance improvements may be due to the blitting code change or the ring cleanup, but it turns out that's not likely the cause. In fact, the upstream open-source AMD driver developers aren't exactly sure of the cause... The change in performance isn't due to DPM as it isn't enabled by default on Linux 3.12, it wasn't the blit code change to use the CP DMA engine as that's an R600-only change, there were no visual corruption/artifact issues to indicate bad rendering, etc.
Alex Deucher, the lead open-source Radeon driver developer at AMD and a regular contributor to the Phoronix Forums isn't sure of the cause of the significant Radeon OpenGL performance improvements. Alex wrote on Saturday in the forums, "[To be honest], I don't know of any particular changes that would have had much impact on performance." Alex then wrote on Sunday, "The only thing I can think of that may have improved things is changing the default gart size on r7xx+ asics from 512M to 1024M. If anyone want to test different gart sizes, you can change the gart size with the gartsize radeon kernel module parameter. E.g., add radeon.gartsize=1024 to the kernel command line in grub. Default is 512M for r1xx-r6xx and 1024M for r7xx+."
Christian König, another open-source AMD driver developer and contributor to the Phoronix Forums commented this morning, "It looks like we have fixed something very fundamental, but looking over the commits between 3.11 and 3.12 doesn't show anything that could cause this." AMD's John Bridgman, another regular to the Phoronix Forums, also had no explanation for the performance change.
With even the lead upstream AMD Radeon DRM driver developer not being sure why the Linux 3.12 kernel is so much faster, I spent the entire weekend benchmarking a greater selection of hardware from the Radeon HD 3850 (RV670) up through the Radeon HD 6950 (Cayman) graphics cards. All of the tested graphics cards between the Linux 3.11 and Linux 3.12 kernels included:
- Radeon HD 3850
- Radeon HD 4670
- Radeon HD 4830
- Radeon HD 4890
- Radeon HD 5830
- Radeon HD 6450
- Radeon HD 6570
- Radeon HD 6450
- Radeon HD 6570
- Radeon HD 6770
- Radeon HD 6870
- Radeon HD 6950
The only generation left out was the Radeon HD 2000 (original R600) series as when trying to run the Radeon HD 2900XT graphics card there were DRM driver issues (indicated below during one of the lock-ups).