Linux 01/09/2026 9 phút

Container không lấy đi 3% CPU của tôi — nhưng chạy nhầm kiến trúc làm memset chậm đi 174 lần, và không có 'hệ số emulation' nào cả

Cùng một file C, cùng cờ -O2, chạy ở ba nơi trên một chiếc M4: chạy thẳng, container arm64, container x86_64. Cái vỏ container gần như miễn phí với CPU và bộ nhớ. Nhưng phiên dịch kiến trúc tính tiền từ 1,76 lần tới 174 lần trong CÙNG một chương trình — không tóm tắt được thành một con số.

Linux 01/09/2026 9 phút

Đọc 64 byte từ một tệp đã nằm sẵn trong RAM: pread mất 1.019 ns, mmap mất 19 ns — 53 lần, mà không bên nào chạm đĩa; toàn bộ khác biệt là cái giá đi vào nhân

mmap cho phép đọc một tệp như đọc một mảng trong bộ nhớ. Đo thật: với nhiều lần đọc nhỏ ngẫu nhiên trên tệp nóng, mmap nhanh 53 lần vì đọc một byte là đúng một lệnh máy, không lời gọi hệ thống nào. Nhưng nó không phải mặc định — lỗi I/O đến dưới dạng SIGBUS giữa một lệnh truy cập trông vô hại, và đó là lý do SQLite lẫn PostgreSQL từ chối dùng nó cho tệp dữ liệu chính.

DevOps 01/09/2026 7 phút

Sáu mươi phép đo Kubernetes gom thành một danh sách kiểm trước khi lên production — cùng ba lần tôi công bố sai rồi tự phát hiện lúc chạy lại

Sáu mươi phần, mỗi phần một phép đo trên cụm dựng bằng kind rồi xoá đi, gom lại thành thứ dùng được: mười con số đáng nhớ nhất, ba dạng lỗi lặp lại nhiều nhất, một danh sách kiểm trước khi lên chạy thật mà mỗi dòng dẫn về một phép đo cụ thể, và ba lần tôi viết sai rồi phải sửa. Bài học còn lại không phải sáu mươi mẹo, mà một thói quen: đo trước khi tin, kể cả tài liệu chính thức.

Linux 01/09/2026 8 phút

malloc 512 MB xong trong 0,1 mili giây và cấp đúng 0 byte — bộ nhớ thật chỉ xuất hiện khi bạn chạm vào, và lần chạm đầu đắt gấp 90 lần lần sau

mmap 512 MB trả về tức thì với 2 lỗi trang, vì nhân chỉ ghi vào sổ 'vùng này hợp lệ'. Bộ nhớ thật đến từng trang một khi bạn chạm: lỗi trang nhẹ tốn 990 ns so với 11 ns lần sau — 90 lần, và đây là lý do tiến trình vừa khởi động luôn chậm hơn. Cộng thêm hai bất ngờ: nạp sẵn nhanh hơn nạp lười 2,5 lần, và bộ đếm lỗi trang nặng nói dối.

Linux 01/09/2026 9 phút

ext4 báo 'hết ổ đĩa' khi vẫn còn trống 71% — nó hết một thứ khác mà df -h không hề nhắc tới, và đây là một trong những sự cố khó chẩn đoán nhất trên máy chủ

Tạo tệp rỗng trên ext4 tới khi No space left on device — mà dung lượng còn dư 71%. Thủ phạm là inode: ext4 chốt cứng số lượng lúc mkfs, hết inode là hết tệp bất kể còn bao nhiêu GB. Cộng thêm bảng đo chi phí stat theo tầng liên kết mềm, trần chuỗi đúng 40, và một sai lầm đo lường tôi tự vấp: stat không đi theo liên kết.

DevOps 01/09/2026 8 phút

Trần thật của một node Kubernetes không phải RAM mà là con số 110 — node to gấp đôi không cho gấp đôi số pod, và cụm kind báo 62,4 GiB trên một máy chỉ có 15,6

Đo chi phí bên trong một cụm: bao nhiêu tài nguyên biến mất trước khi ứng dụng đầu tiên chạy. kubelet + containerd 207 MB mỗi node cố định; một pod rỗng tốn 0,44 MB. Nhưng con số đảo ngược trực giác nhất là trần 110 pod/node — độc lập với kích thước node, nên node 16 GB xếp đầy chỉ còn 145 Mi mỗi pod, và pod nhỏ chạm trần SỐ LƯỢNG trước khi chạm trần RAM. Cẩn thận: đo trên kind lạc quan gấp bốn lần vì mỗi node container thấy RAM của cả máy.