Hệ thống tệp ext4 của tôi mất hiệu suất khi phát triển.
Tôi có một hệ thống lưu trữ rất nhiều tệp hình ảnh. Máy chủ hình ảnh dựa trên Debian này lưu trữ các tệp hình ảnh được chia thành các thư mục năm trên bộ đĩa 1-2TB với RAID-1 phần cứng. Các tệp được lưu trữ trong cấu trúc gồm các thư mục năm và hai cấp độ 256 thư mục bên dưới.
Thích
hình ảnh/2021/2b/0f/193528211006081503835.tif
Các tệp này được ghi liên tục trong năm và được phân bổ đều nhờ sự trợ giúp của hàm băm để mỗi thư mục lá/hình ảnh
chứa khoảng 400 tệp vào cuối năm.
Điều này mang lại tổng số khoảng 256 x 256 x 400 = 26 214 400 tệp mỗi năm.
Lặp lại cấu trúc thư mục này hoạt động tốt cho đến khoảng 20 triệu tệp.
Có thể mất vài giờ. Khi phát triển lớn hơn, thậm chí liệt kê một thư mục lá với 300-400 tệp có thể mất 1-4 giây khi không có trong bộ đệm. Tôi nghi ngờ nó có liên quan đến sự phân mảnh trong các mục nhập thư mục.
Truy cập một tệp riêng lẻ khi bạn biết đường dẫn luôn nhanh.
Và nó không phải là vấn đề về phần cứng/đĩa, hiệu suất io thô là tốt. Nhân tiện, các tệp không bao giờ bị xóa khỏi cấu trúc này.
Chống phân mảnh với e4defrag không có gì khác biệt. Tôi cho rằng nó chỉ chống phân mảnh tệp chứ không phải thư mục. fsck.ext4 -D có thể là một giải pháp, nhưng vì đây là hệ thống sản xuất nên tôi không muốn ngắt kết nối hệ thống tệp và thử.
Điều hữu ích là sao chép các tệp vào một thư mục tạm thời và sau đó di chuyển chúng trở lại ghi đè lên bản gốc. Thích
cp -a hình ảnh/2021/2b/0f/* hình ảnh/2021/2b/tmp
hình ảnh mv -f/2021/2b/tmp/* hình ảnh/2021/2b/0f
Sau khi hoạt động này hoạt động hiệu suất được phục hồi (ngay cả khi không có trong bộ nhớ cache).
Nếu bản thân các tệp bị phân mảnh, tôi hiểu tại sao điều này sẽ hữu ích, nhưng chúng không theo e4defrag.Di chuyển các tệp vào thư mục tạm thời và ngược lại không giúp được gì.
Ai đó có thể giúp tôi hiểu những gì đang xảy ra ở đây.