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

fork một tiến trình 256MB chỉ tốn 133 micro giây — và tôi từng đổ oan cho nhầm con số

Sao chép cả một tiến trình 256MB nghe phải mất hàng chục mili giây. Đo ra 133 micro giây, nhanh gấp trăm lần — vì fork nhân bảng trang chứ không chép byte. Rồi tôi suýt kết luận sai thủ phạm, cho tới khi tách 'đã cấp phát' khỏi 'đã chạm'. Và hóa ra fork là phần rẻ nhất; exec mới đắt. Đo thật trong container.

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

Đo ra stack và heap tốn như nhau, tôi biết ngay mình đo sai — vì chính vòng đo nuốt mất kết quả

Ai cũng biết cấp phát stack nhanh hơn malloc, nhưng phép đo đầu của tôi cho hai bên bằng nhau — dấu hiệu đo sai. Sửa lại: stack ~1 ns cho MỌI kích cỡ, malloc chậm 6-14 lần. Đổi lại stack giới hạn 8MB, tràn thì crash không báo; heap trả NULL. Đo thật.

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

Định dùng perf để soi vì sao code chậm, máy ảo trả <not supported> — và cả demo kinh điển cũng bốc hơi

PMU là cửa sổ duy nhất thấy 'chậm vì trượt cache hay đoán nhánh sai'. Nhưng máy ảo không lộ PMU nên perf trả <not supported>. Tôi phải quay về đồng hồ — nó vẫn lộ hiệu ứng cache chậm 200 lần. Rồi demo 'mảng sắp xếp nhanh hơn' lại không tái hiện, vì một lý do bất ngờ. Đo thật.

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

Load 8 mà CPU vẫn rảnh: con số ai cũng liếc để đoán 'máy bận' đang lừa bạn

Ai cũng tin 'load average = mức bận CPU'. Nhưng trên Linux nó đếm cả tiến trình kẹt chờ I/O — 4 tiến trình chờ đĩa đẩy load lên 4 dù CPU nhàn tênh. Cùng con số load 8, hai căn bệnh trái ngược. Và nó còn dâng chậm vì làm mượt. Đo thật hai lầm tưởng của chính tôi.

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

O_DIRECT tưởng là 'I/O nhanh', đo ra đọc-lại thua page cache 5 lần — và một máy ảo suýt lừa cả phép đo

O_DIRECT bỏ qua page cache, nghe như tối ưu. Nhưng đọc lại từ cache buffered ấm nhanh gấp ~5 lần. O_DIRECT là I/O KHÔNG cache, không phải I/O nhanh. Và lần đo đầu trên bind-mount cho kết quả vô lý vì các tầng cache lồng nhau nuốt luôn cờ direct. Đo thật.