パパリウス
パパリウス

マイルーム

オーディオルーム
オーディオルーム
借家(マンション) / 書斎兼用 / オーディオルーム / ~6畳 / 防音なし / スクリーンなし / ~2ch
<ネットワークトランスポート (I2S)> Raspberry Pi 3 ┣OS:symphonic-mpd ┗電源:iFi-Audio iPower (5V) <DAC> …
所有製品

レビュー/コメント

レビュー/コメントはありません

カレンダー

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

最新のレス

お気に入り製品

お気に入り製品はありません

日記

ラズパイオーディオ チューニングのまとめ(設定手順編)

このエントリーをはてなブックマークに追加
2017年03月30日

1)CPUコアのアイソレート(mpdをCPU0で実行)

mpdの実行を優先させることで高音質を狙うアプローチの1つとして、不要なプロセスの停止を行うことがあります。
より積極的な方法として紹介したいのは、CPUコア1つをmpd専用にして、他のプロセスからの割り込みを排除する方法です。

Raspberry pi 2はクアッドコアのCPUを搭載しているので、4コアのうちの1つをmpd専用にしても支障無さそうです。
さて、ここで思案したいのは、4コアのうち、どのコアを割り当てるべきかという点です。

便宜上、4つのコアをそれぞれ「CPU0」「CPU1」「CPU2」「CPU3」と呼ばせていただきますが、Raspberry piに搭載されているCPUには制約があり、ハードウェアからの割り込み要求(IRQ)はすべてCPU0に割り付けられ、他のコアに変更することはできないようです。また、カーネルスレッドもCPU0で実行されます。

参考)割り込み要求の発生状況は下記コマンドで確認可能です
cat /proc/interrupts

ここまでの情報を元に判断すれば、CPU0はカーネルスレッドやIRQの処理で"混み合っている"ため、mpdは他のコア(CPU1,CPU2,CPU3のいずれか)に割り付けるのがよさそうです。

実際にcyclictest(リアルタイム性能を測定するツール)でレイテンシを計測した結果が下記となります。


上から、CPU0,CPU1,CPU2,CPU3の計測結果となります。
CPU1,2,3は最小17〜18マイクロ秒、平均20〜21マイクロ秒、最大78〜132マイクロ秒という結果が読み取れます。
一方、CPU0は最小9マイクロ秒、平均13マイクロ秒、最大202マイクロ秒ということで、一見すると不利と思われたCPU0ですが、レイテンシの平均という面では有利ということになります。ただし、CPU1,2,3に比べて最大値が大きい事から、リアルタイム性能の面では不利ということになります。
結局のところ、CPU0 vs CPU1,2,3 はどちらが高音質かということですが、一聴して奥行き感の向上がわかるため、拙宅ではCPU0を採用しております。リアルタイム性能では不利ということで、音飛びが増えるなどの弊害が心配になりますが、特に支障は出ておりません。

参考)

cyclictest実行中のtopコマンドの出力です。
各プロセスが実行されているCPUは、P列で確認することができます。


2)リアルタイム優先度の設定(mpdの子プロセスをpolicy=fifo、priority=99で実行)

プロセスのリアルタイム優先度は、ポリシー(fifoまたはrr)とプライオリティ(最小1、最大99)を指定することになります。
拙宅ではfifoとrrの差は聞き取ることができませんでしたので、有利と思われるpolicy=fifo、priority=99を採用しています。
ここで1点、注意点があります。

mpd起動時の優先度は/lib/systemd/system/mpd.serviceファイルに「CPUSchedulingPolicy=fifo」「CPUSchedulingPriority=99」というように定義することができるのですが、mpd起動後に生成される4つの子プロセス(decoder,io,player,output:ALSA)のうち、「output:ALSA」というプロセスのみ、低いプライオリティで実行されてしまいます。
試しに「output:ALSA」という子プロセスのプライオリティを99に再設定してみると、音質の向上が見られました。ポリシーにfifoを採用する場合は、「子プロセスのプライオリティを同じにする」ことがポイントのようです。

3)CPU供給電圧変更(CPU供給電圧をデフォルトの1.2Vから1.4Vに変更)

CPUに供給されている電圧は、デフォルト設定では1.2Vなのですが、オーバークロック時にCPUの動作を安定させるために電圧を上げるケースがあります。
今回ご紹介するのは、「オーバークロックはせずCPU供給電圧のみを上げる」というチューニングです。

参考)CPUに供給されている電圧は下記コマンドで確認可能です。
vcgencmd measure_volts core

