Copy-on-write khi fork
Sau fork, con ghi 0% thì chiếm riêng 0MB, ghi 100% thì 400MB — bộ nhớ được chia sẻ đúng tới khi ghi. Nhưng RSS đứng yên 400MB ở mọi mức: nó đếm cả trang chung. Đo thật bằng smaps.
Sau fork, con ghi 0% thì chiếm riêng 0MB, ghi 100% thì 400MB — bộ nhớ được chia sẻ đúng tới khi ghi. Nhưng RSS đứng yên 400MB ở mọi mức: nó đếm cả trang chung. Đo thật bằng smaps.
Tạo một luồng tốn 42us, tạo một tiến trình 96us — nhanh hơn ~2 lần, không phải 100 lần. Và 1000 luồng làm VmSize +8GB nhưng RAM thật chỉ +8MB: 8MB mỗi luồng là địa chỉ ảo. Đo thật.
Ghim hai luồng vào một nhân, đổi ngữ cảnh tốn 0,5us. Bỏ ghim để dùng hai nhân — chậm gấp 16 lần (8,7us), vì đó là cross-core chứ không phải đổi ngữ cảnh. Đo thật bằng ping-pong.
Dựng từng trạng thái R/S/D/Z/T rồi đọc /proc: dd đồng bộ nằm trong D tới 72% thời gian. Và load average không vọt lên ngay khi có tải — vì nó là trung bình trượt 1/5/15 phút. Đo thật.
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.
Đọc file chạm mọi byte: mmap và read bằng nhau (~3700 MB/s). Nhưng chạm thưa 1 byte/trang, mmap nhanh gấp 5 lần (190 vs 40 GB/s) — vì read phải chép cả file vào buffer. Đo thật.