GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso limitare la cache utilizzata dalla copia in modo che ci sia ancora memoria disponibile per un'altra cache?

Il comando nocache è la risposta generale a questo problema! Vedi https://github.com/Feh/nocache o trovalo in Debian e Ubuntu 13.10 (impertinente).

Grazie, Peter, per averci avvisato dell'opzione --drop-cache" in rsync. Ma questa è stata respinta a monte (Bug 9560 – opzione drop-cache), a favore di una soluzione più generale per questo:il nuovo comando "nocache" basato sul lavoro di rsync con fadvise.

Devi solo anteporre "nocache" a qualsiasi comando tu voglia. Ha anche utili utility per descrivere e modificare lo stato della cache dei file. Per esempio. ecco gli effetti con e senza 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]

Quindi si spera che funzioni per altri programmi di backup (rsnapshot, duplicity, rdiff-backup, amanda, s3sync, s3ql, tar, ecc.) e altri comandi che non vuoi rovinare la tua cache.


Kristof Provost era molto vicino, ma nella mia situazione non volevo usare dd o scrivere il mio software, quindi la soluzione era usare l'opzione "--drop-cache" in rsync.

L'ho usato molte volte da quando ho creato questa domanda e sembra risolvere completamente il problema. Un'eccezione è stata quando utilizzo rsync per copiare da una macchina FreeBSD, che non supporta "--drop-cache". Quindi ho scritto un wrapper per sostituire il comando /usr/local/bin/rsync e rimuovere quell'opzione, e ora funziona anche copiando da lì.

Utilizza ancora un'enorme quantità di memoria per i buffer e sembra non tenere quasi nessuna cache, ma funziona comunque senza problemi.

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

Il kernel non può sapere che non utilizzerai i dati memorizzati nella cache dalla copia di nuovo. Questo è il tuo vantaggio informativo.

Ma potresti impostare lo swapiness su 0:sudo sysctl vm.swappiness=0. Ciò farà sì che Linux abbandoni la cache prima che le librerie ecc. vengano scritte nello swap.

Funziona bene anche per me, soprattutto molto performante in combinazione con hugh ram (16-32 GB).


Linux
  1. Linux:come ottenere la quantità di memoria disponibile in modo portatile attraverso le distribuzioni?

  2. Come posso misurare l'effettivo utilizzo della memoria di un'applicazione o di un processo?

  3. Come pulire le cache utilizzate dal kernel Linux

  4. Fish Shell:come posso personalizzare i colori per la funzione di completamento automatico?

  5. Come posso elencare le modalità video disponibili per una webcam USB in Linux?

Come posso controllare il conteggio dei colpi per ogni regola in iptables?

Come svuotare la cache della CPU per una regione dello spazio degli indirizzi in Linux?

Come posso *solo* ottenere il numero di byte disponibili su un disco in bash?

Come posso visualizzare l'utilizzo della memoria di ciascun processo se eseguo un 'ps -ef'?

Come limitare la memoria per un servizio gestito da systemd

Come posso ottenere la quantità di memoria disponibile in modo portabile tra le distribuzioni?