Giải thuật 03/09/2026 8 phút

Gom 256 ghi rồi fsync một lần: nhanh 125 lần mà vẫn bền — 'an toàn hay nhanh' là câu hỏi sai

Tưởng phải chọn giữa an toàn (fsync mỗi ghi) và nhanh (không fsync)? Tôi đo: gom 256 ghi rồi fsync một lần cho 194 nghìn ghi/giây — nhanh 125 lần fsync-mỗi-ghi — mà vẫn bền. Chi phí fsync tính theo mỗi lần gọi, không theo lượng byte, nên group commit phá thế lưỡng nan.

Giải thuật 03/09/2026 8 phút

mmap 'nhanh gấp 5 lần read' là do tôi đo ẩu — đo công bằng chỉ 1,7 lần (nhưng ngẫu nhiên thắng 12,8 lần)

Tưởng mmap luôn nhanh hơn read 5 lần vì tránh copy? Con số 5 lần đó là do đo không công bằng — mmap chỉ chạm 1 byte mỗi trang. Cho cả hai chạm hết dữ liệu, mmap chỉ nhanh 1,7 lần khi đọc tuần tự; nhưng ở truy cập ngẫu nhiên mmap thắng lớn 12,8 lần vì không syscall mỗi lần.

Giải thuật 03/09/2026 8 phút

Pipe đạt 9 GB/s — nhưng ghi từng byte chỉ 6 MB/s, và khối 64KB lại CHẬM hơn 4KB

Tưởng pipe chậm, và khối càng to throughput càng cao? Tôi đo: pipe đạt 9,17 GB/s với khối 4KB nhưng ghi từng byte chỉ 6 MB/s (mỗi byte một syscall), và khối 64KB (bằng cả bộ đệm) lại chậm hơn 4KB ba lần. Độ trễ round-trip 17,7µs vì mỗi bàn giao hai bên ngủ/thức — không phải vì pipe chậm.

Giải thuật 03/09/2026 8 phút

Unix socket 'bỏ qua stack mạng nên nhanh hơn TCP' — huyền thoại không sống sót phép đo

Tưởng Unix socket nhanh hơn hẳn TCP loopback vì bỏ qua stack mạng? Tôi đo: độ trễ gần như hòa (~9,5µs mỗi chiều, cùng do chi phí đánh thức tiến trình), còn throughput TCP loopback thậm chí nhanh hơn. Unix socket vẫn hơn ở tính năng — không cổng, phân quyền file, truyền fd — chứ không phải tốc độ.

Giải thuật 03/09/2026 8 phút

Một signal tốn 489ns — gấp 1.600 lần một cờ atomic, đừng dùng nó làm kênh báo hiệu

Tưởng signal là cách rẻ, nhanh để báo hiệu giữa tiến trình? Tôi đo: một signal tốn 489ns — gần 5 lần một syscall và 1.600 lần một cờ atomic — vì mỗi lần nhân phải ngắt luồng, lưu ngữ cảnh, dựng khung handler rồi sigreturn. Signal là cho sự kiện hiếm, không phải kênh tần suất cao.

Giải thuật 03/09/2026 8 phút

nice không làm tiến trình chạy nhanh hơn — trên máy rảnh nó vô nghĩa hoàn toàn

Tưởng nice thấp thì chạy nhanh hơn theo tỉ lệ, và nice luôn có tác động? Tôi đo: nice chỉ chia CPU khi bão hòa — hai tiến trình trên 10 lõi rảnh, nice 0 vs 19 vẫn 50/50; và tác động phi tuyến, chênh 5 gần như không đổi, phải chênh 19 mới lệch 21 lần. nice là công cụ chia phần, không phải nút tăng tốc.