Linux 01/09/2026 9 phút

Bộ đệm gửi mặc định chỉ 46 KB nhưng nhanh bằng hoặc hơn mọi giá trị bạn đặt tay — và đặt một con số 'an toàn' 64 KB làm chậm gần ba lần vì nó tắt cơ chế tự điều chỉnh của nhân

Hai nút mạng người ta hay chỉnh, đo thật cả hai. Kích thước mỗi lần send tạo chênh lệch 36 lần và gãy rõ ở 64 KB — đúng chuyện chi phí lời gọi hệ thống. Còn SO_SNDBUF thì ngược đời: đặt tay làm chậm đi, vì bạn khoá cứng một con số trong khi nhân đang tự co giãn theo mạng thật. Để yên là lựa chọn đúng gần như mọi lúc.

Backend 01/09/2026 8 phút

Đếm một triệu phần tử khác nhau bằng 14.384 byte với sai số 0,12% — và HyperLogLog còn ghi nhanh hơn Set 1,6 lần vì nó không lưu phần tử nào

Hai kiểu dữ liệu ít dùng nhất của Redis cũng là hai kiểu tiết kiệm nhất. Đo cả bộ nhớ lẫn sai số: HyperLogLog đếm một triệu phần tử khác nhau trong 14.384 byte cố định (nhỏ hơn Set 3.364 lần) với sai số dưới 0,5%, và PFADD nhanh hơn SADD vì nó băm rồi vứt, không cấp phát. Bitmap nhỏ hơn Set 35 lần nhưng có bẫy: bộ nhớ phụ thuộc chỉ số bit lớn nhất, không phụ thuộc số bit đã đặt.

Linux 01/09/2026 10 phút

Công cụ này chỉ chậm 2 lần thay vì 446 lần, thấy cả máy chứ không phải một tiến trình, và moi ra được lần gọi chậm gấp nghìn lần trung vị mà trung bình, p99 đều giấu

strace muốn nhìn phải dừng tiến trình rồi đọc thanh ghi từ bên ngoài — chậm 446 lần. eBPF nạp thẳng chương trình đo vào trong nhân, chạy tại chỗ. Kết quả: 2 lần chi phí, thấy cả máy trong một lần đo, và một cái đuôi 128–256 micro giây mà không trung bình hay phân vị nào bắt được.

Backend 01/09/2026 7 phút

Một tập 512 số nguyên trong Redis tốn 2,6 byte mỗi số — thêm đúng một phần tử nữa là nhảy lên 48,2 byte, gấp 18,6 lần

Đo bốn kiểu tập hợp của Redis và tìm ra ba vách đá bộ nhớ rơi ở đúng một phần tử. Gom nhiều giá trị vào một Hash/Set rẻ hơn nhiều khoá riêng 2,3–2,8 lần vì phụ trội 64 byte mỗi khoá biến mất. Nhưng vượt ngưỡng listpack/intset là bộ nhớ mỗi phần tử nhảy 2,3–18,6 lần chỉ vì một phần tử. Và LINDEX có hình chữ V: chậm nhất ở giữa list, không phải ở cuối.

Linux 01/09/2026 8 phút

'Đọc tuần tự nhanh hơn ngẫu nhiên' — đo trên SSD thì hai kiểu cho cùng một con số; cái quy tắc ba mươi năm ấy chết cùng cây kim đĩa than, và thứ thật sự quyết định là độ sâu hàng đợi

Quy tắc kinh điển của thiết kế lưu trữ hoá ra là quy tắc của đĩa quay: nó xoay quanh cây kim phải nhấc sang rãnh khác. Trên NVMe không có bộ phận nào chuyển động, nên tuần tự và ngẫu nhiên đo ra bằng nhau. Cái đòn bẩy thật bây giờ là số yêu cầu đang bay cùng lúc — đo được 8,6 lần thông lượng — và có một điểm bão hoà mà vượt qua chỉ làm mọi thứ chậm đi.

Backend 01/09/2026 8 phút

BLPOP nhận việc sau 0,3 mili giây, còn vòng lặp hỏi mỗi 100 ms mất 50,6 ms và tốn gấp 10 lần số lệnh — nhanh hơn 170 lần cho một dòng lệnh đổi tên

Dùng List làm hàng đợi là cách phổ biến nhất, và cách lấy việc ra quyết định gần như mọi thứ. Đo ba cách chờ: BLPOP nhận việc sau 0,3 ms với 0 lần thăm dò, còn vòng lặp hỏi mỗi 100 ms mất 50,6 ms (trung vị luôn xấp xỉ nửa chu kỳ) và gửi gấp 10 lần số lệnh cho không việc gì. Nhưng BLPOP vẫn mất việc khi tiến trình chết — BLMOVE sang danh sách 'đang xử lý' chỉ tốn thêm 9,5%, và đó là ranh giới nên chuyển sang Stream.