GNU/Linux >> Znalost Linux >  >> Linux

Na systémové paměti... konkrétně rozdíl mezi `tmpfs,` `shm` a `hugepages...`

Mezi tmpfs a shm není žádný rozdíl. tmpfs je nový název pro shm. shm je zkratka pro SHAredMemory.

Viz:Linux tmpfs.

Hlavním důvodem, proč se dnes tmpfs dokonce používá, je tento komentář v mém /etc/fstab na mém gentoo boxu. BTW Chromium se nebude stavět s chybějícím řádkem:

# glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for 
# POSIX shared memory (shm_open, shm_unlink). 
shm                     /dev/shm        tmpfs           nodev,nosuid,noexec     0 0 

který vyšel z dokumentace linuxového jádra

Cituji:

tmpfs má následující použití:

1) Vždy existuje interní připojení jádra, které neuvidíte
Všechno. To se používá pro sdílená anonymní mapování a sdílené SYSV
Paměť.

Toto připojení nezávisí na CONFIG_TMPFS. Pokud není CONFIG_TMPFS nastaveno, uživatelsky viditelná část tmpfs se nesestaví. Ale vnitřní
mechanismy jsou vždy přítomny.

2) glibc 2.2 a vyšší očekává, že tmpfs budou připojeny do /dev/shm pro
Sdílená paměť POSIX (shm_open, shm_unlink). Přidání následujícího
řádek do /etc/fstab by se měl postarat o toto:

tmpfs /dev/shm Výchozí hodnota tmpfs je 0 0

Nezapomeňte vytvořit adresář, do kterého chcete v případě potřeby připojit tmpfs.

Tento držák není potřebné pro sdílenou paměť SYSV. Vnitřní
k tomu slouží držák. (Ve verzích jádra 2.3 to bylo
pro použití SYSV je nutné připojit předchůdce tmpfs (shm fs).
sdílená paměť)

3) Některým lidem (včetně mě) je velmi pohodlné jej namontovat
např. na /tmp a /var/tmp a mají velký odkládací oddíl. A teď
smyčková připojení souborů tmpfs fungují, takže mkinitrd dodává většina
distribuce by měly uspět s tmpfs /tmp.

4) A pravděpodobně mnohem víc, o čem nevím :-)

tmpfs má tři možnosti připojení pro velikost:

velikost: Limit přidělených bajtů pro tuto instanci tmpfs. Výchozí hodnota je polovina fyzické paměti RAM bez swapu. Pokud předimenzujete své instance tmpfs, počítač se zablokuje, protože ovladač OOM nebude schopen uvolnit tuto paměť.
nr_blocks: Stejná jako velikost, ale v blocích PAGE_CACHE_SIZE.
nr_inodes: Maximální počet inodů pro tuto instanci. Výchozí hodnota je polovina počtu stránek fyzické paměti RAM nebo (na počítači s vysokou pamětí) počet stránek paměti RAM s nízkou pamětí, podle toho, která hodnota je nižší.

Z dokumentu Transparent Hugepage Kernel:

Transparent Hugepage Support maximalizuje užitečnost volné paměti ve srovnání s rezervačním přístupem hugetlbfs tím, že umožňuje použít nevyužitou paměť jako mezipaměť nebo jiné pohyblivé (nebo dokonce nepohyblivé entity). Nevyžaduje rezervaci, aby se zabránilo velkým selháním umístění stránek, aby byly patrné z uživatelské země. Umožňuje, aby stránkování a všechny další pokročilé funkce virtuálních počítačů byly dostupné na serverech hugepages. Aplikace nevyžaduje žádné úpravy, aby toho mohly využívat.

Aplikace však mohou být dále optimalizovány, aby využily této funkce, jako například byly optimalizovány dříve, aby se zabránilo záplavě systémových volání mmap pro každý malloc (4k). Optimalizace userland není zdaleka povinná a khugepaged se již může postarat o dlouhodobé alokace stránek i pro aplikace s velkým množstvím stránky, které si neuvědomují velké množství paměti.

Nový komentář po provedení některých výpočtů:

Velká velikost stránky:2 MB
Použité obrovské stránky:Žádné/Vypnuto, jak dokazují všechny nuly, ale povolené podle výše uvedených 2Mb.
DirectMap4k:8,03 Gb
DirectMap2M:16,5 Gb
DirectMap1G:2Gb

Podle odstavce výše týkajícího se optimalizace v THS to vypadá, že 8Gb vaší paměti využívají aplikace, které pracují s mallocs 4k, 16,5Gb, bylo požadováno aplikacemi používajícími mallocs 2M. Aplikace používající malloc 2M napodobují podporu HugePage tím, že přenášejí sekce 2M do jádra. Toto je preferovaná metoda, protože jakmile je malloc uvolněn jádrem, paměť je uvolněna do systému, zatímco připojení tmpfs pomocí hugepage by nevedlo k úplnému vyčištění, dokud nebude systém restartován. A konečně, ten jednoduchý, měli jste otevřené/běžící 2 programy, které požadovaly malloc 1Gb

Pro ty z vás, kteří čtete a nevíte, že malloc je standardní struktura v C, která znamená Memory ALLOCation. Tyto výpočty slouží jako důkaz, že korelace OP mezi DirectMapping a THS může být správná. Všimněte si také, že připojení OBROVSKÉ POUZE fs by mělo za následek zisk pouze v přírůstcích 2 MB, zatímco ponechání systému spravovat paměť pomocí THS se vyskytuje většinou ve 4k blocích, což znamená, že pokud jde o správu paměti, každé volání malloc ušetří systému 2044k (2048 - 4 ) pro použití jiného procesu.


Řešení problému "DirectMap":jádro má lineární ("přímé") mapování fyzické paměti, oddělené od virtuálních mapování přidělených každému uživatelskému procesu.

Jádro používá pro toto mapování největší možné stránky, aby snížilo tlak TLB.

DirectMap1G je viditelný, pokud váš procesor podporuje 1Gb stránky (Barcelona a dále; některá virtuální prostředí je deaktivují) a pokud je povoleno v jádře – výchozí je zapnuto pro 2.6.29+.


Mezi shm není žádný rozdíl a tmpfs (ve skutečnosti tmpfs je pouze nový název dřívějšího shmfs ). hugetlbfs je tmpfs -založený souborový systém, který alokuje svůj prostor z velkých stránek jádra a potřebuje nějakou dodatečnou konfiguraci (jak to použít, je vysvětleno v Documentation/vm/hugetlbpage.txt).


Linux
  1. Rozdíl mezi příkazy zastavení a vypnutí?

  2. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  3. Rozdíl mezi .exrc a .vimrc?

  1. Rozdíl mezi Nss a Pam?

  2. Rozdíl mezi initrd a initramfs?

  3. Jaký je rozdíl mezi procfs a sysfs?

  1. Jaký je rozdíl mezi InnoDB a MyISAM?

  2. Jaký je rozdíl mezi ls a l?

  3. Jaký je rozdíl mezi 32bitovými PAE a 64bitovými jádry?