요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
Hotplug profile policy
sysfs-firmware-acpi:67-94Device-class profile의 enabled bit가 notification handling과 _EJ0 ejection 허용 여부를 결정합니다.
SCI, GPE and fixed-event diagnostics
sysfs-firmware-acpi:95-250Per-source counters와 enable·disable·clear controls로 SCI/GPE activity와 interrupt storms를 진단할 수 있습니다.
MRRM physical ranges and locality
sysfs-firmware-acpi:251-271MRRM ranges는 physical base·length, NUMA node와 local·remote region IDs를 제공합니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
What: /sys/firmware/acpi/fpdt/
Date: Jan 2021
Contact: Zhang Rui <[email protected]>
Description:
ACPI Firmware Performance Data Table (FPDT) provides
information for firmware performance data for system boot,
S3 suspend and S3 resume. This sysfs entry contains the
performance data retrieved from the FPDT.
boot:
firmware_start_ns: Timer value logged at the beginning
of firmware image execution. In nanoseconds.
bootloader_load_ns: Timer value logged just prior to
loading the OS boot loader into memory.
In nanoseconds.
bootloader_launch_ns: Timer value logged just prior to
launching the currently loaded OS boot loader
image. In nanoseconds.
exitbootservice_start_ns: Timer value logged at the
point when the OS loader calls the
ExitBootServices function for UEFI compatible
firmware. In nanoseconds.
exitbootservice_end_ns: Timer value logged at the point
just prior to the OS loader gaining control
back from the ExitBootServices function for
UEFI compatible firmware. In nanoseconds.
suspend:
suspend_start_ns: Timer value recorded at the previous
OS write to SLP_TYP upon entry to S3. In
nanoseconds.
suspend_end_ns: Timer value recorded at the previous
firmware write to SLP_TYP used to trigger
hardware entry to S3. In nanoseconds.
resume:
resume_count: A count of the number of S3 resume cycles
since the last full boot sequence.
resume_avg_ns: Average timer value of all resume cycles
logged since the last full boot sequence,
including the most recent resume. In nanoseconds.
resume_prev_ns: Timer recorded at the end of the previous
platform runtime firmware S3 resume, just prior to
handoff to the OS waking vector. In nanoseconds.
What: /sys/firmware/acpi/bgrt/
Date: January 2012
Contact: Matthew Garrett <[email protected]>
Description:
The BGRT is an ACPI 5.0 feature that allows the OS
to obtain a copy of the firmware boot splash and
some associated metadata. This is intended to be used
by boot splash applications in order to interact with
the firmware boot splash in order to avoid jarring
transitions.
image: The image bitmap. Currently a 32-bit BMP.
status: 1 if the image is valid, 0 if firmware invalidated it.
type: 0 indicates image is in BMP format.
======== ===================================================
version: The version of the BGRT. Currently 1.
xoffset: The number of pixels between the left of the screen
and the left edge of the image.
yoffset: The number of pixels between the top of the screen
and the top edge of the image.
======== ===================================================
What: /sys/firmware/acpi/hotplug/
Date: February 2013
Contact: Rafael J. Wysocki <[email protected]>
Description:
There are separate hotplug profiles for different classes of
devices supported by ACPI, such as containers, memory modules,
processors, PCI root bridges etc. A hotplug profile for a given
class of devices is a collection of settings defining the way
that class of devices will be handled by the ACPI core hotplug
code. Those profiles are represented in sysfs as subdirectories
of /sys/firmware/acpi/hotplug/.
The following setting is available to user space for each
hotplug profile:
======== =======================================================
enabled: If set, the ACPI core will handle notifications of
hotplug events associated with the given class of
devices and will allow those devices to be ejected with
the help of the _EJ0 control method. Unsetting it
effectively disables hotplug for the corresponding
class of devices.
======== =======================================================
The value of the above attribute is an integer number: 1 (set)
or 0 (unset). Attempts to write any other values to it will
cause -EINVAL to be returned.
What: /sys/firmware/acpi/interrupts/
Date: February 2008
Contact: Len Brown <[email protected]>
Description:
All ACPI interrupts are handled via a single IRQ,
the System Control Interrupt (SCI), which appears
as "acpi" in /proc/interrupts.
However, one of the main functions of ACPI is to make
the platform understand random hardware without
special driver support. So while the SCI handles a few
well known (fixed feature) interrupts sources, such
as the power button, it can also handle a variable
number of a "General Purpose Events" (GPE).
A GPE vectors to a specified handler in AML, which
can do anything the BIOS writer wants from
OS context. GPE 0x12, for example, would vector
to a level or edge handler called _L12 or _E12.
The handler may do its business and return.
Or the handler may send a Notify event
to a Linux device driver registered on an ACPI device,
such as a battery, or a processor.
To figure out where all the SCIs are coming from,
/sys/firmware/acpi/interrupts contains a file listing
every possible source, and the count of how many
times it has triggered::
$ cd /sys/firmware/acpi/interrupts
$ grep . *
error: 0
ff_gbl_lock: 0 enable
ff_pmtimer: 0 invalid
ff_pwr_btn: 0 enable
ff_rt_clk: 2 disable
ff_slp_btn: 0 invalid
gpe00: 0 invalid
gpe01: 0 enable
gpe02: 108 enable
gpe03: 0 invalid
gpe04: 0 invalid
gpe05: 0 invalid
gpe06: 0 enable
gpe07: 0 enable
gpe08: 0 invalid
gpe09: 0 invalid
gpe0A: 0 invalid
gpe0B: 0 invalid
gpe0C: 0 invalid
gpe0D: 0 invalid
gpe0E: 0 invalid
gpe0F: 0 invalid
gpe10: 0 invalid
gpe11: 0 invalid
gpe12: 0 invalid
gpe13: 0 invalid
gpe14: 0 invalid
gpe15: 0 invalid
gpe16: 0 invalid
gpe17: 1084 enable
gpe18: 0 enable
gpe19: 0 invalid
gpe1A: 0 invalid
gpe1B: 0 invalid
gpe1C: 0 invalid
gpe1D: 0 invalid
gpe1E: 0 invalid
gpe1F: 0 invalid
gpe_all: 1192
sci: 1194
sci_not: 0
=========== ==================================================
sci The number of times the ACPI SCI
has been called and claimed an interrupt.
sci_not The number of times the ACPI SCI
has been called and NOT claimed an interrupt.
gpe_all count of SCI caused by GPEs.
gpeXX count for individual GPE source
ff_gbl_lock Global Lock
ff_pmtimer PM Timer
ff_pwr_btn Power Button
ff_rt_clk Real Time Clock
ff_slp_btn Sleep Button
error an interrupt that can't be accounted for above.
invalid it's either a GPE or a Fixed Event that
doesn't have an event handler.
disable the GPE/Fixed Event is valid but disabled.
enable the GPE/Fixed Event is valid and enabled.
=========== ==================================================
Root has permission to clear any of these counters. Eg.::
# echo 0 > gpe11
All counters can be cleared by clearing the total "sci"::
# echo 0 > sci
None of these counters has an effect on the function
of the system, they are simply statistics.
Besides this, user can also write specific strings to these files
to enable/disable/clear ACPI interrupts in user space, which can be
used to debug some ACPI interrupt storm issues.
Note that only writing to VALID GPE/Fixed Event is allowed,
i.e. user can only change the status of runtime GPE and
Fixed Event with event handler installed.
Let's take power button fixed event for example, please kill acpid
and other user space applications so that the machine won't shutdown
when pressing the power button::
# cat ff_pwr_btn
0 enabled
# press the power button for 3 times;
# cat ff_pwr_btn
3 enabled
# echo disable > ff_pwr_btn
# cat ff_pwr_btn
3 disabled
# press the power button for 3 times;
# cat ff_pwr_btn
3 disabled
# echo enable > ff_pwr_btn
# cat ff_pwr_btn
4 enabled
/*
* this is because the status bit is set even if the enable
* bit is cleared, and it triggers an ACPI fixed event when
* the enable bit is set again
*/
# press the power button for 3 times;
# cat ff_pwr_btn
7 enabled
# echo disable > ff_pwr_btn
# press the power button for 3 times;
# echo clear > ff_pwr_btn /* clear the status bit */
# echo disable > ff_pwr_btn
# cat ff_pwr_btn
7 enabled
What: /sys/firmware/acpi/memory_ranges/rangeX
Date: February 2025
Contact: Tony Luck <[email protected]>
Description:
On systems with the ACPI MRRM table reports the parameters for
each range.
base: Starting system physical address.
length: Length of this range in bytes.
node: NUMA node that this range belongs to. Negative numbers
indicate that the node number could not be determined (e.g
for an address range that is reserved for future hot add of
memory).
local_region_id: ID associated with access by agents
local to this range of addresses.
remote_region_id: ID associated with access by agents
non-local to this range of addresses.
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
ACPI firmware performance data
1-43| 항목 | 한국어 전문 번역 |
|---|---|
| What | /sys/firmware/acpi/fpdt/ |
| Date | 2021년 1월 |
| Contact | Zhang Rui <[email protected]> |
| Description | ACPI FPDT(Firmware Performance Data Table)가 제공하는 system boot, S3 suspend와 S3 resume firmware performance data를 노출합니다. `boot/firmware_start_ns`는 firmware image execution 시작, `bootloader_load_ns`는 OS boot loader를 memory에 load하기 직전, `bootloader_launch_ns`는 loaded image를 launch하기 직전, `exitbootservice_start_ns`는 UEFI OS loader가 `ExitBootServices`를 call한 시점, `exitbootservice_end_ns`는 해당 call에서 control을 돌려받기 직전의 timer입니다. Suspend의 `suspend_start_ns`는 이전 S3 entry에서 OS가 `SLP_TYP`에 write한 시점, `suspend_end_ns`는 firmware가 hardware S3 entry를 trigger하기 위해 write한 시점입니다. Resume의 `resume_count`는 last full boot 이후 S3 resume cycles, `resume_avg_ns`는 most recent resume를 포함한 average, `resume_prev_ns`는 이전 platform runtime firmware S3 resume 끝에서 OS waking vector로 handoff하기 직전 timer입니다. Count를 제외한 timer values는 nanoseconds입니다. |
| Access | Performance-data directory |
Firmware에서 OS loader handoff까지의 boot events입니다.
S3 transition timers와 cycle statistics입니다.
ACPI boot graphics resource table
44-66| 항목 | 한국어 전문 번역 |
|---|---|
| What | /sys/firmware/acpi/bgrt/ |
| Date | 2012년 1월 |
| Contact | Matthew Garrett <[email protected]> |
| Description | BGRT는 OS가 firmware boot splash의 copy와 metadata를 얻도록 하는 ACPI 5.0 feature입니다. Boot-splash application이 firmware splash와 상호작용해 화면 전환이 부자연스러워지는 것을 피할 수 있습니다. `image`는 현재 32-bit BMP bitmap, `status`는 image valid이면 1이고 firmware가 invalidated했으면 0, `type` 0은 BMP format입니다. `version`은 현재 1, `xoffset`은 screen left에서 image left edge까지 pixels, `yoffset`은 screen top에서 image top edge까지 pixels입니다. |
| Access | Boot-graphics directory |
Boot image data, validity와 placement metadata입니다.
ACPI hotplug profiles
67-94| 항목 | 한국어 전문 번역 |
|---|---|
| What | /sys/firmware/acpi/hotplug/ |
| Date | 2013년 2월 |
| Contact | Rafael J. Wysocki <[email protected]> |
| Description | Container, memory module, processor, PCI root bridge 등 ACPI-supported device classes마다 별도 hotplug profile이 있습니다. Profile은 ACPI core hotplug code가 해당 class를 처리하는 방식을 정의하는 settings collection이며 `/sys/firmware/acpi/hotplug/` 아래 subdirectories로 표현됩니다. 각 profile의 `enabled`가 1이면 ACPI core가 hotplug-event notifications를 처리하고 `_EJ0` control method로 device ejection을 허용합니다. 0이면 해당 class hotplug를 effectively disable합니다. 0과 1 이외의 write는 `-EINVAL`을 반환합니다. |
| Access | Profile directories with read-write enabled control |
enabled attribute values와 effect입니다.
ACPI interrupt counters and controls
95-250| 항목 | 한국어 전문 번역 |
|---|---|
| What | /sys/firmware/acpi/interrupts/ |
| Date | 2008년 2월 |
| Contact | Len Brown <[email protected]> |
| Description | 모든 ACPI interrupts는 `/proc/interrupts`에 `acpi`로 보이는 단일 SCI(System Control Interrupt)를 통해 처리됩니다. SCI는 power button 같은 fixed-feature sources와 variable number의 GPEs(General Purpose Events)를 처리합니다. GPE는 AML handler로 vector되며 예를 들어 GPE `0x12`는 level handler `_L12` 또는 edge handler `_E12`로 갑니다. Handler는 직접 return하거나 battery·processor 등 ACPI device에 registered된 Linux driver로 Notify event를 보낼 수 있습니다. 이 directory의 각 file은 possible source, trigger count와 `invalid`, `disable`, `enable` status를 표시합니다. `sci`는 claimed SCI, `sci_not`은 unclaimed SCI, `gpe_all`은 GPE-caused SCI total, `gpeXX`는 individual source입니다. `ff_gbl_lock`, `ff_pmtimer`, `ff_pwr_btn`, `ff_rt_clk`, `ff_slp_btn`은 fixed events이고 `error`는 다른 항목으로 account할 수 없는 interrupt입니다. `invalid`는 handler가 없는 GPE/fixed event, `disable`은 valid하지만 disabled, `enable`은 valid하고 enabled 상태입니다. Root는 individual counter에 0을 써서 clear할 수 있고 `sci`를 clear하면 모든 counters가 cleared됩니다. Counters는 statistics일 뿐 system function에 영향을 주지 않습니다. Valid runtime GPE 또는 handler-installed fixed event에만 `enable`, `disable`, `clear` strings를 쓸 수 있으며 ACPI interrupt storm debugging에 사용합니다. Disabled 상태에서도 status bit는 set될 수 있어 다시 enable할 때 한 event가 trigger될 수 있습니다. |
| Access | Read-write statistics and debug controls |
SCI에서 fixed event 또는 GPE AML handler로 이어지는 흐름입니다.
Aggregate, per-source와 fixed-feature counter names입니다.
Handler validity와 enablement 상태입니다.
$ cd /sys/firmware/acpi/interrupts
$ grep . *
error: 0
ff_gbl_lock: 0 enable
ff_pmtimer: 0 invalid
ff_pwr_btn: 0 enable
ff_rt_clk: 2 disable
ff_slp_btn: 0 invalid
gpe00: 0 invalid
gpe01: 0 enable
gpe02: 108 enable
gpe03: 0 invalid
gpe04: 0 invalid
gpe05: 0 invalid
gpe06: 0 enable
gpe07: 0 enable
gpe08: 0 invalid
gpe09: 0 invalid
gpe0A: 0 invalid
gpe0B: 0 invalid
gpe0C: 0 invalid
gpe0D: 0 invalid
gpe0E: 0 invalid
gpe0F: 0 invalid
gpe10: 0 invalid
gpe11: 0 invalid
gpe12: 0 invalid
gpe13: 0 invalid
gpe14: 0 invalid
gpe15: 0 invalid
gpe16: 0 invalid
gpe17: 1084 enable
gpe18: 0 enable
gpe19: 0 invalid
gpe1A: 0 invalid
gpe1B: 0 invalid
gpe1C: 0 invalid
gpe1D: 0 invalid
gpe1E: 0 invalid
gpe1F: 0 invalid
gpe_all: 1192
sci: 1194
sci_not: 0
# echo 0 > gpe11
# echo 0 > sci
# cat ff_pwr_btn
0 enabled
# press the power button for 3 times
# cat ff_pwr_btn
3 enabled
# echo disable > ff_pwr_btn
# cat ff_pwr_btn
3 disabled
# press the power button for 3 times
# cat ff_pwr_btn
3 disabled
# echo enable > ff_pwr_btn
# cat ff_pwr_btn
4 enabled
# press the power button for 3 times
# cat ff_pwr_btn
7 enabled
# echo disable > ff_pwr_btn
# press the power button for 3 times
# echo clear > ff_pwr_btn
# echo disable > ff_pwr_btn
# cat ff_pwr_btn
7 enabled
ACPI MRRM memory ranges
251-271| 항목 | 한국어 전문 번역 |
|---|---|
| What | /sys/firmware/acpi/memory_ranges/rangeX |
| Date | 2025년 2월 |
| Contact | Tony Luck <[email protected]> |
| Description | ACPI MRRM table이 있는 system에서 각 memory range의 parameters를 보고합니다. `base`는 starting system physical address, `length`는 bytes 단위 range length, `node`는 range가 속한 NUMA node입니다. Negative node value는 future memory hot-add reserved range처럼 node를 determine할 수 없음을 뜻합니다. `local_region_id`는 이 address range에 local한 agents의 access와 associated된 ID이고 `remote_region_id`는 non-local agents access의 ID입니다. |
| Access | Read-only range attributes |
Physical range, NUMA placement와 locality IDs입니다.
Boot performance and graphics
sysfs-firmware-acpi:1-66FPDT는 boot와 S3 timing을 nanoseconds로 제공하고 BGRT는 firmware splash bitmap, validity와 screen offsets를 제공합니다.