Skip to content

cpufreq và pstate driver: từ điều khiển tần số trực tiếp đến "hợp đồng hiệu năng" với phần cứng

Khái niệm, cấu trúc, ý nghĩa và ứng dụng của cơ chế điều chỉnh tần số CPU trong nhân Linux.

Tóm tắt

Bài viết thảo luận subsystem cpufreq của Linux và lớp driver thường gọi là "pstate driver". Chúng tôi phân tích kiến trúc ba lớp (core, governor, scaling driver), sự dịch chuyển từ mô hình kernel chọn tần số (target) sang mô hình kernel chỉ đặt ràng buộc và gợi ý (setpolicy) dựa trên HWP và ACPI CPPC, rồi so sánh hiện thực trên x86 (Intel, AMD) và ARM (NXP LX2160A, Ampere, Marvell CN106, Fujitsu MONAKA). Bản vá EPP boost cho amd-pstate được dùng làm ví dụ để thảo luận cách phân chia trách nhiệm giữa kernel và firmware.

Từ khóa: cpufreq, DVFS, P-state, HWP, CPPC, EPP, amd-pstate, cppc_cpufreq.

1. Giới thiệu

Công suất động của mạch CMOS tỉ lệ với C·V²·f, nên điều chỉnh đồng thời điện áp và tần số (DVFS) là đòn bẩy chính để cân bằng hiệu năng và điện năng. Trong Linux, DVFS cho CPU được hiện thực trong drivers/cpufreq/. Qua hai thập kỷ, vai trò của kernel trong vòng điều khiển đã thu hẹp dần: từ chỗ chọn chính xác tần số cho từng nhóm core, kernel chuyển sang chỉ khai báo khoảng cho phép và thiên hướng năng lượng, còn quyết định cuối cùng thuộc về phần cứng hoặc firmware. Nhóm driver theo mô hình mới này được gọi chung là pstate driver.

2. Kiến trúc subsystem cpufreq

Subsystem gồm ba lớp (Hình 1). cpufreq core quản lý các policy, mỗi policy ứng với một miền clock dùng chung, giữ ràng buộc min/max và giao diện sysfs /sys/devices/system/cpu/cpuN/cpufreq/. Governor là thuật toán chọn mức hiệu năng; hiện nay schedutil là mặc định vì lấy trực tiếp tín hiệu utilization từ scheduler, bên cạnh performance, powersave, ondemand. Scaling driver đăng ký qua struct cpufreq_driver và là lớp duy nhất chạm vào phần cứng. Ngoài ra, thermal (cpufreq là một cooling device) và PM QoS áp giới hạn từ bên ngoài lên policy.

Có hai mô hình driver. Ở mô hình target, governor tính tần số đích và driver thực thi qua target_index() hoặc fast_switch() (chạy ngay trong ngữ cảnh scheduler, không ngủ). Ở mô hình setpolicy, kernel chỉ chuyển min/max và gợi ý xuống, phần cứng tự chọn điểm hoạt động.

Kiến trúc ba lớp của cpufreq

Hình 1. Ba lớp của cpufreq. Ở mô hình target, governor quyết định tần số; ở mô hình setpolicy (pstate), kernel chỉ gửi ràng buộc và gợi ý, phần cứng tự chọn.

3. Pstate driver: khái niệm

Pstate driver không đặt MHz hay mV. Nó ghi cho từng core một "hợp đồng" bằng mức hiệu năng trừu tượng: min_perf (sàn), max_perf (trần, nơi hội tụ giới hạn từ policy, thermal, QoS), desired_perf (bằng 0 nghĩa là để phần cứng tự quyết) và EPP (Energy Performance Preference, 0 thiên về hiệu năng, 255 thiên về tiết kiệm). Hai chuẩn hiện thực là HWP của Intel (IA32_HWP_REQUEST) và ACPI CPPC, dùng trên AMD (MSR_AMD_CPPC_REQ) và ARM server (qua PCC). Driver đọc ngược khả năng của core (highest, nominal, lowest) và tần số hiệu dụng từ bộ đếm APERF/MPERF (x86) hoặc AMU (ARM). Các C-state, điện áp từng core và power gating nằm ngoài phạm vi driver.

Lý do của sự dịch chuyển này là phần cứng phản ứng ở thang micro giây, nhanh hơn vòng lặp governor (mili giây), và nắm thông tin kernel không thấy: nhiệt độ cục bộ, dòng điện, ngân sách công suất chung giữa CPU và GPU.

4. Hiện thực trên các kiến trúc

Bảng 1. Driver và mô hình điều khiển trên một số nền tảng.

