ACPI 中文文档ACPI 中文文档
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
  • 第 8 章

    • 总览
    • 8.1. 处理器电源状态
    • 8.2. 刷新缓存
    • 8.3. 电源、性能和节流状态依赖关系
    • 8.4. 声明处理器
      • 8.4.1. _PDC(处理器驱动程序能力)
      • 8.4.2. 处理器电源状态控制
      • 8.4.3. 处理器层次结构
      • 8.4.4. 更低功耗空闲状态
        • 8.4.4.1. 分层空闲状态
        • 8.4.4.2. 空闲状态协调
        • 8.4.4.3. _LPI(低功耗空闲状态)
        • 8.4.4.4. _RDI(空闲的资源依赖)
        • 8.4.4.5. 兼容性
      • 8.4.5. 处理器节流控制
      • 8.4.6. 处理器性能控制
      • 8.4.7. 协作式处理器性能控制
        • 8.4.7.1. _CPC(连续性能控制)
          • 8.4.7.1.1. 性能能力/阈值
          • 8.4.7.1.2. 性能控制
          • 8.4.7.1.3. 性能反馈
          • 8.4.7.1.4. CPPC 启用寄存器
          • 8.4.7.1.5. 自主选择启用寄存器
          • 8.4.7.1.6. 自主活动窗口寄存器
          • 8.4.7.1.7. 能量性能偏好寄存器
          • 8.4.7.1.8. OSPM 控制策略
          • 8.4.7.1.9. 使用 PCC 寄存器
          • 8.4.7.1.10. 与其他由 ACPI 定义的对象和通知的关系
          • 8.4.7.1.11. _CPC 实现示例
      • 8.4.8. _PPE(平台错误轮询)
    • 8.5. 处理器聚合器设备

8.4.6. 处理器性能控制

处理器性能控制通过三个可选对象来实现,这三个对象的存在表明 OSPM 该平台和 CPU 能够支持多个性能状态。如果实现了处理器性能控制,平台必须提供这三个对象。平台必须为其所有处理器都公开处理器性能控制对象,或者一个也不公开。处理器性能控制对象定义了受支持的处理器性能状态,允许将处理器置于特定的性能状态,并报告系统当前可用的性能状态数量。

在多处理环境中,所有 CPU 必须支持相同数量的性能状态,并且每个处理器性能状态都必须具有相同的性能和功耗参数。为了让 OSPM 使用此特性,系统中每个处理器对象下都必须存在性能对象。

处理器性能控制对象包括 ‘_PCT’ 包、‘_PSS’ 包以及 ‘_PPC’ 方法,详见下文。

8.4.6.1. _PCT(性能控制)

此可选对象声明了一个接口,该接口允许 OSPM 将处理器切换到某个性能状态。OSPM 通过将特定于性能状态的控制值写入性能控制寄存器(PERF_CTRL)来执行处理器性能切换。

OSPM 可以选择 _PPC 方法返回的性能状态值所指示的处理器性能状态,或任何更低功耗(编号更高)的状态。要写入的控制值包含在相应 _PSS 项的“控制”字段中。

处理器性能切换的成功或失败通过读取性能状态寄存器(PERF_STATUS)来确定,以判定处理器当前的性能状态。如果切换成功,则从 PERF_STATUS 读出的值将与对应所需处理器性能状态的 _PSS 项中的“状态”字段匹配。

参数:

无

返回值:

如下所述的一个包

返回值信息

Package
{
   ControlRegister        // Buffer (Resource Descriptor)
   StatusRegister         // Buffer (Resource Descriptor)
}

表 8.20 _PCT 包值

元素对象类型描述
控制寄存器Buffer包含一个资源描述符,其中带有单个 Register() 描述符,用于描述性能控制寄存器。
状态寄存器Buffer包含一个资源描述符,其中带有单个 Register() 描述符,用于描述性能状态寄存器。

示例

