RT-Kernerl などなど

RTーKernel

の詳しい説明は「デジファイのおと」さんのところや「みみず工房」さんのところですね。

その「みみず工房」のyoさんの記事を参考にさせていただき出来たのがこれです。

それぞれのディレクトリにコピーしてください。

boot→/boot    dtbs→/boot/dtbs   modules→/lib/modules

 

/boot/uEnv.txt のカーネルを指定する項目の先頭に#を付けその下に下記を入れてください。

#uname_r=(現在使用中のカーネル)

uname_r=4.8.13-rt6-botic7-rc3

 

設定例 (Jessie版・Ubuntu版・Arch版)

/etc/rc.local

chrt -p -f 99 `pgrep irq/20-49000000`

chrt -f -p 51 `pgrep irq/175-4a10000`

chrt -f -p 51 `pgrep irq/176-4a10000`

chrt -p -f 54 `pgrep irq/161-mmc0`(SDカードの方)

chrt -p -o o `pgrep irq/162-mmc1` (SDカードの方)

#chrt -p -f 54 `pgrep irq/162-mmc1`(eMMCの方)

#chrt -p -o 54 `pgrep irq/161-mmc0 (eMMCの方)

#chrt -f -p 49 `pgrep cifs`     (環境に合わせ下さい)

#chrt -f -p 49 `pgrep nfs`

chrt -p -o 0 `pgrep irq/186-musb-hd`

chrt -p -o 0 `pgrep irq/187-musb-hd`

chrt -p -o 0 `pgrep 53500000.aes-en`(効果があるような…)

chrt -p -o 0 `pgrep irq/26-44e07000`
chrt -p -o 0 `pgrep irq/59-4804c000`
chrt -p -o 0 `pgrep irq/92-481ac000`
chrt -p -o 0 `pgrep irq/125-481ae00`
chrt -p -o 0 `pgrep irq/188-4740000`
chrt -p -o 0 `pgrep irq/170-rtc0`
chrt -p -o 0 `pgrep irq/171-rtc0`
chrt -p -o 0 `pgrep irq/161-mmc`
chrt -p -o 0 `pgrep irq/33-48060000`
chrt -p -o 0 `pgrep irq/182-4803800`
chrt -p -o 0 `pgrep irq/181-4803800`
chrt -p -o 0 `pgrep irq/184-4803c00`
chrt -p -o 0 `pgrep irq/183-4803c00`
chrt -p -o 0 `pgrep irq/185-4831000`
chrt -p -o 0 `pgrep irq/159-44e0b00`
chrt -p -o 0 `pgrep irq/189-tps6521`
chrt -p -o 0 `pgrep irq/160-4802a00`
chrt -p -o 0 `pgrep irq/19-wkup_m3_`
chrt -p -o 0 `pgrep irq/164-wkup_m3`

chrt -p -o 0 `pgrep mpd`

 

/root/selmpd/mpd-rt/mpd.conf

audio_output        priority   “FIFO:55”

realtime_option

main_priority   “OTHER:0”          #”FIFO:51″これも有り?

player_priority “FIFO:52”

decoder_priority “FIFO:53″   (decoder>player>>mainが良いようだ)

 

コマンドラインから指定できますから、/etc/rc.localに書き込む前に音を聴きながら各項目ごとの数値をかえてみたり、それとは別な項目に変えて設定したりしても良いと思います。

cat /proc/interrupts    ps -eo pid,comm,rtprio,pri,priority   などを使い設定する項目を決めていきますが、解説はみみず工房さんのところをご参照してください。

音に関係しそうな項目は上記の他にあると思いますが、上記の数値とその組み合わせだけでも音は変わります。私自身どういうふうにするかはこれからの楽しみです。

正しく設定されたかどうかは以下のコマンドで確認してください。

ps -eLo pid,lwp,rtprio,priority,cmd

 

解説らしきもの

曲を再生しながら cat /proc/interrupts と入力して下さい。

CPU0
16: 10589 INTC 68 Level gp_timer
19: 1 INTC 78 Level wkup_m3_txev
20: 11753 INTC 12 Level 49000000.edma_ccint
22: 73 INTC 14 Level 49000000.edma_ccerrint
26: 0 INTC 96 Level 44e07000.gpio
33: 0 44e07000.gpio 6 Edge 48060000.mmc cd
59: 0 INTC 98 Level 4804c000.gpio

