False sharing
Hai luồng ghi hai biến RIÊNG, không hề chia sẻ gì trong code — nhưng để chung một cache line thì chậm ~3,7 lần. Tranh chấp vô hình ở tầng mã nguồn. Đo thật.
Hai luồng ghi hai biến RIÊNG, không hề chia sẻ gì trong code — nhưng để chung một cache line thì chậm ~3,7 lần. Tranh chấp vô hình ở tầng mã nguồn. Đo thật.
Đọc /proc/self/stat tốn ~1,5 us — tưởng 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ộ bảng trang. Đo thật.
Mỗi syscall dưới strace tốn ~80 micro giây thay vì 126 nano giây — chậm 630 lần. Nên mọi số đo thời gian dưới strace đều sai. Chính công cụ đo suốt sê-ri này là kẻ nói dối lớn nhất về thời gian. Đo thật.
Load average trên Linux đếm cả tiến trình kẹt chờ I/O — nên 4 tiến trình chờ đĩa đẩy load lên 4 dù CPU rảnh. Và nó dâng chậm vì làm mượt. Load cao ≠ CPU quá tải. Đo thật.
Định đo cache-miss và branch-miss bằng perf, nhưng máy ảo không lộ PMU nên perf trả <not supported>. Phải quay về đồng hồ — nó vẫn lộ hiệu ứng cache chậm 200 lần. Đo thật.
Bộ đếm atomic nhanh hơn mutex 3 lần — nhưng nó KHÔNG scale: thông lượng tụt khi thêm luồng, vì dòng cache nảy giữa các nhân. Cách scale thật là không chia sẻ. Đo thật.