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.

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

Mỗi cú chuyển hướng lặng lẽ ăn của bạn một vòng mạng — và POST của bạn có thể bốc hơi trên đường

Mỗi 301/302 thêm một vòng khứ hồi (~60ms) khi tái dùng kết nối, nhưng tới hai vòng nếu đổi host. 301 được cache nên lần sau miễn phí, 302 thì trả mỗi lần. Và một cái bẫy ít ai để ý: 301/302 có thể biến POST thành GET, làm mất sạch dữ liệu — 307/308 mới giữ. Đo thật.

Cơ sở dữ liệu 03/09/2026 8 phút

Hash join 78ms hay 223ms cho cùng một câu? Con số 'Batches' trong EXPLAIN nói tất cả

Join hai bảng lớn: hash join 78ms (bảng băm vừa RAM, Batches=1), nhanh gần 3 lần nested loop. Nhưng work_mem nhỏ làm bảng băm tràn 16 batch ra đĩa và chậm hẳn. Tôi suýt kết luận 'hash join nhanh' vô điều kiện — cho tới khi hạ work_mem và thấy Batches nhảy lên 16. Đọc Batches, không chỉ thời gian tổng.

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

Tôi tưởng NAT ném cổng ngẫu nhiên nên P2P vô vọng — đọc bảng conntrack mới biết mình sai

NAT Linux không tung cho bạn cổng ngẫu nhiên: nó GIỮ cổng nguồn 40000 → 40000, dùng cùng một cổng ngoài cho mọi đích, chỉ đổi khi hai máy nội bộ xung đột (→ 42478). Kiểu ánh xạ 'độc lập điểm cuối' này chính là thứ cho gọi video P2P xuyên NAT được. Đo thẳng bằng conntrack.

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

1000 luồng làm VmSize vọt lên 8 GB, tôi hoảng 'luồng đắt kinh khủng' — rồi nhìn cột bên cạnh: RAM thật chỉ 8 MB

Tạo một luồng tốn 42us, tạo một tiến trình 96us — nhanh hơn ~2 lần, không phải 100 lần như folklore. Và 1000 luồng làm VmSize +8GB nhưng RAM thật chỉ +8MB: 8MB mỗi luồng chỉ là địa chỉ ảo đặt trước cho ngăn xếp, không phải RAM. Đo thật.

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

Hạ tcp_fin_timeout để 'dọn' TIME-WAIT — lời khuyên nhan nhản trên diễn đàn mà tôi đo ra là sai

Đọc vòng đời một kết nối TCP qua ss: LISTEN, ESTABLISHED, TIME-WAIT, CLOSE-WAIT. Tôi hạ tcp_fin_timeout để rút TIME-WAIT như lời khuyên phổ biến — nó chẳng nhúc nhích, vì nó chỉnh một trạng thái KHÁC. Và TIME-WAIT với CLOSE-WAIT: hai bệnh cùng chữ 'wait' nhưng chẩn đoán ngược nhau. Đo thật.