読者です 読者をやめる 読者になる 読者になる

Multimedia Class Scheduler Service (MMCSS) (2)

Vista DirectX

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 との関連は不明