Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

LINUX i wykorzystanie RAM – FAKTY I MITY

Celem tego artykułu jest przeprowadzenie analizy wykorzystania pamięci Ram i SWAP w systemie linux. Temat ten jest pewnego rodzaju areną, na której użytkownicy systemu Windows oraz różnych dystrybucji linuxa sprzeczają się na temat „zasobożerności” w/w systemu. Do przeprowadzenia badania wykorzystam „wiekowy” komputer oraz system Opensuse 11.2.

Parametry komputera:
Procesor: AMD Athlon 1800 xp,
Pamięć: 768DDR (133), dwie kości (512)+(256),
Partycja wymiany ustawiona na 1.1GB. (wartość ustawiona automatycznie przez program partycjonujący),
Inne parametry są zbędne (prędkość dysków, czas dostępu do pamięci itp. sobie darujemy).

I) Uruchamiamy i zapychamy

Zamieszczony powyżej zrzut ekranu przedstawia system zaraz po uruchomieniu z włączonym Conky, konsolą i programem do robienia zrzutów ekranu. Jak wiać system wykorzystuje w przybliżeniu 160 mb. Różnica między wskazaniami Conky, a danymi free -m wynika z braku odświeżania tego parametru. Druga sprawa, to stała różnica, która występuje między wskazaniami free -m, a danymi z Conky (wartość stałej różnicy to „u mnie” ~10mb).

r   e   k   l   a   m   a

Przechodzimy do „zapychania pamięci”. Odpaliłem kilka programów, które widoczne są na pasku zadań (zrzut ekranu nr.2). Ciekawa sytuacja zaczyna się dziać po przekroczeniu mniej więcej 40-45 % pamięci ram. System zaczyna ładować dane do Swap. Dlaczego, przecież zostało nam mnóstwo pamięci do wykorzystania? Może wskazania Conky są błędne, a system ładuje dane na partycję wymiany bo wykorzystał wolną pamięć?

Można to sprawić komendą TOP. Na zrzucie ekranu nr.2 widzimy, że procentowa wielkość wykorzystania pamięci jest taka sama jak w Conky ~54-55%. W tej sytuacji musimy zastanowić się, dlaczego system właśnie w taki sposób zarządza pamięcią i partycją wymiany. SWAP jest przestrzenią, która stanowi rozszerzenie pamięci i wykorzystywana jest w przypadku dużego przeładowania pamięci RAM. O tym, jak jest duża „zajętość” RAMu decyduje kernel, a dokładnie jego parametr „swappiness”. Jest on odpowiedzialny za to, z jaką „przysłowiową łatwością” system wykorzystuje SWAP. Jeżeli parametr „swappiness” ma wysoką wartość, to system z wielką chęcią korzysta z partycji wymiany, rezerwują w ten sposób RAM do późniejszego wykorzystania (na przysłowiową czarną godzinę). W przypadku niskiej wartości tego parametru system korzysta wyłącznie z Ramu zapychając go całkowicie, po czym w sytuacji braku wolnej pamięci, ładuje w swap (zamulając komputer- pamiętajmy, że przeciętny dysk twardy jest ~100 razy wolniejszy od RAMu)(Nie biorąc pod uwagę dysków SSD).
Aby zobaczyć, jak ustawiony jest parametr swappiness w systemie należy wykonać polecenie:

cat /proc/sys/vm/swappiness

W standardowych dystrybucjach parametr ten ustawiony jest na 60, co oznacza, że system mocno wykorzystuje przestrzeń swap, rezerwując RAM na wcześniej wspomnianą czarną godzinę. W przypadku Opensuse 11.2 wielkość parametru jest standardowa i wynosi wcześniej wspomniane „60” (ustawienia można modyfikować między 0-100, ale to już modyfikujcie na własną rękę, ja posypałem kiedyś system takim kombinowaniem i teraz nie chce mi się ryzykować).

Wróćmy do rozważania na temat „swappiness”, jeżeli jego wartość równa się 60, a zakres modyfikacji jest w przedziale [0-100], wówczas możemy przyjąć tą watorść jako procentową. W moim przypadku (40%+60%=całość RAM) gdzie po przekroczeniu 40% pamięci system zaczyna rozdzielać dane między RAM i SWAP. Wcześniej wspomniałem, iż system zaczął korzystać ze Swap w momencie przekroczenia 40-45% pamięci.

Sprawdziłem to drugi raz i wyszło, że po przekroczeniu ~340 MB Ramu, system załadował pierwsze dane na swap.

Posłużymy się danymi z free -m;

Ilość wykrytej pamięci- 752
752x40%=300.8
752x45%=338,4

Z obliczeń wynika, że moje wcześniejsze założenie nie do końca było słuszne (40/60), ponieważ obserwacje i obliczenia wskazują, że system zaczyna dzielić między RAM, a SWAP po przekroczeniu ~338-340 mb pamięci co stanowi 45% wykrywanego RAM'u. (Załóżmy, że moje wcześniejsze założenia są słuszne i przyjmiemy 5 % margines błędu)

