GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara membatasi cache yang digunakan dengan menyalin sehingga masih tersedia memori untuk cache lain?

Perintah nocache adalah jawaban umum untuk masalah ini! Lihat https://github.com/Feh/nocache atau temukan di Debian dan Ubuntu 13.10 (cakep).

Terima kasih, Peter, karena telah mengingatkan kami tentang opsi --drop-cache" di rsync. Tapi itu ditolak di hulu (Bug 9560 – opsi drop-cache), mendukung solusi yang lebih umum untuk ini:perintah "nocache" yang baru berdasarkan pekerjaan rsync dengan fadvise.

Anda cukup menambahkan "nocache" ke perintah apa pun yang Anda inginkan. Ini juga memiliki utilitas yang bagus untuk mendeskripsikan dan memodifikasi status cache file. Misalnya. berikut adalah efek dengan dan tanpa nocache:

$ ./cachestats ~/file.mp3
pages in cache: 154/1945 (7.9%)  [filesize=7776.2K, pagesize=4K]
$ ./nocache cp ~/file.mp3 /tmp
$ ./cachestats ~/file.mp3
pages in cache: 154/1945 (7.9%)  [filesize=7776.2K, pagesize=4K]\
$ cp ~/file.mp3 /tmp
$ ./cachestats ~/file.mp3
pages in cache: 1945/1945 (100.0%)  [filesize=7776.2K, pagesize=4K]

Jadi mudah-mudahan itu akan berfungsi untuk program cadangan lainnya (rsnapshot, duplicity, rdiff-backup, amanda, s3sync, s3ql, tar, dll) dan perintah lain yang Anda tidak ingin merusak cache Anda.


Kristof Provost sangat dekat, tetapi dalam situasi saya, saya tidak ingin menggunakan dd atau menulis perangkat lunak saya sendiri, jadi solusinya adalah menggunakan opsi "--drop-cache" di rsync.

Saya telah menggunakan ini berkali-kali sejak membuat pertanyaan ini, dan tampaknya menyelesaikan masalah sepenuhnya. Satu pengecualian adalah ketika saya menggunakan rsync untuk menyalin dari mesin FreeBSD, yang tidak mendukung "--drop-cache". Jadi saya menulis pembungkus untuk mengganti perintah /usr/local/bin/rsync, dan menghapus opsi itu, dan sekarang berfungsi menyalin dari sana juga.

Itu masih menggunakan sejumlah besar memori untuk buffer, dan tampaknya hampir tidak menyimpan cache, tetapi tetap bekerja dengan lancar.

$ free
             total       used       free     shared    buffers     cached
Mem:      24731544   24531576     199968          0   15349680     850624
-/+ buffers/cache:    8331272   16400272
Swap:      4194300     602648    3591652

Kernel tidak dapat mengetahui, bahwa Anda tidak akan menggunakan data yang di-cache dari penyalinan lagi. Ini adalah keunggulan informasi Anda.

Tapi Anda bisa mengatur swapiness ke 0:sudo sysctl vm.swappiness=0. Ini akan menyebabkan linux menjatuhkan cache sebelum perpustakaan, dll. Ditulis ke swap.

Bekerja dengan baik untuk saya juga, terutama yang sangat berperforma tinggi dalam kombinasi dengan ram besar (16-32 GB).


Linux
  1. Cara Menghapus Cache Memori di Linux

  2. Linux:Bagaimana Menemukan Driver Perangkat yang Digunakan Untuk Perangkat?

  3. Bagaimana saya bisa memeriksa jumlah hit untuk setiap aturan di iptables?

  1. Bagaimana cara menyiram cache CPU untuk wilayah ruang alamat di Linux?

  2. Bagaimana saya bisa * hanya * mendapatkan jumlah byte yang tersedia pada disk di bash?

  3. Bagaimana saya bisa membuat daftar mode video yang tersedia untuk webcam USB di Linux?

  1. Linux – Bagaimana Mendapatkan Jumlah Memori Yang Tersedia Secara Portabel di Seluruh Distribusi?

  2. Bagaimana saya bisa menguji RAM untuk kerusakan data pada sistem berbasis ARM?

  3. Bagaimana saya bisa mendapatkan jumlah memori yang tersedia secara portabel di seluruh distribusi?