以下命令默认用户名为 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
本作品采用知识共享署名 4.0 国际许可协议进行许可。