Linuxové distribuce automaticky vytvářejí ramdisk (a to jak skutečný pouze v paměti, tak i tmpfs ve virtuální paměti, tedy i swapu — Díky Luke, že se shm může odswapovat jsem netušil). Mají různá použití, Debian tam má nasměrovaný i systémový temp, další (/run/shm
) je pak pro obecné použití libovolnou aplikací. Větší velikost se hodí třeba pro Minecraft server.
Výchozí velikost se zdá být o něco méně než polovina systémové paměti. Tohle platí až do určité velikosti RAM, potom se velikost tmpfs zastaví na 3.2 GiB a přidání RAM (v tomto případě 16 GiB) nezaručuje automatické navýšení velikosti na očekávaných 8GiB:
tmpfs 3.2G 2.3G 837M 74% /run/shm
Velikost připojovaného tmpfs (/run/shm
) se v Debianu Wheeze nastavuje v souboru /etc/default/tmpfs
, a je to položka SHM_SIZE
(v B). Následující nastavení zajistí automatické vytvoření s velikostí 8GiB:
SHM_SIZE=8G
Po rebootu to potom vypadá takto (2.3 GiB zabírají datové soubory Minecraft serveru):
tmpfs 8.0G 2.3G 5.8G 29% /run/shm
Díky z0nymu za info a díky Lukovi za upřesnění. :-)
Označení „ramdisk“ není správné. V Linuxu existuje i skutečný ramdisk, který ukládá data pouze do RAM. Ale tmpfs ukládá data obecně do virtuálního paměťového prostoru, který se může nacházet jak v RAM, tak i případně ve swapu.
Díky, článek jsem upravil. Netušíš odkud se bere výchozí maximální hodnota 3.2GiB? V sysctl jsem nic moc kloudného nenašel, je to vlastnost toho modulu?
Je to divné. V dokumentaci, ale i přímo ve zdrojáku vanilly 3.5, je default půlka fyzické paměti a pro explicitní nastavení žádný limit není. Jestli není nějaká chytristika v distribučním jádru Debianu, to fakt nevím.
Co se tmpfs tyce, tak pri mountu ma parametr
size
, kterej se da nastavit podle potreby. Ja mam do jednoho adresare primountovany tmpfs sesize=175%
a funguje to dle ocekavani (a holt kdyz je zpulky plnej, tak se zacina swapovat, ale obcas tam mam bordel kterej sem potreboval kdysi rychle, ale pak uz nevadi, kdyz se odswapuje). Da se to normalne napsat do fstabu ;-)Ale pozor na to, že nastavením příliš velké velikosti se dá systém shodit. Pokud nastane situace, že se to zaplní natolik, že už nelze uvolnit paměť potřebnou pro běh systému (není už kam swapovat ani nelze dál uvolňovat cache), je konec.
Neni konec, je na rade oom killer ;-)
Ale to nemusí stačit – dokumentace přímo říká:
„If you oversize your tmpfs instances the machine will deadlock since the OOM handler will not be able to free that memory.“