プロセスの優先度(追記)

「Win32PrioritySeparation」の設定は「CPU占有時間比率」「占有時間の可変」「スレッド切り替え間隔」の3項目についてもう少し詳しく設定できるようです。詳しくは以下の通りです。

意味 ビット位置 データ 設定の意味
CPU占有時間比率 1-2 00 フォアグラウンド:バックグラウンド=1:1
CPU占有時間比率 1-2 01 フォアグラウンド:バックグラウンド=2:1
CPU占有時間比率 1-2 10 フォアグラウンド:バックグラウンド=3:1
占有時間の可変 3-4 00 デフォルト
占有時間の可変 3-4 01 可変(Professional/Homeのデフォルト)
占有時間の可変 3-4 10 固定(Serverのデフォルト)
スレッド切り替え間隔 5-6 00 デフォルト
スレッド切り替え間隔 5-6 01 長い
スレッド切り替え間隔 5-6 10 短い



さて、基本的な考え方ですが、CPUに十分な余裕があるのならば、あえてプログラムに優先権を与えなくても不都合が起こるわけではないので、それならばシステム全体の処理量(スループット)をあげるのがベターだと考えられます。さらに、PCオーディオにおいては、音楽再生のために実行中のプロセスを途中で明け渡して他のプロセスが実行される事を極力少なくすることが何よりも重要ではないかと考えられます。例えば、explorer.exeを殺すと劇的に音質が改善するのは(全くの私見ですが)、おそらくはこのシェルを介して様々なプロセスが実行されるからではないでしょうか。

このようなプロセスの明け渡しが発生すると、いわゆる「コンテキストスイッチ」が発生します。

一般的にコンテキストスイッチが発生すると、実行中のプロセスの状態を何らかの方法で保存し、後にそのプロセスを再開する際にその状態を復元して、正常に実行を継続できるようにしなければなりません。もちろん、マルチタスクのOSではコンテキストスイッチが発生することは当然のことですが、あまりにも頻繁に発生するとシステムへの負荷が大きくなりパフォーマンスの低下につながります。特に、音楽を再生中に音楽再生のためのプロセスが頻繁に明け渡しを求められるというのは精神衛生的によろしくありません。

そう考えますと、やはりこの設定はスレッドの切り替え時間は長く(01)、占有時間の可変もServerのデフォルトで固定にし(10)、CPUの占有時間比率は1:1(00)というのがCPUに余裕のあるシステムでは一つの解になるかと思われます。

この設定は、01(5-6ビット)10(3-4ビット)00(1-2ビット)を指定すればいいので、011000(2進数)24(10進数)を入力します。(調べてみたら、コンパネからバックグラウンド優先にしたのが「24」でした。)

ただ、トランスポートとしてのPCを構築するときに、高性能のCPUやメモリは無駄な足枷となってマイナスにしかならないという説もあります。高性能なCPUは無駄に電力を消費し、メモリを何本も差すのはノイズを拾うだけだという説です。ですから、CPUやメモリはシステムが動くギリギリの状態にした方がベターだというのです。

真偽のほどは確認していないので分かりませんが、もしもその様なシステムならば、確かにプログラムを優先にした方がベターなのかもしれません。最近のこの業界では音質を決定する重要な項目として電源周りのことが語られます。私は、残念ながらそこまでは踏み込んではいないので迂闊なことは言えないのですが、おそらくはCPUの頻繁な明け渡しが発生するデメリットと、電源周りのメリットを天秤にかけることになるんだと思います。

ただし、explorer.exeを殺した時のメリットを考えると、それほど判断は簡単ではないと思われます。

なお、私の場合のシステムは余裕があるほどに余裕がありますので、「Win32PrioritySeparation」の設定値を「24」として、再生ソフトの優先度を「高」に設定するのがベターという、ありきたりの結論に到達しました。もっとも、落ち着いた結論は同じでも、検証なしに頭から信じ込むのと、まずは疑って考えられる限りの検証を実施してからそれがベターだと判断するのではずいぶん違うはずです。

と、ここまで書いてきて、一つアイデアが湧いてきました。・・・これぞ、疑ってみた「幸せ」?