Name (_PCT, Package()
{
   ResourceTemplate(){Perf_Ctrl_Register},    //Generic Register Descriptor
   ResourceTemplate(){Perf_Status_Register}   //Generic Register Descriptor
}) // End of \_PCT

8.4.6.2. _PSS(性能支持状态)

此可选对象向 OSPM 指示任意给定系统所支持的处理器性能状态数量。此对象求值为一个打包列表,其中包含关于可用性能状态的信息,包括内部 CPU 核心频率、典型功耗、在性能状态之间切换所需的控制寄存器值,以及允许 OSPM 在任何由 OS 发起的切换变更请求之后验证性能切换状态的状态寄存器值。该列表按典型功耗降序排序。因此,第零项描述最高性能状态,而第 ‘n’ 项描述最低性能状态。

参数:

无

返回值:

一个可变长度的包,包含如下所述的 Pstate 子包列表

返回值信息

Package {
   PState [0]             // Package - Performance state 0
   ....
   PState [n]             // Package - Performance state n
}

每个 Pstate 子包包含如下所述的元素:

Package {
   CoreFrequency          // Integer (DWORD)
   Power                  // Integer (DWORD)
   Latency                // Integer (DWORD)
   BusMasterLatency       // Integer (DWORD)
   Control                // Integer (DWORD)
   Status                 // Integer (DWORD)
}

表 8.21 PState 包值

元素对象类型描述
核心频率Integer (DWORD)指示核心 CPU 的工作频率(单位为 MHz)。
功率Integer (DWORD)指示该性能状态的最大功耗(单位为毫瓦)。
延迟Integer (DWORD)指示从任意性能状态切换到该性能状态期间,CPU 不可用的最坏情况延迟,单位为微秒。
总线主控延迟Integer (DWORD)指示从任意性能状态切换到该性能状态期间,总线主控被阻止访问内存的最坏情况延迟,单位为微秒。
控制Integer (DWORD)指示为启动切换到该性能状态而要写入性能控制寄存器(PERF_CTRL)的值。
状态Integer (DWORD)指示 OSPM 将与从性能状态寄存器(PERF_STATUS)读取的值进行比较的值,以确保切换到该性能状态成功。OSPM 可以始终将 CPU 置于最低功耗状态,但仅当 _PPC 方法指示时,附加状态才可用。

8.4.6.3. _PPC(性能当前能力)

此可选对象是一个方法,它动态地向 OSPM 指示平台当前支持的性能状态数量。该方法返回一个数字,指示 OSPM 在给定时间可以使用的最高性能状态所对应的 _PSS 项编号。OSPM 可以选择 _PPC 方法返回值所指示的 _PSS 中对应状态项,或 _PSS 中任何更低功耗(编号更高)的状态项。

参数:

无

返回值:

一个 Integer,包含受支持的状态范围

0 - 状态 0 到第 n 个状态可用(所有状态可用)

1 - 状态 1 到第 n 个状态可用

2 - 状态 2 到第 n 个状态可用

…

n - 仅状态 n 可用

为了支持 _PPC 对象的动态变化,允许在处理器对象上使用 Notify 事件。类型为 0x80 的 Notify 事件将导致 OSPM 重新求值驻留在被通知的特定处理器对象下的任何 _PPC 对象。这使得 AML 代码能够在由于异步事件(AC 插入/移除、已插接、已拔出等等)而导致受支持状态数量可能发生变化时通知 OSPM。

8.4.6.3.1. OSPM _OST 求值

当 _PPC 对象求值的处理完成时,OSPM 会对 _OST 对象求值(如果其存在于 Processor 设备下),以将 _PPC 求值状态传达给平台。下面描述了 _PPC 求值特有的 _OST 参数。

参数: (2)

Arg0 - 源事件(Integer) : 0x80 Arg1 - 状态码(Integer) : 见下文

返回值:

无

参数信息:

Arg1 - 状态码 0:成功 - OSPM 当前正在使用指定的性能状态 1:失败 - OSPM 未更改正在使用的性能状态数量。

