Độ phân giải timer
clock_getres báo 1 nano giây, nhưng xin ngủ 1 micro giây thì ngủ thật ~84 micro giây — gấp 84 lần. Có một sàn ~80us do độ trễ đánh thức, không phải độ phân giải đồng hồ. Đo thật.
clock_getres báo 1 nano giây, nhưng xin ngủ 1 micro giây thì ngủ thật ~84 micro giây — gấp 84 lần. Có một sàn ~80us do độ trễ đánh thức, không phải độ phân giải đồng hồ. Đo thật.
Giao một tín hiệu tới handler tốn ~500 ns. Nhưng cú đắt hơn là EINTR: một tín hiệu tới giữa nanosleep(10 giây) làm nó trả về sau 0,055 giây — và nếu bỏ giá trị trả về, bạn không hề biết. Đo thật.
Một tiến trình zombie chiếm RSS ~0 KB — đo bộ nhớ thì tưởng vô hại. Nhưng nó giữ một slot PID, và đủ zombie thì cạn PID, fork() thất bại khắp máy dù RAM còn đầy. Đo thật.
Hai lỗi gần như y hệt: 'Too many open files' (EMFILE, mỗi tiến trình) và '...in system' (ENFILE, toàn hệ thống). Vá nhầm bằng ulimit thì gõ cả buổi không hết. Đo thật.
Theo dõi 10.000 fd: poll tốn 247.670 ns mỗi lần gọi, epoll chỉ 133 ns — nhanh ~1860 lần. Nhưng epoll không phải O(1) thần kỳ, mà là O(số fd sẵn sàng). Đo thật.
O_DIRECT bỏ qua page cache — tưởng nhanh hơn, 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à một môi trường suýt lừa cả phép đo. Đo thật.