Back in April, I wrote a small Linux tool called taskaffctl, and I have been using it successfully for the past few months on my Framework Laptop 13 with the Ryzen AI 9 HX 370.
One of my biggest complaints with this machine was that background work such as Syncthing could wake the full Zen 5 cores and push them beyond 5 GHz. That made the laptop boost unnecessarily for work that is not particularly time-sensitive. At the same time, I did not want to restrict the entire CPU to a low-power mode, since interactive and demanding applications should still be able to use the faster cores.
With taskaffctl, I can start Syncthing onto the lower-performance Zen 5c cluster like:
taskaffctl --tag lowest-perf-cores -- syncthing
Linux provides CPU-affinity mechanisms, but identifying the correct CPUs on this hardware is awkward. On my HX 370, the exposed cluster_id is the same across the CPUs, so it does not describe the actual Zen 5 and Zen 5c split.
The distinction is visible through the shared L3-cache topology, however. taskaffctl uses that to identify clusters, then uses ACPI CPPC performance data to label the higher- and lower-performance clusters. It can launch a command with the selected affinity or update an existing process and all its current threads.
It is a small tool written in Go and released under the BSD license:
It works great for me, and I hope some of you might also find it useful. It has only been tested on Zen 5-family Ryzen systems so far, so if anyone has a Framework with a Panther Lake Intel CPU and is willing to test it, I would be very interested in your results, even just the output of taskaffctl --topology.