Mam dość stary serwer, który ma 4 GB pamięci RAM i przez cały dzień obsługuje te same pliki, ale robi to z dysku twardego, podczas gdy 3 GB pamięci RAM jest „wolne”.
Każdy, kto kiedykolwiek próbował uruchomić napęd RAM, może zobaczyć, że jest niesamowity pod względem prędkości. Zużycie pamięci przez ten system zwykle nie przekracza 1 GB / 4 GB, więc chcę wiedzieć, czy istnieje sposób na wykorzystanie tej dodatkowej pamięci do czegoś dobrego.
- Czy można powiedzieć systemowi plików, aby zawsze obsługiwał określone pliki poza pamięcią RAM?
- Czy są jakieś inne metody, których można użyć do poprawy możliwości odczytu plików przy użyciu pamięci RAM?
Mówiąc dokładniej, nie szukam tutaj „hacka”. Chcę, aby wywołania systemu plików obsługiwały pliki z pamięci RAM bez potrzeby tworzenia napędu RAM i kopiowania tam plików ręcznie. A przynajmniej skrypt, który to dla mnie robi.
Możliwe zastosowania to:
- Serwery WWW z plikami statycznymi, które są odczytywane dużo
- Serwery aplikacji z dużymi bibliotekami
- Komputery stacjonarne ze zbyt dużą pamięcią RAM
Jakieś pomysły?
Edytować:
- Znalazłem to bardzo pouczające: pamięć podręczna stron Linux i pdflush
- Jak zauważył Zan, pamięć nie jest tak naprawdę wolna. Mam na myśli to, że nie są używane przez aplikacje i chcę kontrolować, co powinno być buforowane w pamięci.
linux
cache
virtual-memory
Andrioid
źródło
źródło
Odpowiedzi:
vmtouch wydaje się dobrym narzędziem do pracy.
Najważniejsze:
Instrukcja vmtouch
EDYCJA: Wykorzystanie zadane w pytaniu jest wymienione w przykładzie 5 na vmtouch Hompage
EDYCJA 2: Jak zauważono w komentarzach, dostępne jest teraz repozytorium git .
źródło
vmtouch
dobrze pasuje do tej niszy.Jest to również możliwe przy użyciu vmtouch Wirtualna Toucher pamięci narzędzia .
Narzędzie pozwala kontrolować pamięć podręczną systemu plików w systemie Linux. Można wymusić lub zablokować określony plik lub katalog w podsystemie pamięci podręcznej maszyny wirtualnej lub użyć go do sprawdzenia, które części pliku / katalogu znajdują się w maszynie wirtualnej.
Lub...
źródło
Sztuczka biedaka polegająca na wrzuceniu rzeczy do pamięci podręcznej systemu plików polega na tym, że po prostu ją przechwycisz i przekierujesz do / dev / null.
źródło
cat
okresowo jest plikiem do / dev / nullLinux buforuje tyle pamięci IO dysku w pamięci, ile może. Takie są statystyki pamięci podręcznej i bufora. Prawdopodobnie wykona lepszą pracę niż przechowywanie odpowiednich rzeczy.
Jeśli jednak nalegasz na przechowywanie danych w pamięci, możesz utworzyć napęd RAM za pomocą tmpfs lub ramfs. Różnica polega na tym, że ramfs przydzieli całą pamięć, o którą prosisz, ponieważ tmpfs wykorzysta tylko pamięć używaną przez twoje urządzenie blokowe. Moja pamięć jest trochę zardzewiała, ale powinieneś być w stanie zrobić:
lub
a następnie skopiuj swoje dane do katalogu. Oczywiście, kiedy wyłączysz maszynę lub odmontujesz tę partycję, twoje dane zostaną utracone.
źródło
Po obszernym przeczytaniu na temat zamiany jądra 2.6 i funkcji buforowania stron znalazłem „narzędzia fcoretools”. Który składa się z dwóch narzędzi;
(Jeśli ktoś inny uzna to za interesujące, zamieszczam to tutaj)
źródło
Istnieją dwa ustawienia jądra, które mogą znacznie pomóc nawet bez użycia innych narzędzi:
zamiana
informuje jądro Linuksa, jak agresywnie powinien używać swap. Cytując artykuł w Wikipedii:
vfs_cache_pressure
Cytowanie z vm.txt :
Ustawiając
swappiness
wysoką wartość (np. 100), jądro przenosi wszystko, czego nie trzeba zamieniać, zwalniając pamięć RAM do buforowania plików. A poprzez ustawienievfs_cache_pressure
niższej (powiedzmy na 50, a nie na 0!), Faworyzuje buforowanie plików zamiast przechowywania danych aplikacji w pamięci RAM.(Pracuję nad dużym projektem Java i za każdym razem, gdy go uruchamiam, wymagało to dużo pamięci RAM i opróżniłem pamięć podręczną dysku, więc przy następnym kompilowaniu projektu wszystko zostało ponownie odczytane z dysku. Dostosowując te dwa ustawienia, zarządzam aby zachować źródła i skompilowane dane w pamięci podręcznej w pamięci RAM, co znacznie przyspiesza proces).
źródło
Bardzo wątpię, czy faktycznie obsługuje pliki z dysku z 3 GB wolnej pamięci RAM. Buforowanie plików systemu Linux jest bardzo dobre.
Jeśli widzisz dyskowe operacje we / wy, zajrzałbym do twoich konfiguracji rejestrowania. Wiele dzienników jest ustawianych jako niebuforowanych, aby zagwarantować dostępność najnowszych informacji dziennika w razie awarii. W systemach, które muszą być szybkie niezależnie od tego, używaj buforowanego dziennika operacji we / wy lub zdalnego serwera dziennika.
źródło
Jeśli masz dużo pamięci, możesz po prostu wczytać pliki, które chcesz buforować za pomocą cat lub podobnego. Linux wykona dobrą robotę, utrzymując go przy sobie.
źródło
Możesz mieć program, który po prostu
mmap
s twoje pliki, a następnie nadal działa.źródło
Istnieją różne systemy ramfs, z których możesz korzystać (np. Ramfs, tmpfs), ale ogólnie, jeśli pliki są tak często odczytywane, to znajdują się w pamięci podręcznej systemu plików. Jeśli twój roboczy zestaw plików jest większy niż twój darmowy RAM, pliki zostaną z niego usunięte - ale jeśli twój roboczy zestaw jest większy niż twój darmowy RAM, nie ma możliwości, abyś zmieścił to wszystko w ramdysku.
Sprawdź dane wyjściowe polecenia „free” w powłoce - wartość w ostatniej kolumnie pod „Cached” określa, ile wolnej pamięci RAM zużywa pamięć podręczna systemu plików.
źródło
Jeśli chodzi o twoje ostatnie pytanie, upewnij się, że pamięć RAM znajduje się w różnych kanałach pamięci, aby procesor mógł pobierać dane równolegle.
źródło
Myślę, że można to lepiej rozwiązać na poziomie aplikacji. Na przykład są do tego prawdopodobnie wyspecjalizowane serwery sieciowe lub możesz rozważyć mod_cache z Apache. Jeśli masz konkretny cel, np. Szybsze udostępnianie treści internetowych, możesz uzyskać ulepszenia z tego rodzaju rzeczy.
Ale twoje pytanie ma charakter ogólny, podsystem pamięci Linux został zaprojektowany w celu zapewnienia najlepszego ogólnego wykorzystania pamięci RAM. Jeśli chcesz kierować reklamy na określone typy wydajności, zastanów się nad sprawdzeniem wszystkiego w / proc / sys / vm.
Pakiet fcoretools jest interesujący, zainteresowałbym się wszelkimi artykułami na temat jego aplikacji ... Ten link mówi o rzeczywistych wywołaniach systemowych używanych w aplikacji.
źródło
Komputery stacjonarne (np. Ubuntu) już korzystają z plików wstępnego ładowania (przynajmniej popularnych bibliotek współdzielonych) do pamięci podczas uruchamiania. Służy do przyspieszenia uruchamiania i uruchamiania różnych programów typu bloarware, takich jak FF, OO, KDE i GNOME (z ewolucją programu typu bloat-mailer).
Narzędzie nazywa się readahead http://packages.ubuntu.com/dapper/admin/readahead
Istnieje również odpowiednie wywołanie systemowe: readahead (2) http://linux.die.net/man/2/readahead
Istnieje również projekt demona wstępnego ładowania: http://linux.die.net/man/8/preload
źródło
http://www.coker.com.au/memlockd/ robi to
chociaż tak naprawdę nie jest to potrzebne, Linux wykona całkiem niezłą robotę buforując pliki, których używasz samodzielnie.
źródło
właśnie próbowałem dd if = / dev / yourrootpartition of = / dev / null \ bs = 1Mcount = howmuchmemoryyouwanttofill
nie daje mi kontroli, której pragniesz, ale przynajmniej próbuje wykorzystać zmarnowaną pamięć
źródło
Używam find / -name stringofrandomcharacter to pomaga dużo
źródło
Nie do końca o to pytano, ale używam
aby uruchomić inicjalizację plików w woluminie AWS utworzonym z migawki. Jest bardziej skoncentrowany niż oficjalne zalecenie używania dd, jeśli chcesz po prostu przeczytać niektóre pliki.
źródło
Czasami mogę chcieć buforować pliki w określonym folderze i jego podfolderach. Po prostu przechodzę do tego folderu i wykonuję następujące czynności:
odnaleźć . -exec cp {} / dev / null \;
Te pliki są buforowane
źródło