Swap który zamieszkał w pliku

Oddzielna partycja swap w Linuksie urosła do rangi monstra przed którym niedoszli użytkownicy Linuksa ostrzegają się nawzajem. Bowiem dla wielu osób czynność tworzenia takiej partycji podczas instalacji systemu była czymś wykraczającym poza wymiary naszego wszechświata. Nawet pomimo legendy o tym, jak to oddzielna przestrzeń wymiany uczyniła z Linuksa potęgę wydajności. Prawda jest jednak nieco inna i jako tako trzymała się kupy do wydania kernela 2.6. Owszem, dawniej system mógł się lepiej dogadywać z przestrzenią wymiany na dedykowanej partycji, szczególnie gdy znajdowała się ona na początku dysku. Niemniej przy obecnych dyskach, linuksowym kernelu który już zapomniał o protoplaście 2.6 oraz ilości pamięci RAM jakim dysponujemy, swap jest traktowany jako relikt przeszłości. A przecież może się przydać.

Niewdzięczne zajęcie – tworzenie partycji swap
Od przybytku głowa nie boli. Zatem nawet jeżeli mamy w naszym komputerze 16GB pamięci RAM, to powinniśmy przewidzieć momenty krytyczne w których system jednak zdecyduje się zrzucić jakąś porcję danych na dysk. Nawet niewielką, nawet na chwilkę – ale zawsze może zaistnieć taka sytuacja. Dlatego nie pogardzajmy przestrzenią wymiany nawet w okolicach 0.5 – 1GB. Szczególnie, że dla naszego dysku to praktycznie żaden poważny ubytek pojemności. Chyba, że ktoś planuje wykonywać hibernację systemu. Wtedy ten rozmiar musi się co najmniej równać ilości naszej pamięci RAM. Ale co to w ogóle za pomysł, aby krzewić koncepcję swapa umieszczonego w pliku?

Problem z oddzielną partycją swap polega na tym, że trzeba pamiętać o jej stworzeniu podczas instalacji. Ręka do góry kto zapomniał o tym kroku kiedykolwiek podczas stawiania systemu? No właśnie. Późniejsze rzeźbienie dysku i wydzielanie nowej przestrzeni jest średnio przyjemnym zadaniem. Drugim mankamentem swapa na partycji jest jego nieelastyczny charakter. Przypuścimy, że zachodzi potrzebna jego zwiększenia. Kolejny argument to niemal brak różnicy w wydajności. Jedyny scenariusz który przewiduje gorszą wydajność swapa w pliku niż na oddzielnym miejscu na dysku jest przypadek stworzenia pliku swap na bardzo pofragmentowanym systemie plików.

Zatem, postawiliśmy system, zapomnieliśmy o partycji swap – czy zaczynać wszystko od nowa? Absolutnie nie. Swap w pliku będzie również dobry, a niekiedy i lepszy (zawsze można zwiększyć jego objętości). Wszystko czego potrzebujemy to wspomniany plik, aktywowanie go jako systemu wymiany, dopisanie do /etc/fstab. Nic prostszego.

  • Tworzymy plik wymiany

  • sudo dd if=/dev/zero of=/extraswap bs=1M count=1024
    Powyższe utworzy plik 1GB (1M * 1024)

  • Poprawiamy prawa dostępu

  • sudo chmod 600 /extraswap

  • Inicjalizujemy go jako swap

  • sudo mkswap /extraswap

  • Aktywujemy

  • sudo swapon /extraswap

  • Upewniamy się, że działa

  • free -m

  • Dodajemy na stałe do /etc/fstab

  • sudo sh -c 'echo "/extraswap swap swap defaults 0 0" >> /etc/fstab'

Tak, tylko tyle. Od tego momentu nie musimy kombinować z oddzielnymi partycjami, stworzoną przestrzeń wymiany możemy w każdym momencie powiększyć/zmniejszyć (polecenie dd). A różnice w wydajności – ciekawe, czy ktoś zauważy.
 

