BitPerfect ::jack::realTimeConfigQuickScanリアルタイム処理の設定の確認

BitPerfect のために::リアルタイム処理の妨げになっている設定をあぶり出す


realTimeConfigQuickScan(Perlスクリプト)は、リアルタイムっぽい処理の妨げになっている設定をあぶり出します。jackに限らずですが。いわゆるBitPerfectへの道です。

なぜ設定を詰めていこうかと考えたのかですが、手持ちで一番良いUSB-DACにおけるHi-Resファイル再生が微妙に残念だったからです。48k未満にすれば問題はありません。(聴感上はどうでもいいとしても)、192k/24bit設定で聴感上ノイズなどが問題ないレベルまで設定したいわけです。

当方の、jackレイテンシーは、0.5ミリ秒-0.1ミリ秒(96000/19200)になるようにしています(深い意図はありません)。

ubuntu/mint では厳しいレベルではjack(もちろんpulse/alsaでも)ではまともに動かない(=音質が悪い)DACが存在しますので(当方の環境に限りそう結論づけました)、いじっても時間の無駄です。

結論からいえば、archLinux,manjaro,antergos ではすんなり希望通りに設定できました。執筆時点でのubuntu 18.04ももちろん並行してテストしますが、問題ありです。たいていのUSB-DACはすんなり動作するんですけどね。さすがにRyzen7にしたので環境がプアとはいえないはず。 半年無駄にしました。ディストロを変えるだけのカンタン解決。

導入などは手抜き。 ubuntu studio にはrealTimeConfigQuickScanはありますので、たぶん sudo apt install rea... で導入できるかと思います。今、manjaro なので。(追記、よくわからないのでgithubから落として手動でubuntu18.04LTS 1st betaに入れました。perlモジュールをパスの通ったところにコピーするだけです。)


導入完了後、
新規端末。ubuntu系は以下同時押し。CTRL+ALT+T 以下のヒストリ貼り付けは、manjaro での操作結果です。

rootではなくユーザー権限で実行します。

realTimeConfigQuickScan 

BitPerfect の妨げになっている設定をあぶり出します。

$ realTimeConfigQuickScan 
== GUI-enabled checks ==
Checking if you are root... no - good
Checking filesystem 'noatime' parameter... 4.14.21 kernel - good
(relatime is default since 2.6.30)
Checking CPU Governors... CPU 0: 'schedutil' CPU 1: 'schedutil' CPU 10: 'schedutil' CPU 11: 'schedutil' CPU 12: 'schedutil' CPU 13: 'schedutil' CPU 14: 'schedutil' CPU 15: 'schedutil' CPU 2: 'schedutil' CPU 3: 'schedutil' CPU 4: 'schedutil' CPU 5: 'schedutil' CPU 6: 'schedutil' CPU 7: 'schedutil' CPU 8: 'schedutil' CPU 9: 'schedutil'  - not good
Set CPU Governors to 'performance' with 'cpufreq-set -c -g performance'
See also: http://linuxmusicians.com/viewtopic.php?f=27&t=844
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

オレンジが効いたな?!と特に感じた項目です。 その他は忘れがちポイントチェックもしてくれますので、親切です。

BitPerfect 最適化されていないとされる項目のみ抜き出す。

realTimeConfigQuickScan | grep 'not good' 

最短ルートで設定するには、good評価を無視します。そうなると not good のみ見ればいいわけです。上の通りに打鍵します(ターミナルにぺたん)。残ったものが検討項目です。audioグループにユーザーが登録されていないのは問答無用で変更する必要がありますが一部はユーザーの考え方次第です。全てを適用する必要はないと思います。

当方の場合::2つ以外はBitPerfect 最適化されています。

CPUをPerformance モード(最大クロック固定)で動かしてねとリアルタイムカーネルっぽいのがはいってないという意味です。この2つには自分は特に対応しません。それ以外は全部済ませました。
前者はコマンドなりGUIで設定できますよね。

sudo cpupower frequency-set -g performance | ondemand | powesave .... みたいに。

後者は必要性は特に感じないというか、音楽専用LinuxBoxではないので、そんなにハイテンション(Max Clock)で動かれてもその他のアプリケーションとの協調という意味と地球環境保全という意味では賛成できないので(爆)。

$ realTimeConfigQuickScan | grep 'not good' 
Checking CPU Governors... CPU 0: 'schedutil' CPU 1: 'schedutil' CPU 10: 'schedutil' CPU 11: 'schedutil' CPU 12: 'schedutil' CPU 13: 'schedutil' CPU 14: 'schedutil' CPU 15: 'schedutil' CPU 2: 'schedutil' CPU 3: 'schedutil' CPU 4: 'schedutil' CPU 5: 'schedutil' CPU 6: 'schedutil' CPU 7: 'schedutil' CPU 8: 'schedutil' CPU 9: 'schedutil'  - not good
Kernel with Real-Time Preemption... not found

BitPerfect のために補遺

断章::おまけ、arch系でしか試していませんが、jack起動前に次を実行しておくといい。

#!/bin/bash
sudo echo 2048 > /sys/class/rtc/rtc0/max_user_freq
sudo echo 2048 > /proc/sys/dev/hpet/max-user-freq

ubuntu でうまくない場合は、root になって実行するといいかも。
ビフォーアフタですが、ほとんど影響がない気がします。

おすすめ::jack フレームバッファの設定早見表

USB-DACの場合は、ピリオド3を基本にして考えます。これでかなり試行錯誤が単純になりますね。今年になるまで知らなかったです。笑)

(Frames [or buffer] / Sample Rate ) * Periods = Latency in ms

( 16 / 48000 ) * 3 = 1
( 32 / 48000 ) * 3 = 2
( 64 / 48000 ) * 3 = 4
( 128 / 48000 ) * 3 = 8
( 256 / 48000 ) * 3 = 16
( 512 / 48000 ) * 3 = 32
( 1024 / 48000 ) * 3 = 64
( 2048 / 48000 ) * 3 = 128

( 32 / 96000 ) * 3 = 1
( 64 / 96000 ) * 3 = 2
( 128 / 96000 ) * 3 = 4
( 256 / 96000 ) * 3 = 8
( 512 / 96000 ) * 3 = 16
( 1024 / 96000 ) * 3 = 32
( 2048 / 96000 ) * 3 = 64

( 64 / 192000 ) * 3 = 1
( 128 / 192000 ) * 3 = 2
( 256 / 192000 ) * 3 = 4
( 512 / 192000 ) * 3 = 8
( 1024 / 192000 ) * 3 = 16
( 2048 / 192000 ) * 3 = 32



#以下も参考にしてください。
https://wiki.archlinux.jp/index.php/%E3%83%97%E3%83%AD%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%82%AA
https://wiki.archlinux.jp/index.php/JACK_Audio_Connection_Kit

Namida Zone :: 神々は細部に宿る――涙とともに、夜な夜なパンをかじった。

Grub2をめぐるあれこれ。テーマ、背景、フォント。それが Cute Grub 計画

No Copyright Girl / ノーコピーライトガール Grubと戯れるという意味のない日常:: Cute Grub 計画 コンピューターの電源オン後、 OS オペレーティングシステムを起動するためのブートローダーが先ず動きだす――ほぼすべてのLinux...