zzamień
Deweloperzy | Setha Jenningsa i innych |
---|---|
Napisane w | C |
System operacyjny | Linuks |
Typ | Funkcje jądra Linuksa |
Licencja | GNU GPL |
Strona internetowa |
zswap to funkcja jądra Linuksa , która zapewnia skompresowaną pamięć podręczną zapisu z powrotem dla zamienionych stron, jako formę kompresji pamięci wirtualnej . Zamiast przenosić strony pamięci do urządzenia wymiany, gdy mają one zostać wymienione, zswap wykonuje ich kompresję , a następnie zapisuje je w puli pamięci dynamicznie przydzielanej w systemowej pamięci RAM . Późniejszy zapis zwrotny do rzeczywistego urządzenia wymiany jest odraczany lub nawet całkowicie unikany, co skutkuje znacznie zmniejszoną liczbą operacji we/wy dla systemów Linux, które wymagają zamiany; kompromisem jest potrzeba dodatkowych procesora do wykonania kompresji.
Dzięki zmniejszonej liczbie operacji we/wy zswap oferuje korzyści różnym urządzeniom korzystającym z pamięci flash , w tym urządzeniom wbudowanym , netbookom i podobnym sprzętom niższej klasy, a także innym urządzeniom korzystającym z dysków półprzewodnikowych (SSD). do przechowywania. Pamięć flash ma ograniczoną żywotność ze względu na swój charakter , więc unikanie jej używania do zapewniania przestrzeni wymiany zapobiega szybkiemu zużyciu.
Wewnętrzne
zswap jest zintegrowany z resztą podsystemu pamięci wirtualnej jądra Linuksa za pomocą interfejsu API zapewnianego przez frontswap , który jest mechanizmem jądra Linuksa, który wyodrębnia różne typy pamięci masowej, które mogą być używane jako przestrzeń wymiany. W rezultacie zswap działa jako sterownik zaplecza dla frontswap, zapewniając coś, co jest wewnętrznie widoczne jako urządzenie pseudo-RAM. Innymi słowy, interfejs API frontswap umożliwia zswap przechwytywanie stron pamięci podczas ich wymiany oraz przechwytywanie błędów stron dla już zamienionych stron; dostęp do tych dwóch ścieżek pozwala zswap działać jako skompresowana pamięć podręczna z zapisem zwrotnym dla zamienionych stron.
Wewnętrznie zswap wykorzystuje moduły kompresji dostarczane przez krypto API jądra Linuksa , co umożliwia na przykład odciążenie zadań kompresji z głównego procesora za pomocą dowolnego sprzętowego akceleratora kompresji obsługiwanego przez jądro Linuksa. Wyboru żądanego modułu kompresji można dokonać dynamicznie w czasie rozruchu poprzez wartość parametru rozruchowego jądra zswap.compressor ; jeśli nie zostanie określony, wybiera Lempel – Ziv – Oberhumer kompresja (LZO). Od wersji 3.13 jądra Linuksa zswap musi być również jawnie włączony przez podanie wartości 1 dla parametru rozruchowego jądra zswap.enabled .
Maksymalny rozmiar puli pamięci używanej przez zswap można skonfigurować za pomocą parametru sysfs max_pool_percent , który określa maksymalny procent całkowitej systemowej pamięci RAM, który może być zajęty przez pulę. Pula pamięci nie jest wstępnie przydzielana do skonfigurowanego maksymalnego rozmiaru, zamiast tego rośnie i zmniejsza się zgodnie z wymaganiami. Gdy skonfigurowany maksymalny rozmiar puli zostanie osiągnięty w wyniku przeprowadzonej zamiany lub gdy powiększenie puli jest niemożliwe z powodu braku pamięci , zamienione strony są usuwane z puli pamięci do urządzenia wymiany na ostatnio używanym urządzeniu. (LRU). Takie podejście sprawia, że zswap jest prawdziwą pamięcią podręczną wymiany, ponieważ najstarsze strony z pamięci podręcznej są usuwane do urządzenia wymiany po zapełnieniu pamięci podręcznej, co umożliwia kompresję i buforowanie nowszych zamienionych stron.
zbud to alokator pamięci specjalnego przeznaczenia używany wewnętrznie przez zswap do przechowywania skompresowanych stron, zaimplementowany jako przepisanie alokatora zbud używanego przez zcache Oracle , który jest kolejną implementacją kompresji pamięci wirtualnej dla jądra Linuksa. Wewnętrznie zbud działa poprzez przechowywanie do dwóch skompresowanych stron („ kumpli ”, stąd nazwa alokatora) na stronę pamięci fizycznej, co ma zarówno zalety wynikające z łatwego łączenia i ponownego wykorzystania zwolnionej przestrzeni, jak i wady wynikające z możliwego mniejszego wykorzystania pamięci. Jednak ze względu na swoją konstrukcję zbud nie może alokować więcej miejsca w pamięci niż pierwotnie zajmowane przez nieskompresowane strony.
Historia
Zarówno zswap, jak i zbud zostały stworzone przez Setha Jenningsa. Pierwsza publiczna zapowiedź miała miejsce w grudniu 2012 r., a rozwój trwał do maja 2013 r., kiedy to baza kodu osiągnęła dojrzałość, chociaż nadal miała status eksperymentalnej funkcji jądra.
zswap (wraz z zbud) został włączony do głównej linii jądra Linuksa w wersji jądra 3.11, która została wydana 2 września 2013 r.
Od wersji 3.15 jądra Linuksa, która została wydana 8 czerwca 2014 r., zswap poprawnie obsługuje wiele urządzeń wymiany.
Alternatywy
Jedną z alternatyw dla zswap jest zram , która zapewnia podobny, ale wciąż inny mechanizm „zamieniania skompresowanych stron do pamięci RAM” niż jądro Linuksa.
Główna różnica polega na tym, że zram zapewnia skompresowane urządzenie blokowe wykorzystujące pamięć RAM do przechowywania danych, które działa jak zwykłe i oddzielne urządzenie wymiany.
Dla porównania, zswap działa jako pamięć podręczna oparta na pamięci RAM dla urządzeń wymiany. Zapewnia to zswapowi eksmisji dla rzadziej używanych wymienianych stron, których brakowało zramowi aż do wprowadzenia CONFIG_ZRAM_WRITEBACK w wersji jądra 4.14. Jednak ze względu na jego konstrukcję do użycia zswap wymagane jest co najmniej jedno istniejące urządzenie wymiany.
Zobacz też