Làm cách nào để định cấu hình Linux để lưu trữ siêu dữ liệu tệp theo sở thích vào nội dung?


14

Tôi muốn thiết lập hệ thống để sử dụng hầu hết RAM cho bộ nhớ đệm siêu dữ liệu của hệ thống tệp, nhưng chỉ một lượng khá nhỏ để đọc / ghi bộ đệm và đọc trước tập tin. Lý tưởng nhất là tôi muốn có thể duyệt hệ thống tập tin (bao nhiêu là vừa với RAM) mà không cần quay đĩa cho đến khi tôi thực sự mở một tập tin.

Đây là những thông tin chi tiết:

Tôi có một máy chủ tập tin làm tại nhà. Nó có năm đĩa với dung lượng LVM khoảng 9TB, nhưng chỉ có 4GB RAM. Vì máy chủ không làm nhiều việc khác sau đó phục vụ các tệp, nên phần lớn RAM được sử dụng để lưu vào bộ đệm. (Free miễn phí báo cáo 3,4G trong số 3,9G được sử dụng cho bộ nhớ cache.)

Máy chủ sống trong phòng ngủ của tôi và nếu tất cả các đĩa quay, nó sẽ tạo ra tiếng ồn đủ gây khó chịu khi nó yên tĩnh. (Tôi không có nghĩa là tìm kiếm tiếng ồn, chỉ là tiếng ồn quay tròn. Các đĩa có nhiều kiểu dáng và kiểu dáng khác nhau và tôi nghĩ rằng sự khác biệt nhỏ về tốc độ quay gây ra nhiễu. một tiếng ồn nhỏ với khoảng thời gian Hertz phụ.) Vì vậy, tôi đã cấu hình máy chủ để quay đĩa hầu hết thời gian.

Tất nhiên, nếu các đĩa được quay xuống khi tôi mở một thư mục trong trình quản lý tệp của mình, sẽ có một độ trễ trong khi bất kỳ đĩa nào có thư mục đó sẽ quay tròn. Chỉ cần đó không phải là vấn đề lớn. Nhưng tùy thuộc vào nơi tôi tìm, nó có thể xảy ra nhiều lần liên tiếp, nếu LVM tình cờ phát tán siêu dữ liệu cho mỗi thư mục con trên các đĩa khác nhau.

Tôi nghi ngờ rằng Linux chủ yếu lấp đầy bộ đệm của nó với nội dung tệp và có thể dữ liệu được tìm nạp trước. Bộ nhớ đệm không hữu ích lắm ngoài vài MB để đảm bảo phát lại mượt mà; nếu tôi chỉ xem một bộ phim, có lẽ tôi sẽ không xem lại nó bất cứ lúc nào sớm. Tìm nạp trước, nếu nó xảy ra, cũng hoàn toàn vô dụng trong trường hợp của tôi , sau hơn một vài MB.

Nhưng người ta sẽ nghĩ rằng 4GB sẽ rất nhiều để có thể lưu trữ hầu hết các siêu dữ liệu của hệ thống tệp, ít nhất là những phần đã được truy cập, để tôi có thể duyệt các tệp mà không cần phải quay đĩa nếu hóa ra chúng đang ngủ

Vẫn sẽ có độ trễ khi mở tệp, nhưng không sao. So sánh nhấp chuột trên mạng; chờ đợi ; nhấp chuột; chờ đợi ; nhấp chuột; chờ đợi ; chơi; xem đồng hồ với nhấp chuột vào; nhấp chuột; nhấp chuột; chơi; chờ đợi ; đồng hồ đeo tay". Các cựu là vô cùng bực bội; thứ hai gần như được mong đợi.

