Skip to content
Real-time audio in NixOS
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
modules Linux 4.19.15-rt12 Jan 24, 2019
pkgs/os-specific/linux
tests add tests May 6, 2018
.gitignore
LICENSE
README.md
default.nix add das_watchdog: a realtime watchdog Jun 5, 2015

README.md

musnix

Real-time audio in NixOS

About

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.

Basic Usage

Clone this project.

Add the following to your configuration.nix:

{
  imports =
    [ # ...
      /path/to/musnix/clone
    ];

  musnix.enable = true;
  users.users.johndoe.extraGroups = [ "audio" ];
}

To update musnix, run git pull.

Later sections of this document contain information about the various configuration options.

A note about NixOS versions

Users who are on NixOS 17.09 or earlier should use the pre-18.03 branch.

Users who are on NixOS 16.09 or earlier should use the pre-17.03 branch. See #42 for more information about this change.

You can check your NixOS version with the nixos-version command.

You can clone the pre-18.03 branch directly with the following command:

git clone --branch=pre-18.03 https://github.com/musnix/musnix.git

Using musnix as a channel

As an alternative to the above approach, you can instead add musnix as a channel:

sudo -i nix-channel --add https://github.com/musnix/musnix/archive/master.tar.gz musnix
sudo -i nix-channel --update musnix

Add <musnix> to imports in your configuration.nix:

{
  imports =
    [ # ...
      <musnix>
    ];

  musnix.enable = true;
  users.users.johndoe.extraGroups = [ "audio" ];
}

To update musnix, run:

sudo -i nix-channel --update musnix

Base 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 and snd_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"

Kernel Options

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_4_9_rt

  • Available packages:

    • pkgs.linuxPackages_3_18_rt
    • pkgs.linuxPackages_4_1_rt
    • pkgs.linuxPackages_4_4_rt
    • pkgs.linuxPackages_4_9_rt
    • pkgs.linuxPackages_4_11_rt
    • pkgs.linuxPackages_4_13_rt
    • pkgs.linuxPackages_4_14_rt
    • pkgs.linuxPackages_4_16_rt
    • pkgs.linuxPackages_4_18_rt
    • pkgs.linuxPackages_4_19_rt

    or:

    • pkgs.linuxPackages_latest_rt (currently pkgs.linuxPackages_4_19_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

rtirq Options

NOTES:

  • The following rtirq options can be used without setting musnix.enable = true;
  • musnix.kernel.realtime must be set to true 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

Other Options

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 if musnix.kernel.realtime.enable = true, otherwise false

Communication

More Information

You can’t perform that action at this time.