Multimedia Class Scheduler Service

The Multimedia Class Scheduler service (MMCSS) enables multimedia applications to ensure that their time-sensitive processing receives prioritized access to CPU resources. This service enables multimedia applications to utilize as much of the CPU as possible without denying CPU resources to lower-priority applications.

MMCSS uses information stored in the registry to identify supported tasks and determine the relative priority of threads performing these tasks. Each thread that is performing work related to a particular task calls the AvSetMmMaxThreadCharacteristics or AvSetMmThreadCharacteristics function to inform MMCSS that it is working on that task.

For an example of a program that uses MMCSS, see Exclusive-Mode Streams.

Windows Server 2003 and Windows XP: MMCSS is not available.

Registry Settings

The MMCSS settings are stored in the following registry key:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile

This key contains a REG_DWORD value named SystemResponsiveness that determines the percentage of CPU resources that should be guaranteed to low-priority tasks. For example, if this value is 20, then 20% of CPU resources are reserved for low-priority tasks. Note that values that are not evenly divisible by 10 are rounded up to the nearest multiple of 10. A value of 0 is also treated as 10.

The key also contains a subkey named Tasks that contains the list of tasks. By default, Windows supports the following tasks:

  • Audio
  • Capture
  • Distribution
  • Games
  • Playback
  • Pro Audio
  • Window Manager

OEMs can add additional tasks as required.

Each task key contains the following set of values that represent characteristics to be applied to threads that are associated with the task.

Value Format Possible values
Affinity REG_DWORD A bitmask that indicates the processor affinity. Both 0x00 and 0xFFFFFFFF indicate that processor affinity is not used.
Background Only REG_SZ Indicates whether this is a background task (no user interface). The threads of a background task do not change because of a change in window focus. This value can be set to True or False.
BackgroundPriority REG_DWORD The background priority. The range of values is 1-8.
Clock Rate REG_DWORD A hint used by MMCSS to determine the granularity of processor resource scheduling.Windows Server 2008 and Windows Vista: The maximum guaranteed clock rate the system uses if a thread joins this task, in 100-nanosecond intervals. Starting with Windows 7 and Windows Server 2008 R2, this guarantee was removed to reduce system power consumption.
GPU Priority REG_DWORD The GPU priority. The range of values is 0-31. This priority is not yet used.
Priority REG_DWORD The task priority. The range of values is 1 (low) to 8 (high).For tasks with a Scheduling Category of High, this value is always treated as 2.
Scheduling Category REG_SZ The scheduling category. This value can be set to High, Medium, or Low.
SFIO Priority REG_SZ The scheduled I/O priority. This value can be set to Idle, Low, Normal, or High. This value is not used.

 

Note

To conserve power, applications should not set the resolution of the system-wide timer to a small value unless absolutely necessary. For more information, see Performance in the Windows 7 Developers Guide.

 

Thread Priorities

The MMCSS boosts the priority of threads that are working on high-priority multimedia tasks.

MMCSS determines the priority of a thread using the following factors:

  • The base priority of the task.
  • The Priority parameter of the AvSetMmThreadPriority function.
  • Whether the application is in the foreground.
  • How much CPU time is being consumed by the threads in each category.

MMCSS sets the priority of client threads depending on their scheduling category.

Category Priority Description
High 23-26 These threads run at a thread priority that is lower than only certain system-level tasks. This category is designed for Pro Audio tasks.
Medium 16-22 These threads are part of the application that is in the foreground.
Low 8-15 This category contains the remainder of the threads. They are guaranteed a minimum percentage of the CPU resources if required.
1-7 These threads have used their quota of CPU resource. They can continue to run if no low-priority threads are ready to run.