Temukan / ls caching

10

Sepertinya pertama kali saya menjalankan findatau lspada direktori, perlu beberapa saat untuk bekerja. Tapi, setiap kali sesudahnya, itu cepat, seolah-olah daftar isi direktori telah di-cache atau diindeks di suatu tempat.

Apakah ada cara untuk melestarikan cache ini di reboot komputer?

Richard
sumber
1
Itu memang di-cache. Linux menggunakan memori yang tidak digunakan sebagai cache dan buffer (itu salah satu alasan Anda harus selalu memiliki beberapa swap, bahkan dengan RAM "cukup"). Perintah bebas menunjukkan berapa banyak yang tersedia. Tidak yakin itu banyak gunanya dalam cache di antara reboot, banyak yang bisa berubah di antara boot. Bagaimana kalau membuat cron-job dijalankan dengan prioritas terendah setiap 10,30 menit, cukup dengan menelusuri semua file Anda? Harus menjaga cache relatif terbaru setiap saat. Juga berpikir ada cara (untuk kernel) untuk mendeteksi perubahan file.
Baard Kopperud

Jawaban:

8

Anda dapat menggunakan vmtouch untuk menambahkan file ke cache halaman Anda (cache disk).

Masukkan file nohup vmtouch -dl <files or directories> &Anda /etc/rc.localuntuk menambah dan mengunci file ke dalam cache halaman Anda saat boot. Jika Anda ingin menambahkan file ke cache halaman Anda, tetapi tidak ingin menguncinya ke dalam memori, gunakan -tflag sebagai ganti -ldflag.

Untuk informasi lebih lanjut tentang cache halaman, lihat di sini , di sini , dan di wikipedia .

Komunitas
sumber
Perintah itu sepertinya tidak tersedia di Ubuntu - adakah alternatif yang bisa saya coba?
Richard
@ Richard Sangat mudah untuk mengkompilasi sendiri vmtouch: Instal build-essentialpaket. Unduh vmtouch.c. Jalankan gcc -O2 -o vmtouch vmtouch.catau make vmtouchdan Anda mendapatkan biner vmtouchyang kemudian dapat Anda salin misalnya /usr/local/binatau panggil oleh ./vmotouch.
jofel
@Richard Saya tidak menggunakan Ubuntu, jadi saya belum menguji ini dan tidak bertanggung jawab selain googling "Ubuntu mvtouch" yang mengangkat ppa ini .
terdon
@ jofel, ya, itu cukup mudah untuk dikompilasi - terima kasih. Saya hanya lebih suka menggunakan paket jika memungkinkan.
Richard
@Van, koreksi saya jika saya salah, tetapi tidak akan menggunakan vmtouchsebagai perintah boot saat memperlambat seluruh bekerja? Harapan saya adalah untuk melestarikan cache melewati boot daripada (mahal) regenerasi setiap kali.
Richard
2

"Simpan di seluruh reboot", saya ragu. Tetapi Anda dapat dengan mudah membangun kembali cache saat boot, yang mencapai hal yang hampir sama tanpa penundaan kecil.

Buat file /etc/cron.d/rebuild-fs-cachedan masukkan yang berikut di dalamnya:

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

Ini menggunakan nicedan ionice(yang harus diinstal secara default, dan pasti tersedia melalui manajer paket; Debian memasukkannya ke dalam , coreutilsdan util-linux, masing-masing) untuk menurunkan prioritas findproses ke tingkat terbaik yang mungkin, yang berarti tidak boleh mengganggu hal lain. berjalan di sistem Anda tetapi akan membutuhkan waktu sedikit lebih lama untuk diselesaikan. finditu sendiri akan melalui dan stat()semuanya, yang memaksa kernel untuk memuat data sistem file dari disk ke memori.

Begitu cache telah dibangun, selama tidak dibersihkan karena OS membutuhkan memori untuk hal lain, itu harus dipertahankan. Saya telah menggunakan ini untuk sementara waktu dan daftar direktori bahkan di direktori besar secara signifikan lebih cepat daripada tanpa pekerjaan cron di atas, meskipun saya tidak dapat menyebutkan angka pastinya.

sebuah CVn
sumber
1
Jika Anda akan menemukan kembali roda, Anda sebaiknya menggunakan locate, yang datang dengan updatedbmemperbarui basis data lokasi: en.wikipedia.org/wiki/Locate_(Unix)
laebshade
@laebshade saya tidak menggunakan locatesama sekali, tapi saya menggunakan lsbanyak. Dan terkadang find. (Juga, temukan dan ls adalah perintah khusus yang ditanyakan oleh OP.) Maksud dari penggunaan di findsini adalah bahwa ia mengulangi semua yang ada pada stat panggilan penyimpanan (), sehingga kernel harus memuat metadata ke dalam memori. Setelah itu ada, sama baiknya jika disimpan di reboot.
CVn