Muszę skonfigurować system przechowywania w pamięci dla około 10 GB danych, składający się z wielu pojedynczych plików (obrazów) o wielkości 100 kb. Będzie wiele odczytów i dość okresowych zapisów (dodawanie nowych plików, usuwanie niektórych starych).
Teraz wiem, że tmpfs zachowuje się jak zwykły system plików, dla którego możesz na przykład sprawdzić wolne / zajęte miejsce za pomocą df , co jest przyjemną funkcją. Jestem jednak zainteresowany, czy ramfs oferowałby pewne korzyści w odniesieniu do szybkości operacji IO. Wiem, że nie mogę kontrolować rozmiaru zajętej pamięci podczas korzystania z ramfs i że mój system może zawiesić się, jeśli całkowicie zużyje wolną pamięć RAM, ale nie będzie to problemem w tym scenariuszu.
Podsumowując, jestem zainteresowany:
- Pod względem wydajności, który jest szybszy: ramfs lub tmpfs (i ewentualnie dlaczego)?
- Kiedy tmpfs używa przestrzeni wymiany? Czy przenosi już zapisane dane do zamiany (w celu zwolnienia pamięci RAM dla innych aktualnie uruchomionych programów) czy tylko nowe dane, jeśli w tym momencie nie ma już wolnej pamięci RAM?
źródło
Odpowiedzi:
Moja rekomendacja:
Zmierz i obserwuj rzeczywistą aktywność w normalnych warunkach.
Te pliki prawdopodobnie nie będą WSZYSTKIE potrzebne i będą zawsze podawane z pamięci podręcznej. Ale istnieje ładne narzędzie o nazwie vmtouch, które może powiedzieć ci, co jest w pamięci podręcznej w danym momencie. Możesz go również użyć do zablokowania niektórych katalogów lub plików w pamięci podręcznej. Zobacz, jak wyglądają rzeczy po regularnym użyciu. Korzystanie z tmpfs i ramfs nie jest konieczne w tej sytuacji.
Zobacz: http://hoytech.com/vmtouch/
Myślę, że będziesz zaskoczony, widząc, że najbardziej aktywne pliki prawdopodobnie będą już rezydować w pamięci podręcznej.
Jeśli chodzi o tmpfs kontra ramfs, nie ma znaczącej różnicy wydajności. Istnieją różnice operacyjne. Prawdziwym przypadkiem użycia jest Oracle, w którym użyto ramfs, aby umożliwić Oracle zarządzanie danymi w pamięci RAM bez ryzyka zamiany. Dane tmpfs można wymieniać pod presją pamięci. Istnieją również różnice w zmianie rozmiaru i modyfikacji ustawień w locie.
źródło
Nie przesadzaj z tym. Umieść wystarczającą ilość pamięci RAM w systemie i pozwól, aby pamięć podręczna dysku jądra zajęła się Twoimi sprawami. W ten sposób możesz czerpać korzyści z odczytów pochodzących bezpośrednio z pamięci, zachowując jednocześnie możliwość przechowywania danych na dysku.
źródło
1) Wskaźnik wydajności.
Wykorzystując tę stronę jako odniesienie, zrobiłem porównanie I / O między tmpfs i ramfs, a wyniki są takie, że są prawie identyczne pod względem wydajności:
2) Zgodnie z tą stroną tmpfs używa swap, a ramfs nie używa swap.
źródło
Jeśli masz zainstalowaną wystarczającą ilość pamięci RAM do obsługi różnych buforów jądra, stosu aplikacji i stosów, zwykłej pamięci podręcznej systemu plików i wszystkich plików, które zamierzasz w niej umieścić,
ramfs
nigdy nie powinno być wolniejsze niż,tmpfs
ponieważ nie będzie ryzyka fizyczne we / wy według projektu. Fizyczne wejścia / wyjścia są niewątpliwie główną przyczyną obniżenia wydajności w tym obszarze.Jeśli jednak nie masz zainstalowanej takiej ilości pamięci RAM, użycie
ramfs
może i prawdopodobnie będzie wolniejsze niżtmpfs
w przypadku, gdy ten drugi korzysta z heurystyki pamięci wirtualnej, aby zdecydować, co powinno być lepiej na dysku (tj. W obszarze wymiany) w porównaniu do tego, co powinno być na pamięci RAM podczas gdytmpfs
dane systemu plików utknęły w pamięci RAM, co może być marnotrawstwem zasobów.Aby odpowiedzieć na drugie pytanie, tak,
tmpfs
najpierw przenieś stare dane do obszaru wymiany, a nie do ostatniego „gorącego”.źródło