Hiệu suất EXT4 đã trở nên rất tệ trên hệ thống với nhiều tệp nhỏ


10

Tôi có một thiết bị nhúng nhỏ chỉ có 128 MB RAM

kèm theo thiết bị này là ổ cứng USB2 2TB

Tôi đã rất hài lòng với hiệu suất của thiết bị cho đến gần đây khi số lượng tệp vượt qua ngưỡng dung lượng của đĩa đã vượt qua ngưỡng (Tôi không chắc chắn về điều đó)

trên đĩa có nhiều tệp nhỏ, do bản chất của các tệp ứng dụng ghi được sắp xếp theo cách rất cân bằng - không có thư mục nút lá nào có hơn 200 tệp và chỉ có hơn 800.000 tệp.

Tôi hy vọng sẽ dẫn đầu về một cái gì đó để điều tra. Hiệu suất đĩa đã giảm đáng kể, thiết bị được nén khá tốt và sau đó tất cả hiệu suất đột ngột giảm xuống như một tảng đá.

Giả định của tôi là cấu trúc tổ chức mà tôi đã chọn trên đĩa cho các tệp của mình bằng cách nào đó đã làm tổn thương khả năng lưu trữ bộ đệm inode.

như một thử nghiệm, tôi đã gỡ bỏ đĩa (xóa bộ nhớ cache, xác minh miễn phí). Sau đó, từ một dấu nhắc lệnh tôi điều hướng sâu vào cấu trúc thư mục. Tất cả nói với thư mục này (và con của nó) chỉ có khoảng 3200 tệp được chứa bên dưới và tại thời điểm này 'miễn phí' hiển thị> 117 MB bộ nhớ trống

tại thời điểm này, tôi đã gõ lệnh 'find' theo sau là 'miễn phí'

'find' hiển thị khoảng 3000 tệp, nhưng mức sử dụng bộ nhớ đã tăng từ ~ 117MB đến ~ 2MB

Tôi hiểu sự cân bằng của bộ đệm so với bộ nhớ trống và cách nhân coi trang trống là trang xấu - tuy nhiên 115 MB nội dung được lưu trong bộ đệm từ thư mục gồm 3000 tệp chỉ ra một khoảng cách nghiêm trọng theo cách hiểu của tôi. Tôi hy vọng ai đó sẽ giúp tôi hiểu chuyện gì đang xảy ra

Tôi có thể giả sử một cây cân bằng là cách để có nhiều tệp không?

Câu trả lời:


9

Mô tả vấn đề rất tốt.

Dựa trên những gì bạn nói, tôi nghĩ những gì bạn đang thấy là việc sử dụng phiến sẽ tăng cao. Một thí nghiệm tốt sẽ chạy cat /proc/meminfocat /proc/slabinfoqua một sự chậm trễ 3 giây trong khi bạn đi sâu vào hệ thống phân cấp fs và khám phá 3000 files. Điều cơ bản đang xảy ra là kernel sẽ duyệt qua cấu trúc fs và quét các tệp riêng lẻ và các nút của chúng và tất cả chúng được lưu trữ trong bộ nhớ. Nếu bạn kiểm tra, /proc/slabinfobạn sẽ thấy một đối tượng được gọi là ext4_inode_cachecho bạn biết mỗi inode sẽ chiếm bao nhiêu bộ nhớ. Nhân số này với không có đối tượng (obj_size * no_obj) và bạn có được lượng bộ nhớ mà đối tượng sử dụng. Bạn càng đi sâu vào hệ thống phân cấp fs, bộ nhớ sẽ được tiêu thụ càng nhiều cho đến khi hệ thống chạm mốc nước cao của vùng nhớ. Tại điểm đó, kernel sẽ bắt đầu lấy lại.

Nếu bạn chọc vào meminfo và slabinfo, bạn sẽ nhận được các chi tiết bạn đang tìm kiếm. Nếu bạn muốn tôi nhìn, pastebin nó;)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.