Irqbalance là gì?

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).
  • 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.
  • 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ăngirqbalanceRPS (RX)XPS (TX)
TầngUser-space daemonKernel (sysfs)Kernel (sysfs)
Điều khiểnHard 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_affinityGhi vào /sys/class/net/.../rps_cpusGhi vào /sys/class/net/.../xps_cpus
Mục tiêuDàn đều IRQ phần cứngDàn đều xử lý RXDàn đều xử lý TX
Khi nào dùngMặc định trên server bình thườngKhi ít queue, cần scale RXKhi 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ình IRQBALANCE_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.

Bài viết gần đây

spot_img

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Đăng ký nhận thông tin bài viết qua email