Запишу изменения, сделанные на плеере на базе mpd.
$ cat /etc/rc.local
#!/bin/bash
/sbin/hdparm -B 255 /dev/sda
echo 2048 > /sys/class/rtc/rtc0/max_user_freq
/usr/local/bin/ympd -u rain 1>/dev/null 2>/dev/null &
Первое – отключение постоянной парковки винта. Как-то пропустил этот момент, в итоге он нащелкал уже 150к парковок.
Второе – рекомендации из мануала по включению RT для плеера. Делается вместе с опцией в sysctl.conf.
Третье – запуск веб-морды для плеера – https://www.ympd.org
В /etc/sysctl.conf:
vm.dirty_writeback_centisecs = 100000
vm.dirty_expire_centisecs = 100000
kernel.dmesg_restrict=0
dev.hpet.max-user-freq = 2048
Первые два – более редкий сброс кэша на диск (/home в RW, так что пригодится).
Третье – включение dmesg для пользователя (бывает нужно, а в новых дистрах юзеру dmesg нельзя).
Ну и последнее – упомянутая выше опция для установки максимальной частоты HPET-таймера.
В /etc/default/grub
GRUB_TIMEOUT=2
GRUB_CMDLINE_LINUX=”radeon.dpm=1 consoleblank=0 net.ifnames=0 biosdevname=0 clocksource=hpet threadirqs”
Первое – чуть снизил таймаут для меню загрузчика. Все равно раз в сто лет нужно, а грузится сейчас чуть быстрее.
Второе – включение энергосбережение для встроенной в AMD C60 графики; удержание консоли включенной; “старые” имена для сетевых интерфейсов (мне как-то ближе eth0) и опции из мануала по realtime для mpd.
Поставил RT-ядро из репозитория, снес остальные.
Linux mpd 4.9.0-6-rt-amd64 #1 SMP PREEMPT RT Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux
Проверка на RT:
$ ps H -q `pidof -s mpd` -o 'pid,tid,cls,rtprio,comm'
PID TID CLS RTPRIO COMMAND
614 614 TS - mpd
614 757 TS - io
614 758 TS - player
614 759 TS - decoder:flac
614 760 FF 50 output:USB SPDI
Вывод звука с FF-приоритетом (это реалтайм). Похоже, работает – т.е., похоже, mpd из дистра уже умеет RT и патчить не нужно. Хотя бы частично – так как не все опции из рекомендаций он понимал.
Добавил autofs. Винт почему-то часто отпадает, при этом плеер вообще не запускается, не пуская даже по SSH. Сейчас система гарантированно загрузится, а диск монтируется при обращении к нему. Если не сможет смонтироваться – то я хотя бы по SSH смогу попасть на машину и посмотреть, что там. Или выключить машину кнопкой на панели, так как это тоже раньше не работало при отвалах диска.
$ cat /etc/auto.master
/mnt /etc/auto.misc --timeout=600,--ghost
В /etc/auto.misc
disk -fstype=xfs,ro :UUID=e9a85596-587d-449f-bdbe-666ebd26b5ad
Линкуем /mnt/disk/ на /storage.
В/etc/mpd.conf
audio_buffer_size "131071"
buffer_before_play "1%"
replaygain "off"
audio_output {
type "alsa"
name "USB SPDIF"
device "hw:1" # optional
replay_gain_handler "none"
use_mmap "yes"
auto_resample "no"
auto_channels "no"
auto_format "no"
#priority "FIFO:99"
# mixer_type "software" # optional
# mixer_device "default" # optional
# mixer_control "PCM" # optional
# mixer_index "0" # optional
}
Буфер побольше – на 131072 плеер уже ругался и не запускался. Сейчас с диска вычитывается хороший кусок файла (если не весь) и диск больше не трогается. Процент буфера – начинать играть как можно раньше (меньше шансов выпадения звука).
Опции касательно replaygain и autoresample/-format/-channels – из рекомендаций по bit perfect. В принципе, особо ничего не должно было поменяться – replaygain и так не использовал, остальное работало как надо – но лишним не будет. Смысл опций в том, чтобы отключить любую возможность программной обработки (а значит и изменения) звукового потока. Пусть играет именно так, как записан.