Optymalizacja użycia pamięci Linuksa

Optymalizacja użycia pamięci Linuksa
W części pierwszej tej serii przyjrzeliśmy się bliżej przestrzeni swapowej, a druga część dotyczyła narzędzi i poleceń do zarządzania pamięcią. Teraz omówimy różne parametry i strategie w celu optymalizacji pamięci i jej wykorzystania w ogóle. Obejmuje to ilość pamięci, przyspieszenie dostępu i strategię użytkowania wewnętrznego.

Ilość pamięci

Jak już omówiono w części pierwszej, cała pamięć nazywa się pamięcią wirtualną i składa się zarówno z pamięci fizycznej, jak i przestrzeni wymiany. Dostępność pamięci fizycznej zależy od sprzętu wbudowanego w maszynę, a także tego, ile pamięci może rozwiązać procesor,. Na przykład 32 -bitowe systemy operacyjne mają limit 4G pamięci, tylko (2^32 -bit), podczas gdy systemy operacyjne oparte na 64 -bitowych teoretycznie pozwalają do 16 EB (2^64 -bit).

Mówiąc dokładniej, ograniczenie to płyta główna z samym procesorem, moduły pamięci obsługiwane przez tę płytę główną oraz określone moduły pamięci podłączone do gniazd pamięci na płycie głównej. Jednym ze sposobów maksymalizacji dostępnej pamięci systemu jest użycie podobnych modułów pamięci, które mają największy rozmiar, jak to możliwe. Drugim sposobem jest użycie pamięci wymiany, jak już wyjaśniono w części pierwszej.

Dostęp do pamięci

Następnie uwzględnia poprawę prędkości dostępu pamięci. Początkowo limit fizyczny jest podawany przez sam moduł pamięci. Nie możesz zejść poniżej fizycznych granic sprzętu. Po sekundzie Ramdisk, a na trzecim użycie ZRAM może przyspieszyć dostęp do pamięci. Omówimy te dwie technologie bardziej szczegółowo.

Tworzenie Ramdisk

Ramdisk to blok pamięci, który system operacyjny obsługuje jak fizyczne urządzenie do przechowywania danych - hardkor. To tymczasowe urządzenie istnieje, gdy tylko system rozpocznie się i umożliwia Ramdisk, a system albo wyłącza Ramdisk, albo wyłącza. Należy pamiętać, że dane, które przechowujesz na takim Ramdisk, zostaną utracone po zamknięciu maszyny.

Możesz utworzyć dynamiczny Ramdisk za pośrednictwem systemu plików TMPFS oraz za pośrednictwem systemu plików RAMFS. Obie technologie znacznie różnią się od siebie. Po pierwsze, dynamiczna oznacza, że ​​pamięć dla Ramdisk jest przydzielona na podstawie jego użycia (prawdziwa dla obu metod). Tak długo, jak nie przechowujesz danych na ten temat, rozmiar Ramdisk wynosi 0.

Tworzenie dynamicznego Ramdisk przez TMPFS jest następujące:

# mkdir /media /ramdisk
# Mount -t tmpfs Brak /Media /Ramdisk

Tworzenie dynamicznego Ramdisk przez Ramfs jest następujące:

# mkdir /media /ramdisk
# Mount -t Ramfs Ramfs /Media /Ramdisk

Po drugie, za pomocą TMPFS i chyba, że ​​wyraźnie określono rozmiar Ramdisk, jest ograniczony do 50% pamięci fizycznej. Natomiast Ramdisk oparty na RAMFS nie ma takiego ograniczenia.

Tworzenie dynamicznego Ramdisk przez TMPFS o względnej wielkości 20% pamięci fizycznej jest następujące:

# mkdir /media /ramdisk
# Mount -t TMPFS -O Rozmiar = 20% Brak /Media /Ramdisk

Tworzenie dynamicznego Ramdisk przez TMPFS o ustalonym rozmiarze 200 m pamięci fizycznej jest następujące:

# mkdir /media /ramdisk
# Mount -t TMPFS -O Rozmiar = 200m Brak /Media /Ramdisk

Po trzecie, obie metody obsługują zamian w inny sposób. W przypadku, gdy system osiągnie limit pamięci Ramdisk na podstawie TMPFS, dane z Ramdisk są zamieniane. To udaremnia pomysł szybkiego dostępu. Z drugiej strony system operacyjny priorytetowo traktuje zarówno treść, jak i żądane strony pamięci Ramdisk oparte na RAMFS, utrzymuje to w pamięci, a zamienia pozostałe strony pamięci na dysk.

