Przestrzeń wymiany (Swap)

Fizyczna pamięć operacyjna to skończony tymczasowy magazyn używany do wczytywania jądra systemu, struktur danych, a także uruchomionych przez użytkownika programów i aplikacji. Przestrzeń wymiany (swap space) to obszar na dysku używany do przechowywania nieużywanych danych aż do momentu gdy są potrzebne. System dzieli pamięć fizyczną na mniejsze kawałki zwane stronami (pages) i mapuje ich fizyczne położenie w pamięci operacyjnej do wirtualnego położenia w przestrzeni wymiany aby ułatwić procesorowi dostęp. Mapowanie pamięci fizycznej do wirtualnej jest przechowywane w tabeli stron (page table), która jest utrzymywana przez jądro systemu. Jeżeli systemowi brakuje pamięci fizycznej to zaczyna on bezczynne strony z danymi (pages of data) przenosić z pamięci fizycznej do przestrzeni wymiany aby zrobić miejsce dla innych programów. Taki proces nazywany jest wynoszeniem stron (page out). Gdy system potrzebuje wyniesionych stron, CPU szuka ich w pamięci fizycznej i następuje page fault, który skutkuje powrotem danych do pamięci fizycznej (page in). Cały proces stronicowania danych do przestrzeni wymiany i z powrotem do pamięci fizycznej znany jest pod nazwą stronicowanie na życzenie (demand paging).

System z dużym zapotrzebowaniem na pamięć i z małym rozmiarem pamięci operacyjnej może wejść w stan, w którym będzie bardzo zajęty przenoszeniem danych z pamięci operacyjnej do przestrzeni wymiany co spowoduje znaczny spadek wydajności systemu. Takie nadmierne stronicowanie, które ma wpływ na spadek wydajności systemu nazywane jest śmieceniem (trashing). W takiej sytuacji system dezaktywuje bezczynne procesy i nie pozwala na uruchamianie nowych. Jak tylko w systemie będzie dostępnej więcej pamięci operacyjnej bezczynne procesy są ponownie aktywowane i mogą być uruchamiane nowe.

Określanie rozmiaru przestrzeni wymiany.

Stara zasada mówi, że rozmiar swapu nie powinien być mniejszy niż całkowity rozmiar pamięci RAM. Kiedyś zalecane było aby swap był dwa razy większy niż ilość pamięci operacyjnej, ale było to w czasach gdy szczytem marzeń był komputer z kilkudziesięcioma megabajtami pamięci RAM. Aktualnie standardem jest rozmiar pamięci operacyjnej większy niż 2 GB. W takim wypadku rozmiar partycji wymiany może być symboliczny 128-512 MB.

Do określania ile pamięci operacyjnej jest w systemie zainstalowanej, używanej i wolnej służy komenda :

# free -h
             total       used       free     shared    buffers     cached
Mem:          5,8G       5,7G        86M       185M       228M       4,8G
-/+ buffers/cache:       673M       5,2G
Swap:         972M       400K       972M

Opcja -h aby wyświetlić w łatwiej czytelnym formacie.  Inna komenda:

#  cat /proc/meminfo
MemTotal:        6095264 kB
MemFree:           88156 kB
MemAvailable:    5441984 kB
Buffers:          234224 kB
Cached:          5083888 kB
SwapCached:            0 kB
Active:          2792236 kB
Inactive:        2889024 kB
Active(anon):     427784 kB
Inactive(anon):   125676 kB
Active(file):    2364452 kB
Inactive(file):  2763348 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:        995952 kB
SwapFree:         995552 kB
Dirty:                40 kB
Writeback:             0 kB
AnonPages:        363236 kB
Mapped:           219000 kB
Shmem:            190296 kB
Slab:             288756 kB
SReclaimable:     263024 kB
SUnreclaim:        25732 kB
KernelStack:        3488 kB
PageTables:        13988 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4043584 kB
Committed_AS:     769936 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      268184 kB
VmallocChunk:   34359337136 kB
DirectMap4k:        7680 kB
DirectMap2M:     2080768 kB
DirectMap1G:     6291456 kB

 

Ćwiczenie 1. Tworzenie i aktywowanie partycji wymiany.

Do określenia ile jest wolnego miejsca na dysku można użyć lsblk. Tworzymy struktury dla przestrzeni wymiany na partycji vdb2:
# mkswap /dev/vdb2
mkswap: /dev/vdb2: warning: wiping old LVM2_member signature.
Setting up swapspace version 1, size = 488444 KiB
no label, UUID=40809164-d5a3-40f7-9862-cce2a6e532ce

Tworzymy wolumin logiczny o nazwie swapvol i rozmiarze 300MB w grupie woluminów vg10:
# lvcreate –L 300m –n swapvol vg10
Logical volume "swapvol" created

Tworzymy struktury dla przestrzeni wymiany na woluminie swapvol:
# mkswap /dev/vg10/swapvol
Setting up swapspace version 1, size = 307196 KiB
no label, UUID=5ccdcb52-fd4b-4409-a5e9-38fa390c20f6

Włączamy partycje swap na partycji i na logicznym woluminie:
# swapon /dev/vdb2
# swapon –v /dev/vg10/swapvol
swapon /dev/vg10/swapvol
swapon: /dev/mapper/vg10-swapvol: found swap signature: version 1, page-size 4, same byte order
swapon: /dev/mapper/vg10-swapvol: pagesize=4096, swapsize=314572800, devsize=314572800

Potwierdzamy aktywacje partycji swap:
# swapon -s
# cat /proc/swaps

Wyświetlamy statystyki pamięci wirtualnej:
# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    400  85880 234588 5084000    0    0     8    21    0    0  0  0 100  0  0

Statystyki w innym formacie:
# vmstat -s
      6095264 K total memory
      6010036 K used memory
      2793180 K active memory
      2889804 K inactive memory
        85228 K free memory
       234620 K buffer memory
      5084736 K swap cache
       995952 K total swap
          400 K used swap
       995552 K free swap
      3609908 non-nice user cpu ticks
          526 nice user cpu ticks
       254512 system cpu ticks
   2552651458 idle cpu ticks
       889184 IO-wait cpu ticks
            0 IRQ cpu ticks
       182783 softirq cpu ticks
            0 stolen cpu ticks
    211495324 pages paged in
    546710848 pages paged out
            0 pages swapped in
          100 pages swapped out
   2192012598 interrupts
    344056037 CPU context switches
   1489606093 boot time
       644874 forks

Dodajemy partycję wymiany do pliku /etc/fstab:
# vi /etc/fstab
/dev/vdb2            swap    swap    defaults    0    0
/dev/vg10/swapvol    swap    swap    defaults    0    0

Restartujemy system i weryfikujemy czy partycje swap są aktywne.

 

Ćwiczenie 2. Dezaktywujemy i usuwamy przestrzenie wymiany.

Dezaktywacja swapa na partycji vdb2 i swapvol:
# swapoff –v /dev/vdb2
swapoff /dev/vdb2
# swapoff /dev/vg10/swapvol
swapoff /dev/vg10/swapvol

Usunięcie partycji i logicznego woluminu:
# parted /dev/vdb rm 2
# lvremove –f /dev/vg10/swapvol
Logical volume "swapvol" successfully removed

Usuwamy partycje swap z pliku /etc/fstab i restartujemy system.

Leave a Reply

Your email address will not be published. Required fields are marked *