Bookmark

Giảm bufferbloat trên OpenWrt bằng SQM cho mạng gia đình

Khi có người tải file, xem video hoặc đồng bộ dữ liệu lớn, ping thường tăng mạnh dù đường truyền vẫn còn nhanh. Hiện tượng này thường được gọi là bufferbloat. Trên OpenWrt, mình có thể dùng SQM để kiểm soát hàng đợi và giữ độ trễ ổn định hơn.1

SQM giải quyết vấn đề gì?

SQM không làm gói cước Internet nhanh hơn. Nó tổ chức việc xếp hàng và điều tiết packet để router không giữ quá nhiều dữ liệu trong bộ đệm. Nhờ vậy, các tác vụ nhạy với độ trễ như gọi video, VoIP và chơi game ít bị ảnh hưởng hơn khi có tải nền.

SQM chạy trên CPU. Router yếu có thể không theo kịp tốc độ đường truyền cao, vì vậy sau khi bật SQM mình cần đo lại tốc độ và tải CPU thay vì chỉ nhìn vào con số lý thuyết.

Đo đường truyền trước khi cấu hình

Trước tiên, mình kiểm tra tốc độ download, upload và độ trễ khi đường truyền rảnh. Có thể dùng Waveform Bufferbloat test, Speedtest, LibreQoS hoặc công cụ tương đương. Nên để mạng gần như không có tải và ghi lại kết quả để so sánh sau khi cấu hình.1

Nếu OpenWrt đang chạy ở chế độ access point, cần kiểm tra cả router upstream. Không nên kết luận SQM trên access point có thể sửa lỗi bufferbloat của router đang làm gateway.

Cài SQM

Trên OpenWrt, cài package giao diện LuCI:

1
2
opkg update
opkg install luci-app-sqm

Nếu chỉ muốn dùng dòng lệnh, có thể cài sqm-scripts thay cho giao diện LuCI. Tên package và trình quản lý package có thể thay đổi theo phiên bản OpenWrt, nên mình kiểm tra đúng phiên bản firmware trước khi cài.

Cấu hình bằng LuCI

Mở Network → SQM QoS, sau đó thực hiện các bước sau:

  1. Trong Basic Settings, bật Enable.
  2. Chọn đúng interface WAN đang kết nối Internet.
  3. Nhập tốc độ download và upload bằng khoảng 90% tốc độ đo được khi chưa bật SQM.
  4. Trong Queue Discipline, chọn cake.
  5. Trong Queue Setup Script, chọn piece_of_cake.qos.
  6. Chọn kiểu đường truyền ở Link Layer Adaptation rồi bấm Save & Apply.

Mốc 90% chỉ là điểm bắt đầu. Nếu ping khi tải vẫn tăng nhiều, có thể giảm dần tốc độ khai báo; nếu tốc độ thực tế bị giảm quá mạnh, mình điều chỉnh lại sau khi đo.

Chọn overhead cho đường truyền

OpenWrt Wiki đưa ra các giá trị tham khảo khác nhau theo loại kết nối. Với Ethernet hoặc đường truyền cáp quang, có thể bắt đầu bằng kiểu Ethernet và overhead phù hợp. Với PPPoE, overhead thường phải tính khác so với Ethernet thuần.

Nếu chưa chắc loại encapsulation hoặc thông số nhà mạng, mình không nên sao chép một giá trị từ mạng khác. Cấu hình sai overhead có thể làm kết quả không tối ưu; hãy đo trước và sau từng thay đổi.

Tắt hardware flow offloading

SQM không tương thích với hardware flow offloading, vì flow offloading có thể bỏ qua một phần đường xử lý của kernel. Trong LuCI, kiểm tra Network → Firewall và tắt hardware flow offloading khi dùng SQM. Software flow offloading vẫn có thể hoạt động theo tài liệu OpenWrt, nhưng cần kiểm tra thực tế trên từng thiết bị.1

Nếu router có nhiều CPU, có thể bật Packet Steering (all CPUs) trong phần tùy chọn mạng toàn cục để tận dụng CPU tốt hơn. Đây không phải cách thay thế cho việc chọn đúng tốc độ SQM.

Kiểm tra sau khi bật

Chạy lại cùng công cụ đo bufferbloat với điều kiện gần giống lần đầu. Mục tiêu không phải là giữ nguyên 100% tốc độ download, mà là giảm phần ping tăng thêm khi đường truyền chịu tải.

Nếu tốc độ giảm quá nhiều hoặc CPU luôn ở mức cao, mình nên:

  • Giảm tốc độ gói SQM hoặc kiểm tra lại giá trị đã nhập.
  • Kiểm tra đúng interface WAN.
  • Thử fq_codel nếu cake quá nặng với router.
  • Xem lại hardware flow offloading.
  • Cân nhắc router mạnh hơn nếu đường truyền quá nhanh so với CPU.

Kết luận

SQM là một trong những cách thực tế để cải thiện cảm giác sử dụng mạng khi có nhiều tải nền. Quy trình an toàn là đo trước, cấu hình ở mức khoảng 90%, tắt hardware flow offloading, rồi đo lại. Mỗi router và loại đường truyền sẽ có giới hạn khác nhau nên không nên bê nguyên thông số của người khác.

Nguồn chính thức


0 Bình luận

Góp Ý / Bình Luận / Đánh giá