供給電圧は0.025V刻みで変更でき、最大で1.4Vまで上げることができます。
この設定変更による音質向上は強烈です。
どのような理屈で音質が向上するのかはよく分かっておりません。あくまで試聴結果での判断ということになります。
推測ですが、、、突発的な電圧降下に対して安定性が増したり、基板の温度上昇により水晶発振器の精度が安定しているのでは無いでしょうか。
(Raspberry pi 2の水晶は、50〜60℃あたりまで0.2ppm/℃程度の精度向上があるようです)

蛇足になりますが、あるサイトでアンダークロックによりノイズ発生を抑えるというチューニングが紹介されており、拙宅の環境でも試して見ました。デフォルトでは900MHzですが、400MHz程度まで下げていくと明らかに音質が悪化しました。やり過ぎるとノイズ低減のメリットよりもレイテンシ上昇のデメリットが上回ってしまうようですので、アンダークロックを試される方は慎重に試聴されるのがよろしいかと思います。

さて、今回ご紹介した各チューニング項目について、実際の設定変更箇所は下記3ファイルとなります。

(1) /boot/cmdline.txt
末尾に
isolcpus=0
を追記
※再起動後に有効化

(2) /lib/systemd/system/mpd.service
CPUAffinity=0
ExecStartPost=/bin/sleep 1
ExecStartPost=/usr/bin/chrt -a --fifo -p 99 $MAINPID
を追加
※sudo systemctl daemon-reload;sudo systemctl restart mpd
を実行することで有効化

(3) /boot/config.txt
force_turbo=1
over_voltage=8
を追加
※再起動後に有効化


ラズパイでI2S接続を楽しんでらっしゃる皆さん、Moodeのローレイテンシーカーネルをぜひお試しあれ。

次回の日記→

←前回の日記

レス一覧

  1. パパリウスさん、はじめまして。
    raspberry pi でマルチアンプをやってるassiといいます。

    とても参考になります。
    私は自作プログラムをコンパイルしないと音が出ないので開発環境が入ったraspbian liteを使ってます。

    CPUの振り分けはやっていたのですが、それぞれのタスクに専用に割り当てればよいだろうと聴き比べもせずにcpu0はシステム関係の割り込みがあるからと思って他の1から3を使っていました。

    私のシステムでは
    mpd(soxrでアップサンプリング)→自作のチャンデバソフト(fftw3を使った畳み込み演算)→自作のHDMI出力ソフト
    となってます。
    cpu0と1をスケジューリングから外してHDMI出力ソフトをcpu0、チャンデバをcpu1、mpdはスケジューリングにお任せとしたところ、かなり良い感じです。

    また電圧アップは盲点でした。チャンデバの演算で発熱が多くなるのでギリギリまで電圧を下げることばかり考えてました。

    続きを楽しみにしてます。これからもよろしくお願いします。

    byassi at2017-03-30 21:44

  2. assiさん、こんばんは。
    コメントいただきありがとうございます。
    CPU0の件も、電圧アップの件も、本当に盲点ですよね。私も最初はCPU0を避ける設定にしていましたし、電圧も下げる方向でチューニングしていました。でも、しばらく聞いていると気持ち良さが後退していることに気付き、試行錯誤を経てようやく今の設定に辿り着きました。

    自作ソフトでチャンデバ・マルチアンプとは素晴らしい環境ですね!とても刺激を受けます。
    私の場合、トランスポート(ラズパイ)の設定や電源・振動対策などが固まってくる前は位相が狂ったような聴き疲れする音に悩まされておりまして、タイムアライメントの調整のためにチャンデバソフトを導入しようかと思っていた時期がありました。結果的には、レイテンシの改善で聴き疲れとは無縁の環境となり、チャンデバ導入は未経験の領域です。
    今後も情報交換をよろしくお願いします。

    byパパリウス at2017-03-30 22:49

  3. assiさんは天の川オーディオ研究所のサイトオーナーでしたか!!
    プロフィールを拝見してびっくりしました。
    以前、チャンデバの情報収集をしていたときに目に留まり、大変参考にさせていただきました。
    拙宅には測定環境が整っておらず、耳で判断する場面が多いのですが、体調の変化でも印象が変わることがあるのでチューニングが泥沼に陥ることがあります。assiさんのサイトを拝見し、測定環境を準備したいなと思っておりました。本当に素晴らしいサイトです。

    byパパリウス at2017-03-30 23:26

レスを書く

レスを書くにはログインする必要があります
ログインする