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

printf không phải một syscall mỗi lần: đệm stdio nhanh hơn 116 lần

Tưởng mỗi putc/fprintf là một syscall, và stdout luôn được đệm như nhau? Tôi đo thử: stdio đệm trong user-space nên có đệm nhanh hơn không đệm 116 lần (10 triệu write() vs 2442); và mặc định đệm khác nhau tùy stdout là file, pipe hay terminal — thứ quyết định cả tốc độ lẫn output có mất khi crash.

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

Tối ưu NUMA trên máy 1 node = tối ưu hư vô: đo topology trước đã

Tưởng cứ dùng numactl là tối ưu, và malloc quyết định trang RAM nằm ở đâu? Tôi đo topology thật: môi trường này 0 NUMA node nên hiệu ứng remote/local không quan sát được — và bài học lớn nhất là đo topology trước; còn trên máy nhiều node, first-touch (không phải malloc) mới quyết định.

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

Cùng O(n) mà chậm 442 lần: bí mật cache của mảng vs linked list

Tưởng duyệt mảng và danh sách liên kết tốn như nhau vì cùng O(n)? Tôi đo thử: duyệt 20 triệu phần tử, mảng 0,24ns/phần tử còn linked list 104ns — chậm 442 lần, vì mỗi con trỏ next là một cache miss còn mảng thì được prefetch. Big-O đếm số thao tác, không đếm giá mỗi thao tác.

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

CPU sắp lại thứ tự bộ nhớ thật — 11 lần trong 60 triệu vòng, hiếm tới mức test không bao giờ bắt được

Tưởng CPU luôn chạy theo thứ tự mình viết, còn reorder bộ nhớ chỉ là lý thuyết trong sách? Tôi đo litmus store-buffer trên ARM: reorder xảy ra thật (11 ca trong 60 triệu vòng), rào dmb ish dập được về 0. Nhưng nó hiếm tới ~1 trên 5,5 triệu vòng — nên code sai vẫn qua sạch mọi test rồi nổ ở production.