Bài viết mới nhất

Tổng 1867 bài
Hệ điều hành 03/09/2026 9 phút

clock_gettime nhanh gấp 8 lần getpid dù cả hai là 'syscall' — vì một cái không hề bẫy vào nhân

Một lời gọi hàm thường tốn 0,8ns; một syscall getpid bẫy vào nhân tốn ~113ns (gấp 140 lần). Nhưng clock_gettime chỉ 15ns, và tôi suýt viết 'syscall có thể rất rẻ'. Sự thật: nó không phải syscall — nó chạy trong vDSO, và strace không hề thấy nó. Đo thật bằng C và strace.

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.

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

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.

Giải thuật 03/09/2026 8 phút

fork chỉ tốn 74µs dù cha giữ gì — nhưng cấp 256MB trước rồi fork lại chậm 1,86 lần

Tưởng fork đắt vì phải sao chép cả bộ nhớ? Tôi đo: Copy-on-Write nên fork KHÔNG chép dữ liệu — chỉ 74µs, 1,6 lần một luồng. Nhưng CoW không làm fork miễn phí theo kích thước: fork sau khi cấp 256MB chậm 1,86 lần vì vẫn phải nhân đôi bảng trang. CoW cắt chép dữ liệu, không cắt chép bảng trang.

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.