Merge pull request #548 from cjwilsontech/x3d-vcache-optimizer-support

Support setting the X3D V-Cache Mode

Adds support for adjusting the AMD X3D V-Cache mode(https://www.phoronix.com/news/AMD-3DV-Cache-Optimizer-Linux) for systems with the latest optimizer driver support using `amd_x3d_mode` in the Linux driver for dual-CCD systems.

This allows GameMode to adjust the system's preference for which CCD to schedule tasks on, opening opportunities for optimizing a system in new ways. For example, if a system is normally in `cache` mode to optimize for cache-sensitive tasks, this setting can be used to shift those to the `frequency` CCD temporarily while GameMode is running a game process pinned on the cache CCD, and then switch it back afterwards.

Changes:
- Adds two new config items, `amd_x3d_mode_desired` and `amd_x3d_mode_default` that can be set to either `frequency` or `cache`.
- Adds a new utility, `x3dmodectl` for getting or updating the X3D mode.
- Includes the new utility in the test command.
This commit is contained in:
afayaz-feral
2025-09-04 18:20:16 +01:00
committed by GitHub
9 changed files with 465 additions and 3 deletions

View File

@@ -101,6 +101,18 @@ disable_splitlock=1
;park_cores=no
;pin_cores=yes
; AMD 3D V-Cache Performance Optimizer Driver settings
; These options control the cache mode for dual CCD X3D CPUs (7950x3d, 9950x3d, etc.)
; "frequency" mode prioritizes higher boost clocks, "cache" mode prioritizes 3D V-Cache performance
; Allows for dynamically shifting other processes onto a different CCD. E.g. amd_x3d_mode_default=cache may be
; preferred for some normal, non-game workloads that are better optimized for cache, but
; amd_x3d_mode_desired=frequency can shift everything but the game process to frequency CCD while GameMode is
; running, in conjunction with core pinning.
; Only works on systems with the AMD X3D mode driver (automatically detected)
; The desired mode is set when entering gamemode, default mode is restored when leaving
;amd_x3d_mode_desired=frequency
;amd_x3d_mode_default=cache
[supervisor]
; This section controls the new gamemode functions gamemode_request_start_for and gamemode_request_end_for
; The whilelist and blacklist control which supervisor programs are allowed to make the above requests