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

2000 lần malloc, chỉ 4 lần chạm kernel: vì sao cấp phát bộ nhớ rẻ — và cú strace trống rỗng suýt lừa tôi

malloc không phải syscall: 2000 khối nhỏ chỉ sinh 4 lần brk (gom lô ở user space), mỗi malloc+free 64B tốn 9,4 ns; khối lớn 256KB+ mới mmap riêng. Nhưng khi tôi đo malloc 1MB bằng bản -O2, strace trống trơn — optimizer đã xóa mất cặp malloc/free không dùng. Mức -O là biến ẩn cả trong phép đo strace.

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

Trang lớn 'chẳng giúp gì' — tôi suýt kết luận vậy vì đo sai kiểu truy cập

Huge page 2MB làm truy cập ngẫu nhiên trên 512MB nhanh ~30% (28,83 xuống 20,33 ns/bước) nhờ ít TLB miss. Nhưng tôi đo bằng truy cập tuần tự trước, thấy hai bên bằng nhau (1,18 vs 1,31 ns), suýt kết huge page vô dụng — vì tuần tự thì prefetch che hết TLB. Mẫu truy cập là biến ẩn quyết định.

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.

Mạng 03/09/2026 9 phút

Unix socket nhanh gấp mười TCP loopback? Tôi đo ra chỉ 1,6 lần — và cái bẫy Nagle tôi giăng sẵn không sập

Cùng một máy, Unix socket nhanh hơn TCP loopback thật — nhưng chỉ ~1,6 lần độ trễ (18,8 so 30,2 µs), không phải chục lần như tôi tưởng. Và cú treo Nagle 40ms tôi chủ động giăng bẫy để tái hiện lại chẳng thèm xuất hiện. Hai trực giác, hai lần trượt. Đo thật trong container.

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

mmap 4GB, VSZ nhảy lên 4098MB nhưng RAM đứng yên ở 1MB: tôi suýt báo một chương trình 1MB là quái vật 4GB

mmap 4GB làm VSZ nhảy lên 4098MB nhưng RSS đứng yên ở 1MB — tôi suýt nhìn nhầm cột và phóng đại mức dùng RAM 4000 lần. RSS mới là RAM thật, VSZ chỉ là địa chỉ ảo đã đặt chỗ. Và mmap 64GB trên máy 8GB vẫn thành công. 'Bộ nhớ' không phải một con số — hỏi rõ cột nào trước khi tin.