Skip to main content
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.

ValueFormatPossible values
AffinityREG_DWORDA bitmask that indicates the processor affinity. Both 0x00 and 0xFFFFFFFF indicate that processor affinity is not used.
Background OnlyREG_SZIndicates 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.
BackgroundPriorityREG_DWORDThe background priority. The range of values is 1-8.
Clock RateREG_DWORDA 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 PriorityREG_DWORDThe GPU priority. The range of values is 0-31. This priority is not yet used.
PriorityREG_DWORDThe 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 CategoryREG_SZThe scheduling category. This value can be set to High, Medium, or Low.
SFIO PriorityREG_SZThe 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.

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