Nie ma różnicy między tmpfs i shm. tmpfs to nowa nazwa shm. shm oznacza SHaredMemory.
Zobacz: Linux tmpfs .
Głównym powodem, dla którego tmpfs jest dziś używany, jest ten komentarz w moim / etc / fstab na moim pudełku gentoo. BTW Chromium nie buduje się z brakującą linią:
# 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
który wyszedł z dokumentacji jądra Linuksa
Cytowanie:
tmpfs ma następujące zastosowania:
1) Zawsze istnieje wewnętrzne mocowanie jądra, którego w ogóle nie zobaczysz
. Służy do współdzielonych anonimowych mapowań i wspólnej
pamięci SYSV .
To podłączenie nie zależy od CONFIG_TMPFS. Jeśli CONFIG_TMPFS nie jest ustawiony, widoczna dla użytkownika część tmpfs nie jest budowana. Ale wewnętrzne
mechanizmy są zawsze obecne.
2) glibc 2.2 i
nowsze wersje oczekują zamontowania tmpfs w / dev / shm dla pamięci współdzielonej POSIX (shm_open, shm_unlink). Dodanie następującego
wiersza do / etc / fstab powinno się tym zająć:
tmpfs / dev / shm tmpfs domyślnie 0 0
Pamiętaj, aby w razie potrzeby utworzyć katalog, w którym chcesz zamontować tmpfs.
To mocowanie nie jest potrzebne w przypadku pamięci współdzielonej SYSV. Wykorzystano do tego wewnętrzne
mocowanie. (W wersjach jądra 2.3
konieczne było zamontowanie poprzednika tmpfs (shm fs), aby korzystać z
pamięci współdzielonej SYSV )
3) Niektórzy ludzie (w tym ja) uważają, że bardzo wygodnie jest go zamontować
np. Na / tmp i / var / tmp i mieć dużą partycję wymiany. A teraz
działa montowanie w pętli plików tmpfs, więc mkinitrd dostarczany przez większość
dystrybucji powinien odnieść sukces z tmpfs / tmp.
4) I prawdopodobnie o wiele więcej nie wiem o :-)
tmpfs ma trzy opcje montowania do zmiany rozmiaru:
rozmiar: limit przydzielonych bajtów dla tej instancji tmpfs. Domyślnie jest to połowa twojej fizycznej pamięci RAM bez wymiany. Jeśli zwiększysz rozmiar instancji tmpfs, maszyna zablokuje się, ponieważ program obsługi OOM nie będzie w stanie zwolnić tej pamięci.
nr_blocks: Taki sam jak rozmiar, ale w blokach PAGE_CACHE_SIZE.
nr_inodes: maksymalna liczba i-węzłów dla tego wystąpienia. Domyślnie jest to połowa liczby fizycznych stron RAM lub (na komputerze z highmem) liczba stron o niskiej pamięci RAM, w zależności od tego, która z tych wartości jest niższa.
Z przezroczystego dokumentu jądra Hugepage:
Przezroczysta obsługa stron internetowych maksymalizuje użyteczność wolnej pamięci w porównaniu z podejściem rezerwacji hugetlbfs, umożliwiając wykorzystanie całej nieużywanej pamięci jako pamięci podręcznej lub innej ruchomej (lub nawet nieprzenośnej jednostki). Nie wymaga rezerwacji, aby nie dopuścić do zauważenia błędów alokacji strony na stronie użytkownika. Umożliwia stronicowanie i wszystkie inne zaawansowane funkcje maszyn wirtualnych dostępne na stronach testowych. Nie wymaga żadnych modyfikacji, aby aplikacje mogły z niego skorzystać.
Aplikacje można jednak dalej optymalizować, aby skorzystać z tej funkcji, na przykład zostały one zoptymalizowane wcześniej, aby uniknąć zalewu wywołań systemu mmap dla każdego malloc (4k). Optymalizacja obszaru użytkownika nie jest zdecydowanie obowiązkowa, a strona khugepaged może zająć się przydziałem długowiecznych stron, nawet w przypadku nieświadomych aplikacji typu hug page zajmujących się dużą ilością pamięci.
Nowy komentarz po wykonaniu obliczeń:
HugePage Rozmiar: 2 MB
HugePages Używany: Brak / Wył., O czym świadczą wszystkie 0, ale włączony jak powyżej 2 Mb.
DirectMap4k: 8,03 Gb
DirectMap2M: 16,5
Gb DirectMap1G: 2 Gb
Korzystając z powyższego akapitu dotyczącego optymalizacji w THS, wygląda na to, że aplikacje korzystające z malloców 4k, 16,5 Gb zostały wykorzystane przez aplikacje korzystające z malloców 2M. Aplikacje korzystające z malloców 2M naśladują obsługę HugePage, odciążając sekcje 2M do jądra. Jest to preferowana metoda, ponieważ po zwolnieniu malloc przez jądro pamięć jest zwalniana do systemu, podczas gdy montowanie tmpfs przy użyciu hugepage nie spowoduje pełnego czyszczenia, dopóki system nie zostanie ponownie uruchomiony. Wreszcie, ten łatwy, miałeś 2 uruchomione / uruchomione programy, które zażądały malloc 1 Gb
Dla tych z was, którzy nie znają malloc, jest to standardowa struktura w C, która oznacza przydział pamięci. Obliczenia te służą jako dowód na to, że korelacja OP między DirectMapping a THS może być poprawna. Należy również pamiętać, że zamontowanie TYLKO fs OGROMNEJ STRONY spowodowałoby jedynie przyrost o 2 MB, podczas gdy pozwolenie systemowi na zarządzanie pamięcią za pomocą THS występuje głównie w blokach 4k, co oznacza, że pod względem zarządzania pamięcią każde wywołanie malloc ratuje system 2044k (2048 - 4 ) do użycia w innym procesie.
/proc/meminfo
które zawierająHugePage
(lub czy Twoja wersja jądra ich nie ma)? Na jakiej architekturze to jest (x86_64, jak sądzę)?