树莓派 MoOde 音乐播放器 Linux 系统优化

您所在的位置:网站首页 moode设置nas 树莓派 MoOde 音乐播放器 Linux 系统优化

树莓派 MoOde 音乐播放器 Linux 系统优化

2023-08-14 12:44| 来源: 网络整理| 查看: 265

      在使用树莓派作为专用数播设备之前,我常用PC上的HQPlayer、Mac上的Audirvana两个音乐播放器,通过USB接DAC解码播放。HQPlayer的声音非常清澈透亮,让人有一种一见钟情、相见恨晚的感觉,而Audirvana的功能更强一些,单纯从重播效果来说,个人认为二者不能不说是Windows、MacOS下最佳的音乐播放软件了。另外,Windows下还有一个非常小众的音乐播放软件叫做Bughead,日本人开发的,重播效果也非常非常棒,但就是操作界面有点难懂,后面有机会给大家分享吧。

      采用树莓派专用音乐播放的主要原因是:PC、MAC还要同时运行各种网络、办公类的应用软件,运行软件多、高速BT下载或进行大IO操作时,一定会对相关音乐播放进程产生影响,特别是播放SACD、高码率文件或启用高码率重采用功能时,偶尔产生的断续严重影响体验,而树莓派专用音乐播放设备是非常纯净的Linux系统,它只负责数字音频文件的读取、播放这个唯一的任务,没有其他干扰,稳定可信且重播效果也非常优秀。

      通常,我在烧制一个新的MoOde系统后(其他如Archphile播放系统也是如此),第一件事就是对其Linux系统做一些优化。下面就给大家介绍一个Github上非常好用的优化脚本。

      硬件:树莓派3B

      系统:MoOde 6.4。其底层OS采用了树莓派官方的Raspbian 10.1。MoOde最新版本为7.0,重采样率最高已经达到32bit/768kbps,也许是心理作用,从个人听感来说,老版本感觉更加清澈,新版本高重采样率听起来反而有些混浊无力。

[email protected]'s password: Kernel 4.19.71-rt24-v8_191114r3 #1, Raspbian 10.1, moOde 6.4.0 2019-11-24 ____ __ __ _ ___ / __ \___/ /__ / ' \/ _ \/ /_/ / _ / -_) /_/_/_/\___/\____/\_,_/\__/ moOde audio player (C) 2014 Tim Curtis

      我们先看一下/boot/cmdline.txt文件中isolcpus参数的设置(linux内核参数isolcpus的作用是隔离一定数量的CPU,使其独立于内核的平衡调度算法,也就是内核本身不会将进程分配到被隔离的CPU上运行,之后用户可将指定的进程绑定到被隔离的CPU上运行,让进程独占CPU,使其实时性得到一定程度的提高)。树莓派3B是4核CPU,编号为0、1、2、3,该文件中的『isolcpus=2,3』说明已将2、3号CPU预留给了应用进程使用。记下这个设置,因为将要介绍的这个优化脚本中的一个指令与此有冲突,需要更新,否则系统启动将挂死。

pi@moode:/boot$ more cmdline.txt root=/dev/mmcblk0p2 rootfstype=ext4 fsck.repair=yes rootwait dwc_otg.dma_enable=1 dwc_otg.fiq_enable=1 dwc_otg.fiq_fix_enable=1 dwc_otg.fiq_fsm _enable=1 dwc_otg.fiq_fsm_mask=0xf dwc_otg.lpm_enable=0 dwc_otg.fiq_fsm_mask=0x3 dwc_otg.nak_holdoff=1 net.ifnames=0 audit=0 selinux=0 isolcpus =2,3 processor.max_cstate=0 panic=10 irqaffinity=0-1 idle=poll nohz_full=2,3 rcu_nocbs=2,3 rcu_nocb_poll

      Github上该优化脚本的项目名称:Arch-LInux-Audio-RPi

      第一步:从GitHub上克隆项目源代码到默认用户pi的个人目录下,进入Arch-Linux-Audio-RPi/目录查看一下相关文件,其中,basic-install.sh是安装脚本,remove.sh是移除脚本,核心优化脚本是Sound.sh,sound.service用于将Sound.sh安装为系统服务,在每次系统启动阶段自动运行Sound.sh脚本进行优化。

pi@moode:~$ git clone https://github.com/dynobot/Arch-Linux-Audio-RPi.git Cloning into 'Arch-Linux-Audio-RPi'... remote: Enumerating objects: 156, done. remote: Counting objects: 100% (156/156), done. remote: Compressing objects: 100% (153/153), done. remote: Total 668 (delta 85), reused 0 (delta 0), pack-reused 512 Receiving objects: 100% (668/668), 259.34 KiB | 21.00 KiB/s, done. Resolving deltas: 100% (386/386), done. pi@moode:~$ cd Arch-Linux-Audio-RPi/ pi@moode:~/Arch-Linux-Audio-RPi$ ls basic-install.sh _config.yml images limits.conf README.md remove.sh sound.service Sound.sh sysctl.conf

      第二步:对basic-install.sh、Sound.sh两个脚本进行一下简单修改。

      1、对于Sound.sh脚本修改。取消下面代码块第12、13行的注释。第12行,用于提升mpd(Linux下的Music Player Daemon服务)进程的实时进程优先级(chrt是用来操纵进程的实时属性,0-99范围内为实时进程,也叫做实时进程优先级,而100-139内是非实时进程)。该优化改善效果将非常明显,丝毫没有留滞感,就好像卡座按下Play键就能立即播放一样,但在播放高码率文件时,WEB播放器界面操作流畅度偶尔会产生一些影响。第13行,原指令是指定1号CPU处理mpd进程,这就和cmdline.txt中CPU隔离参数设置不一致了,应改为2。

