OOM killer
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.
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.
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.
Chuyển 1 GB giữa hai tiến trình: pipe 3,1 GB/s, bộ nhớ chia sẻ có ring 9,8 GB/s (~3×). Nhưng shm một đệm lại chậm hơn pipe, và một số 15 GB/s dối đã suýt lừa tôi. Đo thật.
Pipe báo dung lượng 64 KB, nhưng ghi khối 4097 byte chỉ nhét được 44 KB trước khi chặn — cách ghi định hình con số. Và khi đầy, write() chặn đúng tới khi bên đọc rút. Đo thật.
Khóa mutex khi không ai tranh chỉ tốn 5,4 ns (thuần userspace, không syscall). Tranh chấp 8 luồng chậm ~4 lần — nhưng strace cho thấy gần như không có syscall futex nào. Đo thật.