|Original author(s)||Juan Palacios|
|Initial release||v1.0 July 14, 2019-->|
|Type||Performance tuning (GPU/CPU), fan control|
|License||GNU GPL v3|
CoreCtrl is a graphical system monitoring and performance tuning program for Linux. It lets you configure and apply a CPU scaling governor, a GPU performance profile and GPU fan settings. It supports a global profile as well as per-executable profiles.
The profiles view has a simple graph that shows GPU frequency, temperature, power and activity. This is where you can change GPU frequency and power settings. There is also a system view where you can see detailed information about your hardware and software.
CoreCtrl is written by developer Juan Palacios who's known for writing other software such as the mobile phone game DumbYard.
We tested the CoreCtrl current 1.2.0-git version as of 2020-09-27 for this review.
WARNING: It WILL Interfere With
First, a very important warning..
|Warning: CoreCtrl allows you to control the graphics cards fan and fan-profile. This is good if it is something you want. It's also very bad if it is something you don't want.
CoreCtrl will immediately take control of the GPU fan the moment you launch it. This is very bad and potentially a huge problem because it will cause the
fancontrol: /usr/sbin/fancontrol: line 638: echo: write error: Invalid argument fancontrol: Error writing PWM value to /sys/class/hwmon/hwmon0/pwm1
CoreCtrl will not make
fancontrol die unless you have configured it to control the GPU fan, you are fine if you use
fancontrol and it is only configured to control case fans and/or the CPU fan. You are, obviously, also fine if you never heard of the
fancontrol script from
lm-sensors since no distribution has it configured and activated out of the box.
The reason this is a big issue to be aware of is that if you have configured
fancontrol to control the case fans, the CPU fan(s) and the GPU fan(s) (useful if you have a bottom fan controlled by GPU temperature that ramps up along with the GPU fan) you're totally screwed when you launch CoreCtrl: It makes
fancontrol crash without restoring "automatic" (BIOS) control over the fans it was "manually" controlling.
That very unfortunate situation leaves those with an affected fancontrol setup in a situation where CoreCtrl controls the GPU fan and the rest of the fans remain "stuck" at the speed they were at when CoreCtrl was launched. This is extremely unfortunate if you launch a CPU-intensive game and the case fans being stuck at their lowest speed will impact the GPU too even if that fan, and only that fan, ramps up when you start a game.
There is no way to prevent CoreCtrl from taking control of the GPU fan and it does not appear that developer Juan Palacios is willing to fix this bug. And it is a bug, not a feature. A "Do not control fans" option would be a feature.
The only current workarounds for this bug are:
- Configure any software controlling fans to not touch or configure the GPU fan
- Patch or fork CoreCtrl
This is a problem if you are using a complicated fan control setup configured by the standard
fancontrol service since it will simply crash when other software changes the fan settings. You are currently out of luck if you want to use CoreCtrl to configure just your GPUs performance profiles or you want to configure nothing and just view the information it presents. CoreCtrl is currently a all-or-nothing solution, you can either allow it to control everything or not use it.
Features And Usability
CoreCtrl asks for your password so it can start a "helper" daemon unless you make a PackageKit policy file for it (see installation below). Once in you're presented with a screen where you can view and change a "Global Profile" or switch to a "System" view using one of two tabs at the bottom of CoreCtrl's window ( and are the only choices, it starts with .
is the only interesting tab. That's where settings can be configured and profiles managed. is just a view with four tabs that show some information about your machine.
The "Profiles" Control Center
CoreCtrl lets you have a "Global" profile and per-application profiles. Each profile, including the "Global" profile, lets you configure a few settings for the GPU in one tab and a few settings for the CPU in another.
There is no way to make CoreCtrl not control the graphics cards fan(s).
Using any of the "Advanced" performance settings under the GPU tab requires a kernel parameter, see installation below. The kernel ring buffer (
dmesg) will fill with messages like these if you try applying your own GPU and GPU memory frequencies without a special amdgpu module option:
[11178.513902] amdgpu: last message was failed ret is 255 [11178.803285] amdgpu: failed to send message 145 ret is 255
This is normal, you're not supposed to change those settings willy nilly. You need to boot with a special kernel parameter to prove that you're worthy.
A CPU governor setting is all there is under theCPU tab. There is no CPU fan control, or other fan control, available CoreCtrl. This is a bit sad since, as we stress in the warning above, CoreCtrl will interfere with other fan control software - yet it does not provide functionality equal to fan control programs CoreCtrl prevents you from using in parallel with it.
Intel-specific power settings are not supported as of CoreCtrl 1.2.0-git September 2020. The CPU frequency settings that are relevant to AMD processors are all there. We do not know what the "Custom frequency" setting in CoreCtrl is supposed to do, no input field for actually setting a "custom frequency" appears. It would be logical to assume "Custom frequency" means that you can set a number or choose one from a slider but there's not, you can choose "Custom frequency" and that's it. What, concretely, that means is anyone's guess, that mystery remains unsolved.
CoreCtrl supports per-application profiles in addition to the global profile. Per-application profiles have to be set by executable. There is no support for general profiles. You can have a profile for SuperTuxKart that activates if
/usr/bin/supertuxkart is launched and you can have a profile for
/usr/bin/supertux2 for when you play SuperTux but you can not have a general profile called "Gaming" or "FPS games" with multiple executable listed (or manual selection). There is a partial work-around: A profile can be "cloned" into other profiles. Still, it does make using CoreCtrl a rather tiresome exercise.
The "Global" profile is activated when you simply launch CoreCtrl. Per application profiles are activated when it detects a executable with a special profile. CoreCtrl reverts back to the "Global" profile when that executable terminates.
CoreCtrl will by default minimize to the system tray if you close it's window. It can be closed by right-clicking the icon in the system tray. It is possible to turn this of in the CoreCtrl settings and those using a crippled desktop environment without a system tray, like the foot desktop environment, should change this in the settings.
The System View
Theview CoreCtrl offers has four tabs:
|CoreCtrl||Shows what CoreCtrl version you have|
|Software||Shows you what Linux kernel and Mesa version you have|
|[GPU name]||This tab shows all kinds of incriminating information about your GPU, including BIOS version, device name, how much memory it has, what OpenGL version is supported, device model, driver, revision and the Vulkan API version. It's a useful overview of your GPU's features.|
|[CPU name]||This is similar to the GPU view. All sorts of incriminating information about the CPU is shown, including the "CPU bugs" known to affect your CPU (spectre_v1 etc). It's a quick way to find out how much L2 and L3 cahce you have and things like that.|
The system view isn't all that useful, but it can be handy if you don't know what Linux kernel you have or how much GPU RAM you have and you want to find out.
Verdict And Conclusion
The idea behind CoreCtrl is very appealing, it is a piece of software that can be, in theory, very nice and useful.
The practical implementation leaves much to be desired and it has some obvious draw-backs that can't be ignored.
If you are one of those people who already have a fan control setup using
fancontrol-GUI or a similar program then CoreCtrl is basically useless. There is simply no way to make it not interfere with the GPU fan control. This goes for all the other settings it offers as well. The most interesting part of the section would be the GPU configuration. CoreCtrl would be practically useful to a lot more people if it only had that setting or the ability to choose what specific settings it should apply. It is possible to disable either all GPU settings or all CPU settings. That's very nice for anyone who has CPU scheduler settings they are happy with. It's too bad that GPU settings are a all or nothing deal.
The "application profile management" is another area where CoreCtrl is onto something yet it fails to be very practically useful. You can waste a whole lot of time making 30 profiles, one for each executable you may want to run, and some may find that to be worth the hassle. It would be a whole lot simpler if it was possible to simply make 3 profiles and choose between them from CoreCtrl. That would allow users to create a few simple profiles like "Desktop use", "Gaming" and perhaps "Compute work" instead of 30 identical profiles for 30 executable files. Existing functionality could still be there if a general "Gaming" profile could list a bunch of executable files it would apply itself to automatically. This is, sadly, not how CoreCtrl works. The way it works today makes it a very tiresome ordeal.
CoreCtrl is available a most distributions, but most do not have it in their regular repositories.
- Arch has it in AUR.
- Fedora has it in the regular repositories (
sudo dnf -y install corectrl)
- OpenSUSE has it in something called Dead_Mozay project
- Gentoo Linux has it in an overlay called farmboy0
- Ubuntu has it available in the Ernst Sjöstrand ppa-mesarc PPA.
There are no Deepin packages available at this time.
Users of distributions where CoreCtrl is not available and users who simply want the very latest version can acquire the technology from git and compile it manually. The code can be checked out from
CoreCtrl uses the cmake build system. You will need some dependencies to install it,
botan2-devel qca-qt5-devel qt5-qtcharts-devel are packages you likely do not have. It is a relatively small program, compiling it does not take long once you have the required dependencies installed.
CoreCtrl relies on a daemon which needs to be launched as
root by dbus. This functionality will likely not work if it is installed into
/usr/local/ which means that installing it into
/usr is preferable (even if it is a non-distribution package). This can be archived by adding
-DCMAKE_INSTALL_PREFIX=/usr to cmake. Thus; it can be built like this:
git clone https://gitlab.com/corectrl/corectrl.git cd corectrl mkdir build;cd build cmake -DCMAKE_INSTALL_PREFIX=/usr -Wno-dev .. make -j$(nproc) sudo make install
Building doesn't take long, it is a relatively short compile.
You may want to add a PolicyKit configuration file that grants CoreCtrl root access without prompting you to enter your password when you start it:
You do not need have a PolicyKit configuration file in place, this is just for those who want to trade a little bit of security for practical convenience.
Note that those with ancient (>=0.106) Polshit versions (you can check with
pkaction --version) need a different configuration version that could look like:
You can make CoreCtrl start when you login to your desktop environment by copying it's .desktop file to
cp /usr/share/applications/org.corectrl.corectrl.desktop ~/.config/autostart/org.corectrl.corectrl.desktop
You will likely want to change
false in that desktop file if you choose to launch it upon login.
Kernel Parameters For Advanced Users
Settings most of the AMD graphics cards using the default
amdgpu kernel module parameters. You will need to use a special
ppfeaturemask parameter to allow CoreCtrl to set the settings like GPU frequency.
Those with AMD graphics cards may want to risk unlocking all manual power control by adding:
GRUB_CMDLINE_LINUX= kernel command line in
/etc/sysconfig/grub. Note that
0xffffffff unlocks all "developer" features, see AMD Graphics: Unlocking Manual Control Over Power Features if you just want to unlock one or two "developer" features.