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/23 14:29] – [audio group] 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 51: Line 53:
 === 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: [[https://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?]]
Line 57: Line 59:
 === 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)
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 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. When using Arch the above is valid too except that Arch uses a the group name ''realtime''.+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 610: 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 618: 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 628: 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 643: 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.1653308971.txt.gz · Last modified: 2022/05/23 14:29 by autostatic