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

mmap 4GB, VSZ nhảy lên 4098MB nhưng RAM đứng yên ở 1MB: tôi suýt báo một chương trình 1MB là quái vật 4GB

mmap 4GB làm VSZ nhảy lên 4098MB nhưng RSS đứng yên ở 1MB — tôi suýt nhìn nhầm cột và phóng đại mức dùng RAM 4000 lần. RSS mới là RAM thật, VSZ chỉ là địa chỉ ảo đã đặt chỗ. Và mmap 64GB trên máy 8GB vẫn thành công. 'Bộ nhớ' không phải một con số — hỏi rõ cột nào trước khi tin.

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

2000 lần malloc, chỉ 4 lần chạm kernel: vì sao cấp phát bộ nhớ rẻ — và cú strace trống rỗng suýt lừa tôi

malloc không phải syscall: 2000 khối nhỏ chỉ sinh 4 lần brk (gom lô ở user space), mỗi malloc+free 64B tốn 9,4 ns; khối lớn 256KB+ mới mmap riêng. Nhưng khi tôi đo malloc 1MB bằng bản -O2, strace trống trơn — optimizer đã xóa mất cặp malloc/free không dùng. Mức -O là biến ẩn cả trong phép đo strace.

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 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

Đọc đồng hồ nhanh hơn cả getpid — điều bất khả nếu nó là syscall, và bí mật nằm ở một trang nhớ nhân cho mượn

clock_gettime(MONOTONIC) tốn 13 ns, nhanh hơn cả getpid (100 ns) — bất khả nếu nó là syscall. strace: 0 lời gọi hệ thống, vì vDSO ánh xạ trang giờ của nhân vào user-space. Nhưng đồng hồ giờ-CPU thì 143 ns và 1 syscall mỗi lần: cùng một API, hai cơ chế, chênh 11 lần.

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.