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

Chạm 30.000 trang nhưng chỉ 364 page fault — vì sao 'chia đều' cho ra sai số 6 lần

Tưởng mmap/malloc xong là có bộ nhớ dùng ngay, và đo chi phí fault chỉ cần chạm trang rồi chia số trang? Tôi đo: một minor fault ~368ns, nhưng rusage lộ ra chỉ 364 fault cho 30.000 trang vì huge page gom 512 trang mỗi fault — chia đều thành 58ns là sai gần 6 lần. Phải đếm số fault thật.

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

Huge page không 'luôn nhanh hơn': vùng nhỏ chỉ 1,13 lần, và mỗi page fault khựng 40µs

Tưởng bật huge page thì luôn nhanh hơn, một tinh chỉnh miễn phí? Tôi đo: nó chỉ giúp khi TLB là nút thắt — vùng 0,3MB vừa TLB chỉ nhanh 1,13 lần, phải tới 67MB vượt TLB mới thắng 1,66 lần. Và có mặt trái: mỗi page fault huge phải zero cả 2MB, khựng ~40µs — 105 lần một fault thường.

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

write() báo thành công không nghĩa dữ liệu đã trên đĩa — mất điện là mất, và test không bắt được

Tưởng write() xong là dữ liệu đã an toàn trên đĩa? Tôi đo: write() chỉ copy vào page cache (RAM) rồi trả về ngay — nhanh 7 lần so với ép lên đĩa bằng fsync, nhưng dữ liệu chưa bền, mất điện trước write-back là mất sạch. 'Đã ghi' và 'đã bền' là hai chuyện khác nhau.