Poradnik zram vs zswap vs zcache Ultimate: kiedy użyć którego


55
  1. Co to do cholery są? czym się różnią (napisałem moje zrozumienie w odpowiedzi poniżej)
  2. Czy w systemie Zswap strona jest eksmitowana z zswap do faktycznej wymiany, czy jest ona przechowywana w skompresowanym pliku? (czy jest dekompresowany przed zapisaniem ?, AFAICT jest nadal kompresowany, ale nie jestem pewien)
  3. Jaki jest obecny stan Zcache? najwyraźniej został usunięty lub coś w 3.11. Co to znaczy? ( http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )

2
Odp 2. Komunikat zatwierdzenia wyraźnie stwierdza, że łatki (dotyczące zcache) zostały usunięte z 3.11, ale zostaną dołączone do drzewa głównego -mm.
askb

1
@staticd Dlaczego nie zaakceptowałeś własnej odpowiedzi? To jest bardzo dobre!
Léo Léopold Hertz -

Gdy strona jest eksmitowany z zswap (skompresowany cache swap) to _ decompressed_ i umieszczone w urządzeniu podkład wymiany, za jednego z odniesieniami yr [ lwn.net/Articles/537422/] poniżej ...
Cbhihe

( lwn.net/Articles/537422 - „Podczas wznawiania zapisu zswap dekompresuje stronę ...”). @mmin poniżej sugeruje, że może to być nieefektywne lub nawet stanowić zagrożenie dla serwera!
mwfearnley

Odpowiedzi:


2

Odnośnie 2., zswap wydaje się dekompresować strony podczas zapisu zwrotnego, potwierdzając komentarz @ Cbhihe.

mm / zswap.c , linia 828:

/*
 * Attempts to free an entry by adding a page to the swap cache,
 * decompressing the entry data into the page, and issuing a
 * bio write to write the page back to the swap device.
 * ...
 */
