Linux 01/09/2026 10 phút

Công cụ này chỉ chậm 2 lần thay vì 446 lần, thấy cả máy chứ không phải một tiến trình, và moi ra được lần gọi chậm gấp nghìn lần trung vị mà trung bình, p99 đều giấu

strace muốn nhìn phải dừng tiến trình rồi đọc thanh ghi từ bên ngoài — chậm 446 lần. eBPF nạp thẳng chương trình đo vào trong nhân, chạy tại chỗ. Kết quả: 2 lần chi phí, thấy cả máy trong một lần đo, và một cái đuôi 128–256 micro giây mà không trung bình hay phân vị nào bắt được.

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

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

Nhảy giữa các nhân CPU làm chậm gấp đôi khi dữ liệu vừa bộ nhớ đệm — và không ảnh hưởng một chút nào khi dữ liệu vượt bộ nhớ đệm; đó là lý do 'ghim CPU cho nhanh' thường vô ích

Ghim tiến trình vào một nhân là lời khuyên tinh chỉnh quen thuộc, nhưng đo thật cho thấy nó chỉ đáng khi hai điều kiện cùng đúng. Với tập 1 MB vừa L2, nhảy nhân làm chậm 2,04 lần; với tập 256 MB thì 1,00 lần — vì lúc đó nhân nào cũng phải ra RAM. Bộ nhớ đệm L1/L2 thuộc về từng nhân, và bỏ nhân là bỏ lại toàn bộ cache đã nóng.

Linux 01/09/2026 9 phút

Một syscall rỗng đắt bằng 143 lời gọi hàm — và 19 nanô giây trong đó là tiền Docker âm thầm bắt bạn trả cho seccomp

Tôi đo trên Apple M4: gọi hàm thường 0,70 ns, còn getpid() — một syscall chẳng làm gì hữu ích — tốn 100,30 ns, chênh 143 lần, toàn bộ là chi phí đi sang nhân rồi về. Bóc tách 100 ns ấy: gần 19 ns là bộ lọc seccomp Docker gắn lên mọi container, và vDSO cho thấy tránh được cú vượt biên thì clock_gettime nhanh gấp 10,7 lầ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.