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

Trang lớn 'chẳng giúp gì' — tôi suýt kết luận vậy vì đo sai kiểu truy cập

Huge page 2MB làm truy cập ngẫu nhiên trên 512MB nhanh ~30% (28,83 xuống 20,33 ns/bước) nhờ ít TLB miss. Nhưng tôi đo bằng truy cập tuần tự trước, thấy hai bên bằng nhau (1,18 vs 1,31 ns), suýt kết huge page vô dụng — vì tuần tự thì prefetch che hết TLB. Mẫu truy cập là biến ẩn quyết định.

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.