pi@moode:~/Arch-Linux-Audio-RPi$ more Sound.sh #!/bin/bash #Reduce Audio thread latency chrt -f -p 54 $(pgrep ksoftirqd/0) chrt -f -p 54 $(pgrep ksoftirqd/1) chrt -f -p 54 $(pgrep ksoftirqd/2) chrt -f -p 54 $(pgrep ksoftirqd/3) #Uncomment for MPD Affinity and Priority chrt -f -p 81 $(pidof mpd) //修改取消注释 taskset -c -p 2 $(pidof mpd) //-p 1 修改为 -p 2 #SPDIF HAT and WiFi users Uncomment to turn off power to [Ethernet and USB] ports #echo 0x0 > /sys/devices/platform/soc/3f980000.usb/buspower #Tuning Kernel I/O schedulers echo bfq > /sys/block/mmcblk0/queue/scheduler echo 1 > /sys/block/mmcblk0/queue/iosched/low_latency #Reduce operating system latency echo 1000000 > /proc/sys/kernel/sched_latency_ns echo 100000 > /proc/sys/kernel/sched_min_granularity_ns echo 25000 > /proc/sys/kernel/sched_wakeup_granularity_ns exit

            2、对于basic-install.sh的修改。见下面代码块的14、34行,原始代码是用wget指令从Github联网下载相关脚本,因为之前相关文件我们都已经克隆到本地目录,这里改为cp拷贝指令即可,而联机远程下载时还很可能报错。

pi@moode:~/Arch-Linux-Audio-RPi$ vi basic-install.sh #!/bin/bash border() { local title="| $1 |" local edge=${title//?/-} echo -e "${edge}\e[34m\n${title}\n${edge}" sleep 3 } border 'Downloading Sound File' sleep 1 cp Sound.sh -O /usr/bin/Sound.sh // 修改 chmod 755 /usr/bin/Sound.sh border 'Increasing Sound Group Priority' sleep 1 [[ -f /etc/security/limits.conf ]] && mv /etc/security/limits.conf /etc/security/limits.conf.bak echo '#New Limits' > /etc/security/limits.conf echo '@audio - rtprio 99' >> /etc/security/limits.conf echo '@audio - memlock 512000' >> /etc/security/limits.conf echo '@audio - nice -20' >> /etc/security/limits.conf border 'Improving Network Latency' sleep 1 echo "#New Network Latency" > /etc/sysctl.d/network-latency.conf echo 'net.core.rmem_max = 16777216' >> /etc/sysctl.d/network-latency.conf echo 'net.core.wmem_max = 16777216' >> /etc/sysctl.d/network-latency.conf border 'Creating System Service' sleep 1 cp sound.service -O /etc/systemd/system/sound.service //修改 systemctl enable sound.service border 'Cleaning Up' sleep 3 #rm basic-install.sh //注释此行,保留安装文件 border 'Rebooting System Enjoy the Music' sleep 3 reboot

      第三步:执行安装脚本,执行完成后MoOde系统将完成重启。

pi@moode:~/Arch-Linux-Audio-RPi$ chmod 755 basic-install.sh pi@moode:~/Arch-Linux-Audio-RPi$ ./basic-install.sh

      效果验证

      1、重启后查看/etc/security/limits.conf文件,相关优化参数已经添加。

pi@moode:~/Arch-Linux-Audio-RPi$ more /etc/security/limits.conf #New Limits @audio - rtprio 99 @audio - memlock 512000 @audio - nice -20

      2、通过MoOde WEB播放器界面播放音乐后,登录系统,用top指令查看mpd进程的实时调度优先级已是最高,且独占2号CPU。

top - 00:56:00 up 1:12, 1 user, load average: 1.96, 1.97, 1.97 Tasks: 152 total, 1 running, 151 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.0 us, 2.5 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.5 si, 0.0 st %Cpu1 : 0.0 us, 2.7 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 64.6 us, 2.4 sy, 0.0 ni, 33.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 : 3.0 us, 0.0 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 31.2/970.0 [|||||||||||||||||||||||||||||||| ] MiB Swap: 0.0/0.0 [ ] PID USER PR NI VIRT SHR RES S nTH %CPU P %MEM TIME+ COMMAND 808 mpd -71 -20 519.7m 21.9m 37.2m S 7 69.6 2 3.8 49:00.37 mpd 78 root -51 0 0.0m 0.0m 0.0m S 1 9.8 1 0.0 6:52.75 irq/41-dwc_otg_ 8963 pi 20 0 20.6m 2.8m 3.4m R 1 1.5 0 0.4 0:00.17 top 11 root -2 0 0.0m 0.0m 0.0m S 1 0.5 0 0.0 0:18.64 ktimersoftd/0

 

      Arch-Linux-Audio链接:https://github.com/dynobot/Arch-Linux-Audio-RPi



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3