Windows TIPS
[System Environment]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

起動するプログラムの優先度を変更する方法(1)

デジタルアドバンテージ
2001/03/09

 Windows 2000はマルチタスクをサポートしたOSであり、同時に複数のプログラム(プロセス)を実行することができる。しかし実際には1つしかないCPUで複数のプログラムを実行するために、CPU時間を非常に短い単位時間に切り分け、単位時間ごとに各プロセスを切り替えて、(見かけ上の)マルチタスクを実現している。このあたりの詳細については、特集「Windows 9x or Windows 2000?」の「5.プロセス管理の概要」が詳しいので参照されたい。簡単にまとめておくと、「プロセス」の中には(1つ以上の)「スレッド」という実行単位があり(各CPU上で実際に実行されるのは「スレッド」である)、プロセスやスレッドに与えられた優先度に応じて、スレッドにCPU時間を適宜割り当て、それらを切り替えながら実行している、ということである。

 Windows 2000では、実行するプログラムごとに『プロセスの優先度クラス』が決められている。ユーザーがエクスプローラの[スタート]メニューから起動するプログラムは、一般的に「通常」というクラスで起動されることになっている(他に「リアルタイム」、「高」、「アイドル」クラスがある)。そしてプロセス中の各スレッドにも、それぞれ優先度が付けられている。以下に、通常クラスのプロセスにおける、スレッドの基本実行優先度を示しておく。

スレッドの優先度の指定
基本優先度
リアルタイム
24
13
通常以上
10
通常
8
通常以下
6
4
「通常」クラスのプロセスにおけるスレッドの基本優先度
ユーザーが起動するプロセスは「通常」クラスに属する(他に「リアルタイム」、「高」、「アイドル」クラスがある)。プロセスの中には(複数の)スレッドがあり、各スレッドごとに「優先度」が決まっている。優先度は0〜31の数値で決められ、数値が大きくなるほど優先度が高くなる。優先度をまったく指定しないでアプリケーションを起動すると、デフォルトでは「通常」クラス プロセスの「通常」優先度でスレッドが起動されるので、スレッドの優先度は「8」となる。ただし場合によってはこの値はいくらか増減する。

 このスレッドの優先度は基本的な値であり、実際には「プライオリティ・ブースト/クォンタム・ブースト」と呼ばれる一時的な優先度の増加措置(GUI操作や入出力処理の完了したスレッドの優先度を一時的に上げること。これによりシステムの応答性が向上する。詳細については、前出の記事中の「9.Windows 2000のプロセス管理メカニズム(2)」や、Knowledge Baseの「Description of Performance Options in Windows 2000」などを参照)や、スレッドのスケジューリングの都合など(例えば、長い間実行されないままの低優先度のスレッドに対して、一時的に優先度を上げてCPU時間を強制的に割り当てたりする)によって、いくらか増減させられる。

 以上のような事情により、同じクラス・レベルで起動されたプログラムが複数存在していると、場合によっては優先度が下がって、CPU時間が割り当てられなくなる事態が発生する可能性がある。

 一般的には、優先度が少々低下してプログラムの実行が待たされたとしてもほとんど問題はないが、リアルタイム性を重視したアプリケーションでは、このようなタスクスケジューリングによって、深刻な影響を受けることがある。一般的なユーザー環境でこのような影響を受ける可能性のあるソフトウェアとしては、マルチメディア系のアプリケーションなどが該当するだろう。例えばビデオ・キャプチャ・ソフトウェアやCD-R/RWの書き込みソフトウェア、音楽向けシーケンサ・ソフトウェアなどが挙げられる。もちろんこれらのソフトウェアでは、いちばんクリティカルなデータを扱う部分のスレッドは、優先度をデフォルトよりも高くして他のプロセスの影響を受けないようになっているだろうが、システムの性能や他のプログラムの利用状態などによっては、それらの影響を受けて、処理の遅れを生じる可能性がある。

 例えば以下に示すのは、InfoMagic社が販売しているビデオ・キャプチャ・ソフトウェアWinDVR ARENAを利用して、TV番組をキャプチャしているところである。キャプチャ・カードは、アイ・オー・データ機器が販売しているGV-BCTV4/PCIを使用している(WinDVRは録画をするためのソフトウェアであり、別途キャプチャ用のハードウェアを用意する必要がある。キャプチャ・ハードウェアとセットにしたWinDVR ARENA MAXという製品もある)。ここではキャプチャ中にわざといくつかのアプリケーション(エクスプローラやInternet Explorer、ビデオ編集ソフトウェアなど)を起動して、使用してみた。

