多媒体类计划程序服务
多媒体类计划程序服务(MMCSS)使多媒体应用程序能够确保其时间敏感处理接收对 CPU 资源的优先访问。 此服务使多媒体应用程序能够尽可能多地利用 CPU,而不会拒绝 CPU 资源到优先级较低的应用程序。
MMCSS 使用注册表中存储的信息来标识支持的任务,并确定执行这些任务的线程的相对优先级。 执行与特定任务相关的工作的每个线程都会调用 AvSetMmMaxThreadCharacteristics 或 AvSetMmThreadCharacteristics 函数来通知 MMCSS 它正在处理该任务。
有关使用 MMCSS 的程序的示例,请参阅 Exclusive-Mode 流。
Windows Server 2003 和 Windows XP: MMCSS 不可用。
注册表设置
MMCSS 设置存储在以下注册表项中:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile
此键包含名为 SystemResponsiveness 的REG_DWORD 值,该值确定应保证为低优先级任务的 CPU 资源的百分比。 例如,如果此值为 20,则为低优先级任务保留 20% CPU 资源。 请注意,不均匀地被 10 分隔的值向上舍入为最接近的 10 的倍数。 值 0 也被视为 10。
该键还包含一个名为 Tasks 的子项,其中包含任务列表。 默认情况下,Windows 支持以下任务:
- 音频
- 捕获
- 分发
- 游戏
- 播放
- Pro Audio
- 窗口管理器
OEM 可以根据需要添加其他任务。
每个任务键包含以下一组值,这些值表示要应用于与任务关联的线程的特征。
价值 | 格式 | 可能的值 |
---|---|---|
相关性 | REG_DWORD | 指示处理器相关性的位掩码。 0x00和0xFFFFFFFF都表示未使用处理器相关性。 |
仅 背景 | REG_SZ | 指示此任务是否为后台任务(无用户界面)。 由于窗口焦点发生更改,后台任务的线程不会更改。 此值可以设置为 True 或 False。 |
BackgroundPriority | REG_DWORD | 后台优先级。 值的范围为 1-8。 |
时钟速率 | REG_DWORD | MMCSS 用于确定处理器资源计划的粒度的提示。Windows Server 2008 和 Windows Vista: 如果线程以 100 纳秒间隔联接此任务,则系统使用的最大保证时钟速率。 从 Windows 7 和 Windows Server 2008 R2 开始,已删除此保证以减少系统能耗。 |
GPU 优先级 | REG_DWORD | GPU 优先级。 值的范围为 0-31。 尚未使用此优先级。 |
优先级 | REG_DWORD | 任务优先级。 值的范围是 1(低)到 8(高)。对于具有“高”计划类别 的任务,此值始终被视为 2。 |
计划类别 | REG_SZ | 计划类别。 此值可以设置为“高”、“中”或“低”。 |
SFIO 优先级 | REG_SZ | 计划的 I/O 优先级。 此值可设置为“空闲”、“低”、“正常”或“高”。 不使用此值。 |
注意
为了节省电源,除非绝对必要,否则应用程序不应将系统范围的计时器的分辨率设置为小值。 有关详细信息,请参阅 Windows 7 开发人员指南中的 性能。
线程优先级
MMCSS 可提升处理高优先级多媒体任务的线程的优先级。
MMCSS 使用以下因素确定线程的优先级:
- 任务的基本优先级。
- AvSetMmThreadPriority 函数的 Priority 参数。
- 应用程序是否处于前台。
- 每个类别中的线程消耗了多少 CPU 时间。
MMCSS 根据客户端线程的计划类别设置客户端线程的优先级。
类别 | 优先权 | 描述 |
---|---|---|
高 | 23-26 | 这些线程以低于某些系统级任务的线程优先级运行。 此类别专为专业音频任务而设计。 |
中等 | 16-22 | 这些线程是前台的应用程序的一部分。 |
低 | 8-15 | 此类别包含线程的其余部分。 如果需要,可以保证 CPU 资源的最小百分比。 |
1-7 | 这些线程已使用 CPU 资源的配额。 如果没有低优先级线程准备好运行,它们可以继续运行。 |