Tìm / ls bộ nhớ đệm


10

Có vẻ như lần đầu tiên tôi chạy findhoặc lstrên một thư mục, phải mất một lúc để làm việc. Nhưng, mỗi lần sau đó, nó rất nhanh, như thể một danh sách các nội dung của thư mục đã được lưu trữ hoặc lập chỉ mục ở đâu đó.

Có cách nào để bảo tồn bộ đệm này trong quá trình khởi động lại máy tính không?


1
Nó thực sự được lưu trữ. Linux sử dụng bộ nhớ không sử dụng làm bộ đệm và bộ đệm (đó là một lý do bạn phải luôn có một số trao đổi, ngay cả với RAM "đủ"). Lệnh miễn phí cho bạn thấy có bao nhiêu có sẵn. Không chắc chắn nhiều điểm trong bộ nhớ đệm giữa các lần khởi động lại, nhiều thứ có thể thay đổi giữa các lần khởi động. Làm thế nào về việc tạo một cron-job để chạy với mức ưu tiên thấp nhất cứ sau 10,30 phút, chỉ đơn giản là đi qua tất cả các tệp của bạn? Nên giữ bộ đệm tương đối cập nhật mọi lúc. Cũng nghĩ rằng có một cách (cho kernel) để phát hiện các thay đổi tập tin.
Baard Kopperud

Câu trả lời:


8

Bạn có thể sử dụng vmtouch để thêm tệp vào bộ đệm trang của bạn (bộ đệm đĩa).

Đặt tệp nohup vmtouch -dl <files or directories> &của bạn /etc/rc.localđể thêm và khóa tệp vào bộ đệm trang của bạn khi khởi động. Nếu bạn muốn thêm tệp vào bộ đệm trang của mình, nhưng không muốn khóa chúng vào bộ nhớ, hãy sử dụng -tcờ thay vì -ldcờ.

Để biết thêm thông tin về bộ đệm trang, xem tại đây , ở đây và trên wikipedia .


Lệnh đó dường như không có sẵn trong Ubuntu - tôi có thể thử thay thế không?
Richard

@Richard Rất dễ dàng để tự biên dịch vmtouch: Cài đặt build-essentialgói. Tải về vmtouch.c. Chạy gcc -O2 -o vmtouch vmtouch.choặc make vmtouchvà bạn nhận được nhị phân vmtouchmà sau đó bạn có thể sao chép /usr/local/binhoặc gọi bằng ./vmotouch.
jofel

@Richard Tôi không sử dụng Ubuntu, vì vậy tôi đã không kiểm tra điều này và không chịu trách nhiệm gì ngoài việc googling "Ubuntu mvtouch" đã đưa ra ppa này .
terdon

@jofel, vâng, thật dễ dàng để biên dịch - cảm ơn. Tôi chỉ thích sử dụng các gói khi có thể.
Richard

@Evan, sửa tôi nếu tôi sai, nhưng sẽ không sử dụng vmtouchnhư một lệnh khởi động làm chậm toàn bộ công việc? Hy vọng của tôi là duy trì bộ nhớ cache trên giày chứ không phải (thường xuyên) tái tạo nó mỗi lần.
Richard

2

"Bảo tồn trên các lần khởi động lại", tôi nghi ngờ điều đó. Nhưng bạn có thể xây dựng lại bộ đệm một cách tầm thường khi khởi động, việc này thực hiện gần như cùng một thứ trừ đi một độ trễ nhỏ.

Tạo một tập tin /etc/cron.d/rebuild-fs-cachevà đặt như sau:

@reboot root /usr/bin/nice -n 19 /usr/bin/ionice -c 3 -t /usr/bin/find / >/dev/null 2>&1

Điều này sử dụng niceionice(nên được cài đặt theo mặc định và chắc chắn có sẵn thông qua trình quản lý gói; Debian đặt chúng vào coreutilsutil-linux, tương ứng) để hạ mức độ ưu tiên của findquy trình xuống mức tốt nhất có thể, có nghĩa là nó không nên can thiệp vào bất cứ điều gì khác chạy trên hệ thống của bạn nhưng sẽ mất một chút thời gian để hoàn thành. findchính nó sẽ đi qua và stat()mọi thứ, buộc kernel tải dữ liệu hệ thống tệp từ đĩa vào bộ nhớ.

Khi bộ đệm đã được xây dựng, miễn là nó không bị xóa vì HĐH cần bộ nhớ cho thứ khác, thì nó nên được duy trì. Tôi đã sử dụng điều này trong một thời gian và danh sách thư mục ngay cả trong các thư mục lớn nhanh hơn đáng kể so với không có công việc định kỳ ở trên, mặc dù tôi không thể trích dẫn bất kỳ con số chính xác nào.


1
Nếu bạn sẽ phát minh lại bánh xe, bạn cũng có thể sử dụng locate, đi kèm với updatedbđể cập nhật cơ sở dữ liệu định vị: en.wikipedia.org/wiki/Locate_(Unix)
laebshade

@laebshade Tôi hoàn toàn không sử dụng locate, nhưng tôi sử dụng lsrất nhiều. Và đôi khi find. (Ngoài ra, find và ls là các lệnh cụ thể mà OP yêu cầu.) Điểm sử dụng findở đây là nó lặp đi lặp lại mọi thứ trên bộ nhớ gọi stat (), do đó kernel phải tải siêu dữ liệu vào bộ nhớ. Khi nó ở đó, nó tốt như thể nó được lưu trữ trong một lần khởi động lại.
một CVn
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.