CoreCtrl

From LinuxReviews
Jump to navigationJump to search
CoreCtrl
Corectrl.png
Original author(s)Juan Palacios
Initial releasev1.0 July 14, 2019; 16 months ago (2019-07-14) -->
Repositorygitlab.com /corectrl/corectrl
Bugtrackerhttps://gitlab.com /corectrl/corectrl/-/issues
Written inC++[1]
Operating systemLinux
TypePerformance tuning (GPU/CPU), fan control
LicenseGNU GPL v3
Utilities-system-monitor-4.png

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 fancontrol From lm-sensors

First, a very important warning..

Snubbelrisk.jpg
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 service from the lm-sensors package to just die with:

fancontrol[247700]: /usr/sbin/fancontrol: line 638: echo: write error: Invalid argument
fancontrol[247700]: 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[2]. 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 01.jpg
The CoreCtrl "Profiles" view.

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 (Profiles and System are the only choices, it starts with Profiles.

Profiles is the only interesting tab. That's where settings can be configured and profiles managed. System 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.

GPU Settings

Corectrl-1.2.0-dev-GPU-fan-profile.jpg
CoreCtrl GPU fan settings.

GPU Settings Available in CoreCtrl
Setting Choices
Performance mode
  • Automatic
  • Fixed
    • Low
    • High
  • Advanced, with sub-choices for
    • GPU frequency
    • Memory frequency
    • Power Profile
      • 3D Fullscreen
      • Power saving
      • Video
      • Virtual Reality
      • Compute
Ventilation
  • Automatic
  • Fixed
    • Lets you choose fan speed using a slider, values from 0-100 can be set.
  • Curve
    • Lets you set a fan profile based on GPU temperature using a slider.

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.

CPU Settings

Corectrl 03.jpg
CoreCtrl lets you control the CPU frequency scaling governor and that's it.

CPU settings Available in CoreCtrl
Setting Choices
  • CPU performance scaling
    • Frequency governor
  • Conservative
  • Ondemand
  • Custom frequency (Not sure what this does, there is no way to set any frequency. It's probably the kernel userspace choice)
  • Powersave
  • Performance
  • CPU utilization (schedutil)

A CPU governor setting is all there is under the Profiles CPU 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.

Per-Application Profiles

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

Corectrl 02.jpg
The "System" tab.

The System view CoreCtrl offers has four tabs:

Tab Information
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 or 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 Profiles section would be the GPU Performance mode 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.

Installation

CoreCtrl is available a most distributions, but most do not have it in their regular repositories.

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 https://gitlab.com/corectrl/corectrl.git.

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:

File: /etc/polkit-1/localauthority/50-local.d/90-corectrl.pkla
[User permissions]
Identity=unix-group:*
Action=org.corectrl.*
ResultActive=yes

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:

File: /etc/polkit-1/rules.d/90-corectrl.rules
polkit.addRule(function(action, subject) {
    if ((action.id == "org.corectrl.helper.init" ||
         action.id == "org.corectrl.helperkiller.init") &&
        subject.local == true &&
        subject.active == true &&
        subject.isInGroup("*")) {
            return polkit.Result.YES;
    }
});

You can make CoreCtrl start when you login to your desktop environment by copying it's .desktop file to $HOME/.config/autostart/:

cp /usr/share/applications/org.corectrl.corectrl.desktop ~/.config/autostart/org.corectrl.corectrl.desktop

You will likely want to change StartupNotify=true to false in that desktop file if you choose to launch it upon login.

Kernel Parameters For Advanced Users

Settings most of the Advanced GPU settings will not work on 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 Advanced settings like GPU frequency.

Those with AMD graphics cards may want to risk unlocking all manual power control by adding:

amdgpu.ppfeaturemask=0xffffffff

to the 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.

Footnotes

Links

The project's wiki is at https://gitlab.com/corectrl/corectrl/wikis/home and the source repository is at https://gitlab.com/corectrl/corectrl

avatar

Anonymous user #1

11 months ago
Score 0++
works a little better than Fukushima reactor core control
avatar

Anonymous user #2

2 months ago
Score 0++
Amazing, perfect solution, amd cpu, amd gpu, x570 mobo.
Add your comment
LinuxReviews welcomes all comments. If you do not want to be anonymous, register or log in. It is free.