W powyższych przykładach, których użyliśmy /Media/Ramdisk Jako punkt montażowy. Jeśli chodzi o regularne dane jedyną częścią systemu plików Linux, który jest zalecany do użycia na Ramdisk /TMP. Ten katalog przechowuje tylko dane tymczasowe, które nie trwają. Tworzenie stałego Ramdisk, który przechowuje system plików /TMP, wymaga dodatkowego wpisu w pliku /etc/fstab w następujący sposób (na podstawie RAMFS):

RAMFS /TMP RAMFS domyślnie 0 0

Następnym razem, gdy uruchomisz system Linux, Ramdisk zostanie włączony, automatycznie.

Za pomocą ZRAM

ZRAM oznacza wirtualną wymianę skompresowaną w pamięci RAM i tworzy skompresowane urządzenie blokowe bezpośrednio w pamięci fizycznej. ZRAM wchodzi w działanie (użycie), gdy tylko nie ma już dostępnych stron pamięci fizycznej w systemie. Następnie jądro Linux próbuje przechowywać strony jako skompresowane dane na urządzeniu ZRAM.

Obecnie nie ma pakietu dostępnego dla Debian GNU/Linux, ale Ubuntu. Nazywa się Zram-Config. Zainstaluj pakiet i skonfiguruj urządzenie ZRAM, po prostu uruchamiając zgodnie z usługą SystemD w następujący sposób:

# SystemCtrl Start Zram-Config

Jak doszło do wyjścia swapon -s, Urządzenie jest aktywne jako dodatkowa partycja zamiany. Automatycznie, rozmiar 50% pamięci jest przydzielany dla ZRAM (patrz rysunek 1). Obecnie nie ma sposobu na określanie innej wartości dla ZRAM, które można przydzielić.

Aby zobaczyć więcej szczegółów na temat sprężonej partycji zamiany, użyj polecenia ZRAMCTL. Rysunek 2 pokazuje nazwę urządzenia, algorytm kompresji (LZO), rozmiar partycji zamiany, rozmiar danych na dysku i jego kompresowany rozmiar, a także liczbę strumieni kompresji (wartość domyślna: 1).

Strategia użytkowania

Następnie skupiamy się na strategii wykorzystania pamięci. Istnieje kilka parametrów wpływających na zachowanie użycia pamięci i dystrybucji. Obejmuje to rozmiar stron pamięci - na 64 -bitowych systemach to 4m. Następnie pewna rola odgrywa pewną rolę. Jak już wyjaśniono w części pierwszej, ten parametr kontroluje względną wagę nadaną wymianę pamięci środowiska wykonawczego, w przeciwieństwie do upuszczenia stron pamięci z pamięci podręcznej strony systemowej. Nie powinniśmy również zapominać zarówno buforowania, jak i wyrównania strony pamięci.

Użyj programów, które wymagają mniej pamięci

Wreszcie użycie pamięci zależy od samych programów. Większość z nich jest powiązana z domyślną biblioteką C (standardowy libc). Jako programista, aby zminimalizować kod binarny, rozważ za pomocą alternatywy i znacznie mniejszej biblioteki C. Na przykład istnieją dietlibc [1], UCLIBC [2] i muzl lib c [3]. Witryna dewelopera Musl Lib C zawiera obszerne porównanie [4] dotyczące tych bibliotek pod względem najmniejszego możliwego programu statycznego C, porównania funkcji, a także środowisk według kompilacji oraz obsługiwanych architektur sprzętowych.

Jako użytkownik być może nie będziesz musiał kompilować swoich programów. Rozważ szukanie mniejszych programów i różnych ram, które wymagają mniej zasobów. Jako przykład możesz użyć środowiska stacjonarnego XFCE zamiast KDE lub GNOME.

Wniosek

Istnieje sporo opcji, aby zmienić użycie pamięci na lepsze. Odbywa się to od zamiany na kompresję na podstawie ZRAM, a także konfigurowanie Ramdisk lub wybór innej struktury.

Linki i referencje

  • [1] Dietlibc, https: // www.Fefe.de/dietlibc/
  • [2] UCLIBC, https: // uclibc.org/
  • [3] Musl Lib C, http: // www.Musl-Libc.org/
  • [4] Porównanie bibliotek C, http: // www.Etalabs.net/compare_libcs.html

Linux Memory Management Series

  • Część 1: Zarządzanie pamięcią jądra Linux: Przestrzeń zamiany
  • Część 2: Polecenia do zarządzania pamięcią Linux
  • Część 3: Optymalizacja użycia pamięci Linux

Podziękowanie

Autor chciałby podziękować Axel Beckert i Gerold Rupprecht za ich wsparcie podczas przygotowywania tego artykułu.