音楽再生のプロセスに一番割り込んでくるのはおそらくはシェルだろうと思います。それなら、それぞれ別のCPUに割り当てると「幸せ」になれるのではないか、という思いつきです。やり方は簡単で、タスクマネージャーを起ち上げて、目的のプロセスを右クリックして「関係の設定」を選びます。すると、次のような画面が起動します。

cpu

ここで、どのCPUを使ってプロセスを実行できるかが選べます。普通は上記のように両方にチェックが入っているのですが、音楽再生用のプロセスとシェルのプロセスを別々のCPUに割り当てておけば音楽を再生している途中でいらぬ割り込みを阻止できるのではないか、と考えた次第です。

これこそ、一銭もかからぬトライですから、早速に設定を変更して何曲か聞いてみました。結果は間違いなく音質向上に寄与しているように思えます。それも、かなりはっきりと確認できるほどの向上のように聞こえます。ただし、PCのこのあたりのことについては全くの素人ですから、全くの見当違いかもしれません。それでも、間違いなく音質は変化します。ホントにPCオーディオの世界は奥が深いようです。


5 comments for “プロセスの優先度(追記)

  1. air
    2009年5月7日 at 9:14 AM

    初めてコメントしますー。よろしくです。

    >例えば、explorer.exeを殺すと劇的に音質が改善するのは
    >(全くの私見ですが)、おそらくはこのシェルを介して様々なプロセスが
    >実行されるからではないでしょうか。

    その通りというか、そのまんまですね。
    タスクマネージャで表示→列の表示→「スレッド」にチェックしてみると各プロセスの処理スレッド数がわかりますが、
    explorer.exeはSystemプロセスに次ぐ数のスレッドを処理しています。(環境によっては違うでしょうが、PCトラポとしてカスタマイズされているPCならまず間違いなく)
    なので、explorer.exeを殺せばCPUはこのスレッド処理(うちの環境では約25スレッド)をこなさずに済むようになるわけで、
    結果割り込みも激減しますし、音質も改善するわけですよね。

    それに関連してマルチCPUにおける関係の設定では
    再生ソフトを例えばCPU1のみに指定し、explorer.exe
    をCPU0のみに指定する、だけでも大分改善されますね。

    以前からブログは読ませて頂いてましたが
    PCオーディオ専用ブログを開設されたことは素晴らしいと思います。
    これからも頑張って下さい。

  2. air
    2009年5月7日 at 9:18 AM

    すみません、誤表記しました
    タスクマネージャで表示→列の表示は
    タスクマネージャで表示→「列の選択」です。

  3. ユング君
    2009年5月7日 at 7:46 PM

    >それに関連してマルチCPUにおける関係の設定では
    再生ソフトを例えばCPU1のみに指定し、explorer.exe
    をCPU0のみに指定する、だけでも大分改善されますね。

    素人考えなのでいまいち確信が持てなかったのですが、こういうフォローをいただくと少しは自信が出てきます。
    確かにシェルをキルすればいいのですが、やはり不便です。そこで、最近はexplorer.exeを別のシェル(blackbox.exe)に置き換えているのですが、それでも結構悪さをするようです。

    でも、こうなってくると、誰か音楽再生に特化したOSを作ってくれないかな・・・なんて思ってしまいます。

  4. クマノミ
    2010年2月27日 at 3:23 PM

    こんにちは いつも拝見させていただいております。

    この記事を読んでプロセッサの関係を自分も設定を試みました。
    結果は上々なようです。例えるならコンサートホールのBからS席に移動したような感じです。
    ですが、PCを再起動したり、一回シャットダウンするとまた戻ってしまうようですね。
    ここらへんのところ、レジストリの書き換えで設定を保持できないですかね??
    自分もまだ調査中です。
    ではまた ノシ

  5. クマノミ
    2010年2月27日 at 5:19 PM

    再度失礼いたします
    CPUの関係の設定について探したところ、レジストリではありませんが、CPUのの関係を設定できる便利なアプリを発見しました。
    それは CPU Dynamic Assign Helper  です。
    これはCPUの関係の設定を半自動的に設定できるヤツで結構昔からあるみたいです。
    早速使ってみたところ、タスクマネージャに表示される全てのプロセスを設定できませんが、大半のそれはできるみたいです。
    ユングさんも使ってみてはいかがでしょうか?

    駄文失礼しました

Comments are closed.