ACPICA 跟踪工具¶
- 版权:
© 2015, 英特尔公司
- 作者:
吕政 <lv.zheng@intel.com>
摘要¶
本文档描述了方法跟踪工具的功能和接口。
功能和使用示例¶
ACPICA 提供了方法跟踪功能。目前使用此功能实现了两个函数。
日志缩减器¶
启用 CONFIG_ACPI_DEBUG 时,ACPICA 子系统提供调试输出。通过 ACPI_DEBUG_PRINT() 宏部署的调试消息可以在 2 个级别上减少 - 每个组件级别(称为调试层,通过 /sys/module/acpi/parameters/debug_layer 配置)和每个类型级别(称为调试级别,通过 /sys/module/acpi/parameters/debug_level 配置)。
但是,当特定的层/级别应用于控制方法评估时,调试输出的数量可能仍然太大而无法放入内核日志缓冲区。因此,我们的想法是仅在控制方法评估开始时启用特定的调试层/级别(通常更详细)日志,并在控制方法评估停止时禁用详细日志记录。
以下命令示例说明了“日志缩减器”功能的使用
在评估控制方法时,过滤掉匹配的调试层/级别日志
# cd /sys/module/acpi/parameters # echo "0xXXXXXXXX" > trace_debug_layer # echo "0xYYYYYYYY" > trace_debug_level # echo "enable" > trace_state
在评估指定的控制方法时,过滤掉匹配的调试层/级别日志
# cd /sys/module/acpi/parameters # echo "0xXXXXXXXX" > trace_debug_layer # echo "0xYYYYYYYY" > trace_debug_level # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name # echo "method" > /sys/module/acpi/parameters/trace_state
在首次评估指定的控制方法时,过滤掉匹配的调试层/级别日志
# cd /sys/module/acpi/parameters # echo "0xXXXXXXXX" > trace_debug_layer # echo "0xYYYYYYYY" > trace_debug_level # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name # echo "method-once" > /sys/module/acpi/parameters/trace_state
- 其中
- 0xXXXXXXXX/0xYYYYYYYY
有关可能的调试层/级别掩码值,请参阅ACPI CA 调试输出。
- PPPP.AAAA.TTTT.HHHH
可以在 ACPI 命名空间中找到的控制方法的完整路径。它不必是控制方法评估的条目。
AML 跟踪器¶
在 AML 解释器开始/停止执行控制方法或 AML 操作码的“跟踪点”,方法跟踪工具会添加特殊的日志条目。请注意,日志条目的格式可能会更改
[ 0.186427] exdebug-0398 ex_trace_point : Method Begin [0xf58394d8:\_SB.PCI0.LPCB.ECOK] execution.
[ 0.186630] exdebug-0398 ex_trace_point : Opcode Begin [0xf5905c88:If] execution.
[ 0.186820] exdebug-0398 ex_trace_point : Opcode Begin [0xf5905cc0:LEqual] execution.
[ 0.187010] exdebug-0398 ex_trace_point : Opcode Begin [0xf5905a20:-NamePath-] execution.
[ 0.187214] exdebug-0398 ex_trace_point : Opcode End [0xf5905a20:-NamePath-] execution.
[ 0.187407] exdebug-0398 ex_trace_point : Opcode Begin [0xf5905f60:One] execution.
[ 0.187594] exdebug-0398 ex_trace_point : Opcode End [0xf5905f60:One] execution.
[ 0.187789] exdebug-0398 ex_trace_point : Opcode End [0xf5905cc0:LEqual] execution.
[ 0.187980] exdebug-0398 ex_trace_point : Opcode Begin [0xf5905cc0:Return] execution.
[ 0.188146] exdebug-0398 ex_trace_point : Opcode Begin [0xf5905f60:One] execution.
[ 0.188334] exdebug-0398 ex_trace_point : Opcode End [0xf5905f60:One] execution.
[ 0.188524] exdebug-0398 ex_trace_point : Opcode End [0xf5905cc0:Return] execution.
[ 0.188712] exdebug-0398 ex_trace_point : Opcode End [0xf5905c88:If] execution.
[ 0.188903] exdebug-0398 ex_trace_point : Method End [0xf58394d8:\_SB.PCI0.LPCB.ECOK] execution.
开发人员可以利用这些特殊的日志条目来跟踪 AML 解释,从而有助于问题调试和性能调整。请注意,由于“AML 跟踪器”日志是通过 ACPI_DEBUG_PRINT() 宏实现的,因此还需要启用 CONFIG_ACPI_DEBUG 才能启用“AML 跟踪器”日志。
以下命令示例说明了“AML 跟踪器”功能的使用
在评估控制方法时,过滤掉方法启动/停止“AML 跟踪器”日志
# cd /sys/module/acpi/parameters # echo "0x80" > trace_debug_layer # echo "0x10" > trace_debug_level # echo "enable" > trace_state
在评估指定的控制方法时,过滤掉方法启动/停止“AML 跟踪器”日志
# cd /sys/module/acpi/parameters # echo "0x80" > trace_debug_layer # echo "0x10" > trace_debug_level # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name # echo "method" > trace_state
在首次评估指定的控制方法时,过滤掉方法启动/停止“AML 跟踪器”日志
# cd /sys/module/acpi/parameters # echo "0x80" > trace_debug_layer # echo "0x10" > trace_debug_level # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name # echo "method-once" > trace_state
在评估指定的控制方法时,过滤掉方法/操作码启动/停止“AML 跟踪器”日志
# cd /sys/module/acpi/parameters # echo "0x80" > trace_debug_layer # echo "0x10" > trace_debug_level # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name # echo "opcode" > trace_state
在首次评估指定的控制方法时,过滤掉方法/操作码启动/停止“AML 跟踪器”日志
# cd /sys/module/acpi/parameters # echo "0x80" > trace_debug_layer # echo "0x10" > trace_debug_level # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name # echo "opcode-opcode" > trace_state
请注意,所有上述与方法跟踪工具相关的模块参数都可以用作启动参数,例如
acpi.trace_debug_layer=0x80 acpi.trace_debug_level=0x10 \
acpi.trace_method_name=\_SB.LID0._LID acpi.trace_state=opcode-once
接口描述¶
所有方法跟踪函数都可以通过 ACPI 模块参数进行配置,这些参数可以在 /sys/module/acpi/parameters/ 中访问
- trace_method_name
用户想要跟踪的 AML 方法的完整路径。
请注意,完整路径不应在其名称段中包含尾随的“_”,但可以包含“”以形成绝对路径。
- trace_debug_layer
启用跟踪功能时使用的临时 debug_layer。
默认使用 ACPI_EXECUTER (0x80),这是用于匹配所有“AML 跟踪器”日志的 debug_layer。
- trace_debug_level
启用跟踪功能时使用的临时 debug_level。
默认使用 ACPI_LV_TRACE_POINT (0x10),这是用于匹配所有“AML 跟踪器”日志的 debug_level。
- trace_state
跟踪功能的状态。
用户可以通过执行以下命令来启用/禁用此调试跟踪功能
# echo string > /sys/module/acpi/parameters/trace_state
其中“string”应为以下之一
- “disable”
禁用方法跟踪功能。
- “enable”
启用方法跟踪功能。
在任何方法执行期间,将记录与“trace_debug_layer/trace_debug_level”匹配的 ACPICA 调试消息。
- “method”
启用方法跟踪功能。
在“trace_method_name”的方法执行期间,将记录与“trace_debug_layer/trace_debug_level”匹配的 ACPICA 调试消息。
- “method-once”
启用方法跟踪功能。
在“trace_method_name”的方法执行期间,仅记录一次与“trace_debug_layer/trace_debug_level”匹配的 ACPICA 调试消息。
- “opcode”
启用方法跟踪功能。
在“trace_method_name”的方法/操作码执行期间,将记录与“trace_debug_layer/trace_debug_level”匹配的 ACPICA 调试消息。
- “opcode-once”
启用方法跟踪功能。
在“trace_method_name”的方法/操作码执行期间,仅记录一次与“trace_debug_layer/trace_debug_level”匹配的 ACPICA 调试消息。
请注意,“enable”和其他功能启用选项之间的区别是
当指定“enable”时,由于“trace_debug_layer/trace_debug_level”应应用于所有控制方法评估,因此在将“trace_state”配置为“enable”后,“trace_method_name”将重置为 NULL。
当指定“method/opcode”时,如果将“trace_state”配置为这些选项时“trace_method_name”为 NULL,则“trace_debug_layer/trace_debug_level”将应用于所有控制方法评估。