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

Cùng một vòng read() chạy ngon với pipe lại treo cứng với socket: bẫy ngữ nghĩa ẩn sau chữ ký hàm giống hệt

Unix socket mang tiếng 'socket' nhưng không hề chậm hơn pipe: 12597 so với 10791 MB/s vì AF_UNIX đi thẳng trong nhân, không qua mạng. Khác biệt thật là ngữ nghĩa — SOCK_STREAM gộp byte và báo EOF, SOCK_DGRAM giữ ranh giới gói và không có EOF, nên một vòng read() bê nguyên sang datagram sẽ treo vô tận.

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

Bộ nhớ chia sẻ 'không chép' đáng lẽ nhanh nhất — bản đầu của tôi lại thua cả pipe chép hai lần

Bộ nhớ chia sẻ không chép qua nhân, đáng lẽ nhanh nhất. Nhưng bản đầu của tôi (2519 MB/s) THUA cả pipe (2755) — vì tôi ghi hết rồi mới đọc, hai lõi thay nhau ngồi không. Sửa thành vòng đệm chồng lấn: 4004 MB/s, 0 lời gọi hệ thống. Không-chép là điều kiện cần, chồng lấn mới là điều kiện đủ.

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

Tôi suýt viết 'tín hiệu chậm gấp 14 lần pipe' — rồi phát hiện thủ phạm là một dòng cấu hình tôi quên

Tín hiệu khứ hồi 17µs, tôi suýt kết 'chậm gấp 14 lần pipe'. Nhưng đo pipe cùng điều kiện cũng 16µs — biến ẩn là ghim lõi khác nhau, không phải tín hiệu. Kèm bẫy gộp tín hiệu: gửi SIGUSR1 100 lần chỉ nhận 1, còn tín hiệu thời gian thực xếp hàng đủ 100.

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

2 triệu lần khóa mutex, 0 lời gọi hệ thống: 'khóa đắt' là niềm tin tôi mang theo và đo xong mới bỏ được

Tôi tưởng mỗi lần khóa mutex là một syscall vào nhân. strace 2 triệu lần khóa: 0 lệnh futex — mutex sống trong user-space, chỉ vào nhân khi tranh chấp (và cả khi đó cũng chỉ ~0,03%). Khóa không tranh chấp tốn 3,4 ns; cái đắt khi tranh chấp là cache nảy giữa các lõi, không phải syscall.

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

Tôi tưởng nice -20 làm chương trình chạy nhanh hơn — đo xong mới biết mình hiểu sai suốt bao năm

nice 19 chạy một mình vẫn được 118345 đơn vị, y hệt nice 0: nice không phải nút tốc độ mà là trọng số chia CPU, chỉ có tác dụng khi có tranh chấp. CFS chia đều một lõi (mỗi tiến trình 1/N, tổng công việc không đổi) — thêm tiến trình không nướng thêm bánh CPU.

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

Phép đo real-time cho tôi 50:50 sạch đẹp — và nó sai hoàn toàn vì một mã trả về tôi suýt bỏ qua

Đo SCHED_FIFO so tiến trình thường ra 50:50 sạch sẽ — nhưng mã trả về rtok=0 tố cáo lệnh đặt lịch RT đã thất bại, tôi đang đo hai tiến trình thường. Cấp quyền RT: FIFO đè còn 95:5 — và cái 5% không phải real-time lịch sự mà là van an toàn của nhân chặn ở 95% để bạn không treo máy.