先頭の数字はirq、2番めは割り込み回数、最後はその名前です。

もう1度同じコマンドを入力してみます。

割り込み回数を表示する数字が増えているはずです。増えていないところもあります。増えていないところは起動時とか何かの切替時(PCMとDSDとかサンプリング周波数とか…)のものだと思います。優先レベルを設定するのは、数字の増えているものについて行います。

 

chrt -p -f   優先レベル(1〜99) PID と設定しますが、PID(プロセスID)が分かりません。

pgrep というコマンドで、PIDを表示させます。pgrep irq番号/名前 でPIDが表示されます。

pgrep irq/20-49000000 と入力すると28 と出力されす。(異なる数値になる場合があります)

これは、PID=28ということですから、これをのPIDのところに入れるわけです。

chrt -p -f   優先レベル(1〜99)`pgrep irq/20-49000000`

ところが、irq16/gp_timerはこうやっても設定することが出来ません。

pgrep irq16/gp_timer とコマンドを打っても数字は表示されません。

top -Hと入力して下さい。(文字に色がついて見えにくい場合はzキーを押してください)

下向き矢印を押すと先頭のPIDの欄に4が現れてきます。その列の最後にktimersoftd/0と表示されるはずですので、 pgrep ktimersoftd/0 と入力してみてください。4と表示されます。

ここを設定する場合は、 chrt -p -f 10 `pgrep ktimersoftd/0` とかするわけです。

ps -eo pid,comm,rtprio,pri,ps -eo pid,comm,rtprio,pri,priority と入力すると現在のpriority(優先レベル)の一覧が表示されますから、これも参考にしてください。

私の設定方法

ターゲットの項目を定めます。cat /proc/interrupts で数字の大きい項目(割り込み回数の大きい項目)からのようにするのもいいし、信号の流れを考えて入り口からとか、出口からとかでも構いません。

ターゲットの項目を決め、現在の設定値を確認します。 chrt -p  `irqxx/xxxxx`

pid 65’s current scheduling policy: SCHED_OTHER
pid 65’s current scheduling priority: 0

と表示された場合 chrt -p -o 0 `pgrep irqxx/xxxxx` と設定した場合や/etc/mpd.confのdecoder_priority “OTHER:0” と同じレベルで、chrt -p -f  1 `pgrep irqxx/xxxxx`と設定した場合より低いレベルになります。

次に最大の設定 (chrt -p -f 99  `irqxx/xxxxx`) にして音の変化の有無を調べます。変化のない場合はターゲットから外し、設定を戻します。悪い方に変化した項目も元の設定に戻しておきます。

 

2017.01.19

とりあえずここまで書いて……

2,3日中には完成します。

 

設定の結果などをコメント欄に書いていただけばみなさんの参考になるかと思います。

この項目を入れると効果があるとか、こことそこの数値を入れ替えると良いなどの情報を私にも教えてください。

 

 

 

