| xj | b04a402 | 2021-11-25 15:01:52 +0800 | [diff] [blame^] | 1 | ACPICA Trace Facility | 
|  | 2 |  | 
|  | 3 | Copyright (C) 2015, Intel Corporation | 
|  | 4 | Author: Lv Zheng <lv.zheng@intel.com> | 
|  | 5 |  | 
|  | 6 |  | 
|  | 7 | Abstract: | 
|  | 8 |  | 
|  | 9 | This document describes the functions and the interfaces of the method | 
|  | 10 | tracing facility. | 
|  | 11 |  | 
|  | 12 | 1. Functionalities and usage examples: | 
|  | 13 |  | 
|  | 14 | ACPICA provides method tracing capability. And two functions are | 
|  | 15 | currently implemented using this capability. | 
|  | 16 |  | 
|  | 17 | A. Log reducer | 
|  | 18 | ACPICA subsystem provides debugging outputs when CONFIG_ACPI_DEBUG is | 
|  | 19 | enabled. The debugging messages which are deployed via | 
|  | 20 | ACPI_DEBUG_PRINT() macro can be reduced at 2 levels - per-component | 
|  | 21 | level (known as debug layer, configured via | 
|  | 22 | /sys/module/acpi/parameters/debug_layer) and per-type level (known as | 
|  | 23 | debug level, configured via /sys/module/acpi/parameters/debug_level). | 
|  | 24 |  | 
|  | 25 | But when the particular layer/level is applied to the control method | 
|  | 26 | evaluations, the quantity of the debugging outputs may still be too | 
|  | 27 | large to be put into the kernel log buffer. The idea thus is worked out | 
|  | 28 | to only enable the particular debug layer/level (normally more detailed) | 
|  | 29 | logs when the control method evaluation is started, and disable the | 
|  | 30 | detailed logging when the control method evaluation is stopped. | 
|  | 31 |  | 
|  | 32 | The following command examples illustrate the usage of the "log reducer" | 
|  | 33 | functionality: | 
|  | 34 | a. Filter out the debug layer/level matched logs when control methods | 
|  | 35 | are being evaluated: | 
|  | 36 | # cd /sys/module/acpi/parameters | 
|  | 37 | # echo "0xXXXXXXXX" > trace_debug_layer | 
|  | 38 | # echo "0xYYYYYYYY" > trace_debug_level | 
|  | 39 | # echo "enable" > trace_state | 
|  | 40 | b. Filter out the debug layer/level matched logs when the specified | 
|  | 41 | control method is being evaluated: | 
|  | 42 | # cd /sys/module/acpi/parameters | 
|  | 43 | # echo "0xXXXXXXXX" > trace_debug_layer | 
|  | 44 | # echo "0xYYYYYYYY" > trace_debug_level | 
|  | 45 | # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name | 
|  | 46 | # echo "method" > /sys/module/acpi/parameters/trace_state | 
|  | 47 | c. Filter out the debug layer/level matched logs when the specified | 
|  | 48 | control method is being evaluated for the first time: | 
|  | 49 | # cd /sys/module/acpi/parameters | 
|  | 50 | # echo "0xXXXXXXXX" > trace_debug_layer | 
|  | 51 | # echo "0xYYYYYYYY" > trace_debug_level | 
|  | 52 | # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name | 
|  | 53 | # echo "method-once" > /sys/module/acpi/parameters/trace_state | 
|  | 54 | Where: | 
|  | 55 | 0xXXXXXXXX/0xYYYYYYYY: Refer to Documentation/acpi/debug.txt for | 
|  | 56 | possible debug layer/level masking values. | 
|  | 57 | \PPPP.AAAA.TTTT.HHHH: Full path of a control method that can be found | 
|  | 58 | in the ACPI namespace. It needn't be an entry | 
|  | 59 | of a control method evaluation. | 
|  | 60 |  | 
|  | 61 | B. AML tracer | 
|  | 62 |  | 
|  | 63 | There are special log entries added by the method tracing facility at | 
|  | 64 | the "trace points" the AML interpreter starts/stops to execute a control | 
|  | 65 | method, or an AML opcode. Note that the format of the log entries are | 
|  | 66 | subject to change: | 
|  | 67 | [    0.186427]   exdebug-0398 ex_trace_point        : Method Begin [0xf58394d8:\_SB.PCI0.LPCB.ECOK] execution. | 
|  | 68 | [    0.186630]   exdebug-0398 ex_trace_point        : Opcode Begin [0xf5905c88:If] execution. | 
|  | 69 | [    0.186820]   exdebug-0398 ex_trace_point        : Opcode Begin [0xf5905cc0:LEqual] execution. | 
|  | 70 | [    0.187010]   exdebug-0398 ex_trace_point        : Opcode Begin [0xf5905a20:-NamePath-] execution. | 
|  | 71 | [    0.187214]   exdebug-0398 ex_trace_point        : Opcode End [0xf5905a20:-NamePath-] execution. | 
|  | 72 | [    0.187407]   exdebug-0398 ex_trace_point        : Opcode Begin [0xf5905f60:One] execution. | 
|  | 73 | [    0.187594]   exdebug-0398 ex_trace_point        : Opcode End [0xf5905f60:One] execution. | 
|  | 74 | [    0.187789]   exdebug-0398 ex_trace_point        : Opcode End [0xf5905cc0:LEqual] execution. | 
|  | 75 | [    0.187980]   exdebug-0398 ex_trace_point        : Opcode Begin [0xf5905cc0:Return] execution. | 
|  | 76 | [    0.188146]   exdebug-0398 ex_trace_point        : Opcode Begin [0xf5905f60:One] execution. | 
|  | 77 | [    0.188334]   exdebug-0398 ex_trace_point        : Opcode End [0xf5905f60:One] execution. | 
|  | 78 | [    0.188524]   exdebug-0398 ex_trace_point        : Opcode End [0xf5905cc0:Return] execution. | 
|  | 79 | [    0.188712]   exdebug-0398 ex_trace_point        : Opcode End [0xf5905c88:If] execution. | 
|  | 80 | [    0.188903]   exdebug-0398 ex_trace_point        : Method End [0xf58394d8:\_SB.PCI0.LPCB.ECOK] execution. | 
|  | 81 |  | 
|  | 82 | Developers can utilize these special log entries to track the AML | 
|  | 83 | interpretion, thus can aid issue debugging and performance tuning. Note | 
|  | 84 | that, as the "AML tracer" logs are implemented via ACPI_DEBUG_PRINT() | 
|  | 85 | macro, CONFIG_ACPI_DEBUG is also required to be enabled for enabling | 
|  | 86 | "AML tracer" logs. | 
|  | 87 |  | 
|  | 88 | The following command examples illustrate the usage of the "AML tracer" | 
|  | 89 | functionality: | 
|  | 90 | a. Filter out the method start/stop "AML tracer" logs when control | 
|  | 91 | methods are being evaluated: | 
|  | 92 | # cd /sys/module/acpi/parameters | 
|  | 93 | # echo "0x80" > trace_debug_layer | 
|  | 94 | # echo "0x10" > trace_debug_level | 
|  | 95 | # echo "enable" > trace_state | 
|  | 96 | b. Filter out the method start/stop "AML tracer" when the specified | 
|  | 97 | control method is being evaluated: | 
|  | 98 | # cd /sys/module/acpi/parameters | 
|  | 99 | # echo "0x80" > trace_debug_layer | 
|  | 100 | # echo "0x10" > trace_debug_level | 
|  | 101 | # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name | 
|  | 102 | # echo "method" > trace_state | 
|  | 103 | c. Filter out the method start/stop "AML tracer" logs when the specified | 
|  | 104 | control method is being evaluated for the first time: | 
|  | 105 | # cd /sys/module/acpi/parameters | 
|  | 106 | # echo "0x80" > trace_debug_layer | 
|  | 107 | # echo "0x10" > trace_debug_level | 
|  | 108 | # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name | 
|  | 109 | # echo "method-once" > trace_state | 
|  | 110 | d. Filter out the method/opcode start/stop "AML tracer" when the | 
|  | 111 | specified control method is being evaluated: | 
|  | 112 | # cd /sys/module/acpi/parameters | 
|  | 113 | # echo "0x80" > trace_debug_layer | 
|  | 114 | # echo "0x10" > trace_debug_level | 
|  | 115 | # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name | 
|  | 116 | # echo "opcode" > trace_state | 
|  | 117 | e. Filter out the method/opcode start/stop "AML tracer" when the | 
|  | 118 | specified control method is being evaluated for the first time: | 
|  | 119 | # cd /sys/module/acpi/parameters | 
|  | 120 | # echo "0x80" > trace_debug_layer | 
|  | 121 | # echo "0x10" > trace_debug_level | 
|  | 122 | # echo "\PPPP.AAAA.TTTT.HHHH" > trace_method_name | 
|  | 123 | # echo "opcode-opcode" > trace_state | 
|  | 124 |  | 
|  | 125 | Note that all above method tracing facility related module parameters can | 
|  | 126 | be used as the boot parameters, for example: | 
|  | 127 | acpi.trace_debug_layer=0x80 acpi.trace_debug_level=0x10 \ | 
|  | 128 | acpi.trace_method_name=\_SB.LID0._LID acpi.trace_state=opcode-once | 
|  | 129 |  | 
|  | 130 | 2. Interface descriptions: | 
|  | 131 |  | 
|  | 132 | All method tracing functions can be configured via ACPI module | 
|  | 133 | parameters that are accessible at /sys/module/acpi/parameters/: | 
|  | 134 |  | 
|  | 135 | trace_method_name | 
|  | 136 | The full path of the AML method that the user wants to trace. | 
|  | 137 | Note that the full path shouldn't contain the trailing "_"s in its | 
|  | 138 | name segments but may contain "\" to form an absolute path. | 
|  | 139 |  | 
|  | 140 | trace_debug_layer | 
|  | 141 | The temporary debug_layer used when the tracing feature is enabled. | 
|  | 142 | Using ACPI_EXECUTER (0x80) by default, which is the debug_layer | 
|  | 143 | used to match all "AML tracer" logs. | 
|  | 144 |  | 
|  | 145 | trace_debug_level | 
|  | 146 | The temporary debug_level used when the tracing feature is enabled. | 
|  | 147 | Using ACPI_LV_TRACE_POINT (0x10) by default, which is the | 
|  | 148 | debug_level used to match all "AML tracer" logs. | 
|  | 149 |  | 
|  | 150 | trace_state | 
|  | 151 | The status of the tracing feature. | 
|  | 152 | Users can enable/disable this debug tracing feature by executing | 
|  | 153 | the following command: | 
|  | 154 | # echo string > /sys/module/acpi/parameters/trace_state | 
|  | 155 | Where "string" should be one of the following: | 
|  | 156 | "disable" | 
|  | 157 | Disable the method tracing feature. | 
|  | 158 | "enable" | 
|  | 159 | Enable the method tracing feature. | 
|  | 160 | ACPICA debugging messages matching | 
|  | 161 | "trace_debug_layer/trace_debug_level" during any method | 
|  | 162 | execution will be logged. | 
|  | 163 | "method" | 
|  | 164 | Enable the method tracing feature. | 
|  | 165 | ACPICA debugging messages matching | 
|  | 166 | "trace_debug_layer/trace_debug_level" during method execution | 
|  | 167 | of "trace_method_name" will be logged. | 
|  | 168 | "method-once" | 
|  | 169 | Enable the method tracing feature. | 
|  | 170 | ACPICA debugging messages matching | 
|  | 171 | "trace_debug_layer/trace_debug_level" during method execution | 
|  | 172 | of "trace_method_name" will be logged only once. | 
|  | 173 | "opcode" | 
|  | 174 | Enable the method tracing feature. | 
|  | 175 | ACPICA debugging messages matching | 
|  | 176 | "trace_debug_layer/trace_debug_level" during method/opcode | 
|  | 177 | execution of "trace_method_name" will be logged. | 
|  | 178 | "opcode-once" | 
|  | 179 | Enable the method tracing feature. | 
|  | 180 | ACPICA debugging messages matching | 
|  | 181 | "trace_debug_layer/trace_debug_level" during method/opcode | 
|  | 182 | execution of "trace_method_name" will be logged only once. | 
|  | 183 | Note that, the difference between the "enable" and other feature | 
|  | 184 | enabling options are: | 
|  | 185 | 1. When "enable" is specified, since | 
|  | 186 | "trace_debug_layer/trace_debug_level" shall apply to all control | 
|  | 187 | method evaluations, after configuring "trace_state" to "enable", | 
|  | 188 | "trace_method_name" will be reset to NULL. | 
|  | 189 | 2. When "method/opcode" is specified, if | 
|  | 190 | "trace_method_name" is NULL when "trace_state" is configured to | 
|  | 191 | these options, the "trace_debug_layer/trace_debug_level" will | 
|  | 192 | apply to all control method evaluations. |