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

Pipe khai 64 KB, nhưng ghi lố 1 byte mỗi khối thì chỉ nhét được 44 KB — cách đo tự định hình con số

Pipe báo dung lượng 64 KB. Nhưng ghi khối 4097 byte (lố đúng 1 byte qua ranh giới trang) chỉ nhét được 44 KB trước khi write chặn — mất một phần ba. 'Dung lượng pipe' không phải một số duy nhất; chính cỡ khối ghi định hình nó. Và khi đầy, write chặn đúng tới khi bên đọc rút. Đo thật.

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

Đọc một file /proc tốn 1,5 micro giây, tôi định chốt 'rẻ' — file bên cạnh lại đắt gấp 8 lần và còn phình

Đọc /proc/self/stat tốn ~1,5 us, tôi suýt khái quát 'mọi file /proc đều rẻ vậy'. Nhưng smaps tốn 12 us và còn phình theo bộ nhớ tiến trình, vì nhân phải đi bộ toàn bộ bảng trang. Cái rẻ và cái đắt nằm chung một thư mục trông y hệt nhau. Đo thật.

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

Đổi mutex sang atomic được nhanh gấp 3 — rồi tôi phát hiện cú nhanh gấp 42 mình suýt bỏ lỡ

Ai cũng khuyên 'bộ đếm đa luồng thì dùng atomic thay mutex cho nhanh'. Đo ra atomic nhanh gấp 3 thật — nhưng thêm luồng vào thì cả atomic lẫn CAS đều TỤT, vì cùng nảy một dòng cache. Cách thật sự scale là không chia sẻ, và nó nhanh hơn atomic 42 lần. Đ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 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.