Multimedia Class Scheduler Service (MMCSS) (2)
Multimedia Class Scheduler Service は,プライオリティの低いタスクを邪魔することなくリアルタイム指向のタスクを実行するための仕組みで,google:Windows Audio Video Excellence (WAVE) に関連して Windows Vista で導入されました.
従来の Win32 スレッドがスレッド優先度を直接設定していたのに対し,MMCSS は事前に典型的なタスクの種類を定義し,大まかにはそのタスクを選択することで適切な優先度を設定するという方式をとります.また,低優先度タスクのために最低 10% (デフォルトでは 20%) の CPU 時間が確保されています.
タスクには GPU の優先度など,従来にはなかった優先度も設定可能になっています*1.
設定可能なタスクはレジストリの HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\Tasks 以下に定義され,事前定義されているタスクは以下の通りです.
Task Name | Scheduling Category | SFIO Priority | Background Only | Priority | Background Priority | Clock Rate | GPU Priority | Affinity |
---|---|---|---|---|---|---|---|---|
Audio | Medium | Normal | True | 6 | 10000 | 8 | 0 | |
Capture | Medium | Normal | True | 5 | 10000 | 8 | 0 | |
Distribution | Medium | Normal | True | 4 | 10000 | 8 | 0 | |
Games | Medium | Normal | False | 2 | 10000 | 8 | 0 | |
Playback | Medium | Normal | False | 3 | 4 | 10000 | 8 | 0 |
Pro Audio | High | Normal | False | 1 | 10000 | 8 | 0 | |
Window Manager | Medium | Normal | True | 5 | 10000 | 8 | 0 |
また,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\SystemResponsiveness には低優先度スレッドに予約する CPU リソースを % 単位で指定します.この値は 10% 単位で丸められ,10% 以下は 10% と扱われます.
*1:IDirect3DDevice9Ex::SetGPUThreadPriority との関連は不明