Difference between revisions of "Linux-ck"

From ArchWiki
Jump to navigation Jump to search
(1. Download and Compile)
(Added section "CPUACCT missing in docker" under Troubleshooting for a new incompatibility issue regarding docker and a recent patch on CK that disables the flag CGROUP_CPUACCT in case SCHED_MUQSS is set to "Y")
 
(744 intermediate revisions by 56 users not shown)
Line 1: Line 1:
==Intro==
+
[[Category:Kernel]]
Kernel26-ck is a package available in the AUR that allows users to compile a kernel with Con Kolivas' CK1 patchset including the Brain Fuck Scheduler (BFS) and all other goodies contained in the patchset.  The major goal of the BFS parallels that of Arch: simplicity (with respect to talk scheduling).  Many chose to use it for its excellent desktop interactivity and responsiveness under any load situation.
+
[[ja:Linux-ck]]
 +
[[ru:Linux-ck]]
 +
[[zh-hans:Linux-ck]]
 +
{{Related articles start}}
 +
{{Related|Unofficial user repositories/Repo-ck}}
 +
{{Related|Modprobed-db}}
 +
{{Related articles end}}
  
For more on the BFS, see:
+
== General package details ==
*[http://ck.kolivas.org/patches/bfs/sched-BFS.txt Con Kalivas' White Paper on the BFS]
 
*[http://ck.kolivas.org/patches/bfs/bfs-faq.txt Con Kalivas' BFS FAQ]
 
*[http://en.wikipedia.org/wiki/Brain_Fuck_Scheduler Wikipedia's BFS Article]
 
*[http://ck-hack.blogspot.com/ Con Kalivas' Blog]
 
  
==Installation Options==
+
{{AUR|Linux-ck}} is a package available both in [[AUR]] and in the [[#Use pre-compiled packages|unofficial repo-ck repository]] that allows users to run a kernel and headers setup patched with Con Kolivas' ck patchset[http://ck.kolivas.org/patches/], including a CPU scheduler named MuQSS (''Multiple Queue Skiplist Scheduler'', pronounced ''mux'') which replaces Brain Fuck Scheduler (BFS), his previous work. Many Arch Linux users choose this kernel for its excellent desktop interactivity and responsiveness under any load situation.
Users have two options to get this great kernel package.
 
===1. Download and Compile===
 
[[http://aur.archlinux.org/packages.php?ID=32877 Link to AUR Page]]
 
Users can customize this package via tweaks to up to four options within the PKGBUILD to allow for:
 
  
# Optional addition of BFQ patches
+
CK patchset is designed for desktop/laptop use but not for servers. It provides low latency environment and works well for 16 CPUs or fewer.
# Optional nconfig option
 
# Option to compile a minimal set of modules via a make localmodconfig
 
# Option to bypass the standard ARCH config options and simply use the current kernel's .config file
 
  
More details about these options are provided in the PKBUILD itself.
+
=== Release cycle ===
  
===2. Unofficial Kernel26-ck Repo===
+
Linux-ck roughly follows the release cycle of the official Arch kernel but not only. The following are requirements for a new package release:
If users would rather not spend the time to compile on their own, graysky is in the process of making an unofficial repo available to the community. Current contents are:
 
  
*'''kernel26-ck + headers'''.  Compiled with generic optimizations suitable for any compatible CPU just like the official ARCH kernel26 package (x86_64/i686).
+
* CK patchset compatible with the current kernel version
*'''kernel26-ck-atom + headers'''. Compiled with Intel Atom specific optimizations (x86_64/i686).
+
* corresponding Arch kernel must be in existence otherwise it will break other packages i.e. nvidia. See [https://git.archlinux.org/svntogit/packages.git/log/trunk?h=packages/linux git.archlinux.org] for the official {{Pkg|linux}} package
*'''kernel26-ck-core2 + headers'''. Compiled with Intel Core2/Newer Xeon specific optimizations (x86_64).
 
*'''kernel26-ck-k7 + headers'''. Compiled with AMD K7 specific optimizations (i686).
 
*'''kernel26-ck-p4 + headers'''. Compiled with Intel Pentium 4 specific optimizations (i686).
 
  
*'''nvidia-ck'''. Matching kernel modules for kernel26-ck (x86_64/i686).
+
=== Long-Term Support (LTS) CK releases ===
  
{{Note|This repo is currently under development.  Details will be posted here when it is ready.}}
+
In addition to the {{AUR|linux-ck}} package, there are LTS kernel releases patched with the above patchsets as well and with the previously mentioned modifications:
  
==Discussion Thread==
+
* {{AUR|linux-lts-ck}} - The current Arch Linux LTS kernel patched with the CK patchset
[[https://bbs.archlinux.org/viewtopic.php?id=111715 Link to discussion thread]].
+
 
Link to discussion thread
+
{{Note|This package is maintained by vishwin, thus pre-compiled versions will not be present in the unofficial ck repo.}}
 +
 
 +
== Installation options ==
 +
 
 +
{{Note|As with ''any'' additional kernel, users need to manually update their [[boot loader]]'s configuration file in order to make it aware of the new kernel image.}}
 +
 
 +
Users have two options to get these kernel packages.
 +
 
 +
=== Compile the package from source ===
 +
 
 +
The [[AUR]] contains entries for both packages mentioned above.
 +
 
 +
Users can further customize the linux-ck package via tweaks contained in the PKGBUILD:
 +
 
 +
* Optional '''nconfig''' for user specific tweaking.
 +
* Option to compile a minimal set of modules via a make '''localmodconfig'''.
 +
* Option to bypass the standard Arch config options and simply use the '''current kernel configuration''' file.
 +
* Optionally set the [http://algo.ing.unimo.it/people/paolo/disk_sched/ BFQ I/O scheduler] as default.
 +
 
 +
More details about these options are provided in the PKGBUILD itself.  Be sure to read them carefully if compiling from AUR!
 +
 
 +
{{Note|There are the related PKGBUILDs in AUR for other common kernel modules.  For example {{AUR|nvidia-ck}}, {{AUR|nvidia-340xx-ck}}, and {{AUR|broadcom-wl-ck}} to name a few. Alternatively, use the corresponding [[DKMS]] package, for instance install {{pkg|nvidia-dkms}} as described in [[NVIDIA#Custom kernel]].}}
 +
 
 +
=== Use pre-compiled packages ===
 +
 
 +
If user prefers to spend no time to compile on their own, the unofficial repo maintained by [[User:Graysky|graysky]] is available to the community. For details, see: [[Unofficial user repositories/Repo-ck]].
 +
 
 +
== How to enable the BFQ I/O Scheduler ==
 +
 
 +
{{Note|Do not confuse MuQSS (Multiple Queue Skiplist Scheduler) with BFQ (Budget Fair Queueing). MuQSS is a CPU scheduler and is enabled by default whereas BFQ is an I/O scheduler and must explicitly be enabled in order to use it.}}
 +
 
 +
See the [[Improving performance#Input/output schedulers]] section for some background about the different IO schedulers and how to activate ''BFQ''.
 +
 
 +
== More about MuQSS ==
 +
 
 +
See the [https://lkml.org/lkml/2016/10/29/4 LKML announcement] posted by CK.
 +
 
 +
=== Check if MuQSS is enabled ===
 +
 
 +
This start-up message should appear in the kernel ring buffer when MuQSS in enabled:
 +
$ dmesg | grep -i muqss
 +
...
 +
MuQSS CPU scheduler v0.120 by Con Kolivas.
 +
 
 +
=== MuQSS patched kernels and systemd ===
 +
 
 +
It is a common mistake to think that MuQSS does not support ''cgroups''. It does but not all the cgroup features (e.g. CPU limiting will not work).
 +
 
 +
== Troubleshooting ==
 +
=== Silencing psi: task underflow message ===
 +
 
 +
New in MuQSS v0.185 is support for [https://lwn.net/Articles/763629/ PSI] which [http://ck-hack.blogspot.com/2018/12/linux-420-ck1-muqss-version-0185-for.html?showComment=1546576441759#c2919535897335602087 CK is characterizing] as "completely untested and probably broken."
 +
 
 +
In response to this, some users may notice [https://bbs.archlinux.org/viewtopic.php?pid=1824594#p1824594 psi: task underflow!] in dmesg/journalctl output.  With the release of 4.20.0-3-ck1, is compiled in but disabled by default.  Users wanting PSI enabled should boot with the following [Kernel_parameter] on their respective bootloader config: '''psi=1'''
 +
 
 +
=== Running VirtualBox with Linux-ck ===
 +
 
 +
VirtualBox works just fine with custom kernels such as Linux-ck ''without'' the need to keep any of the official Arch kernel headers package on the system.
 +
 
 +
Do not forget to add users to the ''vboxusers '' group:
 +
# gpasswd -a USERNAME vboxusers
 +
 
 +
==== Use the unofficial repo (recommended if Linux-ck is installed from Repo-ck) ====
 +
 
 +
{{Note|As of 17-Oct-2012, Repo-ck users can enjoy these modules as pre-compiled packages in the repo itself. If you build Linux-ck from AUR you '''can not use the repo''' as all packages in the repo are matched groups.}}
 +
 
 +
See the [[Unofficial user repositories/Repo-ck]] to set up it correctly.
 +
 
 +
==== DKMS ====
 +
 
 +
Install '''virtualbox''' with the '''virtualbox-host-dkms''' package. Then setup DKMS as follows:
 +
# pacman -S virtualbox virtualbox-host-dkms
 +
 
 +
=== CPUACCT missing in docker ===
 +
 
 +
In newer versions of Linux-ck ([https://aur.archlinux.org/packages/linux-ck#comment-677316 some experienced] with 4.19, 4.20 seems general), a change to the MuQSS was made that disables the {{ic|CONFIG_CGROUP_CPUACCT}} option from the kernel, which makes ''some'' usage of docker ({{ic|run}} or {{ic|build}}) to produce the following error:
 +
 
 +
{{hc|$ docker run --rm hello-world|docker: Error response from daemon: unable to find "cpuacct" in controller set: unknown.}}
 +
 
 +
This error does not seems to affect the docker daemon, just containers. This is due a change where the {{ic|CONFIG_CGROUP_CPUACCT}} kernel option is incompatible with {{ic|SCHED_MUQSS}} when the last is set to {{ic|Y}},  as seen in a [https://github.com/ckolivas/linux/commit/1e3f40f5448c4a7a4257f0908f4620b3de679472#diff-df29aead4faac0f63a7af3a16a9ebd1cR1148 recent commit] in ck's repository:
 +
 
 +
{{bc|@@ -896,6 +913,7 @@ config CGROUP_DEVICE
 +
 
 +
config CGROUP_CPUACCT
 +
        bool "Simple CPU accounting controller"
 +
+      depends on !SCHED_MUQSS
 +
        help
 +
          Provides a simple controller for monitoring the
 +
          total CPU consumed by the tasks in a cgroup.
 +
}}
 +
 
 +
You can check more information [https://bbs.archlinux.org/viewtopic.php?pid=1825773#p1825773 in the forums] or in [https://ck-hack.blogspot.com/2018/12/linux-420-ck1-muqss-version-0185-for.html?showComment=1547195122462#c1770603367031092645 ck's blog].
 +
 
 +
=== Downgrading ===
 +
 
 +
Users wishing to downgrade to a previous version of Linux-ck, have several options:
 +
* Source archives are [http://repo-ck.com/bench.htm available] dating back to linux-ck-3.3.7-1.
 +
* [http://pkgbuild.com/git/aur-mirror.git/log/linux-ck AUR.git] holds AUR git commits for Linux-ck, dating back to linux-ck-2.6.39.3-1.
 +
 
 +
=== Forum support ===
 +
 
 +
Always feel free to open a thread in the forums for support purpose. Be sure to give the thread a descriptive title to draw attention to the fact that the post relates to the Linux-ck package.
 +
 
 +
There is also an [https://bbs.archlinux.org/viewtopic.php?id=111715 official thread] for Linux-ck.
 +
 
 +
== See also ==
 +
 
 +
* [http://ck.kolivas.org/patches/ Kernel patch repository of Con Kolivas]
 +
* [http://ck-hack.blogspot.it/ Con Kolivas' Blog]
 +
* [http://lkml.org/lkml/2009/9/6/136 Con Kolivas' first BFS announcement on the Linux Kernel Mailing List]
 +
* [[wikipedia:Con_Kolivas|Wikipedia's Con Kolivas page]]
 +
* [[wikipedia:Brain_Fuck_Scheduler|Wikipedia's BFS article]]

Latest revision as of 16:41, 11 January 2019

General package details

Linux-ckAUR is a package available both in AUR and in the unofficial repo-ck repository that allows users to run a kernel and headers setup patched with Con Kolivas' ck patchset[1], including a CPU scheduler named MuQSS (Multiple Queue Skiplist Scheduler, pronounced mux) which replaces Brain Fuck Scheduler (BFS), his previous work. Many Arch Linux users choose this kernel for its excellent desktop interactivity and responsiveness under any load situation.

CK patchset is designed for desktop/laptop use but not for servers. It provides low latency environment and works well for 16 CPUs or fewer.

Release cycle

Linux-ck roughly follows the release cycle of the official Arch kernel but not only. The following are requirements for a new package release:

  • CK patchset compatible with the current kernel version
  • corresponding Arch kernel must be in existence otherwise it will break other packages i.e. nvidia. See git.archlinux.org for the official linux package

Long-Term Support (LTS) CK releases

In addition to the linux-ckAUR package, there are LTS kernel releases patched with the above patchsets as well and with the previously mentioned modifications:

  • linux-lts-ckAUR - The current Arch Linux LTS kernel patched with the CK patchset
Note: This package is maintained by vishwin, thus pre-compiled versions will not be present in the unofficial ck repo.

Installation options

Note: As with any additional kernel, users need to manually update their boot loader's configuration file in order to make it aware of the new kernel image.

Users have two options to get these kernel packages.

Compile the package from source

The AUR contains entries for both packages mentioned above.

Users can further customize the linux-ck package via tweaks contained in the PKGBUILD:

  • Optional nconfig for user specific tweaking.
  • Option to compile a minimal set of modules via a make localmodconfig.
  • Option to bypass the standard Arch config options and simply use the current kernel configuration file.
  • Optionally set the BFQ I/O scheduler as default.

More details about these options are provided in the PKGBUILD itself. Be sure to read them carefully if compiling from AUR!

Note: There are the related PKGBUILDs in AUR for other common kernel modules. For example nvidia-ckAUR, nvidia-340xx-ckAUR, and broadcom-wl-ckAUR to name a few. Alternatively, use the corresponding DKMS package, for instance install nvidia-dkms as described in NVIDIA#Custom kernel.

Use pre-compiled packages

If user prefers to spend no time to compile on their own, the unofficial repo maintained by graysky is available to the community. For details, see: Unofficial user repositories/Repo-ck.

How to enable the BFQ I/O Scheduler

Note: Do not confuse MuQSS (Multiple Queue Skiplist Scheduler) with BFQ (Budget Fair Queueing). MuQSS is a CPU scheduler and is enabled by default whereas BFQ is an I/O scheduler and must explicitly be enabled in order to use it.

See the Improving performance#Input/output schedulers section for some background about the different IO schedulers and how to activate BFQ.

More about MuQSS

See the LKML announcement posted by CK.

Check if MuQSS is enabled

This start-up message should appear in the kernel ring buffer when MuQSS in enabled:

$ dmesg | grep -i muqss
...
MuQSS CPU scheduler v0.120 by Con Kolivas.

MuQSS patched kernels and systemd

It is a common mistake to think that MuQSS does not support cgroups. It does but not all the cgroup features (e.g. CPU limiting will not work).

Troubleshooting

Silencing psi: task underflow message

New in MuQSS v0.185 is support for PSI which CK is characterizing as "completely untested and probably broken."

In response to this, some users may notice psi: task underflow! in dmesg/journalctl output. With the release of 4.20.0-3-ck1, is compiled in but disabled by default. Users wanting PSI enabled should boot with the following [Kernel_parameter] on their respective bootloader config: psi=1

Running VirtualBox with Linux-ck

VirtualBox works just fine with custom kernels such as Linux-ck without the need to keep any of the official Arch kernel headers package on the system.

Do not forget to add users to the vboxusers group:

# gpasswd -a USERNAME vboxusers

Use the unofficial repo (recommended if Linux-ck is installed from Repo-ck)

Note: As of 17-Oct-2012, Repo-ck users can enjoy these modules as pre-compiled packages in the repo itself. If you build Linux-ck from AUR you can not use the repo as all packages in the repo are matched groups.

See the Unofficial user repositories/Repo-ck to set up it correctly.

DKMS

Install virtualbox with the virtualbox-host-dkms package. Then setup DKMS as follows:

# pacman -S virtualbox virtualbox-host-dkms

CPUACCT missing in docker

In newer versions of Linux-ck (some experienced with 4.19, 4.20 seems general), a change to the MuQSS was made that disables the CONFIG_CGROUP_CPUACCT option from the kernel, which makes some usage of docker (run or build) to produce the following error:

$ docker run --rm hello-world
docker: Error response from daemon: unable to find "cpuacct" in controller set: unknown.

This error does not seems to affect the docker daemon, just containers. This is due a change where the CONFIG_CGROUP_CPUACCT kernel option is incompatible with SCHED_MUQSS when the last is set to Y, as seen in a recent commit in ck's repository:

@@ -896,6 +913,7 @@ config CGROUP_DEVICE

 config CGROUP_CPUACCT
        bool "Simple CPU accounting controller"
+       depends on !SCHED_MUQSS
        help
          Provides a simple controller for monitoring the
          total CPU consumed by the tasks in a cgroup.

You can check more information in the forums or in ck's blog.

Downgrading

Users wishing to downgrade to a previous version of Linux-ck, have several options:

  • Source archives are available dating back to linux-ck-3.3.7-1.
  • AUR.git holds AUR git commits for Linux-ck, dating back to linux-ck-2.6.39.3-1.

Forum support

Always feel free to open a thread in the forums for support purpose. Be sure to give the thread a descriptive title to draw attention to the fact that the post relates to the Linux-ck package.

There is also an official thread for Linux-ck.

See also