8.4.7.1. _CPC(连续性能控制)
这个可选对象声明了一个接口,允许 OSPM 基于允许值的连续范围将处理器转换到某个性能状态。OSPM 将期望的性能值写入 Desired Performance Register,而平台将该期望性能映射到内部性能状态。如果平台支持,OSPM 还可以在指定最小和最大性能要求的同时,启用自主性能级别选择。
平台不支持的可选 _CPC 包字段应按如下方式编码:
Integer 字段:Integer 0
Register 字段:应使用以下 NULL 寄存器描述符:
ResourceTemplate() {Register {(SystemMemory, 0, 0, 0, 0)}}
参数:
无
返回值:
一个 Package,包含性能控制信息。
性能控制包包含以下所述元素:
Package
{
NumEntries, // Integer
Revision, // Integer
HighestPerformance, // Integer or Buffer (Resource Descriptor)
NominalPerformance, // Integer or Buffer (Resource Descriptor)
LowestNonlinearPerformance, // Integer or Buffer (Resource Descriptor)
LowestPerformance, // Integer or Buffer (Resource Descriptor)
GuaranteedPerformanceRegister, // Buffer (Resource Descriptor)
DesiredPerformanceRegister , // Buffer (Resource Descriptor)
MinimumPerformanceRegister , // Buffer (Resource Descriptor)
MaximumPerformanceRegister , // Buffer (Resource Descriptor)
PerformanceReductionToleranceRegister, // Buffer (Resource Descriptor)
TimeWindowRegister, // Buffer (Resource Descriptor)
CounterWraparoundTime, // Integer or Buffer (Resource Descriptor)
ReferencePerformanceCounterRegister, // Buffer (Resource Descriptor)
DeliveredPerformanceCounterRegister, // Buffer (Resource Descriptor)
PerformanceLimitedRegister, // Buffer (Resource Descriptor)
CPPCEnableRegister // Buffer (Resource Descriptor)
AutonomousSelectionEnable, // Integer or Buffer (Resource Descriptor)
AutonomousActivityWindowRegister, // Buffer (Resource Descriptor)
EnergyPerformancePreferenceRegister, // Buffer (Resource Descriptor)
ReferencePerformance // Integer or Buffer (Resource Descriptor)
LowestFrequency, // Integer or Buffer (Resource Descriptor)
NominalFrequency // Integer or Buffer (Resource Descriptor)
}
表 8.23 连续性能控制包值
| 对象 | 对象类型 | 描述 |
|---|---|---|
| NumEntries | 整数 | _CPC 包中的条目数量,包括此项。当前值为 23。 |
| Revision | 整数 (BYTE) | _CPC 包格式的修订号。当前值为 3。 |
| 最高性能 | 整数 (DWORD) 或 缓冲区 | 表示在理想运行条件下,处理器理论上能够达到的最高性能级别。如果此元素为整数,OSPM 直接读取该整数值。如果此元素为缓冲区,则它必须包含一个资源描述符,其中带有单个 Register() 用于读取该值。 |
| 标称性能 | 整数 (DWORD) 或 缓冲区 | 表示处理器可持续的最高性能级别。如果此元素为整数,OSPM 直接读取该整数值。如果此元素为缓冲区,则它必须包含一个资源描述符,其中带有单个 Register() 用于读取该值。 |
| 最低非线性性能 | 整数 (DWORD) 或 缓冲区 | 表示处理器具有非线性节能效果时的最低性能级别。如果此元素为整数,OSPM 直接读取该整数值。如果此元素为缓冲区,则它必须包含一个资源描述符,其中带有单个 Register() 用于读取该值。 |
| 最低性能 | 整数 (DWORD) 或 缓冲区 | 表示处理器的最低性能级别。如果此元素为整数,OSPM 直接读取该整数值。如果此元素为缓冲区,则它必须包含一个资源描述符,其中带有单个 Register() 用于读取该值。 |
| 保证性能寄存器 | 缓冲区 | 可选。如果支持,则包含一个带有单个 Register() 描述符的资源描述符,用于描述读取当前保证性能的寄存器。更多细节请参见“性能限制”一节。 |
| 期望性能寄存器 | 缓冲区 | 包含一个带有单个 Register() 描述符的资源描述符,用于描述写入期望性能级别的寄存器。当 OSPM 表示在平台范围的 _OSC 能力中支持 CPPC2 且自主选择使能寄存器为整数 1 时,此寄存器为可选 |
| 最小性能寄存器 | 缓冲区 | 可选。如果支持,则包含一个带有单个 Register() 描述符的资源描述符,用于描述写入最小允许性能级别的寄存器。值 0 等同于最低性能(无限制)。 |
| 最大性能寄存器 | 缓冲区 | 可选。如果支持,则包含一个带有单个 Register() 描述符的资源描述符,用于描述写入最大允许性能级别的寄存器。全 1 等同于最高性能(无限制)。 |
| 性能降低容忍度寄存器 | 缓冲区 | 可选。如果支持,则包含一个带有单个 Register() 描述符的资源描述符,用于描述写入性能降低容忍度的寄存器。 |
| 时间窗口寄存器 | 缓冲区 | 可选。如果支持,则包含一个带有单个 Register() 描述符的资源描述符,用于描述写入平台已交付性能寄存器连续两次读取之间标称时间长度(以毫秒为单位)的寄存器。更多细节请参见“时间窗口寄存器”一节。 |
| 计数器回绕时间 | 整数 (DWORD) 或 缓冲区 | 可选。如果支持,则表示计数器回绕的最短时间,以秒为单位。如果此元素为整数,OSPM 直接读取该整数值。如果此元素为缓冲区(且受支持),则它必须包含一个资源描述符,其中带有单个 Register() 用于读取该值。 |
| 参考性能计数器寄存器 | 缓冲区 | 包含一个带有单个 Register() 描述符的资源描述符,用于描述读取某个计数器的寄存器,该计数器以与处理器参考性能成比例的速率累加。 |
| 已交付性能计数器寄存器 | 缓冲区 | 包含一个带有单个 Register() 描述符的资源描述符,用于描述读取某个计数器的寄存器,该计数器以与处理器已交付性能成比例的速率累加。 |
| 性能受限寄存器 | 缓冲区 | 包含一个带有单个 Register() 描述符的资源描述符,用于描述读取某个寄存器以确定性能是否受限。非零值表示性能受限。此寄存器为粘滞型,在复位之前或 OSPM 通过写入 0 将其清除之前会一直保持置位。更多细节请参见“性能限制”一节。 |
| CPPC 启用寄存器 | 缓冲区 | 可选。如果支持,则包含一个带有单个 Register() 描述符的资源描述符,用于描述一个寄存器,OSPM 向其写入 1 以在该处理器上启用 CPPC。在设置此寄存器之前,处理器将由传统机制(ACPI P 状态、固件等)控制。 |
| 自主选择使能 | 整数 (DWORD) 或 缓冲区 | 可选。如果支持,则包含一个带有单个 Register() 描述符的资源描述符,用于描述一个寄存器,OSPM 向其写入 1 以启用自主性能级别选择。仅支持自主选择的平台必须将此字段填充为值为 1 的整数。 |
| 自主活动窗口寄存器 | 缓冲区 | 可选。如果支持,则包含一个带有单个 Register() 描述符的资源描述符,用于描述一个寄存器,OSPM 向其写入一个时间值,该值指示用于自主选择策略的移动利用率敏感窗口。 |
| 能效偏好寄存器 | 缓冲区 | 可选。如果支持,则包含一个带有单个 Register() 描述符的资源描述符,用于描述一个寄存器,OSPM 向其写入一个值,以在启用自主选择时控制平台能效与性能优化策略中的能耗与性能偏好 |
| 参考性能 | 整数 (DWORD) 或 缓冲区 | 可选。如果支持,则表示参考性能计数器累加时对应的性能级别。如果不支持,则参考性能计数器按标称性能级别累加。如果此元素为整数,OSPM 直接读取该整数值。如果此元素为缓冲区(且受支持),则它必须包含一个资源描述符,其中带有单个 Register() 用于读取该值 |
| 最低频率 | 整数 (DWORD) 或 缓冲区 | 可选。如果支持,则表示此处理器的最低频率,单位为 MHz。它应大致对应于最低性能值,但不保证具有任何精确相关性。此值仅应用于以绝对频率而非抽象刻度报告处理器性能的目的,不应用于功能性决策或平台通信。如果此元素为整数,OSPM 直接读取该整数值。如果此元素为缓冲区(且受支持),则它必须包含一个资源描述符,其中带有单个 Register() 用于读取该值。 |
| 标称频率 | 整数 (DWORD) 或 缓冲区 | 可选。如果支持,则表示此处理器的标称频率,单位为 MHz。它应大致对应于标称性能值,但不保证具有任何精确相关性。此值仅应用于以绝对频率而非抽象刻度报告处理器性能的目的,不应用于功能性决策或平台通信。如果此元素为整数,OSPM 直接读取该整数值。如果此元素为缓冲区(且受支持),则它必须包含一个资源描述符,其中带有单个 Register() 用于读取该值。 |
_CPC 对象向 OSPM 提供平台特定的性能能力/阈值和控制寄存器,OSPM 使用这些寄存器来控制平台的处理器性能设置。这些内容在以下各节中描述。尽管平台可以在允许范围内指定寄存器大小,但能力/阈值寄存器的大小必须与控制寄存器的大小兼容。如果平台支持 CPPC,则 _CPC 对象必须存在于所有处理器对象之下。也就是说,不期望 OSPM 支持混合模式(CPPC 与传统 PSS、_PCT、_PPC)操作。
从 ACPI 规范 6.2 开始,所有 _CPC 寄存器都可以位于 PCC、系统内存、系统 IO 或功能固定硬件地址空间中。OSPM 对这种更灵活寄存器空间方案的支持由“用于 CPPC 寄存器的灵活地址空间” _OSC 位指示。