GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu omezit mezipaměť používanou kopírováním, aby byla stále k dispozici paměť pro jinou mezipaměť?

Příkaz nocache je obecnou odpovědí na tento problém! Podívejte se na https://github.com/Feh/nocache nebo jej najděte v Debianu a Ubuntu 13.10 (prohnané).

Díky, Petere, že jsi nás upozornil na volbu --drop-cache" v rsync. To však bylo odmítnuto upstream (chyba 9560 – volba drop-cache) ve prospěch obecnějšího řešení:nový příkaz "nocache" založené na práci rsync s fadvise.

"nocache" prostě připojíte k libovolnému příkazu, který chcete. Má také pěkné nástroje pro popis a úpravu stavu mezipaměti souborů. Např. zde jsou účinky s nocache a bez ní:

$ ./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]

Doufejme tedy, že to bude fungovat pro další zálohovací programy (rsnapshot, duplicity, rdiff-backup, amanda, s3sync, s3ql, tar atd.) a další příkazy, které nechcete vyhazovat do koše.


Kristof Provost byl velmi blízko, ale v mé situaci jsem nechtěl používat dd ani psát svůj vlastní software, takže řešením bylo použít možnost "--drop-cache" v rsync.

Použil jsem to mnohokrát od vytvoření této otázky a zdá se, že problém zcela vyřešil. Jednou výjimkou bylo, když používám rsync ke kopírování ze stroje FreeBSD, který nepodporuje "--drop-cache". Napsal jsem tedy obal, který nahradí příkaz /usr/local/bin/rsync a odstraní tuto možnost, a nyní funguje kopírování i odtud.

Stále používá obrovské množství paměti pro vyrovnávací paměti a zdá se, že neuchovává téměř žádnou mezipaměť, ale stejně funguje hladce.

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

Jádro nemůže vědět, že data z mezipaměti z kopírování znovu nepoužijete. To je vaše informační výhoda.

Ale můžete nastavit swapiness na 0:sudo sysctl vm.swappiness=0. To způsobí, že linux zahodí mezipaměť před zapsáním knihoven atd. do swapu.

Funguje to dobře i pro mě, zvláště velmi výkonný v kombinaci s hugh ram (16-32 GB).


Linux
  1. Jak vymazat mezipaměť v Linuxu

  2. Linux – Jak získat množství dostupné paměti přenositelně napříč distribucemi?

  3. Jak mohu zobrazit využití paměti každého procesu, když udělám 'ps -ef'?

  1. Jak mohu otestovat paměť RAM na poškození dat v systému založeném na ARM?

  2. Jak mohu rezervovat blok paměti z jádra Linuxu?

  3. Jak mohu získat množství dostupné paměti přenosně napříč distribucemi?

  1. Linux:Jak najít ovladač zařízení používaný pro zařízení?

  2. Lze ovladač Nouveau Xorg použít pro vícehlavou pracovní stanici?

  3. CentOS / RHEL 6 :Jak omezit paměťové zdroje pro konkrétního uživatele pomocí cgroups