Hệ điều hành 03/09/2026 8 phút

Tôi bỏ file khỏi cache rồi đọc lại — vẫn nhanh như thường: khi môi trường đo giấu mất chính thứ tôi định đo

Page cache giữ file trong RAM để đọc lại tức thì (Cached 5,5GB, đọc 256MB ở ~36GB/s, 0 lỗi trang nặng). Nhưng trong container tôi không tạo nổi lần đọc 'nguội': overlayfs không có đĩa chậm thật bên dưới, FUSE thì bỏ qua page cache khách nên luôn chậm. Đo I/O trong container là đo tầng ảo hóa, không phải đĩa.

Hệ điều hành 03/09/2026 8 phút

Cùng một đoạn code O_DIRECT: chạy ngon trên máy dev, EINVAL giữa production — hợp đồng mỗi filesystem thực thi một khác

O_DIRECT bỏ qua page cache, đòi buffer/offset/độ dài căn lề theo khối. Nhưng việc thực thi tùy filesystem: overlayfs từ chối buffer lệch bằng EINVAL, FUSE lờ đi cho chạy, /dev/zero không mở nổi. Code thiếu căn lề chạy tốt lúc test rồi vỡ trên fs production — 'chạy được trên máy mình' là lời hứa rỗng.

Hệ điều hành 03/09/2026 8 phút

fsync 'chậm gấp 1312 lần write' — con số tôi suýt giật tít, hóa ra vì write() gần như chưa làm gì

write() một khối 512 byte tốn 0,39µs; thêm fdatasync thành 518µs — gấp 1312 lần trên overlayfs, nhưng chỉ 4,2 lần trên FUSE. Tỉ lệ khác nhau là vì write baseline khác nhau, không phải fsync bất thường. Và write() trả về thành công KHÔNG bảo đảm dữ liệu đã bền — chỉ fsync mới.

Hệ điều hành 03/09/2026 10 phút

'mmap nhanh gấp 8 lần read()' — con số đẹp tôi suýt công bố, hóa ra hai bên làm hai việc khác nhau

mmap trông như miễn phí vì không có syscall read — phép đo đầu cho nó nhanh gấp 8 lần. Nhưng getrusage tố cáo nó mới chạm 2176 trang chứ chưa đọc hết file. Cho cả hai cùng cộng 256MB: read() nhanh gấp 5 lần mmap (87 so với 430 ms). Benchmark chỉ có nghĩa khi hai bên làm đúng cùng một việc.

Hệ điều hành 03/09/2026 9 phút

Cùng một ống pipe: 3,3 MB/s hay 10 GB/s — chênh 3000 lần chỉ vì một lựa chọn bạn hay bỏ qua

Cùng một pipe: ghi từng byte cho 3,3 MB/s, ghi lô 64KB cho 10335 MB/s — nhanh gấp ~3000 lần. Con số nhỏ không đo pipe, nó đo phí syscall (strace: 1 triệu lệnh write so với 16). Thông lượng đạt đỉnh đúng ở cỡ lô bằng dung lượng pipe 64KB. Pipe không chậm; ghi-từng-byte mới chậm.

Hệ điều hành 03/09/2026 9 phút

Cùng một vòng read() chạy ngon với pipe lại treo cứng với socket: bẫy ngữ nghĩa ẩn sau chữ ký hàm giống hệt

Unix socket mang tiếng 'socket' nhưng không hề chậm hơn pipe: 12597 so với 10791 MB/s vì AF_UNIX đi thẳng trong nhân, không qua mạng. Khác biệt thật là ngữ nghĩa — SOCK_STREAM gộp byte và báo EOF, SOCK_DGRAM giữ ranh giới gói và không có EOF, nên một vòng read() bê nguyên sang datagram sẽ treo vô tận.