Fixing Linux filesystem performance regressions
Bài tóm tắt LinkedIn 2020 3. Quy mô lớn Độ khó: Khó
LinkedIn · 2020 · 3. Quy mô lớn · Độ khó: Khó — bài gốc
Bối cảnh
- Fleet tăng từ hàng trăm lên hàng trăm nghìn server. Các đợt reimage trước đó làm theo kiểu dồn sức toàn đội mỗi khi có lý do bên ngoài (lỗi CPU công bố). Rút kinh nghiệm, LinkedIn dựng quy trình reimage tự động hơn và vòng đời server rõ hơn, rồi reimage toàn bộ Rain (private cloud chạy container) sang CentOS với kernel mới (từ 3.10).
Thay đổi chính
- Sự cố: gần xong thì dừng vì p99 của một ứng dụng phục vụ tăng mạnh mỗi khi một ứng dụng khác deploy trên cùng máy; chỉ xảy ra trên image mới. Rollback hàng chục nghìn server cũng là rủi ro.
- Chẩn đoán: không tài nguyên chung nào cạn (load, CPU hệ thống, page cache, hàng đợi đĩa) và perf không chỉ ra gì; máy không bận, chỉ chậm theo đồng hồ. Dựng test tái hiện (tải song song nhiều artifact lớn; benchmark fio) cho thấy lỗi ở cả kernel 4.19 và 5.4 và chỉ trên máy có đĩa gốc HDD (RAID1 phần mềm), máy SSD không bị.
- Thử patch upstream cho blk-mq thì đỡ một phần; đổi I/O scheduler không ảnh hưởng. Nghi ext4 (đã biết hồi quy direct I/O từ 4.9), thử XFS thì hết lỗi.
- Bisect kernel trên một máy vật lý rút khỏi rotation: trên 4.19 revert hai commit ext4 từ chu kỳ 4.6; trên 5.4 cherry-pick một commit ext4 của 5.6.
- Cấu hình của vendor cũng gây hồi quy: scsi-mq bị tắt trong config kernel của vendor; scheduler multi-queue bị build thành module nên không có lúc đĩa HDD đăng ký, kernel rơi về
noop. - Kết luận của LinkedIn: ext4 trên kernel trên 4.5 và dưới 5.6 chậm nặng khi có I/O tuần tự đồng thời trên đĩa quay; khuyên dùng 5.6 trở lên. Họ bổ sung test stress I/O vào quy trình duyệt golden image và tính tới tự động đổi filesystem mà không cần reimage.
Vì sao
- Nâng nền tảng cho cả fleet là điều kiện để engineer tiếp tục ship an toàn; sự cố chỉ hiện khi hai tenant cùng máy, đúng kiểu noisy neighbor của private cloud.
Bài học cho SWE
- Rollout thay đổi nền tảng theo đợt và có tiêu chí dừng; lỗi hiệu năng có thể chỉ xuất hiện ở một loại phần cứng.
- Khi công cụ không thấy máy bận mà vẫn chậm, nghĩ tới chờ I/O hoặc tranh chấp khoá.
- Bisect phải bắt đầu từ upstream sạch; patch và config của vendor có thể che nguyên nhân.
Liên quan
- LinkedIn 2018 (một hồi quy upstream khác, ở HDFS) · LinkedIn 2021
- Quản lý fleet và migrate code hàng loạt · Sự cố và postmortem · Multi-tenancy và cô lập tenant
#Reimage fleet#Rain private cloud#CentOS#kernel 3.10 → 4.19/5.4#noisy neighbor#p99 latency#ext4 regression#HDD RAID1#blk-mq#scsi-mq#XFS#kernel bisect#vendor config#golden image qualification
Được nhắc tới trong
Công ty (1)