Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
wiki:system_configuration [2022/05/15 21:19] – [Quality of Service interface] autostaticwiki:system_configuration [2024/01/13 15:00] (current) – [Priorities] autostatic
Line 12: Line 12:
  
 After adjusting your system using the recommendations of [[system_configuration#rtcqs]] and with JACK (QjackCtl) and a2jmidid installed, the basics should be there for a well performing real-time audio system (depending on your hardware too of course). After adjusting your system using the recommendations of [[system_configuration#rtcqs]] and with JACK (QjackCtl) and a2jmidid installed, the basics should be there for a well performing real-time audio system (depending on your hardware too of course).
 +
 +This wiki also contains a manual on installing a Linux audio system here: [[wiki:system_build|]]
  
 ==== Preliminary ==== ==== Preliminary ====
Line 35: Line 37:
 Run ''uname -a'' to find out which kernel you're running: Run ''uname -a'' to find out which kernel you're running:
  
-  Linux bto 5.17.1-rt17 #1~focal1 SMP PREEMPT_RT Sat Apr 2 10:32:50 CEST 2022 x86_64 x86_64 x86_64 GNU/Linux+  Linux bto 6.5.6-1-liquorix-amd64 #1 ZEN SMP PREEMPT liquorix 6.5-7.1~bookworm (2023-10-06) x86_64 GNU/Linux
  
-5.17.1-rt17 is the version number of the currently running kernel. The configuration file with which this kernel was created can be found in ''/boot/config-5.17.1-rt17''. Open it, and check if it has the following characteristics:+6.5.6-1-liquorix-amd64 is the version number of the currently running kernel. The configuration file with which this kernel was created can be found in ''/boot/config-6.5.6-1-liquorix-amd64''. Open it, and check if it has the following characteristics:
  
   CONFIG_HIGH_RES_TIMERS=y   CONFIG_HIGH_RES_TIMERS=y
Line 47: Line 49:
  
 If you can't find the config file for your kernel there is also the possibility to extract the config from ''/proc/config.gz'' if your kernel supports it (''CONFIG_IKCONFIG_PROC=y''): If you can't find the config file for your kernel there is also the possibility to extract the config from ''/proc/config.gz'' if your kernel supports it (''CONFIG_IKCONFIG_PROC=y''):
-  gunzip -c /proc/config.gz > config-`uname -r`+  gunzip -c /proc/config.gz > config-$(uname -r)
  
 === Do I really need a real-time kernel? === === Do I really need a real-time kernel? ===
  
-With the kernel boot option ''threadirqs'' standard kernels create threaded IRQs which basically nullifies the need to use a real-time kernel in most of the cases. But a real-time kernel can still be very useful on a Linux audio platform. If you need the lowest latencies possible a real-time kernel is still an option. But if you're mainly recording, a standard kernel or an optimized kernel (like the low-latency kernel Ubuntu offers) will probably suffice.+With the kernel boot option ''threadirqs'' standard kernels create threaded IRQs which basically nullifies the need to use a real-time kernel in most of the cases. But a real-time kernel can still be very useful on a Linux audio platform. If you need the lowest latencies possible or if you're working on a less powerful system (i.e. Raspberry Pi) a real-time kernel can still be an option. But if you're mainly recording, a standard kernel or an optimized kernel (like the low-latency kernel Ubuntu offers) will probably suffice.
  
-See also: [[http://example.comhttps://jackaudio.org/faq/realtime_vs_realtime_kernel.html|Do I need a realtime kernel to use realtime scheduling?]]+See also: [[https://jackaudio.org/faq/realtime_vs_realtime_kernel.html|Do I need a realtime kernel to use realtime scheduling?]]
  
 === Using the threadirqs kernel option === === Using the threadirqs kernel option ===
  
-This is only needed for so-called generic kernels, ie. standard kernels that are not tweaked for lowlatency performance. You can check if your kernel already includes this option with the following command:+This is only needed for so-called generic or low-latency kernels. You can check if your kernel already includes this option with the following command:
  
-  $ grep -e "CONFIG_IRQ_FORCED_THREADING=y" -e "CONFIG_PREEMPT_RT=y" /boot/config-`uname -r`+  $ grep -e "CONFIG_IRQ_FORCED_THREADING=y" -e "CONFIG_PREEMPT_RT=y" /boot/config-$(uname -r)
    
 If it returns ''CONFIG_IRQ_FORCED_THREADING=y'' and ''CONFIG_PREEMPT_RT=y'' then your kernel is using IRQ threading and you don't have to proceed with the following steps. If it only returns ''CONFIG_IRQ_FORCED_THREADING=y'' you can add the ''threadirqs'' boot option as described below. If the command returns nothing you have a kernel that cannot use threaded IRQs. If it returns ''CONFIG_IRQ_FORCED_THREADING=y'' and ''CONFIG_PREEMPT_RT=y'' then your kernel is using IRQ threading and you don't have to proceed with the following steps. If it only returns ''CONFIG_IRQ_FORCED_THREADING=y'' you can add the ''threadirqs'' boot option as described below. If the command returns nothing you have a kernel that cannot use threaded IRQs.
Line 73: Line 75:
  
 === Disabling Spectre and Meltdown mitigations === === Disabling Spectre and Meltdown mitigations ===
-:!: Warning: disabling these mitigations will make your machine less secure! Use with caution!+:!: Warning: Using ''mitigations=off'' will make your machine less secure! Use with caution! For more information on the risks see https://meltdownattack.com/
  
 To work around the Spectre and Meltdown vulnerabilities several mitigations were built into the kernel. These mitigations can have a negative impact on the performance of your machine. To disable those mitigations and get the most out of your CPU's again you can add the following kernel parameter to your Grub configuration, add it to the value of either ''GRUB_CMDLINE_LINUX_DEFAULT'' or  ''GRUB_CMDLINE_LINUX'': To work around the Spectre and Meltdown vulnerabilities several mitigations were built into the kernel. These mitigations can have a negative impact on the performance of your machine. To disable those mitigations and get the most out of your CPU's again you can add the following kernel parameter to your Grub configuration, add it to the value of either ''GRUB_CMDLINE_LINUX_DEFAULT'' or  ''GRUB_CMDLINE_LINUX'':
Line 81: Line 83:
 === Installing a real-time kernel === === Installing a real-time kernel ===
  
-This section describes installing a real-time kernel on an existing Linux distribution. Some distributions contain packages you can install to get a real-time kernel, for others you'll need to compile it yourself. You can recognize real-time kernel versions by the added '-rt' or '-realtime' parts of the kernel version number.+This section describes installing a real-time kernel on an existing Linux distribution. Some distributions contain packages you can install to get a real-time kernel, for others you'll need to compile it yourself. You can recognize real-time kernel versions by the added '-rt' or '-realtime' parts of the kernel version number. As mentioned earlier, a real-time kernel is not a mandatory part of a Linux audio setup.
  
 == Ubuntu == == Ubuntu ==
Line 102: Line 104:
  
 For rolling your own kernel, see [[build_your_own_real-time_kernel]]. For rolling your own kernel, see [[build_your_own_real-time_kernel]].
 +
 +=== Other alternatives ===
 +Besides low-latency or real-time kernels there are also other kernel flavors available specifically tailored for multimedia usage.
 +
 +== Liquorix ==
 +> Liquorix is an enthusiast Linux kernel designed for uncompromised responsiveness in interactive systems, enabling low latency compute in A/V production, and reduced frame time deviations in games.((https://liquorix.net/))
 +Especially when used in combination with the ''threadirqs'' kernel option this kernel flavor performs very well. It is also the kernel that drives [[https://www.bandshed.net/avlinux/|AV Linux]].
  
 == Other relevant links == == Other relevant links ==
Line 264: Line 273:
  
 ==== Power management ==== ==== Power management ====
-===== Quality of Service interface ===== +=== Quality of Service interface === 
-The Linux kernel provides a user mode interface for registering performance expectations((https://www.kernel.org/doc/html/latest/power/pm_qos_interface.html)). One of the parameters it could work on is CPU latency. A modern CPU can have different so-called sleep states and waking up from those sleep states can take some time (CPU latency). By opening the device node `/dev/cpu_dma_latencyand registering a value with it you can control these CPU +The Linux kernel provides a user mode interface for registering performance expectations((https://www.kernel.org/doc/html/latest/power/pm_qos_interface.html)). One of the parameters it could work on is CPU latency. A modern CPU can have different so-called sleep states and waking up from those sleep states can take some time (CPU latency). By opening the device node ''/dev/cpu_dma_latency'' and registering a value with it you can control these CPU 
- latencies. I.e. when registering the value 0 you can tell the CPU to never go to sleep and to always be avialable, without any latency. In some cases this can decrease DSP load and in its turn decrease the chance of running into xruns. In order for this to work the device node has to be kept open with the registered value, simply writing a value to it will not work. DAW's like Ardour and Reaper offer the possibility to control the CPU latency and if you want to take advantage of this you will want your user to be able to write to this device node. To configure this add the udev rule from https://github.com/Ardour/ardour/blob/master/tools/udev/99-cpu-dma-latency.rules to `/etc/udev/rules.d/and reload udev:+ latencies. I.e. when registering the value 0 you can tell the CPU to never go to sleep and to always be avialable, without any latency. In some cases this can decrease DSP load and in its turn decrease the chance of running into xruns. In order for this to work the device node has to be kept open with the registered value, simply writing a value to it will not work. DAW's like Ardour and Reaper offer the possibility to control the CPU latency and if you want to take advantage of this you will want your user to be able to write to this device node. To configure this add the udev rule from https://github.com/Ardour/ardour/blob/master/tools/udev/99-cpu-dma-latency.rules to ''/etc/udev/rules.d/'' and reload udev:
   sudo udevadm control --reload-rules   sudo udevadm control --reload-rules
   sudo udevadm trigger   sudo udevadm trigger
Line 273: Line 282:
   udevadm info -a -n /dev/cpu_dma_latency   udevadm info -a -n /dev/cpu_dma_latency
  
-And `/dev/cpu_dma_latencyshould now have read-write permissions for root and the audio group (mode 0660). Now you can set CPU latency as low as you like. Bear in mind that setting it to 0 will put your CPU's in an always-on state which wil run them hotter. So be prepared for some extra fan noise.+And ''/dev/cpu_dma_latency'' should now have read-write permissions for root and the audio group (mode 0660). Now you can set CPU latency as low as you like. Bear in mind that setting it to 0 will put your CPU's in an always-on state which wil run them hotter. So be prepared for some extra fan noise.
 ==== Filesystems ==== ==== Filesystems ====
  
Line 301: Line 310:
 Setting the ''noatime'' parameter in your ''/etc/fstab'' file reduces the amount of disk IO (the inode access times are not updated each time a file is read) which could improve the overall performance of your system. Setting the ''noatime'' parameter in your ''/etc/fstab'' file reduces the amount of disk IO (the inode access times are not updated each time a file is read) which could improve the overall performance of your system.
  
- ''/dev/sdax / ext4 noatime,errors=remount-ro 0 1''+  /dev/sdax / ext4 noatime,errors=remount-ro 0 1
  
 Most modern distributions use either ''atime'' or ''relatime''. See the mount manpage for more information on these parameters. Most modern distributions use either ''atime'' or ''relatime''. See the mount manpage for more information on these parameters.
Line 313: Line 322:
 According to this thread [[http://comments.gmane.org/gmane.comp.file-systems.ext4/26720|High latency with ext4 / jbd2 kernel thread]] on the ext4 mailing list, the ''nobarrier'' parameter, with an ext4 filesystem, can reduce the amount of work made by the background kernel thread jbd2 and increase write speeds. However, this is an unsafe parameter, making your filesystem less resistant to power failures. According to this thread [[http://comments.gmane.org/gmane.comp.file-systems.ext4/26720|High latency with ext4 / jbd2 kernel thread]] on the ext4 mailing list, the ''nobarrier'' parameter, with an ext4 filesystem, can reduce the amount of work made by the background kernel thread jbd2 and increase write speeds. However, this is an unsafe parameter, making your filesystem less resistant to power failures.
  
- ''/dev/sdax / ext4 nobarrier,errors=remount-ro 0 1''+  /dev/sdax / ext4 nobarrier,errors=remount-ro 0 1
  
 Ext3 filesystem doesn't enable barrier by default, ext4 does. See the mount manpage for more information on these parameters. Ext3 filesystem doesn't enable barrier by default, ext4 does. See the mount manpage for more information on these parameters.
Line 357: Line 366:
 ==== audio group ==== ==== audio group ====
  
-It is generally good practice to have an 'audio' group, and add any users that should be allowed to perform audio tasks to this group. This prevents some interference from non-audio-processes with audio tasks. To verify you're in the 'audio' group, run the ''groups'' command. Remember, after adding yourself to new groups, you need to log out and back in again. Be careful when adding an 'audio' group to your system: most systems come with a pre-configured 'audio' group, and do not warn you when you add another group with the same name, leading to much confusion.+It is generally good practice to have an ''audio'' group, and add any users that should be allowed to perform audio tasks to this group. This prevents some interference from non-audio-processes with audio tasks. To verify you're in the ''audio'' group, run the ''groups'' command. Remember, after adding yourself to new groups, it is best to log out and back in again. On systems that have an audio group you can add your user with the following command: 
 +  sudo usermod -a -G audio <username> 
 + 
 +Where ''<username>'' is your username. 
 + 
 +Be careful when adding an ''audio'' group to your system: most systems come with a pre-configured ''audio'' group, and do not warn you when you add another group with the same name, leading to much confusion. When using Arch Linux the above is valid too except that Arch uses a different group name, i.e. ''realtime''((https://wiki.archlinux.org/title/Realtime_process_management#Configuring_PAM)).
  
 ==== Timers ==== ==== Timers ====
Line 369: Line 383:
   $ ps axHo user,lwp,pid,rtprio,ni,command   $ ps axHo user,lwp,pid,rtprio,ni,command
  
-  $ ps -eLo pid,cls,rtprio,pri,nice,cmd | grep -i irq+  $ ps -eLo user,pid,cls,rtprio,cmd --sort rtprio
  
 Or if you have [[system_configuration#rtirq]] installed: Or if you have [[system_configuration#rtirq]] installed:
Line 546: Line 560:
 The [[https://codeberg.org/rtcqs/rtcqs|rtcqs]] script automatically analyzes your current configuration. This script will make configuration suggestions based on your current setup and link to the relevant sections on this page for background information. The [[https://codeberg.org/rtcqs/rtcqs|rtcqs]] script automatically analyzes your current configuration. This script will make configuration suggestions based on your current setup and link to the relevant sections on this page for background information.
  
-  rtcqs - version 0.4.2+  rtcqs - version 0.5.0
      
   Root User   Root User
Line 555: Line 569:
   ===========   ===========
   [ OK ] User music is in the audio group.   [ OK ] User music is in the audio group.
-   
-  Background Processes 
-  ==================== 
-  [ OK ] No resource intensive background processes found. 
      
   CPU Frequency Scaling   CPU Frequency Scaling
Line 571: Line 581:
   ======================   ======================
   [ OK ] High resolution timers are enabled.   [ OK ] High resolution timers are enabled.
-   
-  System Timer 
-  ============ 
-  [ OK ] System timer is set at 1000 Hz and high resolution timers are enabled. 
      
   Tickless Kernel   Tickless Kernel
Line 595: Line 601:
   ==========   ==========
   [ OK ] Swappiness is set at 10.   [ OK ] Swappiness is set at 10.
-   
-  Maximum User Watches 
-  ==================== 
-  [ OK ] max_user_watches has been set to 524288 which is sufficient. 
      
   Filesystems   Filesystems
Line 606: Line 608:
      
   IRQs   IRQs
-  =====+  ====
   [ OK ] USB port ehci_hcd:usb1 with IRQ 16 does not share its IRQ.   [ OK ] USB port ehci_hcd:usb1 with IRQ 16 does not share its IRQ.
   USB port ehci_hcd:usb2 with IRQ 23 does not share its IRQ.   USB port ehci_hcd:usb2 with IRQ 23 does not share its IRQ.
-  USB port xhci_hcd with IRQ 26 does not share its IRQ.+  USB port xhci_hcd with IRQ 25 does not share its IRQ.
   Soundcard snd_hda_intel:card10 with IRQ 31 does not share its IRQ.   Soundcard snd_hda_intel:card10 with IRQ 31 does not share its IRQ.
      
Line 615: Line 617:
   ================   ================
   [ OK ] Power management can be controlled from user space. This enables DAW's like Ardour and Reaper to set CPU DMA latency which could help prevent xruns.   [ OK ] Power management can be controlled from user space. This enables DAW's like Ardour and Reaper to set CPU DMA latency which could help prevent xruns.
- 
-To get the script install [[https://en.wikipedia.org/wiki/Git_%28software%29|Git]] first and then pull in the script: 
-  git clone https://codeberg.org/rtcqs/rtcqs.git 
-  cd rtcqs 
-  ./rtcqs.py 
  
 Discuss this script at the [[https://linuxmusicians.com/viewtopic.php?f=24&t=24000|LinuxMusicians Forum]] Discuss this script at the [[https://linuxmusicians.com/viewtopic.php?f=24&t=24000|LinuxMusicians Forum]]
Line 627: Line 624:
 ''top'' is probably the most used tool to display system information like CPU or memory usage. It is installed by default on most distros. ''top'' is probably the most used tool to display system information like CPU or memory usage. It is installed by default on most distros.
  
-{{:wiki:top2.png|Terminal running top}}+{{:wiki:top_2023-10-15.png|Terminal running top}}
  
 With the help of ''top'' you can find out which process is using up all your CPU or memory. By pressing ''h'' you get a help screen. To sort on memory usage instead of CPU usage you can press ''F'' + ''n'' + ''Enter''. With the help of ''top'' you can find out which process is using up all your CPU or memory. By pressing ''h'' you get a help screen. To sort on memory usage instead of CPU usage you can press ''F'' + ''n'' + ''Enter''.
Line 635: Line 632:
 ''htop'' is the somewhat more sophisticated big brother of ''top''. ''htop'' is the somewhat more sophisticated big brother of ''top''.
  
-{{:wiki:htop2.png|Terminal running htop}}+{{:wiki:htop_2023-10-15.png|Terminal running htop}}
  
 ==== latencytop ==== ==== latencytop ====
Line 645: Line 642:
 ==== cyclictest ==== ==== cyclictest ====
  
-Just as ''latencytop'' measures system latencies, ''[[https://rt.wiki.kernel.org/index.php/Cyclictest|cyclictest]]'' measures kernel latencies. ''cyclictest'' has quite some options but one of the most used ways to run the command is:+Just as ''latencytop'' measures system latencies, ''[[https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cyclictest/start|cyclictest]]'' measures kernel latencies. ''cyclictest'' has quite some options but one of the most used ways to run the command is:
   #  cyclictest -t1 -p 80 -n -i 10000 -l 10000 -m   #  cyclictest -t1 -p 80 -n -i 10000 -l 10000 -m
 One single thread (''-t1''), priority of 80 (''-p 80''), use clock_nanosleep (''-n''), use 10000 us base interval of thread (''-i 1000''), use 1000 loops and then exit (''-l 10000''), lock current and future memory allocations (''-m''). More on clock_nanosleep can be found in its manpage (''man clock_nanosleep''). One single thread (''-t1''), priority of 80 (''-p 80''), use clock_nanosleep (''-n''), use 10000 us base interval of thread (''-i 1000''), use 1000 loops and then exit (''-l 10000''), lock current and future memory allocations (''-m''). More on clock_nanosleep can be found in its manpage (''man clock_nanosleep'').
  
 Other examples of the usage of ''cyclictest'': Other examples of the usage of ''cyclictest'':
-  * http://code.goto10.org/projects/puredyne-old/wiki/KernelAndSystemOptimization#TestingandBenchmarking +  * https://web.archive.org/web/20130727095507/http://code.goto10.org/projects/puredyne-old/wiki/KernelAndSystemOptimization#TestingandBenchmarking 
-  * https://rt.wiki.kernel.org/index.php/Cyclictest#Expected_Results+  * https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cyclictest/result-examples
  
 ===== TODO ===== ===== TODO =====
Line 660: Line 657:
   * Power management   * Power management
   * Rewrite rtirq section or move to separate page   * Rewrite rtirq section or move to separate page
 +  * Pipewire
wiki/system_configuration.1652642340.txt.gz · Last modified: 2022/05/15 21:19 by autostatic