8.4.6.4. 处理器性能控制示例

这是处理器对象列表中处理器性能控制对象的一个示例。

在此示例中,一个单处理器平台具有处理器性能能力,并支持如下三个性能状态:

  1. 500 MHz(8.2W)可在任何时候支持

  2. 600 MHz(14.9W)仅在 AC 供电时支持

  3. 650 MHz(21.5W)仅在已插接时支持

从一个性能状态切换到任何其他性能状态所需时间不超过 500 微秒。

在性能切换期间,总线主控最多有 300 微秒无法访问内存。

PERF_CTRL 和 PERF_STATUS 寄存器实现为 Functional Fixed Hardware。

系统中实现了以下 ASL 对象:

_SB.DOCK:如果系统已插接,则求值为 1,否则为 0。

_SB.AC:如果 AC 已连接,则求值为 1,否则为 0。

Processor (
   \_SB.CPU0,                         // Processor Name
   1,                                 // ACPI Processor number
   0x120,                             // PBlk system IO address
   6 )                                // PBlkLen
{
   Name(_PCT, Package ()              // Performance Control object
   {
      ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},         // PERF_CTRL
      ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}          // PERF_STATUS
   })                                 // End of _PCT object

   Name (_PSS, Package()
   {
      Package(){650, 21500, 500, 300, 0x00, 0x08},   // Performance State zero (P0)
      Package(){600, 14900, 500, 300, 0x01, 0x05},   // Performance State one (P1)
      Package(){500, 8200, 500, 300, 0x02, 0x06}     // Performance State two (P2)
   })                                                // End of _PSS object

   Method (_PPC, 0)                   // Performance Present Capabilities method
   {
      If (\_SB.DOCK)
      {
         Return(0)                    // All _PSS states available (650, 600, 500).
      }
      If (\_SB.AC)
      {
         Return(1)                    // States 1 and 2 available (600, 500).
      }
      Else
      {
         Return(2)                    // State 2 available (500)
      }
   }                                  // End of _PPC method
}                                     // End of processor object list

当可用处理器性能状态的数量发生变化时,平台将发出 Notify(_SB.CPU0, 0x80) 以通知 OSPM 重新求值该对象。

8.4.6.5. _PSD(P-State 依赖关系)

此可选对象向 OSPM 提供性能控制、P-state 或 CPPC 逻辑处理器依赖信息。_PSD 对象求值为一个打包列表,其中包含单个项,用于表示一组逻辑处理器之间的性能控制依赖关系。

参数:

无

返回值:

一个包,其中包含单个项,该项由如下所述的 P-state 依赖关系包组成。

返回值信息

Package {
   PStateDependency[0]    // Package
}

PStateDependency 子包包含如下所述的元素:

Package {
   NumEntries             // Integer
   Revision               // Integer (BYTE)
   Domain                 // Integer (DWORD)
   CoordType              // Integer (DWORD)
   NumProcessors          // Integer (DWORD)
}

表 8.22 P-State 依赖关系包值

元素对象类型描述
项数IntegerPStateDependency 包中的项数,包括该字段本身。当前值为 5。
修订Integer (BYTE)PStateDependency 包格式的修订号。当前值为 0。
域Integer (DWORD)此 P 状态项所属的依赖域编号。
协调类型Integer (DWORD)支持的 P-state 协调类型见表 8.1。
处理器数量Integer (DWORD)属于此逻辑处理器 P-state 的域的处理器数量。在检测到并启动了同一域中的该数量处理器之前,OSPM 不会开始执行到特定 P-state 的电源状态切换。

示例

这是命名空间中 Processor 结构内 _PSD 结构的一个示例用法。该示例表示一个双处理器配置,每个处理器有三个性能状态。对于所有性能状态,两个处理器之间都存在依赖关系,因此一个处理器转换到某个特定性能状态时,会导致另一个处理器也转换到相同的性能状态。OSPM 将需要协调这两个处理器之间的 P-state 转换,并且可以在任一处理器上发起转换,以使两者都转换到共同的目标 P-state。

