użyj `/ run / shm` (wcześniej` / dev / shm`) jako katalogu tymczasowego


9

Czy dobrą praktyką jest tworzenie katalogu w /run/shm(dawniej /dev/shm) i używanie go jako katalogu tymczasowego dla aplikacji?

Tło: Piszę testy czarnej skrzynki dla programu, który robi wiele rzeczy z plikami i katalogami. Dla każdego testu tworzę dużo plików i katalogów, a następnie uruchamiam program, a następnie tworzę oczekiwany zestaw plików i katalogów, a następnie uruchamiam diff do porównania. Mam teraz około 40 testów, których uruchomienie zajmuje już ponad 2 sekundy. Mając nadzieję na przyspieszenie, chcę uruchomić testy w katalogu na jakimś ramdysku.

Badając dysk RAM, natknąłem się na pytanie z odpowiedzią, że można w nim utworzyć katalog /dev/shmi używać go jak katalogu tymczasowego. Po dokładniejszych badaniach natknąłem się na stronę wiki z debiana, stwierdzając, że użycie błędu jest błędem /dev/shm. Powinienem użyć shm_*funkcji. Niestety shm_*funkcje wydają się niedostępne do użycia w skrypcie powłoki.

Teraz jestem zmieszany. Czy można używać /run/shm(wcześniej /dev/shm) jak katalogu tymczasowego?


Tak, wielu użytkowników podłącza się również /tmpdo pamięci współużytkowanej.
Eddy_Em

Wyobrażam sobie, że /tmpjest to bardziej semantyczne. Jeśli Twoi użytkownicy mają wystarczającą ilość pamięci RAM, aby użyć /dev/shmplików tymczasowych do przyspieszenia, to tam go zainstalują. Ale jeśli nie mają wystarczającej ilości pamięci RAM, a zamontowanie jej tam spowalnia komputer, zmuszając wszystkie procesy do korzystania z plików wymiany, wówczas zachowają pamięć RAM na ważniejsze rzeczy i wykorzystają zwykłe miejsce na dysku dla /tmpsystemu plików. Innymi słowy, /tmpjest bardziej strojony.
Jack

Odpowiedzi:


10

Używanie jakiegoś katalogu jest w porządku, o /runile masz do niego odpowiednie uprawnienia. W niektórych współczesnych dystrybucjach /tmpjest już wirtualnym systemem plików w pamięci lub dowiązaniem symbolicznym do katalogu wewnątrz /run. Jeśli tak jest w Twoim przypadku (możesz to sprawdzić /etc/fstablub wpisać mtab), możesz użyć go /tmpjako katalogu tymczasowego.

Nie daj się też pomylić z artykułem z Debiana. shm_*funkcje są używane do tworzenia segmentów pamięci współużytkowanej dla komunikacji między procesami. Dzięki tym funkcjom możesz współdzielić fragment pamięci między dwoma lub więcej procesami, aby umożliwić im komunikację lub współpracę przy użyciu tych samych danych. Procesy mają segment pamięci podłączony we własnej przestrzeni adresowej i mogą tam czytać i zapisywać jak zwykle. Jądro radzi sobie ze złożonością. Funkcje te nie są dostępne jako funkcje powłoki (i nie byłyby bardzo przydatne w kontekście powłoki). Aby uzyskać więcej informacji, spójrz na man 7 shm_overview. Chodzi o to, że żaden program nie powinien bezpośrednio zarządzać pseudoplikami reprezentującymi wspólne segmenty, ale zamiast tego używać odpowiednich funkcji do tworzenia, dołączania i usuwania segmentów pamięci dzielonej.


2
Najbardziej odpowiednie miejsce poniżej /runmoże być /run/user/${UID}/.
Paul Fenney,

1
Rzeczywiście, w moim systemie pulseaudio i systemd instalują tam niektóre pliki, takie jak plik pid. Jednak / tmp nadal będzie moją preferowaną lokalizacją dla plików tymczasowych.
lgeorget

2
@PaulFenney: / run / user / $ UID jest również znany jako $ XDG_RUNTIME_DIR
user2394284
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.