RT-Kernerl などなど への12件のフィードバック

  1. ytk のコメント:

    kick様、お世話になっております。
    この間、Arch版Boticで大変良い音で聴かせていたき、しばらくはいじらなくても良いくらいの思いでおります。
    ただ別の欲求として、こういう音を出せるものを自分でも作ってみたい、という思いがあります。
    最近は、kickさんの「イメージファイルの作り方(未完)」の記事の手順にしたがってJessie版のBotic
    に挑戦し、やっと音出しができました。
    今後は、できれば、Boticカーネルのコンパイル、Jessie版MPDのコンパイル、Arch版Borticの作成、Arch版MPDのコンパイルなどができるようになりたいと思っています。
    「みみず工房掲示板」などにもそれらについての投稿が見られますが、私のようなレベルの者には大変難しく感じられ、もう少し分かりやすく詳しい説明がほしいと強く感じています。
    ぜひ、私のようなレベルのものにも分かるよう、お教えくださいませんでしょうか。よろしくお願いします。厚かましくてすみません。

  2. suji- のコメント:

    Kickさん本日のRT版の修正有難うございました。
    これでJessie版Ubuntu版ともにRTカーネル版で聞くことできました。
    本日3時間ほど聞いてみました、Kickさんの推奨RT設定+audio_buffer_size “8192”
    buffer_before_play “50%” +sd起動でJessie版Ubuntu版の比較をしてみました。
    ① 共に解像度が高い(バイオリンの絃のと弓の擦れ具合がよりリアルになった)
    ② 低域の張りが出てきている、Ubuntu版は少し丸みが有るかな
    ③ この設定ではJessie版が好み
    ④ audio_buffer_size ,buffer_before_play+RT設定で音は変わりそう
    RTの設定は私にはわからないので、これからのKickさんコメントを待ちます。
    とにかく素晴らしい音が出ています。

    • kick のコメント:

      suji- さん こんばんは
      今年最後の思いつきで先ほどスピーカーケーブルを替えました。数日前友人が持ってきてくれていたものです。ネットワークとスピーカーユニット間なので簡単でした。近所では売っていないし、通販で買うには送料の方が高くつくのでついでの時にでもと思っていましたが、昔買ったやつが出てきたとかでうちに持ってきました。以前から予定していたことですが、暇そうにしていると用事を言いつけられそうなのでアリバイ作りにやってしまいました。数時間前に終わって少し音が落ち着いてきています。

      もしPCM音源を主にお使いであれば、audio_buffer_sizeを384か512にしてみてください。buffer_before_playは10%から5%刻みで30%までか、あるいは100%に設定してみてください。buffer_before_playが少ない場合、音飛び、安定性、切り替えノイズの可能性がありますが音がシャープになってきます。buffer_before_playを100%にするとスライダーで音を進めたり戻したりできなくなると思いますが、それで良ければこれもありです。

      蛇足です。
      SPケーブルですが、シングルコースピーカーや簡単な構成だったらお薦めです。構造、材質が良くて、素線の太さ本数も理想的、よりが弱いので少しだけ鳴きますが、グレードアップも可能でとにかく安い、というものがあります。一度使ってみてください。

      昔、テレビに使っていた300Ωのフィーダー線です。

  3. ca2 のコメント:

    こんにちは。

    jessie版でRTカーネルをkickさんの推奨設定でつかってみました。たしかに設定すると音が違いますね。
    他にsshfsを使ってるのですが、ストレージ用の設定なので、

    chrt -f -p 49 `pgrep sshfs`

    が良いのでしょうか?とりあえず自分はその設定でつかってます。
    polipoを使う時があるんですが、それもとりあえず49にしてます。まだ仕組みを理解しておらず、本来は調べてから聞きくらべて判断することなのでしょうけれども。

    • kick のコメント:

      cs2さん こんばんは
      RTオプションの使い方を2回に分けて非常に簡単に書いている途中です。
      1回めはすぐアップの予定です。
      少々お待ちください。

    • kick のコメント:

      ca2 さん こんばんは
      私はsshfで使っていますが、chrt -f -p 49 `pgrep sshfs`の他に
      chrt -f -p 49 `pgrep ssh`とchrt -f -p 49 `pgrep sshd`も加えてみてください。
      変化がなければそのままでもいいと思います。

    • ca2 のコメント:

      kickさん

      RTオプションの記事と、sshfsのアドバイス有難うございます。その設定にしてみます。

      ところでsshやsshdについてですが、状況によってプロセスが沢山あってpgrep sshd等の値が複数になり、エラーで設定できないことがあるようです。なので、とりあえず
      for i in `pgrep ssh`; do chrt -f -p 49 $i; done
      for i in `pgrep sshd`; do chrt -f -p 49 $i; done
      のようにして全部のプロセスを指定することにしました。

      ちなみに私がsshfsを知ったのはkickさんの以前のコメントを見たためです。便利なものがありますね。

  4. kick のコメント:

    Jessie版Ubuntu版 mpd-rtの設定例(今のところお薦め)

    /etc/rc.local
    chrt -f -p 51 `pgrep irq/175-4a10000`
    chrt -f -p 51 `pgrep irq/176-4a10000`
    #chrt -f -p 49 `pgrep cifs` (環境に合わせ下さい)
    #chrt -f -p 49 `pgrep nfs`
    /root/selmpd/mpd-rt/mpd.conf
    audio_output priority “FIFO:53”
    realtime_option player_priority “FIFO:52”
    PCM専用または主力の場合
    audio_buffer_size “384”
    buffer_before_play “50%”
    この設定だとPCM/DSDの切り替えノイズが出やすいと思います。audio_buffer_sizeは解像度を優先して切り詰めてありますからマイルドな方向がお好きな方は1024,2048,4096と多くしていってみてください。
    DSDをお使いの方は元々の設定のままが良いと思います。
    この設定だと、Jessie版とUbuntu版の音がかなり似てくると思います。Jessie版ではスケースの大きさとマイルドさが加わりますし、Ubuntu版では静かさが増してきます。
    音の出る雰囲気と音色が少しだけ違うように感じます。片方しか知らなければどちらでも非常に高いレベルの満足感を味わえると思いますが、両方を知ってしまうときっと楽しく悩むことになりそうです。
    eMMCのJessie版に上記の設定を行い聴いていますが、こちらに傾きかけています。Ubuntu版をeMMCから起動すればまた評価が変わるかもしれません。
    迷っています。

  5. ytk のコメント:

    お世話になっております。

    「4.8.13-rt6-botic7-rc3.tar.gz」をWindowsパソコンで解凍すると、途中で4回ほど「同じ名前のファイルが同じ場所に存在します。上書きして良いですか?」のようなメッセージが表示されます。
    そのまま「OK」して解凍を済ませ、
    Jessie版Boticの指定された場所へWinSCPでコピーし、/boot/uEnv.txt に
    #uname_r=(現在使用中のカーネル)
    uname_r=4.8.13-rt6-botic7-rc3
    の設定だけして使い始めました。
    問題なく作動しているようでが、これでかまわないでしょうか。

    なお、/etc/rc.local、/root/selmpd/mpd-rt/mpd.confには記述を加えない方が良いように感じ、コメント化してあります。

    • kick のコメント:

      ytk さん おはようございます。
      uname -r で 4.8.13-rt6-botic7-rc3 になっていればOKです。
      /etc/rc.localに書き込む前にコマンドラインからchrt -f -p 51 `pgrep irq/175-4a10000`などと入力し音に変化が確かめてみてください。何の項目が有効か確認することが最初と思います。rc.localの方はその後でも良いと思います。
      少し傾向が分かってきたのでモデルを少しずつか提示していきたいと思います。
      解説の方を私なりに少しずつ加えていきたいと思っていますが、yoさんやyungさんのような理解度が私にはないのでうまく書ける自身は全くありません。

  6. kens のコメント:

    こんばんは

    さっそくRT-Kernelのファイルをいただきました。
    まずはクリスマスプレゼントのubuntu mpd-rt版で記事の通りの設定を行い、問題なく動作することを確認できました。
    設定の内容を理解するのはこれからになります。
    mpd-git版はどのように設定すればよいのかわからなかったので確認していません。
    これから色々勉強させていただきます。

    • kick のコメント:

      kensさん こんばんは
      mpd-git版でも問題なく動くはずです。mpdのaudio_outputセクションの設定を変えても top -H では priority “FIFO:51”に固定されているようにみえるのですがよくわかりません。そのためchrtコマンドでchrt -f -p 51 `pgrep mpd` にやった時何に効いてくるのかみたいなことを調べながら、聴きながらでないとなかなか決めれないのでまだ手を出していません。
      上はUbuntu版の話で、Jessie版になると割り振られているirqの番号が違ってくる可能性がありこちらには全く手を付けれない状態です。
      Boticの場合、USB出力がないので少しは楽です。

      Ubuntu版の場合irq175,176はLanに割り当てられていますが、上の設定ではファイルのマウントの優先度は低くてもいいけれどその時はLanの方の優先度が高いほうが良いよ。ということです。これもバッファーを多くして音切れがなければLanの優先度を下げたほうが良いといったこともあるのです。ただこれらは聴いてみないと判断ができません。
      適当に設定しても非常に高音質と思います。楽しみはゆっくり進めたほうがより楽しめる気がします。

kick へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA