📌 1. Tại Sao Ảo Hóa KVM Cần Cấu Hình Multiqueue?
Khi chạy máy chủ ảo hóa Proxmox VE (KVM), card mạng ảo chuẩn Virtio (net0 / ens18) mặc định chỉ được khởi tạo với 1 queue xử lý gói tin (Single Queue: rx-0/tx-0).
Hạn chế nghiêm trọng của Single Queue:
- Toàn bộ gói tin mạng đi vào và đi ra VM đều do duy nhất 1 nhân vCPU xử lý ngắt phần mềm (SoftIRQ).
- Khi băng thông mạng vượt mốc 1Gbps (như mạng 2.5G, 10G hay 40G), vCPU này sẽ bị quá tải (100% CPU Core usage), gây ra nghẽn cổ chai mạng dù tổng máy chủ có tới 8 hay 16 vCPU.
- Virtio Multiqueue cho phép mở rộng số lượng queue truyền/nhận dữ liệu, giúp chia đều tải ngắt gói tin mạng cho nhiều nhân vCPU xử lý đồng thời.
🛠️ 2. Hướng Dẫn Kích Hoạt Virtio Multiqueue 4 Queues
Bước 1: Khai báo số Queue trên Giao diện Proxmox GUI
- Đăng nhập vào Proxmox VE Web Console.
- Chọn máy ảo Virtual Machine cần tối ưu ➔ chọn thẻ Hardware.
- Bấm đúp chuột vào card mạng Network Device (net0).
- Bấm vào nút Advanced ➔ Tìm đến ô Multiqueue (hoặc Queues).
- Nhập giá trị = 4 (hoặc bằng số vCPU bạn cấp cho VM).
- Bấm OK và tiến hành Restart (Shutdown & Start) lại VM.
Bước 2: Kích hoạt Queues bên trong máy ảo Linux (Ubuntu/Debian)
Sau khi VM khởi động lại, truy cập Terminal của VM và kiểm tra số queue hiện tại:
sudo ethtool -l ens18
Nếu hệ thống báo Combined: 1, hãy gõ lệnh kích hoạt đủ 4 queues:
sudo ethtool -L ens18 combined 4
Kiểm tra lại giao diện các luồng ngắt bằng lệnh:
ls /sys/class/net/ens18/queues/
👉 Bạn sẽ thấy xuất hiện đủ 4 luồng nhận rx-0, rx-1, rx-2, rx-3 và 4 luồng gửi tx-0, tx-1, tx-2, tx-3.
⚡ 3. Tự Động Hóa Với Systemd Service (Giữ Cấu Hình Sau Reboot)
Lệnh ethtool -L ens18 combined 4 sẽ bị reset về mặc định mỗi khi khởi động lại máy ảo. Để tự động duy trì 4 queues vĩnh viễn, chúng ta viết một systemd oneshot service.
Bước 3.1: Tạo file service
Tạo file cấu hình dịch vụ /etc/systemd/system/ens18-multiqueue.service:
[Unit]
Description=Set Virtio NIC Multiqueue to 4 Combined Channels
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/sbin/ethtool -L ens18 combined 4
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Bước 3.2: Kích hoạt dịch vụ hệ thống
Thực thi các lệnh sau trong Terminal của VM:
sudo systemctl daemon-reload
sudo systemctl enable --now ens18-multiqueue.service
Kiểm tra trạng thái service:
systemctl status ens18-multiqueue.service
👉 Kết quả trả về active (exited) là dịch vụ đã chạy thành công và sẽ tự động kích hoạt mỗi khi máy ảo khởi động.
📊 4. Kết Luận
Việc tối ưu Virtio Multiqueue kết hợp với Systemd Service giúp máy ảo KVM trên Proxmox VE khai thác tối đa sức mạnh đa nhân CPU, sẵn sàng xử lý các luồng dữ liệu mạng tốc độ cao 2.5G/10G mà không lo bị nghẽn ngắt vCPU.