ビデオ・キャプチャ中のWinDVR ARENA
InfoMagic社が販売しているソフトウェア・エンコード方式のビデオ・キャプチャ・アプリケーションWinDVR ARENAを使って、TV番組をキャプチャしているところ。キャプチャ・カードは、アイ・オー・データ機器GV-BCTV4/PCIに、Windows 2000用のWDMドライバを組み合わせて使用している。ここではキャプチャ中にわざといくつかのアプリケーション(エクスプローラやInternet Explorer、ビデオ編集ソフトウェアなど)を起動して使用してみた(通常はこのような使い方はタブーとされている)。「キャプチャ」が実際にキャプチャしたフレームの数、「ドロップフレーム」がキャプチャが間に合わなくなって、失敗したフレームの数である。CPUの負荷は平均では50%程度なのに、5%弱のフレームがドロップしてしまっている(もちろん、このような使い方をしなければほとんどドロップすることはない)。
  キャプチャ中のTV画面ウィンドウ。
  352×240ドット、29.97frame/sで、ビットレート2Mbits/sのMPEG-1形式でキャプチャ中。
  キャプチャの状態。WinDVRでは、マウスをここに置くと、現在のキャプチャの状態がポップアップ表示される。
  キャプチャ中のCPUの負荷は50%程度。CPUはPentium-III、800MHzである。赤い部分(カーネル時間)が少ないことからも分かるように、実際の負荷はすべてアプリケーション(WinDVR)内でのMPEG-1へのエンコードのために消費されているようである。

 この画面から分かるように、キャプチャに要するCPUパワーそのものは大体50%程度であり(この値は使用するシステムや解像度、ビット・レート、画質設定などに大きく依存する)、システム的にはまだ十分余裕がある。しかしこの場合は、キャプチャ中にエクスプローラやInternet Explorer、ビデオ編集ソフトウェアなどを起動して使用したため、5%弱のフレームがドロップ(キャプチャが間に合わなくなって、スキップされてしまうこと)してしまっている(もちろん、このような使い方をしなければほとんどドロップすることはない)。

 このWinDVRというプログラムは、1つのプロセス内に10数本のスレッドが走っているマルチスレッド・アプリケーションであり、キャプチャに必要なスレッドだけは内部で優先度を引き上げるように作られている。しかしメインのスレッドを含むいくつかのスレッドは優先度が起動時のままなので、他のプロセスの優先度が高くなってくると、その影響を受けてしまって、最終的にはキャプチャをするスレッドの実行が滞ってしまうようである(キャプチャ・スレッドの優先度だけが高くても、プログラムの作り方によっては、その他のGUIやファイルの入出力部分などがボトルネックとなってしまう可能性がある)。

プログラムの優先度を高くしてフレームのドロップを防ぐ

 このような状況を改善するには、キャプチャ中には他のアプリケーションをいっさい使用しないというのが一般的に推奨されている方法である。しかしこの場合は、システム的にはまだ余裕があるにもかかわらずフレームがドロップしている。いくら他のアプリケーションを使わないようにしていても、何らかの理由で他のプロセスの負荷が高くなってしまうと(例えばネットワーク関係のサービスなどがバックグラウンドで稼動したりすると)、突発的にドロップが発生する可能性がある。

 この問題に対する最も根本的な解決方法は、他のプロセスよりもキャプチャ・ソフトウェアの優先度を上げて([通常]から[通常以上]か[高]にする)、影響を受けないようすることであろう(優先度というものは、このような目的のために用意されているのだから)。これを簡単に実行するには、タスクマネージャの[プロセス]タブに表示されているWinDVRのプロセスを右クリックして、ポップアップ・メニューから[優先度の設定]−[高]([通常以上]でもよいが、より確実にするためには[高]が望ましい)を選択する。これにより、WinDVRの基本優先度が高くなり、エクスプローラやInternet Explorer、ビデオ編集ソフトウェアなどを使用してもドロップはほとんど起こらなくなった。ただし、激しいディスク・スワップを起こさせたり、ネットワークに高負荷をかけるような使い方をすると、さすがにいくらかのフレームがドロップするので(デバイスの割り込み処理などは最優先で実行されるし、もともと高い優先度で実行されているシステム・サービスも多いから)、いくらでもアプリケーションを起動できるわけではないが、キャプチャだからといって特に神経質になる必要はなくなるだろう(さすがにCD-R/RWライティング・ソフトウェアなどとの併用は避けたほうがよいだろうが)。

