Il Multimedia Class Scheduler di Windows Vista

Windows Vista

Chiunque segua un po’ il mondo dell’informatica conosce bene che l’impressione globale a seguito del lancio di Windows Vista non è stata di certo quella di un sistema operativo accolto di buon grado. Notevoli, infatti, sono state le critiche più o meno condivisibili effettuate in merito ai problemi di compatibilità, di performance con hardware non recentissimo, ecc…

Come spesso accade in situazioni simili, quello che di buono è stato introdotto di fatto è passato in secondo piano. Tuttavia oggi, a oltre due anni dalla sua introduzione, a mente fresca, possiamo analizzare una delle più interessanti, almeno ai fini multimediali, funzionalità che Microsoft ha implementato in Windows Vista e che sarà presente anche nell’ormai imminente, e a prima vista destinato a miglior sorte, Windows 7: il Multimedia Class Scheduler.

Nell’ambito del processo di reingegnerizzazione che hanno subito il kernel e le componenti principali di Windows con l’avvento di Vista, Microsoft ha pensato bene di rivedere globalmente il thread scheduler e, in aggiunta, di fornire uno speciale servizio dedicato allo scheduling delle operazioni multimediali.

Tutte le versioni di Windows basate su kernel NT integrano un sistema di monitoraggio dei cicli di clock spesi dal processore su ogni thread. Tale sistema effettua ad intervalli regolari di tempo (dai 10 ai 15 ms) un polling, cioè essenzialmente interrompe l’esecuzione del thread in corso prendendo nota del suo ID, informazione successivamente utilizzata per dedurre statisticamente su quali thread spende la maggioranza del tempo il processore.

Il problema di questo approccio è che se l’intervallo di tempo destinato a quel thread non è sufficientemente lungo, l’interruzione dovuta al polling potrebbe rubargli buona parte del tempo che lo scheduler gli ha assegnato, rendendo di fatto nulla l’esecuzione del thread per quello specifico intervallo di tempo. In altre parole il sistema di monitoraggio assume che tutti i thread interrotti dal processo di polling abbiano consumato completamente il tempo a loro assegnato dallo scheduler, non considerando, ad esempio, il caso in cui l’interruzione avviene all’inizio dell’intervallo di tempo concesso.

Naturalmente una stima siffatta è sufficiente per i programmi di diagnostica che mostrano approssimatamente quanto tempo spende il processore su ogni thread, ma può risultare essere a dir poco grossolana se viene utilizzata dal thread scheduler stesso per prendere decisioni sui cicli di clock da destinare ad ogni thread.

E’ per questo motivo che Windows Vista e , conseguentemente, Windows 7, introducono un nuovo meccanismo che recupera in un ciclo di clock le informazioni relative al tempo speso dalla CPU su ogni thread usando i registri dei più recenti processori destinati a questa mansione. Inoltre il nuovo thread scheduler, nel caso in cui un thread dovesse essere interrotto per quel ciclo di clock, ne tiene conto al fine di prevedere per quello specifico thread un ciclo di clock addizionale e, conseguentemente, di evitare che il thread campionato sia penalizzato.

Dei miglioramenti appena descritti ne traggono beneficio tutte le applicazioni che girano su Windows Vista, ma specificatamente per le applicazioni multimediali Microsoft ha deciso di mettere a punto un nuovo servizio chiamato Multimedia Class Scheduler Service (MCSS).

Basandosi sull’assunzione che la fruizione di contenuti multimediali come flussi audio e video, pone come caratteristica vitale la fluidità della riproduzione, il MCSS dispone di una serie di categorie che definiscono l’uso che il sistema operativo deve fare della CPU e della GPU sulla base della tipologia di elaborazione da effettuare: riproduzione audio, riproduzione video, cattura video, registrazione audio, videogames, ecc… Tali impostazioni sono presenti nel registro di configurazione di Windows e possono essere arricchite anche da tool esterni al sistema operativo.

Ogni volta che un’applicazione multimediale richiede un thread a scopo multimediale, il MCSS, che a sua volta lavora in un thread ad elevatissima priorità, crea un nuovo thread sulla base della classificazione effettuata nel registro di configurazione. In questo modo lo scheduling dei thread destinati alle applicazioni multimediali viene ottimizzato sulla base della natura dell’applicazione stessa.

Purtroppo il risvolto della medaglia legato all’uso del MCSS è che, ottenendo thread con maggiore priorità, necessariamente le risorse destinate alle altre componenti del sistema operativo vengono ridimensionate. In particolare, prima del rilascio del Service Pack 1, è stato osservato che una delle cause delle altalenanti performance di Windows Vista nel networking è proprio l’uso del MCSS. In particolare il calo delle prestazioni  è apprezzabile nelle reti LAN ad 1 Gb e per quanto concerne il traffico in download. Per risolvere questo problema Microsoft ha rivisto la politica di bilanciamento di carico tra networking e MCSS, rendendola anche configurabile a partire dal Service Pack 1 di Windows Vista.

Ecco un esempio di nuove funzionalità introdotte in Windows Vista che, pur rappresentando un indubbio passo in avanti rispetto ai precedenti Windows, danno ragione a coloro che aspettano il rilascio del primo Service Pack prima di cimentarsi nell’installazione di un sistema operativo radicalmente rinnovato come è stato Windows Vista rispetto al suo predecessore.

Press ESC to close