Real-time audio in NixOS
musnix provides a set of simple, high-level configuration options for doing real-time audio work in NixOS, including optimizing the kernel, applying the CONFIG_PREEMPT_RT
patch to it, and adjusting various low-level system settings.
Add the following to your configuration.nix
:
imports =
[ <existing imports>
/path/to/musnix
];
musnix.enable = true;
user.extraUsers.<username>.extraGroups = [ "audio" ];
The following sections contain information about the various configuration options.
musnix.enable
-
Description: Enable musnix, a module for real-time audio.
-
Type:
boolean
-
Default value:
false
-
NOTE: This option must be set to
true
to use other musnix base options. -
Details: If enabled, this option will do the following:
-
Activate the
performance
CPU frequency scaling governor. -
Set
vm.swappiness
to 10. -
Set the following udev rules:
KERNEL=="rtc0", GROUP="audio" KERNEL=="hpet", GROUP="audio"
-
Set the
max_user_freq
of/sys/class/rtc/rtc0
to 2048. -
Set the
max-user-freq
of/proc/sys/dev/hpet
to 2048. -
Set the following PAM limits:
@audio - memlock unlimited @audio - rtprio 99 @audio soft nofile 99999 @audio hard nofile 99999
-
Set the following environment variables to default install locations in NixOS:
VST_PATH
LVST_PATH
LADSPA_PATH
LV2_PATH
DSSI_PATH
-
Allow users to install plugins in the following directories:
~/.vst
~/.lvst
~/.ladspa
~/.lv2
~/.dssi
-
musnix.alsaSeq.enable
- Description: If enabled, load ALSA Sequencer kernel modules. Currently, this only loads the
snd_seq
andsnd_rawmidi
modules. - Type:
boolean
- Default value:
true
musnix.ffado.enable
- Description: If enabled, use the Free FireWire Audio Drivers (FFADO).
- Type:
boolean
- Default value:
false
musnix.soundcardPciId
-
Description: The PCI ID of the primary soundcard. Used to set the PCI latency timer.
To find the PCI ID of your soundcard:
lspci | grep -i audio
-
Type:
string
-
Default value:
""
-
Example value:
"00:1b.0"
NOTE: The following kernel options can be used without setting musnix.enable = true;
musnix.kernel.optimize
- NOTE: Enabling this option will rebuild your kernel.
- Description: If enabled, this option will configure the kernel to be preemptible, to use the deadline I/O scheduler, and to use the High Precision Event Timer (HPET).
- Type:
boolean
- Default value:
false
musnix.kernel.realtime
- NOTE: Enabling this option will rebuild your kernel.
- Description: If enabled, this option will apply the
CONFIG_PREEMPT_RT
patch to the kernel. - Type:
boolean
- Default value:
false
musnix.kernel.packages
-
Description: This option allows you to select the real-time kernel used by musnix.
-
Type:
package
-
Default value:
pkgs.linuxPackages_3_18_rt
-
Available packages:
pkgs.linuxPackages_3_14_rt
pkgs.linuxPackages_3_18_rt
pkgs.linuxPackages_4_1_rt
pkgs.linuxPackages_4_4_rt
pkgs.linuxPackages_4_6_rt
or:
pkgs.linuxPackages_latest_rt
(currentlypkgs.linuxPackages_4_6_rt
)
musnix.kernel.latencytop
- NOTE: Enabling this option will rebuild your kernel.
- NOTE: This option is only intended to be used for diagnostic purposes, and may cause other issues.
- Description: If enabled, this option will configure the kernel to use a latency tracking infrastructure that is used by the "latencytop" userspace tool.
- Type:
boolean
- Default value:
false
NOTES:
- The following rtirq options can be used without setting
musnix.enable = true;
musnix.kernel.realtime
must be set totrue
to use these options.
musnix can also install and run the rtirq script as a systemd service.
To see a list of options for using this feature, use the following command:
nixos-option musnix.rtirq
To see a description of one of the listed options (in this case enable
):
nixos-option musnix.rtirq.enable
musnix.das_watchdog.enable
- Description: If enabled, start the das_watchdog service. This service will ensure that a realtime process won't hang the machine.
- Type:
boolean
- Default value:
true
ifmusnix.kernel.realtime.enable = true
, otherwisefalse
- IRC:
#musnix
on freenode