タスクマネージャを使ってプログラムの優先度を高くする
プロセスの基本優先度を上げるには、タスクマネージャを使用する。[プロセス]タブでプロセスを表示させ、目的のプロセス名を右クリックして、[優先度の設定]から[高]を選択する。アプリケーション名から実際のプロセス名を選択するには、「TIPS:アプリケーションに対応するプロセスを素早く発見する方法」を参照していただきたい。
  プロセス名を右クリックして、[優先度の設定]を選ぶ。
  選択できる優先度。ここでは[高]を選択する。

 実際に優先度が高くなっているかどうかを確認するには、やはりタスクマネージャを使用する。タスクマネージャの[プロセス]タブを表示した状態で、[表示]メニューから[列の選択]を選び、[基本優先度]のチェックボックスをオンにする。すると各プロセスの優先度が表示されるようになる。ただしこれで表示されるのは、各プロセスの基本優先度のみであり、個々のスレッドごとの実際の優先度(0〜31の数値)ではない。これらを調べるには、Windows 2000リソースキットに含まれる「pstat.exe」コマンドなどを使用する必要がある。

プロセスの基本優先度の確認
タスクマネージャ[プロセス]タブを表示した状態で、[表示]メニューから[列の選択]を選び、[基本優先度]のチェックボックスをオンにする。
  選択できる表示項目の一覧。
  デフォルトの表示項目。
  スレッドの基本優先度を表示させるには、これを選択する。

 なおこのプロセスの優先度の問題は、本来ならばアプリケーション・ソフトウェア側で対応すべき種類のものであり、WinDVRの将来のバージョンでは(各スレッドの優先度が高くなるように)修正されるかもしれないが、ここでは、リアルタイム性の高いアプリケーションにおける、優先度に起因する問題に対する一般的な対処方法として取り上げているので、あらかじめご了承いただきたい。

 また、この手法はもともとCPU負荷が100%に満たないケースについてのみ適用できる方法であることに注意していただきたい。CPUパワーを100%消費するようなアプリケーションの優先度をいくら上げても何ら効果はないし(それ以上速度は向上しない)、他のプロセスがまったく動作できなくなるので、システムがまるでハングアップしたような状態になる可能性がある。

関連記事(Windows Server Insider)
Windows TIPS:仮想マシンの実行優先度を調整する(Virtual PC 2004編)
Windows TIPS:仮想マシンの実行優先度を調整する(Virtual Server 2005編)
Windows TIPS:仮想マシンの終了方法を理解する(Virtual Server 2005編)
Windows TIPS:起動するプログラムの優先度を変更する方法
Windows TIPS:Virtual PCの仮想マシンへのショートカットを素早く作成する
Windows TIPS:仮想ハードディスクのデフラグに注意
Windows TIPS:仮想ハードディスクを圧縮する(Virtual PC 2004編)
Windows TIPS:仮想ハードディスクを圧縮する(Virtual Server 2005 R2編)
  Windows TIPS:アプリケーションに対応するプロセスを素早く発見する方法
製品レビュー:デスクトップOSのマイグレーションを支援するVirtual PC 2004
製品レビュー:サーバ・システムの統合/マイグレーションを推進するVirtual Server 2005
  特集:Windows 9x or Windows 2000?
  連載:Windows 2000 コマンドライン徹底活用
     
  関連リンク
  Description of Performance Options in Windows 2000Microsoft
  WinDVR ARENAWinDVR ARENA MAXInfoMagic
  GV-BCTV4/PCIアイ・オー・データ機器
     
この記事と関連性の高い別のWindows TIPS
仮想マシンの実行優先度を調整する(Virtual PC 2004編)
これだけは覚えておきたい、コマンド・プロンプトの使い方
負荷の大きいプロセスを特定する方法
アプリケーションに対応するプロセスを素早く発見する方法
一時的にほかのユーザー権限でプログラムを実行する方法(ショートカットのプロパティを利用する方法)
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

 

 INDEX
  起動するプログラムの優先度を変更する方法(1)
    起動するプログラムの優先度を変更する方法(2)
 
「Windows TIPS」

TechTargetジャパン

Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ

- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る
- PR -

ホワイトペーパーTechTargetジャパン

ソリューションFLASH

「ITmedia マーケティング」新着記事

TAGGY、中小ECショップ向けレコメンド広告「おもてなしバナー for FutureShop2」の提供を開始
ディスプレイ広告の最適化サービスを手掛けるTAGGYは12月19日、フューチャーショップのAS...

見えない顧客を育てるプラットフォーム、トライアックスが開発
トライアックスは12月18日、中長期の顧客育成を支援するコミュニケーション マネジメント...

ハイブリス、小売業オムニチャネルに関する調査結果を発表
コマース・プラットフォーム・プロバイダである独ハイブリスソフトウェア(an SAP Compan...