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

Ghim luồng vào một lõi nhanh hơn 32% — hay 0%, tùy một con số bạn hay quên hỏi

Ghim lõi giữ cache nóng, nhanh hơn 32% khi working-set vừa cache (64KB) — nhưng 0% khi vượt cache (4MB) vì lúc đó tải là memory-bound. Và cái đuôi trễ nhọn trong máy ảo là nhiễu tầng ảo hóa, không phải do di trú lõi — chỉ lộ ra khi lặp đủ nhiều. Ghim đúng chỗ thì đáng, ghim vì tin đồn thì vô ích.

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

Đọc đồng hồ nhanh hơn cả getpid — điều bất khả nếu nó là syscall, và bí mật nằm ở một trang nhớ nhân cho mượn

clock_gettime(MONOTONIC) tốn 13 ns, nhanh hơn cả getpid (100 ns) — bất khả nếu nó là syscall. strace: 0 lời gọi hệ thống, vì vDSO ánh xạ trang giờ của nhân vào user-space. Nhưng đồng hồ giờ-CPU thì 143 ns và 1 syscall mỗi lần: cùng một API, hai cơ chế, chênh 11 lần.

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

Đoạn code của tôi 'chạy xong -1 giây': cái bẫy đo thời gian mà NTP âm thầm cài sẵn trong mọi hệ thống

Đo thời gian trôi qua bằng giờ tường, tôi nhận về -1,000 giây — một khoảng thời gian âm, đoạn code chạy xong trước khi bắt đầu. Vì giờ tường nhảy lùi khi bị chỉnh (NTP, admin). Đo thời lượng phải dùng đồng hồ đơn điệu — CLOCK_MONOTONIC cho +0,000032s đúng đắn ngay cùng lúc đó.

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

900 kết nối, 1 cái có việc: select quét hết mất 18.000ns, epoll trả lời trong 125ns — và cái bẫy khiến kết nối treo im lặng

Chờ 900 fd với chỉ 1 cái sẵn sàng: select/poll tốn ~18.000 ns (O(N), quét hết), epoll_wait 125 ns (phẳng lì dù nghìn fd) — nhanh ~140 lần. Nhưng edge-triggered đọc thiếu thì epoll im lặng và kết nối treo, còn select không đại diện nổi fd ≥ 1024. Chọn đúng công cụ và dùng đúng hợp đồng của nó.

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

Busy-poll biết tin sớm hơn 9 lần — nhưng đốt trọn một lõi CPU để ngồi hỏi 'có chưa? có chưa?'

Busy-poll nhận ra dữ liệu nhanh gấp 9 lần đọc chặn (11µs so với 97µs) — nhưng nó đốt trọn 100% một lõi CPU trong khi đọc chặn ngủ ở 0%. 'Nhanh' vô nghĩa nếu chưa hỏi 'tốn gì'. O_NONBLOCK sinh ra để ghép với epoll, không phải để quay bận ngây thơ.

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

Luồng tạo nhanh gấp 3 lần tiến trình — rồi một con trỏ NULL kéo sập cả 20 luồng đang làm việc tử tế

Tạo một luồng nhanh gấp 3 lần tạo một tiến trình (15µs so với 46µs) vì luồng chia sẻ không gian địa chỉ thay vì sao chép. Nhưng chính sự chia sẻ đó khiến một luồng segfault giết cả tiến trình, trong khi tiến trình con crash không đụng tới cha. Rẻ đổi lấy mong manh; đắt đổi lấy cô lập.