Vấn Đề Mà Hầu Hết Mọi Người Bỏ Qua
Server Linux của bạn ì ạch khi xử lý các batch job. Quạt laptop không ngừng quay dù chỉ làm việc nhẹ. Bạn đã tối ưu ứng dụng, kiểm tra bộ nhớ, rà soát disk I/O — vẫn chậm. CPU governor đã ngồi yên ở chế độ powersave suốt thời gian đó, lặng lẽ giới hạn tốc độ xung nhịp xuống mức tối thiểu mà kernel có thể biện minh.
Đó chính là CPU frequency scaling đang làm đúng chức năng thiết kế của nó. Chỉ là không phải điều bạn muốn. Kernel tự động điều chỉnh tốc độ xung nhịp CPU dựa trên tải, sử dụng một chính sách gọi là governor. Mặc định trên nhiều distro ưu tiên tiết kiệm điện hơn hiệu năng — ổn với máy đang rảnh, nhưng tệ khi bạn cần throughput ổn định.
Đây là cách kiểm tra, thay đổi và kiểm soát lâu dài CPU frequency governor bằng cpupower và cpufreq-utils — hai bộ công cụ chính cho công việc này trên các hệ thống Linux hiện đại.
Bắt Đầu Nhanh — Chạy Được Trong 5 Phút
Cài Đặt Công Cụ
Trên Ubuntu/Debian:
sudo apt update
sudo apt install linux-tools-common linux-tools-$(uname -r) cpufrequtils
Trên Fedora/RHEL/AlmaLinux:
sudo dnf install kernel-tools
Trên Arch Linux:
sudo pacman -S cpupower
Kiểm Tra Governor Hiện Tại
cpupower frequency-info
Bạn sẽ thấy output như sau:
analyzing CPU 0:
driver: intel_pstate
CPUs which run at the same hardware frequency: 0
available cpufreq governors: performance powersave
current policy: frequency should be within 400 MHz and 3.60 GHz
current CPU frequency: 800 MHz (asserted by call to hardware)
boost state support: supported - enabled
Thấy dòng current CPU frequency: 800 MHz không? CPU của bạn đang chạy ở mức tối thiểu. Nếu đang thực hiện bất kỳ tác vụ nào cần nhiều CPU, đó chính là điểm nghẽn của bạn.
Chuyển sang Chế Độ Performance
sudo cpupower frequency-set -g performance
Kiểm tra xem đã có hiệu lực chưa:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Sẽ in ra: performance
Tìm Hiểu Sâu — Cách CPU Frequency Scaling Hoạt Động
Các Loại Governor
Linux đi kèm với nhiều governor khác nhau. Các governor khả dụng phụ thuộc vào CPU driver của bạn (intel_pstate, amd-pstate, hoặc acpi-cpufreq thông thường):
- performance — Chạy CPU ở tần số tối đa. Tốt nhất cho server chịu tải liên tục.
- powersave — Chạy ở tần số tối thiểu. Tốt nhất cho máy đang rảnh hoặc khi cần tiết kiệm pin tối đa.
- ondemand — Tăng tốc nhanh khi có tải, giảm xuống khi rảnh. Mặc định kinh điển cho máy tính để bàn.
- conservative — Giống ondemand nhưng tăng tốc từ từ hơn. Tiêu thụ điện nhẹ nhàng hơn.
- schedutil — Kết nối trực tiếp với CPU scheduler. Thường là lựa chọn cân bằng tốt nhất cho kernel hiện đại (5.x+).
- userspace — Cho phép đặt tần số thủ công. Hữu ích để test hoặc cố định tần số.
Kiểm Tra Các Governor Khả Dụng trên CPU của Bạn
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
Hệ thống Intel chạy intel_pstate thường chỉ hiển thị performance và powersave. Đây không phải giới hạn của driver — Intel tự xử lý việc điều chỉnh tần số nội bộ. amd-pstate của AMD hoạt động tương tự trên các CPU mới hơn.
cpufreq-utils vs cpupower
Hai công cụ, cùng mục đích, khác lịch sử:
cpufreq-utilscung cấpcpufreq-infovàcpufreq-set— cũ hơn nhưng phổ biến rộng rãicpupower(từlinux-tools) là phiên bản thay thế hiện đại với hỗ trợ tính năng rộng hơn
Cả hai đều hoạt động tốt. Dùng cpupower khi có; dùng cpufreq-set khi không có.
Sử Dụng Nâng Cao
Đặt Governor cho Tất Cả CPU Cùng Lúc
Mặc định, cpupower frequency-set chỉ ảnh hưởng đến CPU 0. Để áp dụng cho tất cả các core:
sudo cpupower -c all frequency-set -g performance
Hoặc dùng cpufreq-set:
for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
echo performance | sudo tee $i
done
Đặt Giới Hạn Tần Số Thủ Công
Bạn có thể cố định tần số tối thiểu hoặc tối đa bất kể governor nào đang hoạt động:
# Đặt tần số tối thiểu là 2.0 GHz
sudo cpupower frequency-set -d 2GHz
# Đặt giới hạn tần số tối đa là 3.0 GHz
sudo cpupower frequency-set -u 3GHz
Hữu ích trên laptop để giới hạn nhiệt độ, hoặc trên server dùng chung để dành dư địa cho các tenant khác. Governor vẫn hoạt động trong những giới hạn đó — bạn chỉ đang thu hẹp phạm vi của nó.
Theo Dõi Tần Số Thực Tế theo Từng Core
watch -n 1 "cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq"
Hoặc xem gọn hơn:
cpupower monitor -m Mperf
Giữ Governor Sau Khi Khởi Động Lại
Các thay đổi governor qua cpupower sẽ mất sau khi khởi động lại. Có hai cách khắc phục:
Ubuntu/Debian với cpufrequtils:
sudo nano /etc/default/cpufrequtils
GOVERNOR="performance"
sudo systemctl enable cpufrequtils
sudo systemctl restart cpufrequtils
Dùng systemd (áp dụng cho mọi distro):
Tạo một service chạy một lần khi khởi động:
sudo nano /etc/systemd/system/cpugovernor.service
[Unit]
Description=Đặt CPU governor thành performance
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/bin/cpupower -c all frequency-set -g performance
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now cpugovernor.service
Script: Tự Động Chuyển Governor Dựa Trên Nguồn Điện (Laptop)
Muốn dùng performance khi cắm sạc và powersave khi chạy pin? Lưu script này vào /usr/local/bin/cpu-governor-switch.sh:
#!/bin/bash
# /usr/local/bin/cpu-governor-switch.sh
POWER_STATUS=$(cat /sys/class/power_supply/AC/online 2>/dev/null || echo 1)
if [ "$POWER_STATUS" -eq 1 ]; then
cpupower -c all frequency-set -g performance
echo "Đã cắm sạc — governor đặt thành performance"
else
cpupower -c all frequency-set -g powersave
echo "Đang dùng pin — governor đặt thành powersave"
fi
chmod +x /usr/local/bin/cpu-governor-switch.sh
Kết nối nó với sự kiện udev power hoặc chạy từ cron job vài phút một lần.
Mẹo Thực Tế Từ Triển Khai Thực Tế
Server: Luôn Kiểm Tra Governor Sau Khi Provisioning
Trên một server Ubuntu 22.04 production (Intel Core i5-8400, 6 core, 4GB RAM), chuyển từ powersave sang performance đã giảm thời gian sinh nội dung AI từ 45 giây xuống còn khoảng 28 giây — cải thiện 38% mà không cần thay đổi một dòng code. CPU đã bị giới hạn nhân tạo suốt thời gian đó. Service systemd ở trên đã giữ nguyên cài đặt qua các lần khởi động lại và cập nhật kernel.
Các cloud VM và bare-metal server mới hầu như luôn được ship với powersave hoặc ondemand. Kiểm tra ngay sau khi provisioning. Chỉ tốn 30 giây và rất dễ bỏ sót.
Kiểm Tra Turbo Boost
Ngay cả khi đang dùng governor performance, Turbo Boost có thể bị tắt riêng lẻ. Nên kiểm tra:
# Intel
cat /sys/devices/system/cpu/intel_pstate/no_turbo
# 0 = turbo bật, 1 = turbo tắt
# Bật turbo boost
echo 0 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo
Thermal Throttling Khác với Governor Throttling
CPU vẫn tiếp tục giảm tần số dù đã đặt governor performance? Đó là thermal throttling — không phải governor. Cả hai trông giống hệt nhau trong các công cụ giám sát, nhưng nguyên nhân hoàn toàn khác nhau. Kiểm tra:
dmesg | grep -i "cpu.*throttl"
cat /sys/class/thermal/thermal_zone*/temp
Không có cách điều chỉnh governor nào giải quyết được vấn đề tản nhiệt. Hãy vệ sinh tản nhiệt trước.
schedutil Đáng Thử trên Desktop/Laptop
Đang dùng acpi-cpufreq làm driver? (Kiểm tra bằng cpupower frequency-info.) Thì schedutil thường là governor toàn diện nhất — phản ứng với tải nhanh hơn ondemand và tiêu tốn ít điện hơn performance:
sudo cpupower -c all frequency-set -g schedutil
Script Kiểm Tra Nhanh Tình Trạng CPU
#!/bin/bash
echo "=== Trạng Thái Tần Số CPU ==="
echo "Driver: $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver)"
echo "Governor: $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)"
echo "Tần số tối thiểu: $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq) kHz"
echo "Tần số tối đa: $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq) kHz"
echo "Tần số hiện tại:"
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq; do
echo " $(basename $(dirname $(dirname $cpu))): $(cat $cpu) kHz"
done
Chạy sau mỗi lần thay đổi governor để xác nhận cài đặt đã áp dụng cho tất cả các core. Lưu vào /usr/local/bin/cpu-status và cấp quyền thực thi — chạy trong hai giây, cho bạn biết mọi thứ chỉ trong nháy mắt.
Điều chỉnh governor là công việc không hào nhoáng. Nhưng với các workload CPU-bound, sự khác biệt rõ rệt và tức thì — và chỉ tốn năm phút. Hãy kiểm tra governor trước khi bạn mất hàng giờ profiling code ứng dụng mà thực ra không phải vấn đề.