Processor (
   \_SB.CPU0,              // Processor Name
   1,                      // ACPI Processor number
   0x120,                  // PBlk system IO address
   6 )                     // PBlkLen
{
   Name(_PCT, Package ()   // Performance Control object
   {
      ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},  // PERF_CTRL
      ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}   // PERF_STATUS
   })                      // End of \_PCT object

   Name (_PSS, Package()
   {
      Package(){650, 21500, 500, 300, 0x00, 0x08},  // Performance State zero (P0)
      Package(){600, 14900, 500, 300, 0x01, 0x05},  // Performance State one (P1)
      Package(){500, 8200, 500, 300, 0x02, 0x06}    // Performance State two (P2)
   })                                               // End of \_PSS object

   Method (_PPC, 0)        // Performance Present Capabilities method
   {
   }                       // End of \_PPC method

    Name (_PSD, Package()
   {
      Package(){5, 0, 0, 0xFD, 2}     // 5 entries, Revision 0), Domain 0, OSPM
                                      // Coordinate, Initiate on any Proc, 2 Procs
   })                                 // End of \_PSD object
}                                     // End of processor object list

Processor (
   \_SB.CPU1,                         // Processor Name
   2,                                 // ACPI Processor number
   ,                                  // PBlk system IO address
   )                                  // PBlkLen
{
   Name(_PCT, Package ()              // Performance Control object
   {
      ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},  // PERF_CTRL
      ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}   // PERF_STATUS
   })                                                   // End of \_PCT object

   Name (_PSS, Package()
   {
      Package(){650, 21500, 500, 300, 0x00, 0x08},      // Performance State zero (P0)
      Package(){600, 14900, 500, 300, 0x01, 0x05},      // Performance State one (P1)
      Package(){500, 8200, 500, 300, 0x02, 0x06}        // Performance State two (P2)
   })                                                   // End of \_PSS object

   Method (_PPC, 0)                   // Performance Present Capabilities method
   {
   }                                  // End of \_PPC method

   Name (_PSD, Package()
   {
      Package(){5, 0, 0, 0xFD, 2}     // 5 entries, Revision 0, Domain 0, OSPM
                                      // Coordinate, Initiate on any Proc, 2 Procs
   })                                 // End of \_PSD object
}                                     // End of processor object list

8.4.6.6. _PDL (P-state 深度限制)

这个可选对象求值为在执行被动热控制时 OSPM 可使用的最低性能 P-state 的 _PSS 条目编号。OSPM 可以选择 _PSS 中与 _PDL 对象返回值所指示的对应状态条目,或选择更高性能(编号更低)的状态条目,范围一直到并包括 _PPC 对象返回的 _PSS 条目编号,或者表中的第一个条目(如果未实现 _PPC)。_PDL 对象返回的值必须大于或等于 _PPC 对象返回的值;如果未实现 _PPC,则必须大于或等于 _PSS 中最后一个条目的对应值。如果 _PDL 和 _PPC 对象求值返回的值之间发生冲突,OSPM 优先采用 _PPC 对象,以限制功耗。

参数:

无

返回值:

一个 Integer,包含 P-state 深度限制的 _PSS 条目编号:

0 - P0 是 OSPM 可用的唯一 P-state

1 - 状态 1 是可用的最低功耗 P-state

2 - 状态 2 是可用的最低功耗 P-state

…

n - 状态 n 是可用的最低功耗 P-state

为了使平台能够动态指示 P-state 深度限制的变化,在处理器对象上类型为 0x80 的 Notify 事件将导致 OSPM 重新求值处理器对象列表中的任何 _PDL 对象。这使得 AML 代码能够在由于异步事件导致受支持性能状态数量可能发生变化时通知 OSPM。\

Prev
8.4.5. 处理器节流控制
Next
8.4.7. 协作式处理器性能控制