ACPICA 追蹤工具¶
- 版權所有:
© 2015, 英特爾公司
- 作者:
Lv Zheng <lv.zheng@intel.com>
摘要¶
本文件描述了方法追蹤工具的功能和介面。
功能和使用示例¶
ACPICA 提供了方法追蹤能力。目前,有兩個功能是利用此能力實現的。
日誌縮減器¶
當 CONFIG_ACPI_DEBUG 啟用時,ACPICA 子系統提供除錯輸出。透過 ACPI_DEBUG_PRINT() 宏部署的除錯訊息可以在兩個級別上進行縮減:每元件級別(稱為除錯層,透過 /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() 宏實現的,因此要啟用“AML 追蹤器”日誌也需要啟用 CONFIG_ACPI_DEBUG。
以下命令示例說明了“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”將應用於所有控制方法評估。