static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
{
    ...

    case ZSWAP_SWAPCACHE_NEW: /* page is locked */
        /* decompress */
        ...

        ret = crypto_comp_decompress(tfm, src, entry->length,
                         dst, &dlen);
        ...
        kunmap_atomic(dst);    


$ git show
commit 1573d2caf713874cfe0d1336c823d0fb548d8bed
Merge: 4cdf8db 0a86248
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Tue Oct 11 23:59:07 2016 -0700

Zswap jest więc użyteczny w sytuacjach, w których skompresowana pamięć podręczna pamięci RAM prawdopodobnie zostanie wkrótce zapomniana przed zapisaniem na dysku. Nie dotyczy aplikacji z dużymi, długimi stertami, które ostatecznie będą musiały być wspierane przez rzeczywiste urządzenie wymiany.


7
Znalazłem potencjalnie niebezpieczne zachowanie zswap. Kiedy aplikacja przydziela wiele stron i zapisuje dane, które bardzo dobrze się kompresują (powiedzmy sekwencję zer), zswap szczęśliwie przechowuje je w pamięci płyty jądra. Jednak gdy coś wyzwala rzeczywistą zamianę dysku, wówczas zapisane dane nagle „pękają” - tyle zer na stronach, które zajmowały „tylko” gigabajty w pamięci, teraz dekompresuje się do setek gigabajtów na dysku.
mnish

2
Osoba atakująca może próbować przechowywać dane o niskiej entropii na serwerze. Gdy coś wyzwala wymianę, serwer byłby martwy.
mnish

1
Czy zgłosiłeś to wcześniej?
Ken Sharp

Kolejna wada zapisu nieskompresowanych danych 🤷
Mihail Malostanidis

Z pewnością lepiej byłoby z miejsca i na czas zrzucić dane w formie zdekompresowanej! Brzmi jak coś, co naprawdę chcielibyśmy zrobić. Mogę tylko założyć, że restrukturyzacja obszaru wymiany, aby to umożliwić, polega na przepisaniu dużej ilości istniejącego kodu lub wymaga bardziej złożonego systemu alokacji.
mwfearnley

75

Istnieje wiele rzeczy na temat tych trzech systemów, ale żaden z nich nie pozwala na proste porównanie między nimi, nie mówiąc już o ich dobrym wytłumaczeniu. Próbowałem to zrozumieć, ale moja głowa eksplodowała. Potem pomyślałem, że go dostałem, więc spróbowałem go zapisać, a moja głowa znów wybuchła. (patrz podsumowanie implementacji) Pomyślałem, że przyda się to tutaj, ponieważ było wiele pytań dotyczących wymiany stosów, które dotyczyły porównań parami między nimi.

Podsumowanie, z czego korzystać, gdy:

  1. ZRAM, jeśli nie masz urządzenia wymiany na HDD / SSD.
  2. ZSWAP, jeśli masz urządzenie wymiany na HDD / SSD.
  3. ZCACHE : Robi to, co robi ZSWAP, TAKŻE kompresuje i przyspiesza pamięć podręczną stron systemu plików. (Jest wewnętrznie znacznie bardziej skomplikowany i nie znajduje się w jądrze głównym, ponieważ jest wciąż w fazie rozwoju).

Podsumowanie ich realizacji:

  1. ZRAM to skompresowane urządzenie wymiany oparte na pamięci RAM
  2. ZSWAP to skompresowana pamięć podręczna, jeśli masz już swap.
  3. ZCache to backend dla specjalnego typu wirtualnej pamięci RAM (pamięć transcendentna), której można używać do buforowania stron systemu plików lub wymiany danych.

Detale:

  • ZRAM: Zmienia urządzenie pamięci RAM. Strony wysłane tutaj są kompresowane podczas ich przechowywania. Ma wyższy priorytet niż inne urządzenia wymiany: zamienione strony są preferencyjnie wysyłane do urządzenia zram, aż do zapełnienia, tylko wtedy używane są inne urządzenia wymiany.

    • Korzyści: Niezależne od innych (fizycznych) urządzeń wymiany. Można go użyć, gdy nie ma partycji wymiany, aby rozszerzyć dostępną pamięć.
    • Wady: jeśli obecne są inne urządzenia wymiany (HDD / SSD), nie są one optymalnie wykorzystywane. Ponieważ urządzenie ZRAM jest niezależnym urządzeniem wymiany, po zapełnieniu wszystkie nowe strony, które należy wymienić, są wysyłane bezpośrednio do następnego urządzenia wymiany, stąd:
      1. Istnieje realna szansa na inwersję LRU (ostatnio używanego): będą to ostatnio zamienione dane, które trafią na wolny dysk, podczas gdy nieaktywne strony, które zostały zamienione dawno temu, pozostaną w szybkiej pamięci ZRAM
      2. Dane wysyłane na dysk i odczytywane z niego zajmują dużo przepustowości, ponieważ są nieskompresowane.
    • Status: Scalony z głównym jądrem 3.14. Po włączeniu w systemie wymaga pewnej konfiguracji przestrzeni użytkownika, aby skonfigurować urządzenia wymiany i korzystać z nich.
  • ZSWAP: Te frontswaphaki system próbuje zamienić się stron i wykorzystuje zswap jako write-back cache dla urządzenia wymiany HDD / SSD: Podjęto próbę skompresować stronę i jeśli zawiera słabo dane ściśliwe jest bezpośrednio zapisywane na dysku. Jeśli dane są skompresowane, są przechowywane w puli pamięci zswap. Jeśli strony zostaną zamienione z pamięci, gdy łączna liczba skompresowanych stron w pamięci RAM przekroczy określony rozmiar, strona z kompresją Najmniej ostatnio używana (LRU) zostanie zapisana na dysku, ponieważ prawdopodobnie nie będzie potrzebna wkrótce.

    • Korzyści: Bardzo wydajne wykorzystanie pamięci RAM i wymiany dysków. Minimalizuje We / Wy dysku zarówno poprzez zmniejszenie liczby wymaganych zapisów i odczytów (dane są kompresowane i przechowywane w pamięci RAM), jak i przez zmniejszenie przepustowości tych operacji We / Wy, ponieważ dane są w postaci skompresowanej.
    • Ograniczenia: Jest to rozszerzenie systemów wymiany opartych na dyskach i dlatego zależy od partycji wymiany na dysku twardym.
    • Status: Scalony w jądrze linux 3.11 mainline.
  • ZCache: Jest to backend dla systemu pamięci Transcendent. Pamięć transcendentna zapewnia pamięć RAM, do której można uzyskać dostęp tylko do strony na raz za pomocą puti getwywołań. Jest to odmienne od normalnej pamięci, do której można uzyskać dostęp do bajtu naraz. frontswapI cleancachesystemy prób hakowe do wymiany i odzyskanie plików systemowych odpowiednio buforuje stron i wysłać je do transcendentnych backendów pamięci. Gdy zcache jest używany jako backend, dane są kompresowane i przechowywane w pamięci RAM. Gdy się zapełni, skompresowane strony są eksmitowane na wymianę. (alternatywnym backendem jest RAMster, który dzieli pulę pamięci RAM na komputerach w sieci). Używanie tylko frontswapfrontendu z zcachebackendem działa tak samo zswap. (W rzeczywistości zswap jest uproszczonym podzbiorem zcache)

    • Korzyści Zapewnia skompresowane buforowanie zarówno dla pamięci podręcznej wymiany, jak i pamięci podręcznej systemu plików.
    • Status: Wciąż nieuwzględniony, ponieważ jest bardzo skomplikowany i jest w trakcie opracowywania.

Najlepsze zasoby, które znalazłem, to:



6
Czy jest możliwe i / lub uzasadnione używanie zarówno zram, jak i zswap?
Phlya

2
Żadna z trzech nie wymaga / nie powinna być uruchamiana jednocześnie. zswap potrzebuje wymiany opartej na dysku jako backendu w przeciwieństwie do ZRAM, która nie wymaga dedykowanej partycji wymiany. Jednak jeśli masz zamianę, partycja ZRAM + swap jest znacznie mniej efektywna niż partycja zswap + swap.
staticd

Czy możesz streścić tutaj sposób aktywacji zswap. Tutaj szczegóły askubuntu.com/a/361321/25388
Léo Léopold Hertz 준영


1
Każda odpowiedź, która mówi, że zramjest, swapjest całkowicie błędna. zramNIE JEST swap. swapTylko mogą być przechowywane w zram. Ale jest to jeden z wielu możliwych przypadków użycia! Oto przykład: „Niektóre przypadki użycia obejmują pamięć / tmp, używają jako dyski wymiany, różne pamięci podręczne w / var i może wiele innych :)” kernel.org/doc/Documentation/blockdev/zram.txt Na przykład używam go do pamięć tymczasowa, którą formatuję i montuję jak każde normalne urządzenie blokowe.
Victor Yarema
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.