Przechodzimy do drugiej części mojego rozważania na temat wykorzystani pamięci RAM. Jeżeli system po przekroczeniu 45 % pamięci zaczyna wspomagać się SWAP, czy jest to dobre rozwiązanie? Ja osobiście nie odczułem wielkiego spadku wydajności wynikającego z takiego sposobu zarządzania pamięcią (pewnie ze względu na małą ilość danych odczytywanych z swap). Większy dyskomfort wynika ze słabego procesowa.

II) Wykorzystanie „vmstat”.

Vmstat to program dostępny „chyba” w każdej dystrybucji linuxa. Program uruchamiamy w konsoli bez uprawnień root. W zamieszczonym powyżej zrzucie eknanu nr. 3 widzimy wynik użycia vmstat z parametrami 3 i 30, gdzie 3 to interwał trzy sekundowy, a 30 ilość wywołań.

Więcej informacji (man vmstat)
procs: r – ilość oczekujących procesów w kolejce na przedzielenie procesora,
memory: swapd - wielkość wykorzystanej pamięci swap,
memory: free - ilość wolnej pamięci,
swap: si - ilość bloków pamięci wczytywanych ze swap,
swap: so - ilość bloków pamięci zapisywanych do swap,
io: bi - ilość bloków danych wczytywanych z dysku,
io: bo - ilość bloków danych zapisywanych na dysk,
cpu: id - czas bezczynności procesora (wyrażony w %),
cpu: wa - czas procesora spędzony w oczekiwaniu na zakończenie operacji I/O np. pisanie lub czytanie z dysku (wyrażony w %),
cpu: sy - czas procesora spędzony na realizację zadań systemu (wyrażony w %),
cpu: us - czas procesora spędzony na wykonaniu programów nie będących elementem systemu (wyrażony w %).

Wartości „vmstat” służą nam do ustalenia co „zamula nasz komputer

- za słaby procesor?,
- za mała ilość RAMu?,
- czy zbyt wolny dysk?.

Oczywiście spróbujemy odpowiedzieć na pytanie „czy mam za mała ilość ramu”. W tym celu zinterpretujemy jedynie trzy parametry (memory: free, memory: swapd oraz swap: SI, SO). Przejdźmy do interpretacji danych zawartych na screenie nr 3. Jeżeli wartość „mem. Free” jest mała, a wartość „mem swapd” duża, oznacza to że system mocno wykorzystuje RAM i SWAP (za mała ilość pamięci). W moim przypadku obie wartości są małe. Free (wartość ~ 21 mb i jej zmiany w kolejnych wywołaniach programu) natomiast Swap ~24mb. Jeżeli do wartości free dodamy buffor i cache otrzymamy realna wartość wolnej pamięci. Po dodaniu można śmiało stwierdzić, że wolna ilość pamięci jest wystarczająca.
W tej sytuacji wykorzystamy parametry swap: SI i SO.
Swap „SI” informuje o ilości stron pamięci wczytanych z SWAP do RAMu, a „SO” o ilości stron pamięci zapisywanych z RAMu do swap. Jeżeli obie wartości są wysokie oraz pamięć jest mocno wykorzystywana, wskazuje to na zbyt małą ilość pamięci RAM (system w tej sytuacji musi często zapisywać i odczytywać strony z partycji wymiany).
Jak to wygląda w moim przypadku?

Wartości zawarte w kolumnach SO i SI (zrzut ekranu nr.3) w większości są zerowe. Jedynie w linijce nr.10 widzimy skok do poziomu SO 29 i SI 11 spowodowany uruchomieniem menadżera plików Dolphin. No i jak to teraz wszystko interpretować? Wartości w kolumnach SI i SO są nie wielkie no, ale są!!

Sytuacja ta nie jest spowodowana zbyt małą ilością RAMu, a sposobem w jakim system zarządza pamięcią. W tej sytuacji mogę śmiało stwierdzieć, że ramu jest wystarczająca ilość. Pamiętajmy jednak, że gdyby było go więcej np. 2 gb system nie korzystał by z partycji wymiany w ogóle.

III) Wnioski:

1) Ilość Ramu jest wystarczająca!! - FAKT
2) System zarządzania pamięcią linuxa, stara się w jak najlepszy sposób gospodarować zasobami pamięci dzieląc ją między RAM, a Swap co w pewien sposób wpływa na spadek prędkości komputera i komfortu pracy, ale dzięki temu przez dłuższy czas unikamy totalnego „zamulenia” komputera. FAKT
3)Stwierdzenia, że linux (Ubuntu,Suse itp.) wymagają 2gb RAMu wynika z błędnej interpretacji danych zawartych w Top czy free (buffor, cache). MIT 2 gb - obalony
4)Im więcej pamięci tym lepiej (unikamy wchodzenia na swap)- FAKT
5)Osoby posiadające 1gb ramu i więcej mogą zmniejszyć parametr „swappiness” lub zaryzykować i wyłączyć go całkowicie.

Opracowanie to napisałem na podstawie swoich przemyśleń i wniosków, które mogą być błędne. Proszę więc o wyrozumiałość i zachęcam do rozmowy oraz sprawdzenia wykorzystania pamięci u siebie (na dowolnej dystrybucji).

Pozdrawiam,
Maciej M.

 

Komentarze