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

Cho hai luồng dùng hai nhân, tưởng nhanh hơn — hóa ra chậm gấp 16 lần, vì tôi đo nhầm hẳn một thứ khác

Ghim hai luồng vào một nhân, chuyển ngữ cảnh chỉ 0,5us. Bỏ ghim để chúng dùng hai nhân — chậm gấp 16 lần (8,7us). Trực giác 'nhiều nhân nhanh hơn' sai bét: hai nhân không chuyển ngữ cảnh, cái tôi đo là chi phí cross-core (cache nảy + IPI). Đo thật bằng ping-pong.

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

kill -9 mà tiến trình vẫn trơ ra: chữ 'D' trong ps giải thích tất cả — và load average không nhảy như tôi tưởng

Tôi dựng từng trạng thái R/S/D/Z/T rồi đọc /proc: một dd ghi đồng bộ nằm trong D (ngủ không-ngắt-được, kill -9 cũng phải chờ) tới 72% thời gian. Rồi liếc load average tưởng nó vọt lên, nhưng nó đứng im — vì là trung bình trượt 1/5/15 phút, phản ứng chậm. Đo thật.

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

Định đo 'đọc đĩa lần đầu' mà hai lần đọc bằng nhau y hệt — vì file tôi vừa ghi đã ấm sẵn trong cache

Đọc lạnh từ đĩa 93ms, đọc ấm từ cache 18ms — nhanh gấp 5 lần. Nhưng lần đầu tôi đo, hai lần bằng nhau: hóa ra ghi file bằng dd đã nạp sẵn nó vào page cache, nên 'lần đầu' của tôi vốn đã ấm. Muốn đo đọc lạnh phải drop_caches. Đo thật, và cột Cached là đèn báo.

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

Ghi gần một triệu bản ghi mỗi giây — rồi thêm fsync và nó sụp còn 2.578, chậm 388 lần

write() không fsync đạt ~984.000 ghi/giây, tôi suýt reo 'ghi đĩa nhanh khủng khiếp'. Nhưng đó là tốc độ page cache, dữ liệu chưa bền. Thêm fsync ép xuống đĩa: sụp còn ~2.578 ghi/giây (388us mỗi lần). Gộp một fsync cho cả lô cứu lại tốc độ mà vẫn bền. Đo thật.

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

malloc 512 GB trên máy 8 GB vẫn báo THÀNH CÔNG — rồi tôi ghi 500 MB và bị bắn gục

malloc 512 GB trên một máy 7,75 GB RAM vẫn trả về thành công tức thì, vì overcommit chỉ HỨA chứ chưa giao RAM. Tôi suýt tin 'cấp phát xong là có RAM'. Sự thật lộ khi chạm trang: OOM killer giết đúng ở giới hạn thật, mã thoát 137, còn xa lượng đã cấp phát. Đo thật.

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

fsync 'chậm gấp 1312 lần write' — con số tôi suýt giật tít, hóa ra vì write() gần như chưa làm gì

write() một khối 512 byte tốn 0,39µs; thêm fdatasync thành 518µs — gấp 1312 lần trên overlayfs, nhưng chỉ 4,2 lần trên FUSE. Tỉ lệ khác nhau là vì write baseline khác nhau, không phải fsync bất thường. Và write() trả về thành công KHÔNG bảo đảm dữ liệu đã bền — chỉ fsync mới.