Internet nhanh mà game vẫn lag, họp online vẫn giật? Đó là bufferbloat — chẩn đoán trong 25 giây
Bạn trả tiền cho gói 500 Mbps. Vào 2 giờ sáng, mọi thứ mượt như bơ. Nhưng 7 giờ tối, khi ai đó trong nhà bắt đầu tải bản cập nhật game, cuộc họp video của bạn biến thành trình chiếu slide — và speed test chạy ngay sau đó vẫn báo 500 Mbps.
Không có gì hỏng cả. Chỉ là speed test không đo được thứ đang làm bạn khổ.
Con số mà speed test không cho bạn thấy
Băng thông (bandwidth) trả lời câu hỏi "mỗi giây chuyển được bao nhiêu dữ liệu". Nó không nói gì cả về việc mỗi gói tin nhỏ phải xếp hàng chờ bao lâu khi đường truyền đang bận — còn độ trễ khi có tải (latency under load) lại là thứ các ứng dụng real-time sống chết nhờ vào.
Vấn đề này có tên: bufferbloat.
Router và modem hiện đại có bộ đệm (buffer) rất lớn: thay vì bỏ gói tin, chúng xếp hàng đợi. Đàng hoàng khi mạng rảnh — nhưng khi một lượt tải xuống chiếm hết đường truyền, các gói tin của bạn (frame họp video, input game) bị đẩy xuống cuối hàng đợi khổng lồ. Ping của bạn nhảy từ 8 ms lên 300+ ms trong lúc tải. Cuộc họp giật, game desync. Tải xong thì mọi thứ tự nhiên tốt lại — nên nó có vẻ như bị "ma ám".
Jitter là vấn đề anh em của nó: độ dao động của ping giữa các gói tin. Codec real-time chịu được độ trễ cao nhưng ổn định tốt hơn nhiều so với độ trễ nhảy loạn xạ.
Chẩn đoán trong 25 giây
Bạn cần một công cụ đo độ trễ trong khi đường truyền bận cứng, không chỉ khi rảnh. Waveform bufferbloat test là lựa chọn nổi tiếng.
SpeedPulse là công cụ tôi tự xây — miễn phí, không cần đăng ký, không cài app, không cookie, chạy hoàn toàn phía trình duyệt. Một lần chạy ~25 giây đo được:
- Tốc độ tải lên / tải xuống / ping — những chỉ số quen thuộc
- Jitter (chênh lệch trung bình giữa các mẫu ping liên tiếp, theo phong cách RFC 3550)
- Bufferbloat — một "chuỗi ping" chạy song song suốt pha tải xuống và tải lên; công cụ báo
độ trễ khi tải − độ trễ khi rảnhtheo từng chiều và chấm điểm chiều tệ hơn từ A+ đến F - Đánh giá bằng tiếng người thường cho 4K streaming, gaming, họp video và lướt web — bạn không cần tự diễn giải số liệu
- Kiểm tra chéo 8 CDN — sau mỗi lần đo, nó ping 8 edge CDN độc lập (Cloudflare, jsDelivr, Fastly, GitHub, Google, AWS...). Nếu server của speed test nhanh hơn hẳn cả đám, rất có thể ISP đang ưu tiên lưu lượng speed test — lý do kinh điển của triệu chứng "test thì đẹp mà dùng thực tế thì chậm"
- Xuất CSV và biểu đồ lịch sử, tất cả chạy cục bộ trên máy bạn
Đọc điểm số
| Điểm | Độ trễ tăng thêm khi có tải |
|---|---|
| A+ | < 5 ms |
| A | < 30 ms |
| B | < 60 ms |
| C | < 200 ms |
| D | < 400 ms |
| F | ≥ 400 ms |
Từ C trở xuống là bạn đã tìm ra thủ phạm.
Minh bạch: tôi là người xây dựng SpeedPulse. Thang điểm A+–F dùng chung với cộng đồng Waveform và bufferbloat.org nên kết quả có thể so sánh chéo giữa các công cụ — tôi thích dùng chuẩn chung hơn là tự chế một thang điểm dễ dàng tô hồng cho chính mình.
Cách khắc phục, xếp theo thứ tự hiệu quả
- Bật SQM với fq_codel/CAKE trên router (OpenWrt làm cực dễ; nhiều firmware gốc cũng có mục "QoS"). Smart queue management giữ buffer ngắn để độ trễ đứng yên kể cả khi đường truyền chạy hết công suất. Đây là thuốc chữa gốc — điểm A+ đến từ đây.
- Giới hạn tốc độ thấp hơn ~5–10% so với gói mạng trong cài đặt SQM. Nghe ngược đời nhưng đúng: để hàng đợi hình thành bên trong router (nơi SQM kiểm soát được) thay vì bên trong modem của ISP.
- Xử lý chiều upload trước. Upstream nghẽn trước — cuộc họp video chết vì upload bị chiếm (backup cloud + họp online = trình chiếu). Nếu chỉ cap được một chiều, hãy cap upload.
- Dùng dây cho máy quan trọng. Wi-Fi retransmission và tranh chấp airtime gây jitter mà cấu hình router nào cũng không chữa được.
- Kiểm tra xem ISP có ưu tiên speed test không. Nếu chỉ server của speed test nhanh mà mọi CDN khác đều chậm, bảng 8-CDN sẽ lộ ra điều đó — đáng để mang số liệu này đi hỏi ISP.
Cho dân kỹ thuật: đo bằng trình duyệt thế nào?
Không ICMP, không raw socket. Một speed test trên browser đo thời gian HTTPS round trip bằng fetch(url, { mode: 'no-cors' }) và performance.now(). no-cors trả về opaque response — không body, không status — nhưng round trip mạng (DNS, TCP, TLS, HTTP) vẫn chạy đủ, và với mục đích đo thời gian thì thế là đủ. Jitter = trung bình của hiệu tuyệt đối giữa các mẫu liên tiếp; bufferbloat = median độ trễ khi tải trừ median khi rảnh, đo riêng từng chiều.
Bài viết đầy đủ về methodology (kèm cả những giới hạn mà chúng tôi thẳng thắn thừa nhận): How SpeedPulse measures jitter, bufferbloat and 8 CDN latencies.
Chạy thử trên đường truyền của bạn và comment điểm số — tôi sẵn sàng giúp đọc kết quả: speedpulse.tech. Muốn đọc bản dài về bufferbloat (lý thuyết hàng đợi router, CAKE vs fq_codel)? Đọc thêm: What is bufferbloat? và What is jitter?.
All rights reserved