Tối ưu CPU trên Linux cho máy tính yếu
Nếu bạn đang sử dụng một chiếc máy Linux có cấu hình không quá mạnh, việc mở nhiều ứng dụng cùng lúc có thể khiến hệ thống bắt đầu phản hồi chậm.
Đặc biệt với công việc lập trình, một phiên làm việc bình thường có thể bao gồm IDE, trình duyệt với hàng chục tab, terminal, Docker, database local và các công cụ AI hỗ trợ viết code. Mỗi ứng dụng lại tạo ra nhiều process chạy đồng thời và cùng tranh giành CPU.
Trong trường hợp này, việc CPU luôn ở mức 100% không nhất thiết có nghĩa là phần cứng không đủ mạnh. Một vấn đề khác nằm ở cách Linux phân chia thời gian CPU cho các process.
Trong quá trình tìm cách cải thiện tình trạng này, tôi tìm thấy System76 Scheduler.
1. System76 Scheduler là gì?
System76 Scheduler là một scheduling service dành cho Linux, có nhiệm vụ tự động cấu hình CPU scheduler và process priority nhằm cải thiện độ phản hồi của desktop.
Thay vì cố làm cho CPU xử lý nhiều công việc hơn, nó tập trung vào việc process nào nên được CPU ưu tiên xử lý trước.
Theo repository, điều này đặc biệt hữu ích trên các hệ thống phần cứng cũ hoặc cấu hình thấp, khi nhiều ứng dụng và service chạy đồng thời.
Ví dụ, khi bạn đang gõ code trong IDE, việc IDE phản hồi ngay lập tức quan trọng hơn một process background đang chạy một tác vụ không cần tương tác.
System76 Scheduler cố gắng phân bổ CPU theo hướng đó.
2. Tại sao mở nhiều ứng dụng lại khiến máy lag?
Giả sử máy đang chạy:
IDE
├── language server
├── file watcher
└── terminal
Brave
├── tab 1
├── tab 2
├── tab 3
└── background processes
Docker
├── backend
├── database
└── other services
AI coding tool
└── background processes
Nhìn từ phía người dùng, đây chỉ là vài ứng dụng.
Nhưng với Linux, chúng có thể tạo ra rất nhiều process và thread cùng cạnh tranh CPU.
CPU không thể xử lý tất cả cùng một lúc. Scheduler của kernel phải quyết định process nào được chạy và chạy trong bao lâu.
Nếu một process CPU-bound đang chiếm nhiều CPU time trong khi bạn cần IDE phản hồi input, cảm giác nhận được sẽ là:
Gõ phím → delay
Click → delay
Chuyển tab → delay
Scroll → giật
Đây chính là vấn đề mà System76 Scheduler muốn cải thiện.
3. System76 Scheduler hoạt động như thế nào?
Có hai phần đáng chú ý.
Process priority
System76 Scheduler có thể gán priority cho process dựa trên configuration.
Một trong những cơ chế được sử dụng là nice, với giá trị từ -20 đến 19.
nice = -20 → priority cao
nice = 0 → mặc định
nice = 19 → priority thấp
Ngoài ra, scheduler còn hỗ trợ nhiều scheduling policy và I/O priority khác nhau.
Điều này cho phép hệ thống phân biệt giữa những process cần phản hồi nhanh và những process có thể chạy ở background.
CPU scheduling latency
Đây mới là phần khá thú vị.
Repository cung cấp một profile gọi là responsive.
Profile này giảm thời gian mà CPU-bound task được chạy liên tục để dành thêm cơ hội xử lý cho các process khác, đặc biệt là những process đang chờ user input.
Nói đơn giản:
CPU-bound process
↓
chạy một khoảng ngắn
↓
nhường cơ hội cho process khác
↓
IDE / UI / input phản hồi nhanh hơn
Đổi lại, các workload thuần CPU có thể bị giảm một phần throughput. Đây là trade-off giữa throughput và responsiveness.
4. System76 Scheduler có làm CPU mạnh hơn không?
Không.
Đây là điểm cần phân biệt rõ.
System76 Scheduler không làm tăng số core, không tăng clock speed và cũng không làm giảm bản thân workload của ứng dụng.
Nó thay đổi cách CPU được phân phối cho các process.
Ví dụ:
Không có scheduler tối ưu:
Process A ███████████████████
Process B █████
Process C ███
UI → phải chờ
Sau khi điều chỉnh scheduling:
Process A ███████████
Process B █████
UI ████
Process C ███
Tổng lượng CPU mà máy có không thay đổi.
Mục tiêu là để phần CPU hiện có được phân bổ hợp lý hơn cho workload tương tác với người dùng.
5. Cài đặt System76 Scheduler
Repository cung cấp source code và hướng dẫn build/install.
Nếu build trực tiếp từ source, project yêu cầu một số dependency như Rust/Cargo, Clang, just, libclang-dev, libpipewire-0.3-dev và pkg-config. Sau đó có thể sử dụng justfile để build và install.
Ví dụ:
just execsnoop=$(which execsnoop-bpfcc) build-release
sudo just sysconfdir=/usr/share install
Nếu distribution của bạn đã có package được build sẵn thì nên ưu tiên package đó thay vì tự build source.
6. Cấu hình process priority
System76 Scheduler sử dụng file:
/etc/system76-scheduler/config.kdl
và các process scheduling profile nằm trong:
/etc/system76-scheduler/process-scheduler/
Bạn có thể tạo rule dựa trên process name, command path, parent process hoặc cgroup.
Ví dụ conceptually:
IDE
↓
foreground
↓
priority cao hơn
Background service
↓
background
↓
priority thấp hơn
Điều này khá hữu ích khi máy phải chạy nhiều service cùng lúc.
7. Trường hợp sử dụng thực tế
Với một workflow lập trình thông thường:
Brave
+ IDE
+ Terminal
+ Docker
+ Database
+ AI coding tool
vấn đề không nhất thiết là một ứng dụng nào đó đang sử dụng quá nhiều CPU.
Vấn đề có thể là quá nhiều workload đang chạy đồng thời.
Nếu một background task chiếm CPU trong lúc IDE cần xử lý input, scheduler có thể ưu tiên IDE để hệ thống vẫn phản hồi tốt hơn.
Repository cũng tự động kích hoạt low-latency CPU scheduling khi máy đang cắm nguồn và sử dụng scheduling latency mặc định khi chạy bằng pin.
8. Một số vấn đề cần lưu ý
System76 Scheduler không phải giải pháp cho mọi trường hợp máy chậm.
Nếu vấn đề là:
RAM không đủ
→ cần zRAM / swap / nâng RAM
CPU không đủ để xử lý workload
→ scheduler không tạo thêm CPU
Disk I/O quá chậm
→ scheduler không biến SSD thành NVMe
Một process bị bug và ăn 100% CPU
→ cần xử lý chính process đó
Scheduler chỉ giải quyết một phần của bài toán: CPU scheduling và process priority.
Ngoài ra, việc ưu tiên process cũng có trade-off. Repository mô tả profile responsive là đánh đổi một phần CPU throughput để cải thiện desktop responsiveness.
9. Kết luận
Nếu bạn đang sử dụng Linux trên một chiếc máy cấu hình không quá mạnh và thường xuyên phải mở nhiều ứng dụng khi làm việc, System76 Scheduler là một project đáng để thử.
Điểm tôi thấy thú vị ở project này là nó không cố "tăng hiệu năng CPU", mà thay đổi cách Linux phân phối CPU giữa các process.
Đối với những workflow như lập trình, nơi bạn có thể đồng thời chạy IDE, browser, Docker, terminal và AI coding tools, việc ưu tiên đúng process có thể quan trọng không kém việc có thêm tài nguyên phần cứng.
Repository: https://github.com/pop-os/system76-scheduler
All rights reserved