Nền tảng Driver Mô hình / ghi chú
Intel (Skylake+) intel_pstate Active + HWP; passive dùng schedutil
AMD (Zen 2+) amd-pstate Active (EPP), guided, passive; CPPC
NXP LX2160A qoriq-cpufreq Target; đổi parent clock của CMUX
Ampere Altra/One cppc_cpufreq CPPC qua PCC; boost tắt mặc định
Marvell CN106 chưa có upstream Có thể firmware đặt cố định*
Fujitsu MONAKA chưa công bố ACPI chuẩn, dự kiến CPPC*

* Suy luận, chưa kiểm chứng trên phần cứng.

Trên x86, hai nhà sản xuất hội tụ về cùng một mô hình: kernel đặt hợp đồng, phần cứng thực thi. Trên ARM, bức tranh phân mảnh: SoC nhúng như LX2160A vẫn theo mô hình target với bảng tần số và clock driver riêng, trong khi ARM server dùng cppc_cpufreq. Đáng chú ý, các bản vá của Huawei và NVIDIA (2024 đến 2026) đã bổ sung chế độ autonomous và EPP cho cppc_cpufreq, kéo ARM server về cùng mô hình với amd-pstate-epp.

5. Ý nghĩa và ứng dụng

  • Trung tâm dữ liệu: EPP và chính sách boost quyết định hiệu năng trên mỗi watt; trên Ampere Altra, phải bật boost thủ công mới đạt tần số danh định.
  • Hệ thời gian thực và low-latency (5G RAN, DPDK): tính tự chủ của phần cứng là nguồn jitter, nên thường khóa governor performance và giới hạn boost để đổi lấy tính tất định.
  • Thiết bị cầm tay, nhúng: ngân sách công suất chung CPU/GPU khiến các quyết định cục bộ ảnh hưởng toàn hệ thống.

Ví dụ: EPP boost cho amd-pstate. D. Vernet (Meta) quan sát rằng ở chế độ active, thread game bận liên tục nhưng ngủ rất ngắn mỗi frame làm phần cứng hạ mức hiệu năng, nên core thức dậy ở xung thấp và gây stale frame. Hai cách hiển nhiên đều thất bại: ép EPP = performance toàn cục tốn điện, còn nâng min_perf làm nhiễu bộ quản lý boost chung CPU/GPU của SMU trên Steam Deck. Bản vá chọn cách nhẹ hơn: cứ mỗi 10 ms đo C0 residency (ΔMPERF/ΔTSC) của từng core; core bận từ 50% trở lên được đặt EPP = 0 và giữ cho tới khi 300 ms không còn bận. Kết quả trên Civilization VI: 1%-low FPS tăng 31,8%, p99 frame time cải thiện 4,1%.

6. Thảo luận

Ví dụ trên cho thấy câu hỏi trung tâm không còn là "chọn tần số nào" mà là ai biết gì. Phần cứng biết trạng thái vật lý; kernel và userspace biết ngữ cảnh workload, chẳng hạn thread nào nằm trên đường găng của frame. EPP là kênh truyền thông tin hẹp giữa hai bên. Việc reviewer đề nghị đưa heuristic từ driver lên tầng governor, và ý tưởng để Wine/Proton gửi thread hint, đều là cách mở rộng kênh này theo hướng tách cơ chế khỏi chính sách. Nếu thành công, một governor điều khiển EPP có thể dùng chung cho amd-pstate, intel_pstate và cppc_cpufreq.

Mô hình hợp đồng cũng có cái giá về khả năng quan sát: trên Ampere Altra từng có lỗi firmware khiến scaling_cur_freq báo sai, và cơ chế frequency invariance không bật khi thanh ghi CPPC nằm trong PCC. Với hệ RAN, điều này gợi ý nên đo trực tiếp bằng bộ đếm phần cứng thay vì tin vào giá trị sysfs.

7. Kết luận

cpufreq đã tiến hóa từ một bộ chọn tần số thành một lớp thương lượng giữa kernel và phần cứng. Hiểu mô hình hợp đồng (min, max, desired, EPP) là chìa khóa để vừa tối ưu năng lượng, vừa giữ được độ trễ trên cả x86 và ARM.

Tài liệu tham khảo

  1. D. Vernet, "EPP-boost: per-core util-based performance boosting in AMD p-state driver," LPC 2026, Prague. lpc.events
  2. RFC amd-pstate epp_boost, linux-pm, 28/7/2026. lore.kernel.org
  3. M. Larabel, Phoronix, 28/7 và 6/10/2026. bài 1, bài 2
  4. cpufreq: qoriq: add support for lx2160a, LKML, 4/2019. lkml.iu.edu
  5. L. Zheng; S. Gupta, cppc_cpufreq autonomous selection, LKML, 2025–2026. Huawei, NVIDIA
  6. Red Hat KB 6973572; Linaro known issue 6620 (Ampere Altra). Red Hat, Linaro