Q

Quản trị viên

Là một lập trình viên yêu công nghệ, thích viết blog để chia sẻ kiến thức, kinh nghiệm lập trình và những điều thú vị trong thế giới tech.

2300 bài viết · Website
Linux 01/09/2026 9 phút

Bắt tay TLS thêm 995 µs, và người ta bảo đó là 'một vòng khứ hồi' — tôi đo ra nó tốn CPU gấp 33 lần một vòng mạng

TLS 1.3 hay được mô tả là 'thêm một vòng khứ hồi'. Tôi đo cùng máy, cùng chương trình, chỉ khác cổng: bắt tay thêm 995 µs còn mỗi vòng sau đó chỉ thêm 18 µs. Và 995 µs ấy gần như toàn bộ là CPU — chữ ký RSA, không phải độ trễ mạng. Đó đổi hẳn cách bạn tối ưu HTTPS.

Linux 01/09/2026 8 phút

Đọc 100 MB từ /dev/random mất 138 ms và entropy_avail không giảm một bit — cái bẫy 'random sẽ chặn' đã chết từ nhân 5.6

'Đừng dùng /dev/random, nó sẽ chặn' là một trong những lời khuyên Linux được lặp nhiều nhất — và sai từ nhân 5.6. Tôi đo: /dev/random và /dev/urandom cho cùng 780 MB/s, entropy không tiêu hao, còn rand() nhanh gấp mười ở 16 byte nhưng CHẬM nhất ở 4 KB và không đoán nổi ai dùng nó cho bảo mật. Lập luận 'dùng RNG yếu cho nhanh' không còn cơ sở đo lường.

Linux 01/09/2026 12 phút

fork() ở RSS 1 GB chậm gấp 20 lần khi RSS gần 0 — copy-on-write vẫn phải sao bảng trang, và Transparent Huge Page giấu 16 lần chi phí đó

fork() không copy dữ liệu nhờ copy-on-write, ai cũng biết — nhưng nó vẫn sao bảng trang, và chi phí đó tỉ lệ với RSS của cha. Tôi đo fork/vfork/posix_spawn khi cha giữ tới 1 GB: fork lên 3.850 µs còn vfork/posix_spawn phẳng lì, và tắt THP làm fork chậm thêm 9,3 lần. Vì sao THP che gần hết chi phí, đo bằng con số.

Linux 01/09/2026 9 phút

Hồ sơ phẳng nói '99,90% CPU nằm trong hàm tinh()' — chính xác tới 0,15 điểm, và hoàn toàn vô dụng; cùng số liệu ấy tách theo đường gọi thì chỉ thẳng vào chỗ phải sửa

Một con số đúng vẫn có thể chẳng giúp được gì. Hồ sơ phẳng bảo toàn bộ CPU nằm trong một hàm tiện ích gọi từ khắp nơi — biết tên mà không biết ai gọi. Tách cùng số liệu ấy theo ngăn xếp: nén ngốn 85%, và một hàm nen() hiện ra hai lần với hai tỷ lệ khác nhau tuỳ ai gọi nó.

Linux 01/09/2026 8 phút

Tiến trình làm tràn bộ nhớ sống sót và giữ trọn 300 MB nó vừa xin — kẻ bị giết là một tiến trình khác hoàn toàn vô can, và đây là lý do log OOM luôn trỏ nhầm thủ phạm

Container 700 MB, một tác vụ xin thêm 300 MB làm tràn giới hạn. Ai chết? Không phải nó — mà là tiến trình lớn nhất tại thời điểm đó. OOM killer không trừng phạt kẻ gây họa, nó ném thứ nặng nhất xuống để nổi thuyền. Cộng thêm: oom_score gần như vô dụng trong container, và đưa một tiến trình nhỏ lên đầu danh sách hy sinh chỉ làm mất hai tiến trình thay vì một.