epoll so với poll
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.
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.
fork một tiến trình 256MB chỉ tốn 133 micro giây, không phải chục mili giây — vì COW nhân bảng trang chứ không copy dữ liệu. Và mọi thứ vừa nhân bị exec vứt sạch. Đo thật trong container.
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.
sendfile gửi cả file 512 MB trong ĐÚNG 1 syscall thay vì 16.384 read+write. Nhưng trên loopback cache ấm, thông lượng thô của nó không hơn read+write đệm 64K — vì tôi đo nhầm đại lượng. Đo thật.
Cấp phát trên stack tốn ~1 ns cho mọi kích cỡ (chỉ dời con trỏ), malloc chậm 6-14 lần. Nhưng stack giới hạn 8MB và tràn thì crash không báo, còn heap trả NULL. Đo thật.
Ép malloc về một arena chỉ làm 8 luồng chậm nhẹ (556 xuống 434 triệu op/s) — tưởng arena không quan trọng. Nhưng tắt luôn tcache thì nó sập còn 23. Hai lớp chống tranh khóa. Đo thật.