Linux 01/09/2026 9 phút

Bộ đệm gửi mặc định chỉ 46 KB nhưng nhanh bằng hoặc hơn mọi giá trị bạn đặt tay — và đặt một con số 'an toàn' 64 KB làm chậm gần ba lần vì nó tắt cơ chế tự điều chỉnh của nhân

Hai nút mạng người ta hay chỉnh, đo thật cả hai. Kích thước mỗi lần send tạo chênh lệch 36 lần và gãy rõ ở 64 KB — đúng chuyện chi phí lời gọi hệ thống. Còn SO_SNDBUF thì ngược đời: đặt tay làm chậm đi, vì bạn khoá cứng một con số trong khi nhân đang tự co giãn theo mạng thật. Để yên là lựa chọn đúng gần như mọi lúc.

Linux 01/09/2026 8 phút

Bật io_uring lên mà không đổi gì khác thì chậm hơn pread 20% — bật đúng chế độ gom, nó nhanh gấp 10 lần; đây không phải công tắc, nó là một cơ chế bạn phải biết dùng

io_uring được giới thiệu như bước nhảy của I/O trên Linux, nhưng đo thật cho thấy ở cấu hình mặc định nó tốn đúng bằng pread, và ở độ sâu 1 còn chậm hơn. Số lời gọi hệ thống chỉ tụt 32 lần khi bạn bảo nó gom — cái vòng chung cho phép gom chứ không tự gom. Đổi một dòng cấu hình rồi báo 'đã nâng cấp lên io_uring' là làm hệ thống chậm đi 20%.

Linux 01/09/2026 9 phút

Ghi một thông điệp thành hai lần thay vì một làm gấp đôi độ trễ — nhưng chỉ trên mạng thật; trên máy lập trình viên lỗi này vô hình hoàn toàn

Hai thuật toán TCP, mỗi cái hợp lý khi đứng riêng — Nagle giữ gói nhỏ chờ ACK, delayed ACK giữ ACK chờ dữ liệu — gặp nhau trong mẫu ghi–ghi–đọc thì khoá chéo nhau như hai người quá lịch sự ở cửa. Đo thật: trên cùng máy bốn cấu hình giống hệt, thêm 20 ms độ trễ thì một dòng gấp đôi ba dòng kia. Độ trễ mạng không làm lộ lỗi có sẵn — nó là điều kiện để lỗi tồn tại.

Linux 01/09/2026 9 phút

Mở kết nối mới rồi hỏi một câu tốn đúng hai vòng khứ hồi — hỏi cùng câu đó trên kết nối có sẵn tốn một; giữa hai châu lục, khác biệt là 21 mili giây mỗi lần gọi

'Dùng bể kết nối' là lời khuyên ai cũng biết — bài này đo nó đáng bao nhiêu, bằng đơn vị duy nhất mang đi được: vòng khứ hồi. Đo thật cho ba con số rơi đúng vào bội số nguyên của RTT. Trên máy local nó chỉ tiết kiệm một phần tư mili giây, nên không đánh giá nổi ở đó; trong sản phẩm khác vùng, một dịch vụ gọi 20 lượt xuống DB cộng thêm 420 ms chỉ vì không tái dùng kết nối.

Linux 01/09/2026 10 phút

Cạn sạch 28.232 cổng chỉ trong 22 giây — rồi thêm đúng một dòng recv() làm 'vấn đề biến mất', theo cái cách tệ nhất: đổi lỗi cạn cổng lấy lỗi mất dữ liệu im lặng

Một vòng lặp mở-đóng kết nối tới cùng một đích cạn hết dải cổng phù du trong 22 giây, vì mỗi cổng bị giữ ở TIME_WAIT 60 giây — tiêu nhanh gấp ba lần được trả lại. Ngưỡng thật chỉ ~470 kết nối/giây, thấp hơn trực giác nhiều. Và một dòng mã tưởng như chữa được hoá ra chỉ thay RST vào FIN: một cái bẫy đo lường kinh điển.

Linux 01/09/2026 9 phút

Thêm 20 ms độ trễ mà không mất gói nào: 10.403 tụt còn 150 MB/s — rồi làm mất đúng 1% số gói, nó về 4 MB/s; mất gói không lấy đi 1% dữ liệu, nó đánh sập cửa sổ tắc nghẽn

Cùng máy, cùng phần mềm, chỉ đổi đường truyền bằng tc netem. Độ trễ một mình lấy đi 69 lần thông lượng vì TCP phải chờ ACK sau mỗi cửa sổ. Rồi mất một phần nghìn số gói làm mọi thứ chậm 40 lần — vì CUBIC cắt đôi cửa sổ mỗi lần mất gói và không kịp lớn lại. Câu 'chỉ mất có 1% thôi' trong báo cáo sự cố nguy hiểm hơn nó nghe.