一切的开端:Linux音频系统的调教

Configure the Linux audio system

Posted by Tee on April 06,2017

以下命令默认用户名为 tee,需要自行替代为自己的用户名。

为了避免命令的差异,假设你的系统跟我以及大部分人使用的一样,都是使用systemd,都支持cpu调节成最大效能效能。

强烈建议所有的文件操作,都把原文件进行备份。

假如你遇到了问题,在最上方的About页面的邮箱联系我进行交流吧!

把自己添加到audio用户组

tee是我的用户名

sudo usermod -aG audio tee

增加threadirqs到内核参数

我是在内核启动时,配置Grub修改。还有其他方式,详见Kernel parameters Wiki

sudo vim /etc/default/grub 

在配置文件找到GRUB_CMDLINE_LINUX_DEFAULT添加threadirqs参数,下面是例子

GRUB_CMDLINE_LINUX_DEFAULT="quiet threadirqs"

重新生成grub.cfg文件

grub-mkconfig -o /boot/grub/grub.cfg

CPU调频到最大效能

使用cpupower工具把governors设置为performance,即最大效能。

安装cpupower

  • Arch Linux
    sudo pacman -S cpupower
  • Ubuntu
    sudo apt-get install linux-tools-common linux-tools-$(uname -r)

修改cpupower配置文件,添加或修改governor这一行

sudo vim /etc/default/cpupower

governor='performance'

最后启用cpupower的service

sudo systemctl enable cpupower

提高文件系统性能

noatime选项能提高文件系统的性能

sudo vim /etc/fstab

noatime添加到options列,范例里/dev/sda2是我的根目录,/dev/sda4是我的home目录。

# 
# /etc/fstab: static file system information
#
# <file system>	<dir>	<type>	<options>	<dump>	<pass>
# /dev/sda2
UUID=45da8912-3dbc-4793-bff6-d28f868e35d8	/         	ext4      	rw,relatime,data=ordered,noatime	0 1

# /dev/sda4
UUID=16436bfd-5b02-4da8-85ec-03c7ab7f0976	/home     	ext4      	rw,relatime,data=ordered,noatime	0 2

增加最新请求的RTC中断频率

默认频率是64hz。先使用su命令,进入管理员权限才能操作

echo 2048 > /sys/class/rtc/rtc0/max_user_freq
echo 2048 > /proc/sys/dev/hpet/max-user-freq

修改交换分区频率与inotify

交换分区频率是由swappiness定义的,默认是60,修改为10,在硬盘写入之前,系统会等待更久一些。

还有一个inotify用来发现app请求的文件修改,如果有大量的音频数据在操作,这个inotify需要调更高。

这两个设置都可以设置在做/etc/sysctl.d/99-sysctl.conf

sudo vim /etc/sysctl.d/99-sysctl.conf

vm.swappiness = 10
fs.inotify.max_user_watches = 524288

安装Linux-rt内核(可选)

注意!这个是可选的,lowlatency的内核也能获得较低的延迟。有的nVidia或AMD/ATI显卡驱动在rt内核会不工作。

如果你了解到你的显卡在rt内核上工作良好,或想一尝新鲜,继续吧。我的Intel显卡工作很良好。

  • Arch Linux
    yaourt linux-rt
  • Ubuntu
    sudo apt-get install linux-realtime linux-headers-realtime

更新grub配置

sudo grub-mkconfig -o /boot/grub/grub.cfg 

其他的可选项

最大化PCI声卡的延迟时间,等等。具体见WIKI

使用Quickscan脚本检查设置

这个脚本是perl语言写成的,需要先安装perl。如果没有git也需先安装git。

  • Arch Linux
    sudo pacman -S perl git
  • Ubuntu
    sudo apt-get install perl git-all

获取脚本并运行

git clone git://github.com/raboof/realtimeconfigquickscan.git
cd realtimeconfigquickscan
perl ./realTimeConfigQuickScan.pl

在运行结果中看有没有not good的,如果只有RT内核检测是not good,你也不需要RT内核,就完满成功啦!

参考一下我的检测结果:

== GUI-enabled checks ==
Checking if you are root... no - good
Checking filesystem 'noatime' parameter... 4.10.6 kernel - good
(relatime is default since 2.6.30)
Checking CPU Governors... CPU 0: 'performance' CPU 1: 'performance' CPU 2: 'performance' CPU 3: 'performance'  - good
Checking swappiness... 10 - good
Checking for resource-intensive background processes... none found - good
Checking checking sysctl inotify max_user_watches... >= 524288 - good
Checking access to the high precision event timer... readable - good
Checking access to the real-time clock... readable - good
Checking whether you're in the 'audio' group... yes - good
Checking for multiple 'audio' groups... no - good
Checking the ability to prioritize processes with chrt... yes - good
Checking kernel support for high resolution timers... found - good
Kernel with Real-Time Preemption... not found - not good
Kernel without real-time capabilities found
For more information, see http://wiki.linuxaudio.org/wiki/system_configuration#installing_a_real-time_kernel
Checking if kernel system timer is high-resolution... found - good
Checking kernel support for tickless timer... found - good
== Other checks ==
Checking filesystem types... ok.
ok.

进阶阅读:做音乐延迟太高?rtprio拯救你

wiki参考资料:

https://wiki.archlinux.org/index.php/Professional_audio#System_Configuration

http://wiki.linuxaudio.org/wiki/system_configuration