요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
sysfs register set
cppc_sysfs.rst:25-60성능 한계·frequency·feedback attribute의 의미와 용도를 구분합니다.
Delivered performance
cppc_sysfs.rst:61-78T1/T2 counter delta와 reference_perf로 평균 전달 성능을 계산합니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
.. SPDX-License-Identifier: GPL-2.0
==================================================
Collaborative Processor Performance Control (CPPC)
==================================================
.. _cppc_sysfs:
CPPC
====
CPPC defined in the ACPI spec describes a mechanism for the OS to manage the
performance of a logical processor on a contiguous and abstract performance
scale. CPPC exposes a set of registers to describe abstract performance scale,
to request performance levels and to measure per-cpu delivered performance.
For more details on CPPC please refer to the ACPI specification at:
http://uefi.org/specifications
Some of the CPPC registers are exposed via sysfs under::
/sys/devices/system/cpu/cpuX/acpi_cppc/
for each cpu X::
$ ls -lR /sys/devices/system/cpu/cpu0/acpi_cppc/
/sys/devices/system/cpu/cpu0/acpi_cppc/:
total 0
-r--r--r-- 1 root root 65536 Mar 5 19:38 feedback_ctrs
-r--r--r-- 1 root root 65536 Mar 5 19:38 highest_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 lowest_freq
-r--r--r-- 1 root root 65536 Mar 5 19:38 lowest_nonlinear_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 lowest_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 nominal_freq
-r--r--r-- 1 root root 65536 Mar 5 19:38 nominal_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 reference_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 wraparound_time
* highest_perf : Highest performance of this processor (abstract scale).
* nominal_perf : Highest sustained performance of this processor
(abstract scale).
* lowest_nonlinear_perf : Lowest performance of this processor with nonlinear
power savings (abstract scale).
* lowest_perf : Lowest performance of this processor (abstract scale).
* lowest_freq : CPU frequency corresponding to lowest_perf (in MHz).
* nominal_freq : CPU frequency corresponding to nominal_perf (in MHz).
The above frequencies should only be used to report processor performance in
frequency instead of abstract scale. These values should not be used for any
functional decisions.
* feedback_ctrs : Includes both Reference and delivered performance counter.
Reference counter ticks up proportional to processor's reference performance.
Delivered counter ticks up proportional to processor's delivered performance.
* wraparound_time: Minimum time for the feedback counters to wraparound
(seconds).
* reference_perf : Performance level at which reference performance counter
accumulates (abstract scale).
Computing Average Delivered Performance
=======================================
Below describes the steps to compute the average performance delivered by
taking two different snapshots of feedback counters at time T1 and T2.
T1: Read feedback_ctrs as fbc_t1
Wait or run some workload
T2: Read feedback_ctrs as fbc_t2
::
delivered_counter_delta = fbc_t2[del] - fbc_t1[del]
reference_counter_delta = fbc_t2[ref] - fbc_t1[ref]
delivered_perf = (reference_perf x delivered_counter_delta) / reference_counter_delta
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
CPPC의 추상 성능 모델
1-24이 GPL-2.0 문서는 ACPI Collaborative Processor Performance Control(CPPC)을 설명합니다. ACPI 명세의 CPPC는 운영체제가 연속적인 추상 성능 척도로 logical processor 성능을 관리하는 mechanism입니다.
CPPC는 추상 성능 척도를 기술하고, 성능 level을 요청하며, CPU별 delivered performance를 측정하는 register 집합을 노출합니다. 자세한 규격은 `http://uefi.org/specifications`의 ACPI specification을 참조합니다.
일부 CPPC register는 CPU X마다 `/sys/devices/system/cpu/cpuX/acpi_cppc/` 아래 sysfs attribute로 노출됩니다.
/sys/devices/system/cpu/cpuX/acpi_cppc/
추상 성능 요청과 실제 전달 성능 측정의 관계입니다.
CPPC sysfs register
25-60CPU 0의 `acpi_cppc` directory에는 다음과 같이 read-only attribute가 나타납니다.
$ ls -lR /sys/devices/system/cpu/cpu0/acpi_cppc/
/sys/devices/system/cpu/cpu0/acpi_cppc/:
total 0
-r--r--r-- 1 root root 65536 Mar 5 19:38 feedback_ctrs
-r--r--r-- 1 root root 65536 Mar 5 19:38 highest_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 lowest_freq
-r--r--r-- 1 root root 65536 Mar 5 19:38 lowest_nonlinear_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 lowest_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 nominal_freq
-r--r--r-- 1 root root 65536 Mar 5 19:38 nominal_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 reference_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 wraparound_time
추상 성능 한계, frequency 표현과 feedback counter를 구분합니다.
`feedback_ctrs`의 reference counter는 processor reference performance에 비례해 증가하고 delivered counter는 실제 delivered performance에 비례해 증가합니다.
평균 delivered performance 계산
61-78T1과 T2에서 feedback counter snapshot을 두 번 읽어 평균 delivered performance를 계산합니다. T1에서 `feedback_ctrs`를 `fbc_t1`으로 읽은 뒤 기다리거나 workload를 실행하고, T2에서 `fbc_t2`를 읽습니다.
T1: Read feedback_ctrs as fbc_t1
Wait or run some workload
T2: Read feedback_ctrs as fbc_t2
::
delivered_counter_delta = fbc_t2[del] - fbc_t1[del]
reference_counter_delta = fbc_t2[ref] - fbc_t1[ref]
delivered_perf = (reference_perf x delivered_counter_delta) / reference_counter_delta
Delivered counter 증가량을 reference counter 증가량으로 나눈 비율에 `reference_perf`를 곱하면 두 snapshot 사이의 평균 delivered performance가 됩니다.
두 counter snapshot에서 평균 성능을 구하는 계산 순서입니다.
Abstract performance model
cppc_sysfs.rst:1-24운영체제가 logical CPU 성능을 연속적인 추상 척도로 요청하고 측정합니다.