1. irqbalance là gì?
- irqbalance là một daemon trên Linux, chạy nền.
- Nhiệm vụ: phân phối (balance) các ngắt phần cứng (IRQ) giữa nhiều CPU core, thay vì để tất cả IRQ dồn vào một core mặc định.
- Mục tiêu: tận dụng đa lõi, giảm tình trạng một core quá tải do xử lý quá nhiều IRQ.
2. Cách hoạt động
- irqbalance đọc thông tin từ
/proc/interrupts
. - Nó phân tích loại IRQ (ví dụ NIC, storage, timer), mức độ load, rồi tự động gán lại smp_affinity cho từng IRQ.
- Cứ theo chu kỳ (mặc định 10 giây), irqbalance có thể thay đổi lại affinity để load đều hơn.
Ví dụ:
NIC ens160 có 8 queue (8 IRQ).
Nếu irqbalance bật → nó có thể tự gán queue-0 cho CPU0, queue-1 cho CPU1, queue-2 cho CPU2…
3. Phân biệt irqbalance và RPS/XPS.
Nhiều người dễ nhầm giữa irqbalance và RPS/XPS, mình sẽ phân tích theo từng điểm để các bạn thấy rõ:
3.1. Irqbalance
- Loại: user-space daemon.
- Object: Hard IRQ (interrupt từ thiết bị phần cứng).
- Cách hoạt động:
- Theo dõi
/proc/interrupts
. - Định kỳ thay đổi giá trị trong
/proc/irq/*/smp_affinity
. - Từ đó quyết định CPU nào sẽ xử lý Hard IRQ (ví dụ IRQ của card mạng, IRQ của disk).
- Theo dõi
- Mục tiêu: phân phối gánh nặng ngắt phần cứng giữa nhiều core.
- Giới hạn: chỉ điều khiển ngắt phần cứng ban đầu, không điều khiển luồng SoftIRQ.
Ví dụ:
ens160-rxtx-0 → IRQ 56 → irqbalance gán cho CPU0
ens160-rxtx-1 → IRQ 57 → irqbalance gán cho CPU1
3.2. RPS (Receive Packet Steering)
- Loại: kernel mechanism (cấu hình qua sysfs).
- Object: SoftIRQ xử lý gói tin nhận (NET_RX).
- Cách hoạt động:
- NIC báo Hard IRQ → CPUX.
- Thay vì SoftIRQ RX bắt buộc chạy trên CPUX, kernel dùng
rps_cpus
để có thể chuyển SoftIRQ sang CPUY/Z. - Phân phối gói tin RX sang nhiều CPU, kể cả khi NIC chỉ có ít queue.
- Mục tiêu: scale load xử lý RX sang nhiều CPU, tránh nghẽn tại core IRQ.
3.3. XPS (Transmit Packet Steering)
- Loại: kernel mechanism.
- Object: SoftIRQ xử lý gói tin gửi (NET_TX).
- Cách hoạt động:
- Khi ứng dụng trên CPUx gửi packet, kernel dựa vào
xps_cpus
để chọn TX queue phù hợp. - Đảm bảo locality (CPU app ≈ CPU TX queue), giảm contention.
- Khi ứng dụng trên CPUx gửi packet, kernel dựa vào
- Mục tiêu: tăng hiệu quả đường truyền, phân bổ load TX hợp lý.
3.4. Bảng so sánh nhanh
Tính năng | irqbalance | RPS (RX) | XPS (TX) |
---|---|---|---|
Tầng | User-space daemon | Kernel (sysfs) | Kernel (sysfs) |
Điều khiển | Hard IRQ affinity (CPU nào nhận IRQ) | SoftIRQ RX (CPU nào xử lý gói nhận) | SoftIRQ TX (CPU nào xử lý gói gửi) |
Cơ chế | Ghi vào /proc/irq/*/smp_affinity | Ghi vào /sys/class/net/.../rps_cpus | Ghi vào /sys/class/net/.../xps_cpus |
Mục tiêu | Dàn đều IRQ phần cứng | Dàn đều xử lý RX | Dàn đều xử lý TX |
Khi nào dùng | Mặc định trên server bình thường | Khi ít queue, cần scale RX | Khi nhiều luồng gửi, muốn locality |
Tóm lại
- irqbalance: tự động chia việc nhận ngắt phần cứng (Hard IRQ) giữa các core.
- RPS/XPS: chia việc xử lý SoftIRQ (RX/TX) giữa các core.
- Cả hai có thể phối hợp:
- irqbalance gán IRQ queue NIC về một số core.
- RPS trải SoftIRQ RX ra nhiều core hơn nếu queue ít.
- XPS giúp gói TX đi ra queue đúng với core app chạy.
4. Khi nào có lợi?
- Trên hệ thống thông thường (web server, DB server…) với nhiều dịch vụ khác nhau, irqbalance giúp load IRQ dàn đều → không có core nào quá tải.
- Bạn không cần can thiệp thủ công.
5. Khi nào gây hại?
- Với hệ thống cần control chặt chẽ affinity, ví dụ:
- Pin IRQ vào core riêng (0–1), còn core 2–7 để cho Ceph OSD.
- Lab nghiên cứu IRQ/SoftIRQ.
- Lúc này, irqbalance sẽ phá cấu hình thủ công của bạn (nó tự đổi affinity mỗi lần tick).
- Do đó trong các bài lab IRQ, thường phải stop irqbalance:
systemctl stop irqbalance systemctl disable irqbalance
6. Một số option của irqbalance
--oneshot
: chỉ chạy 1 lần phân phối rồi thoát.--banirq=<n>
: không để irqbalance đụng vào IRQ nào đó.- Config file:
/etc/irqbalance/irqbalance.env
, có thể cấu hìnhIRQBALANCE_BANNED_CPUS
,IRQBALANCE_BANNED_IRQS
.
7. Kết luận
irqbalance là một daemon hữu ích để tự động dàn đều IRQ trên nhiều CPU, phù hợp với hệ thống thông thường. Nhưng trong các workload đặc thù (Ceph, NFV, database tuning, lab IRQ…), bạn thường tắt irqbalance và tự pin IRQ để đạt hiệu năng tối ưu hoặc để demo rõ ràng.