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
Hệ điều hành 03/09/2026 8 phút

Load 8 mà CPU vẫn rảnh: con số ai cũng liếc để đoán 'máy bận' đang lừa bạn

Ai cũng tin 'load average = mức bận CPU'. Nhưng trên Linux nó đếm cả tiến trình kẹt chờ I/O — 4 tiến trình chờ đĩa đẩy load lên 4 dù CPU nhàn tênh. Cùng con số load 8, hai căn bệnh trái ngược. Và nó còn dâng chậm vì làm mượt. Đo thật hai lầm tưởng của chính tôi.

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

Khi 'perf' báo Operation not permitted mà vẫn đo được branch-miss

Người ta bảo muốn biết cache-miss hay branch-miss thật thì phải có perf và bộ đếm phần cứng. Máy tôi đo thì perf còn chẳng chạy — VM khóa luôn PMU. Vậy mà chỉ với một cái đồng hồ và một thí nghiệm đổi đúng một biến, branch-miss vẫn hiện ra rõ mồn một, chậm gần 7 lần.

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

Chạm hết 2GB vừa cấp phát mà RAM không nhích một byte — vì tôi 'chạm' bằng đọc, không phải ghi

Cấp phát 2GB tức thì: VmSize +2GB nhưng VmRSS +0. Tôi chạm hết 2GB đó để cấp RAM, mà RSS vẫn đứng im — vì đọc bộ nhớ mới chỉ trỏ vào một trang zero chung, không cấp RAM riêng. Chỉ GHI mới biến ảo thành thật. Đo thật bằng /proc/self/status.

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

unordered_map dùng chaining — nhưng đó có phải cách nhanh nhất?

std::unordered_map dùng chaining nên chaining là cách nhanh nhất xử lý va chạm? Đo ra: open addressing (dò trong một mảng liền) tra cứu nhanh hơn ở hệ số tải vừa (10,4 vs 15,1 ns ở tải 0,5) và gọn hơn 3,4 lần bộ nhớ. Nhưng ở tải 0,9, dò dồn cụm trung bình 5,45 lần khiến open chậm hẳn và chaining vượt lên — một điểm giao rõ ràng.