Ghi chú:

  1. Nếu có vấn đề, kernel là 3.2, HĐH là Debian, âm lượng là lvm2 và FS là ext4.

  2. Lý do duy nhất cho sự quay xuống là tiếng ồn trong đêm; máy chủ đang chạy liên tục. (Tôi đã làm cho nó có công suất thấp là hợp lý.) Độ trễ kéo xuống được thay đổi tùy theo thời gian trong ngày.

  3. Các đĩa cứng chỉ dành cho phương tiện truyền thông. HĐH nằm trên một ổ đĩa flash (nhỏ) riêng biệt. (Có nghĩa là bất kỳ sự chậm trễ spin-up lấy từ dữ liệu, không chỉ vì nó cần một cái gì đó trong /usrhoặc bất cứ điều gì. Tôi có thể dành một vài GB vào nó nếu nó sẽ giúp đỡ với vấn đề của tôi bằng cách nào đó.

  4. Một tác động hợp lý đến hiệu suất không phải là một vấn đề lớn. Các đĩa nhanh hơn mạng của tôi.

Câu trả lời:


10

Để kiểm soát cách Linux lưu trữ mọi thứ, hãy tham khảo https://www.kernel.org/doc/Documentation/sysctl/vm.txt này

Cụ thể, hãy nhìn vào vfs_cache_pressure, bạn có thể muốn một giá trị thực sự thấp hoặc thậm chí là 0 (mặc dù tôi nghe có vẻ an toàn hơn một chút):

vfs_cache_pressure
------------------

Controls the tendency of the kernel to reclaim the memory which is used for
caching of directory and inode objects.

At the default value of vfs_cache_pressure=100 the kernel will attempt to
reclaim dentries and inodes at a "fair" rate with respect to pagecache and
swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
to retain dentry and inode caches. When vfs_cache_pressure=0, the kernel will
never reclaim dentries and inodes due to memory pressure and this can easily
lead to out-of-memory conditions. Increasing vfs_cache_pressure beyond 100
causes the kernel to prefer to reclaim dentries and inodes.

Ngoài ra, bạn có thể muốn sửa đổi swappinessđể bạn không bao giờ trao đổi dữ liệu hoặc làm cho nó chỉ xảy ra trong trường hợp cực đoan.

Các drop_cachestùy chọn có thể có ích cho giảm một cách rõ ràng các dữ liệu bạn không muốn lưu trữ nữa.

Tôi chắc chắn có thể có các tùy chọn khác có thể giúp ích, vì vậy hãy xem lại tài liệu kernel.

Để áp dụng chúng, tôi sẽ đặt các cài đặt bạn muốn thay đổi /etc/sysctl.confhoặc bất cứ điều gì HĐH của bạn phải khôi phục chúng khi khởi động.


3
Bài đăng tốt, nhưng bạn sẽ muốn trao đổi càng nhiều càng khả thi với mục tiêu của OP. Trao đổi chỉ đánh vào bộ nhớ người dùng để tăng xu hướng trao đổi ra đĩa sau đó để lại nhiều bộ nhớ vật lý hơn cho bộ nhớ cache. Tăng swappiness giải phóng bộ nhớ nhưng có thể làm chậm các ứng dụng nếu nó tăng quá xa (xác định điểm ngọt về cơ bản là lặp lại khách)
Bratchley

Xin chào Kyle, cảm ơn vì ý tưởng. vfs_cache_pressure loại công việc, nhưng nó không đủ. Đây là những gì tôi đã làm:
bogdanb

Khi tôi đặt vcp thành 0, nếu tôi làm a find / -ls > /dev/null, sau đó quay xuống các đĩa, sau đó findtất cả các tệp lại, các đĩa không quay lên. freecho thấy bộ đệm tăng lên khoảng 202MB khi làm điều này. Nhưng, nếu tôi làm find, sau đó cat /file/bigger/than/ram > /dev/null, sau đó freehiển thị cachedtăng lên để lấp đầy không gian trống, và vì một số lý do buffersgiảm xuống còn khoảng 195 MB. Sau đó, nếu tôi quay xuống các đĩa và làm findlại thì các đĩa vẫn quay lên :-(
bogdanb

Giới thiệu swappiness: Được đặt thành mặc định 60, nhưng máy không có bất kỳ phân vùng trao đổi nào, vì vậy tôi không chắc liệu nó có hoạt động nhiều không. Tôi đoán rằng tôi có thể đặt một tập tin trao đổi trên ổ đĩa flash, nhưng tôi không biết làm thế nào nó sẽ giúp hoặc làm thế nào để kích thước nó.
bogdanb

1
Linux đang cố gắng thông minh về bộ nhớ đệm. Tôi không chắc chắn rằng cài đặt vfs = 0 sẽ hoạt động theo cách bạn mong đợi. Tôi nghĩ rằng nó sẽ cố gắng lấy lại các mục khác khi áp lực từ các ứng dụng (tức là malloc ()) yêu cầu thêm bộ nhớ. Đối với một cách để nói với linux không sử dụng nhiều hơn 2GB cho bộ nhớ cache, tôi không biết điều đó. Nó sẽ lãng phí RAM trong hầu hết các trường hợp. Một điều khác mà bạn có thể muốn xem xét là "chế độ máy tính xách tay" cố gắng làm những việc khác nhau để giữ cho đĩa được quay xuống cho máy tính xách tay. Tôi chưa sử dụng nó, vì vậy tôi không biết nhiều về nó.
Kyle
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.