Overcommit bộ nhớ
malloc 512 GB trên một máy 8 GB vẫn báo THÀNH CÔNG — vì overcommit chỉ hứa, chưa giao RAM. Sự thật lộ khi chạm trang: OOM killer giết ở giới hạn thật. Đo thật.
malloc 512 GB trên một máy 8 GB vẫn báo THÀNH CÔNG — vì overcommit chỉ hứa, chưa giao RAM. Sự thật lộ khi chạm trang: OOM killer giết ở giới hạn thật. Đo thật.
Khi hết RAM, nhân giết ai? Không phải kẻ vừa xin làm tràn, mà KẺ TO NHẤT — một tiến trình ngoài cuộc đang ngồi yên. Đo thật bằng oom_score và dmesg.
Container ở 255/256 MB — sắp OOM? Không hẳn: nếu 'đầy' là page cache thì container khỏe re, oom_kill=0; nếu là anon thì exit 137. Cùng con số, kết cục trái ngược. Đo thật.
Truy cập ngẫu nhiên trên 1 GB: trang 4KB mất 138 ns/lần, trang lớn 2MB chỉ 114 ns — chênh đó là chi phí lỗi TLB. Và một lần THP=always khiến 'nền 4KB' của tôi âm thầm là 2MB. Đo thật.
Nạp lại một trang đã bị đẩy ra swap tốn ~704 ns, chậm hơn đọc RAM 58 lần — dù bộ đếm ru_majflt và pswpin đều báo 0. Tin đồng hồ hơn bộ đếm. Đo thật bằng MADV_PAGEOUT.
Chạm 200MB anon chỉ sinh 102 lỗi trang, không phải 51200 — vì trang lớn THP. Và đọc file lạnh từ đĩa chỉ đếm 1 major fault dù chậm gấp 27 lần cache — vì readahead. Đo thật bằng getrusage.