23 komentarze

  1. Ubuntu 17.04 używa domyślnie swapfile zamiast osobnej partycji, więc chyba to naprawili. Cannonical Cannonicalem, ale takich cyrków nawet oni by nie odstawili, nie?

  2. A jak by taki swap file umieścić na ramdysku to dodatkowo przyśpieszymy jego działanie 😛

  3. of=/extraswap

    Mam szyfrowany tylko home. Jak utworzę of=/home/user/extraswap to mi go nie zamontuje podczas startu. Z drugiej strony mam 4 GB RAM i swap był użyty tylko kilka razy w ciągu półtora roku.

  4. To ma połowiczny sens, jeśli w ogóle. W przypadku hibernacji – wcale. W przypadku używania swapa z powodu braku RAM, to… RAM ma być używany jako swap z powodu braku RAM 🙂 Super. Sens ma jedynie przy takich aplikacjach, które tak, czy inaczej korzystają ze swap.

  5. Biorąc pod uwagę, że ramdysk nieco zmniejszy ilość faktycznie dostępnej pamięci, trzeba by było taki zswap nieco powiększyć. A może tak od razu machąć całą pamięć do ramdysku i postawić nim skompresowany swap a z 16Gb zrobi się nam conajmniej 31Gb 😉

    p.s. pamiętacie może formatowanie dyskietek z kompresją ARJ-em n.p.? To były czasy. Wszystko się kompresowało 🙂

  6. no właśnie napisałem to trochę półżartem, ale w sumie, skoro już ktoś wymyślił ten kompresowany zram, to widocznie ma to jakieś zastosowania. Jak nie było jeszcze pamięci SSD, to taki klasyczny swap rzeczywiście potrafił spowolnić obliczenia o rzędy wielkości. A w sytuacji, gdy masz już płytę główną wypchaną ramem na maxa i okazuje się że potrzebne by było tak z 10% więcej…

  7. W sumie, to jest zastosowanie dla takiego “Xramu”, ale w takiej sytuacji to należałoby się zastanowić nad dokupieniem RAM. Otóż załóżmy, że w sposób stały system korzysta ze swap. Uchwycenie tego momentu, uchwycenie średniej ilości umożliwiłoby takie zbalasnowanie RAM/zram/zswap, które mogłoby spowodować stałe umieszczenie w RAM zswapa i dobranie takich jego parametrów, że mimo wszystko będzie to działać lepiej niż RAM+”tradycyjny” swap pomimo tego, że teoretycznie pamięci RAM dostępnej dla programów będzie mniej. Tyle, że… jeśli tak się dzieje stale, to należy po prostu dokupić RAM.
    Innego pomysłu na zswapa nie mam.

  8. Dokupić RAM’u można o ile można, bo co jeśli masz już maksymalną ilość w płycie głównej, można kupić lepszą płytę główną, ale to może się okazać super drogie, jeszcze nie tak dawno, żeby mieć w komputerze 64GB RAM trzeba było kupić platformę serwerową… A czasem zwyczajnie pracujesz w miejscu gdzie budżet nie przewiduje żadnych zakupów, i wtedy trzeba być naprawdę kreatywnym jeśli chodzi o zarządzanie zasobami…

  9. Cóż, w istocie “klapki” na oczach przez jeden z kerneli, gdzie jest to włączone i wymuszone OTB, czy to w istocie jest, czy też nie jest potrzebne.

  10. Nigdy nie potrzebowałem swap-a dopóki nie spotkałem na swej drodze Vagrant-a…polecam Docker-a 😉

  11. Ja pamiętam jak w dosie używałem smartdrv i doublespace. Jedno do kompresji dysku a drugie jako cache plików w pamięci. Dawało to oszałamiające wyniki z moim 40MB dyskiem, który skompresowany działał szybciej niż bez kompresji.

  12. A jakby pójść o krok dalej i by tak tego SWAPA przenieś do ramdysku ? Wilk syty i owca cała!
    .
    .
    .
    ……spokojnie, żartuję 😀

  13. No właśnie ów zswap (m.in.) jest takim swapem w ramdysku. Najogólniej mówiąc.

  14. “Problem z oddzielną partycją swap polega na tym, że trzeba pamiętać o jej stworzeniu podczas instalacji. Ręka do góry kto zapomniał o tym kroku kiedykolwiek podczas stawiania systemu?”
    Nigdy o tym nie zapomniałem. Partycja swap zawsze będzie lepsza od pliku. Przede wszystkim system ma dostęp bezpośrednio do partycji a nie przez system plików na dysku. Plik wymiany może być zfragmentowany. Kiedyś w Ubuntu nowością był dynamiczny plik wymiany, tworzony w razie potrzeby. Powodował z czasem spadek wydajności bo przez takie tworzenie i kasowanie dochodziło do fragmentacji, do tego stopnia, że używanie Ubuntu przypominało używanie Windowsa: im dłużej tym wolniej. Gdy wróciłem do partycji wymiany problem zniknął. Teraz mam 16GB ramu i 1 GB swapa, na wszelki wypadek. I to na dysku SSD.

  15. Testowałem kiedyś hibernację na szyfrowanej partycji swap. Nie działało. System nie chciał wystartować.

  16. Tak myślałem, że coś pochrzaniłem. Już nie pamiętam nazw tych narzędzi. W każdym razie wówczas wyniki były naprawdę oszałamiające.

    Z resztą całkiem sporo było software’u do przezwyciężania problemów raczkującej technologii. Pamiętam, jak dzięki jakiemuś programikowi uzyskałem dwa razy większą gęstość zadruku na igłówce, w czasach raczkującego internetu przez telefon na topie były “przyśpieszacze” i t.d.

  17. No fajnie działa nie wiem czy poprawia wydajność dałem mu 4096 i nie wiem czy tylko w mincie ale po wszystkim aby go system zaczoł używać trzeba było dać mount -a albo przebootwac sie.I cały czas człowiek się uczy jakos tak nigdy nie miałem potrzeby uzywania /dev/zero zawsze to było /dev/sda lub inne sdb , nie wiedziałem że coś takiego jak zero ma tak fajne zastosowanie.

  18. Zdarza się czasem, że nie mamy wpływu na to, czy swap zostanie utworzony przy instalacji systemu, czy nie zostanie. Mówię tu o wykorzystaniu linuksa pod serwer internetowy na maszynach vps lub dedykowanych. Zauważyłem jednak, że jakikolwiek swap czasami się tu przydaje, a nasz usługodawca często obecnie go nie uruchamia stawiając nam system.

    Kiedy się przydaję? Oto sytuacja z życia wzięta. Istnieje sobie serwerek www z np. 8GB ram i działającym memcached. Na 99% czasu działania, serwer wykorzystuje max 6GB ramu i wszystko działa jak należy, ale przychodzą np. święta i mamy kilkukrotny skok odwiedzin i tym samym wykorzystania ramu, w którym to tworzone jest przecież cache (memcached). Brak ramu kończy się w efekcie tym, że powstają tak duże kolejki, że maszyna pada. Swap pozwala na to chociażby aby móc się na tą maszynę w ogóle zalogować i np. wyłączyć usługę-usługi żrące ram na czas zmasowanego “ataku” użyszkodników na naszą witrynę.

    Wiem, że obecnie do większości zastosowań ilość pamięci jaką obecnie posiadamy jest aż nadto wystarczająca,jednak zdarzają się czasem sytuacje w pewnych specyficznych zastosowaniach, że taki swap się przydaje, nawet ten plikowy. Jeśli korzystasz z linuksa w domu, to prawdopodobnie swap nigdy ci się nie przyda, jednak jak chociażby w przytoczonym przeze mnie przykładzie warto się zastanowić odżałować te kilka GB na swap, aby zminimalizować ewentualne problemy i stres z tym związany 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Post comment

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.