TuxClocker is a program for modifying and monitoring properties of your GPU that I started in 2018. What motivated me to start it was the lack of a good free software Linux analog to MSI Afterburner . The current structure of the program is fairly lackluster though.

As you can see from the installation guide, the program is entirely monolithic, so there is no support for installing support for other GPU vendors after installation. The current user interface also can’t react to alternating GPU properties without accommodating them separately such as AMD’s pstates or having multiple controllable fans on the same GPU.

The new in-progress design involves separating pieces of the program into independent modules, so they can be installed and loaded without recompiling the entire program. Let’s take a look how the modifiable properties of the GPU are handled in the new tree model:

typedef struct tc_assignable_node_t { // Assignable name eg. fan speed char *name; // Unit for assignable char *unit; bool assignable; // Callback for assignment int8_t (*assign_callback)(); // Possible values for tunables are either values from a range or enumerations enum tc_assignable_value_category value_category; union { tc_assignable_enum_t enum_info; tc_assignable_range_t range_info; }; struct tc_assignable_node_t *parent; uint16_t children_count; struct tc_assignable_node_t **children_nodes; } tc_assignable_node_t;

With this model the module for modifiable properties can define arbitrary combinations of properties independently, and the user interface doesn’t need to know anything about the internals of the module, but only has to provide the model for editing them. This reworking will also pave the way for easier extension and cross-platform support.