ACPICA跟踪设备

news/2025/3/10 18:20:50/文章来源:https://www.cnblogs.com/wanglouxiaozi/p/18763311

摘要

本文档描述了方法跟踪工具的功能和接口。

功能和用法示例

ACPICA 提供了方法跟踪功能。目前使用此功能实现了两个功能。

日志缩减器

当启用 CONFIG_ACPI_DEBUG 时,ACPICA 子系统提供调试输出。通过 ACPI_DEBUG_PRINT() 宏部署的调试消息可以减少到 2 个级别 - 每个组件级别(称为调试层,通过 /sys/module/acpi/parameters/debug_layer 配置)和每个类型级别(称为调试级别,通过 /sys/module/acpi/parameters/debug_level 配置)。

但是当特定层/级别应用于控制方法评估时,调试输出的数量可能仍然太大而无法放入内核日志缓冲区。因此,我们的想法是仅在控制方法评估开始时启用特定调试层/级别(通常更详细)日志,并在控制方法评估停止时禁用详细日志记录。

以下命令示例说明了“日志缩减器”功能的用法:

a. 在评估控制方法时过滤掉调试层/级别匹配的日志:

# cd /sys/module/acpi/parameters
# echo "0xXXXXXXXX" > trace_debug_layer
# echo "0xYYYYYYYY" > trace_debug_level
# echo "enable" > trace_state

b. 在评估指定的控制方法时,过滤掉调试层/级别匹配的日志:

# 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

c. 首次评估指定的控制方法时,过滤掉调试层/级别匹配的日志:

# 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 跟踪器”功能的用法:

a. 在评估控制方法时,过滤掉方法启动/停止“AML 追踪器”日志:

# cd /sys/module/acpi/parameters
# echo "0x80" > trace_debug_layer
# echo "0x10" > trace_debug_level
# echo "enable" > trace_state

b. 在评估指定的控制方法时,过滤掉方法启动/停止“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

c. 首次评估指定的控制方法时,过滤掉方法启动/停止“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

d. 在评估指定的控制方法时,过滤掉方法/操作码启动/停止“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

e. 当第一次评估指定的控制方法时,过滤掉方法/操作码启动/停止“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

接口描述

所有方法跟踪功能都可以通过可在 /sys/module/acpi/parameters/ 访问的 ACPI 模块参数进行配置:

  • 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”与其他功能启用选项的区别在于:

  1. 指定“enable”时,由于“trace_debug_layer/trace_debug_level”将应用于所有控制方法评估,因此在将“trace_state”配置为“enable”后,“trace_method_name”将被重置为NULL。
  2. 指定“method/opcode”时,如果在将“trace_state”配置为这些选项时“trace_method_name”为NULL,则“trace_debug_layer/trace_debug_level”将应用于所有控制方法评估。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/896905.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

No.48 ES6---数组扩展之扩展运算符和新增方法

一、数组扩展之扩展运算符 1.扩展运算符扩展运算符(spread)是三个点(…)。将一个数组转为用逗号分隔的参数序列。<script>var arr = [10,23,45,6,7];//以前获取数组中的每个元素for(let i = 0;i<arr.length;i++){console.log(arr[i]);}//有了扩展运算符之后console.lo…

Zabbix 7.0 LTS 部署

Zabbix 7.0LTS教程 一、环境介绍 操作系统:Rocky Linux 9.5 软件版本:7.0LTS 二、安装教程 官网:Zabbix:企业级开源监控解决方案 点击右上角的下载ZABBIX选择对应的环境:选择之后往下拉会看到相应的部署步骤:2.1 软件源配置 按照文档提示:如果有epel.repo源码,需要先注释…

IDC机房无人值守:智能运维一体化解决方案

“智和网管平台”,通过实时监控、远程配置等技术实现数据中心机房的自动检测、自动报警、自动修复等功能,从而达到无需人工干预的机房运维状态,减少人为因素对设备运行的干扰,增强机房设备、设施数据的直观可视性、提高其利用率。 企业数字化转型以及5G、物联网、云…

rust学习二十.1、不安全代码之原始指针(裸指针)

一、前言 指针在前面的篇幅中已经介绍过许多,但主要是智能指针。 智能指针管理堆上的数据,并且受到rust的所有权和借用规则管理(注意,这里的所有权和借用有时候不同于最原始的那种)。 智能指针好歹能管着这些数据,但是rust中存在一些不能使用所有权管理的数据,它们需要利…

环境变量Path学习

什么是Path环境变量? “环境变量”和“path环境变量”其实是两个东西,不要混为一谈。 “环境变量”是操作系统工作环境设置的一些选项或属性参数。每个环境变量由变量名和文件路径组成的,可以设置很多个环境变量。 我们一般使用环境变量指定一个文件夹的位置,或一个应用程序…

rust学习二十.1、原始指针(裸指针)

一、前言 指针在前面的篇幅中已经介绍过许多,但主要是智能指针。 智能指针管理堆上的数据,并且受到rust的所有权和借用规则管理(注意,这里的所有权和借用有时候不同于最原始的那种)。 智能指针好歹能管着这些数据,但是rust中存在一些不能使用所有权管理的数据,它们需要利…

深度测评国产 AI 程序员,在 QwQ 和满血版 DeepSeek 助力下,哪些能力让你眼前一亮?

通义灵码上新模型选择功能,不仅引入了 DeepSeek 满血版 V3 和 R1 这两大 “新星”,Qwen2.5-Max 和 QWQ 也强势登场,正式加入通义灵码的 “豪华阵容”。开发者只需在通义灵码智能问答窗口的输入框中,单击模型选择的下拉菜单,便能轻松开启不同模型,畅享个性化服务。通义灵码…

AI Station使用笔记

一、安装maui (1)在104上,终端操作(必须有sudo权限):sudo apt install cifs-utilspip install maui==0.0.32 -i http://10.9.54.102:8888/simple --trusted-host 10.9.54.102 maui login (fang.wang03,密码为开机密码) maui project init RC_Collaboratives (前…

mysql索引浅谈

一. 索引: 索引是数据库中重要的数据结构,主要作用是提高查询的效率。索引相当于书本的目录,即可以快速定位所需数据的位置,而不用逐页查找。 二. 索引底层结构:索引底层主要采用B+树来实现索引的管理。B+树内部分为叶子节点和非叶子节点;非叶子节点主要用来存储索引和指…

java 常用注解记录汇总

1.@Transactional 可放在类或者方法上 2.@JsonFormat 一般用于格式化时间字段属性 3.@JsonProperty 和 @JSONField 前者是Jackson框架后者是阿里的 用法都是属性名之间的映射,场景多用于接口对接 说明: 比如和对方系统进行接口对接时,可能对方的字段名叫做 chinese_name和…

数据库索引简单介绍

数据库索引 基本概念索引本质是一种可以提升数据查询效率的数据结构主要分类 主要分为两类:聚簇(集)索引:一个叶子节点上存储的是索引(主键值)和数据为对应的行数据 非聚簇(集)索引:一个叶子节点上存储的是索引(某一个字段的值)和数据为对应的主键值B+树索引采用的数…

雅马哈机器人E17故障排除案例参考

雅马哈机器人E17故障是一个与电机控制相关的报警,它包含许多特定的故障代码,例如E17.410、E17.411、E17.802、E17.902、E17.905、E17.915等。 故障排除步骤数据备份:出现故障时,尽快备份数据。 诊断工具:使用教学设备或计算机软件进行诊断,浏览系统的所有故障类型和信息,…