Systemy operacyjne komputerów przemysłowych OS Linux, część 3
Iwona Kochanska´
Katedra Systemów Sonarowych WETI PG
Listopad 2019
GUT – Intel 2015/16 1/50 Pami˛ec´ fizyczna - liniowa (“flat”)
I wszystkie procesy współdziel ˛aten sam obszar pami˛eci
I przykładowe CPU: 8086-80206, ARM Cortex-M, 8- i 16-bit PIC, AVR, wi˛ekszos´c´ systemow 8- i 16-bitowych
GUT – Intel 2015/16 2/50 Pami˛ec´ fizyczna - model x86
GUT – Intel 2015/16 3/50 Pami˛ec´ fizyczna - model x86
I Pami˛ec´ fizyczna podzielona jest na strony
I Rozmiar strony jest rózny˙ dla róznych˙ architektur. W wi˛ekszosci´ przypadków to 4096 B
I Ograniczona przenosno´ s´c´ programów C
I Trzeba znac´ (lub sprawdzac)´ całkowit ˛ailos´c´ pami˛eciRAM
I Trzeba pilnowac,´ by procesy miały osobne obszary pami˛eci
I Zle´ napisane programy mog ˛apowodowac´ awari˛ecałego systemu
GUT – Intel 2015/16 4/50 Linux to system obsługuj ˛acypami˛ec´ wirtualn ˛a
I Mapowanie wirtualnej przestrzeni adreswej na:
I przestrzen´ pami˛ecifizycznej RAM
I urz ˛adzenia, np. PCI, GPU RAM
I Zalety:
I kazdy˙ proces moze˙ miec´ własn ˛aprzestrzen´ adresow ˛a; przestrzenie adresowe s ˛aod siebie odseparowane,
I przestrzen´ adresowa j ˛adra jest niewidoczna dla przestrzeni adresowej uzytkownika˙
I pami˛ec´ fizyczna RAM moze˙ byc´ mapowana przez wiele procesów - pami˛ec´ współdzielona (shared memory)
I obszary pami˛ecimog ˛amiec´ rózne˙ ustawienia dost˛epu(read, write, execute)
GUT – Intel 2015/16 5/50 Linux to system obsługuj ˛acypami˛ec´ wirtualn ˛a
I Dwie przestrzenie adresowe:
I adresy fizyczne - uzywane˙ przez urz ˛adzenia (DMA, peryferia)
I adresy wirtualne - uzywane˙ przez programy (instrukcje load/store dla procesorów RISC, wszelkie instrukcje dost˛epudo pami˛eciRAM dla procesorów CISC)
I Kazdy˙ adres w pami˛eci(fizycznej lub wirtualnej) mozna˙ przedstawic´ jako wielokrotnos´c´ rozmiaru strony oraz przesuni˛ecia
I Przestrzen´ adresowa pami˛eciwirtualnej
I dla procesorów 32-bitowych: od 0 do 0xffffffff, podzielona na strony o rozmiarze 4 kB
I dla procesorów 64-bitowych: 48 bitów adresu (maks. 256 TB), po połowie dla j ˛adra i przestrzeni uzytkownika˙
GUT – Intel 2015/16 6/50 Linux to system obsługuj ˛acypami˛ec´ wirtualn ˛a
I Przestrzen´ adresowa podzielona na:
I przestrzen´ u˙zytkownika (user space) - high memory
I i przestrzen´ j ˛adra (kernel space) - low memory
GUT – Intel 2015/16 7/50 Linux to system obsługuj ˛acypami˛ec´ wirtualn ˛a
I Segment danych (Data) - globalne i statyczne zmienne o zdefiniowanych, niezmiennych wartosciach;´ wszelkie zmienne nie zdefiniowane wewn ˛atrzfunkcji
I Segment BSS - globalne i statyczne zmienne o wartosci´ 0 lub bez wartosci´
I Sterta (Heap) - zmienne dynamiczne - przestrzen´ zarz ˛adzana poleceniami malloc, calloc, realloc, free; obszar współdzielony przez wszystkie w ˛atki,biblioteki współdzielone, moduły
I Stos (Stack) - zmienne lokalne; jesli´ wska´znikstosu zrówna si˛e ze wska´znikiemsterty, to oznacza koniec wolnej pami˛eci.
GUT – Intel 2015/16 8/50 Linux to system obsługuj ˛acypami˛ec´ wirtualn ˛a
I Podział mi˛edzyprzestrzen´ uzytkownika˙ a przestrzen´ jadra: parametr PAGE_OFFSET konfiguracji j ˛adra
I typowy system 32-bitowy: PAGE_OFFSET = 0xc0000000, nizsze˙ 3GB - przestrzen´ uzytkownika˙
I przestrzen´ uzytkownika˙ alokowana dla procesu
I przestrzen´ j ˛adra - wspólna dla wszystkich procesów.
GUT – Intel 2015/16 9/50 Jednostka zarz ˛adzaniapami˛eci˛a
I Memory Management Unit (MMU) - zestaw układów realizuj ˛acychdost˛epdo pami˛ecifizycznej z˙ ˛adanejprzez CPU. Do ich zadan´ nalezy:˙
I translacja pami˛eciwirtualnej do pami˛ecifizycznej,
I ochrona pami˛eci,
I obsługa pami˛ecipodr˛ecznej,
I zarz ˛adzanieszynami danych
I przeł ˛aczaniebanków pami˛eci(w systemach 8-bitowych)
I Układy MMU dziel ˛aprzestrzen´ logiczn ˛a(wirtualn ˛a)pami˛ecina strony, których rozmiar wynosi 2N (kilka kilobajtów).
I Page frame number (PFN) - indeks strony pami˛eci(N starszych bitów adresu pami˛eci).Młodsze M bitów adresu (przesuni˛ecie) pozostaje niezmienione
GUT – Intel 2015/16 10/50 MMU - Translation lookaside buffer
I Translation lookaside buffer (TLB) - asocjacyjna pami˛ec´ podr˛ecznasłuz˙ ˛acado mapowania adresów wirtualnych/fizycznych
I Jezeli˙ TLB nie posiada odpowiedniego przypisania (rozmiar pami˛eciTLB jest ograniczony) uruchamiane s ˛awolniejsze, sprz˛etowe mechanizmy procesora przeszukuj ˛acestruktury danych znajduj ˛acesi˛ew pami˛eci,co wymaga niekiedy pomocy ze strony oprogramowania (systemu operacyjnego).
I Pozycje w tych strukturach nazywaj ˛asi˛ewpisami (elementami) tablicy stron pami˛eci(PTEs - ang. page table entries), a cała struktura nazywana jest tablic ˛astron pami˛eci(ang. page table).
I Kompletny adres w pami˛ecifizycznej jest ustalany poprzez dodanie bitów przesuni˛eciado przetłumaczonego numeru strony.
GUT – Intel 2015/16 11/50 MMU - Translation lookaside buffer
I Jezeli˙ w strukturach TLB lub PTE nie znajduje si˛eodpowiedni opis aktualnie wykorzystywanej logicznej strony pami˛ecilub znajduj ˛acysi˛ewpis zabrania dost˛epuw danym trybie, MMU sygnalizuje CPU wyj ˛atekzwi ˛azany z bł˛ednym dost˛epemdo strony pami˛eci,tzw. page fault.
GUT – Intel 2015/16 12/50 Mapowanie pami˛eciwirtualnej
Ka˙zdastrona pami˛eciwirtualnej mo˙zebyc:´
I niemapowana (próba dost˛epu-> SIGSEGV -> komunikat segmentation fault)
I mapowana na stron˛efizyczn ˛apami˛eci prywatn ˛adla procesu
I mapowana na stron˛efizyczn ˛apami˛eci współdzielon ˛az innym procesem
I mapowana na stron˛efizyczn ˛apami˛eci u˙zywan˛aprzez j ˛adro
I j ˛adromoze˙ dodatkowo mapowac´ strony p. wirtualnej na obszary pami˛ecizarezerwowane dla np. buforów pami˛ecisterowników
GUT – Intel 2015/16 13/50 Mapowanie pami˛eciwirtualnej - COW
I mapowanie i współdzielenie z flag ˛a “copy on write”
I gdy istnieje potrzeba współdzielenia duzej˙ ilosci´ danych
I zamiast rzeczywistego, kosztownego kopiowania pami˛ecizwracany jest wska´znikdo oryginalnych danych; kopiowanie jest wykonywane dopiero, gdy zachodzi potrzeba ich modyfikacji.
I Przykład: funkcja fork()
I tworzy proces potomny, który posiada dokładn ˛akopi˛ekontekstu procesu nadrz˛ednego, jak równiez˙ kopi˛ejego pami˛eci(mapowan ˛a na t ˛asam ˛aprzestrzen´ fizyczn ˛a).
I strony pami˛eci,które mog ˛abyc´ zmodyfikowane zarówno przez proces jak i jego potomka, otrzymuj ˛aznacznik "kopiowane przy zapisie".
I gdy jeden z procesów modyfikuje pami˛ec,´ kernel przechwytuje to wywołanie i kopiuje modyfikowane strony tak, aby zmiany dokonane przez jeden proces były niewidoczne dla drugiego. Od tej chwili proces nadrz˛edny i potomny zaczynaj ˛aodwoływac´ si˛edo
GUT – Intelfizycznie 2015/16 róznych˙ stron. 14/50 Mapowanie pami˛eciwirtualnej - COW
GUT – Intel 2015/16 15/50 Zalety pami˛eciwirtualnej
I niepoprawne odwołania do pami˛eciprzechwytywane i sygnalizowane przez SIGSEGV
I proces działa we własnej przestrzeni pamieci, odizolowany od innych procesów
I efektywne wykorzystanie pami˛eci- współdzielenie cz˛esci´ kodu i danych ( np. bibliotek)
I mozliwo˙ s´c´ zwi˛ekszenia ilosci´ pami˛ecipoprzez pliki wymiany (swap files)
GUT – Intel 2015/16 16/50 Wady pami˛eciwirtualnej
I trudno ustalic,´ jakie jest aktualne zuzycie˙ pami˛eci(przez aplikacj˛e)
I “overcommit” - praktyka przedzielania pami˛eciwirtualnej bez gwarancji, ze˙ dost˛epnajest odpowiednia ilos´c´ pami˛ecifizycznej
I opó´znieniawprowadzane przez zarz ˛adzaniepami˛eci˛ai obsług˛e wyj ˛atków(page faults)
GUT – Intel 2015/16 17/50 Przestrzen´ pami˛ecij ˛adra
Przestrzen´ pamieci j ˛adra - kazdej˙ alokacji w przestrzeni wirtualnej odpowiada przestrzen´ fizyczna! Obszary:
I j ˛adro (kod i dane załadowane z obrazu j ˛adra podczas rozruchu systemu)
I segmenty: .text, .init, .data, .bss
I pami˛ec´ dla sterowników urz ˛adzen´
I moduły j ˛adra
GUT – Intel 2015/16 18/50 Przestrzen´ pami˛ecij ˛adra
I pami˛ec´ alokowana przez void * kmalloc(size_t size, int flags)
I slab allocator - efektywny mechanizm ci ˛agłej alokacji pami˛eci;
I zachowanie kmalloc zalezy˙ od parametru flags:
I GFP_KERNEL: zwykła alokacja, moze˙ zostac´ chwilowo wstrzymana (zwolniona) i ponownie zaalokowana. I GFP_ATOMIC: alokacja dokonana w całosci´ lub wcale.
I zwolnienie pami˛eci: void kfree(const void *objp);
I pami˛ec´ alokowana przez void *vmalloc(unsigned long size);
I wi˛eksze obszary pami˛eciniz˙ kmalloc() (przestrzen´ adresowa wirtualna jest ci ˛agła,ale fizyczna - niekoniecznie)
I odpowiednik malloc() w przestrzeni uzytkownika,˙
I zwolnienie pami˛eci: void vfree(const void *addr);
I Przykład programu: http://www.roman10.net/2011/07/29/linux- kernel-programmingmemory-allocation/
GUT – Intel 2015/16 19/50 Ile pami˛eciuzywa˙ j ˛adro?
I rozmiar obrazu j ˛adra
I zwykle j ˛adrojest małe w porównaniu z całkowit ˛ailosci´ ˛apami˛eci
I budowa małego j ˛adra ( Linux-tiny, Linux Kernel Tinification), projekt https://tiny.wiki.kernel.org/.
GUT – Intel 2015/16 20/50 Ile pami˛eciuzywa˙ j ˛adro?
Odczyt /proc/meminfo. Kernel memory usage to suma:
I Slab: pami˛ec´ alokowana przez slab allocator
I wi˛ecejinformacji - odczyt /proc/slabinfo
I KernelStack: przestrzen´ adresowa stosu
I PageTables: pami˛ec´ do przechowywania tablic stronicowania
I VmallocUsed: pami˛ec´ alokowana przez vmalloc()
I wi˛ecejinformacji - odczyt /proc/vmallocinfo
GUT – Intel 2015/16 21/50 Ile pami˛eciuzywa˙ j ˛adro?
GUT – Intel 2015/16 22/50 Ile pami˛eciuzywa˙ j ˛adro?
lsmod - ile pami˛ecizuzywa˙ kod i dane modułów j ˛adra?
GUT – Intel 2015/16 23/50 Obszar pami˛eciuzytkownika˙
I Stronicowanie na ˙z˛adanie(Demand-paging) - Linux mapuje strony pami˛ecifizycznej tylko wtedy, gdy program odwołuje si˛e do odpowiedniego miejsca w pami˛eciwirtualnej
malloc(3) zwraca wska´znikdo pami˛eciwirtualnej
operacja odczytu/zapisu przechwytywana przez j ˛adro
page fault
j ˛adroznajduje obszar pami˛ecifizycznej GUT – Intel 2015/16i dodaje go 24/50 do tablicy stronicowania Obszar pami˛eciuzytkownika˙
I Bł ˛adstronicowania (page fault) - gdy j ˛adroprzechwytuje dost˛epdo strony pami˛ecinie mapowanej na pami˛ec´ fizyczn ˛a
I Dwa rodzaje bł˛edówstronicowania:
I minor - rozwi ˛azaniemjest znalezienie przez j ˛adrowolnego obszaru pami˛ecifizycznej i powiazanie go z przestrzeni ˛aadresow ˛a procesu w pami˛eciwirtualnej
I major - pami˛ec´ wirtualna jest mapowana na plik (np. za pomoc ˛a mmap(2)). Próba odczytu z takiej pami˛eci:
I j ˛adromusi znale´zc´ obszar pami˛ecifizycznej I j ˛adromusi wypełnic´ pami˛ec´ fizyczn ˛adanymi z pliku
GUT – Intel 2015/16 25/50 Mapa pami˛eciprocesu
Dost˛epdo mapy pami˛eciprocesu - przez system plików proc
I Przykład: mapa pami˛eciprocesu init (PID 1)
... I Pierwsze trzy kolumny: adres pocz ˛atkui konca´ pami˛eciwirtualnej, flagi uprawnien:´ r = read w = write x = execute s = shared p = private (copy on write) I Mapowanie pami˛ecizwi ˛azanejz plikiem: kolumna 4: przesuni˛eciewzgl˛edem pocz ˛atkupliku, kolumna 5: numer urz ˛adzenia blokowego, kolumna 6: inod pliku, kolumna 7: nazwa pliku
GUT – Intel 2015/16 26/50 Partycja wymiany (Swap)
Partycja wymiany słuzy˙ do tymczasowego przechowywania danych w sytuacji, gdy ich ilos´c´ przekracza zasoby wolnej pami˛eciRAM lub gdy z róznych˙ powodów korzystniej jest przechowywac´ je na dysku twardym
I zwi˛ekszenie efektywnego rozmiaru pami˛ecifizycznej
I koszt obsługi partycji wymiany jest duzy˙ w systemie o małej ilosci´ pami˛ecifizycznej
I mechanizm rzadko uzywany˙ w systemach wbudowanych
GUT – Intel 2015/16 27/50 Wykorzystanie partycji wymiany do kompresji pami˛eci (zram)
I sterownik zram tworzy urz ˛adzenia blokowe: /dev/zram0, /dev/zram1, itd.
I zawartos´c´ pami˛ecijest kompresowana przed zapisem do zram
I współczynnik kompresji: 30% - 50%
I całkowity zysk wolnej pami˛eci:10%
I koszt: kompresja (przetwarzanie), zwi˛ekszone zuzycie˙ mocy
I stosowane w niektórych urz ˛adzeniach Android
GUT – Intel 2015/16 28/50 Mapowanie pami˛eci
I Proces rozpoczyna swoje zycie˙ z pewn ˛ailosci´ ˛apami˛eci
I segment kodu programu (text)
I segment danych (data)
I biblioteki wspóldzielone
I Proces moze˙ alokowac´ dodatkow ˛apami˛ec´
I na stercie (heap), podczas działania, za pomoc ˛a malloc(3); domyslnie´ bez ograniczen´
I na stosie (stack), za pomoc ˛a alloca(3); domyslnie´ - max. 8 MB; nie zalecane. Alokacja przekraczaj ˛acalimit -> sygnał SIGSEGV
I Ładowanie bibliotek współdzielonych - dlopen(3).
GUT – Intel 2015/16 29/50 Mapowanie pami˛eci(mmap)
I Proces moze˙ tez˙ alokowac´ pami˛ec´ za pomoc ˛a mmap(2)
mapuje length bajtów pami˛eciz pliku o deskryptorze fd, pocz ˛awszy od offset w pliku i zwraca wska´znikdo obszaru pami˛eci; prot - parametr ochrony (kombinacja read, write, execute i flagi MAP_SHARED lub MAP_PRIVATE)
GUT – Intel 2015/16 30/50 Mapowanie pami˛eci(mmap)
I Alokacja pami˛eciprywatnej
I flaga MAP_ANONYMOUS i fd = -1.
I malloc(3) w glibc alokuje pami˛ec´ do 128kB, potem woła mmap
I Alokacja pami˛eciwspółdzielonej
I flaga MAP_SHARED i fd = shm_open()
shm_open(3) - create POSIX shared memory objects
GUT – Intel 2015/16 31/50 Mapowanie pami˛eci(mmap)
I Alokacja pami˛eciurz ˛adzenia
I dokładna implementacja - zalezna˙ od sterownika
I Przykład: Linux frame buffer, /dev/fb0. Interfejs zdefiniowany w /usr/include/linux/fb.h, funkcja ioctl zwraca rozmiar ekranu i liczb˛ebitów na pixel mmap - prosba´ do sterownika wideo o udost˛epnieniebufora ramek dla aplikacji do odczytu/zapisu
I Przykład: interfejs strumieniowy wideo, V4L2 (/usr/include/linux/videodev2.h)
GUT – Intel 2015/16 32/50 Ile pami˛eciuzywa˙ aplikacja?
I polecenie free - ile wolnej pami˛eciwidzi j ˛adro
I j ˛adrowykorzystuje woln ˛apami˛ec´ na bufory i cache-e, które mog ˛abyc´ zwolnione/skompresowane w kazdej˙ chwili
GUT – Intel 2015/16 33/50 Ile pami˛eciuzywa˙ aplikacja?
I Wymuszenie zwolnienia cache-ów: echo 3 > /proc/sys/vm/drop_caches Numer 3 (lub 1 lub 2) - maska bitowa:
GUT – Intel 2015/16 34/50 Ile pami˛eciuzywa˙ aplikacja?
Dwie metryki ilosci´ pami˛eciuzywanej˙ przez proces
I Vss (virtual set size) - nazywana VSZ w komendzie ps i VIRT w top
I całkowita ilos´c´ pami˛ecimapowanej przez proces (suma obszarów pokazanych w /proc/
I Rss (resident memory size) - nazywana RSS w ps i RES w top
I całkowita ilos´c´ pami˛ecimapowanej na pami˛ec´ fizyczn ˛a
I wartos´c´ wi˛ekszaod rzeczywistej pami˛ecifizycznej zuzywanej˙ przez proces - obszary współdzielone policzone wielokrotnie!
GUT – Intel 2015/16 35/50 Komenda ps
I Komendy top i ps z BusyBox - ograniczona ilos´c´ informacji
I Pakiet procps - pełne wersje top i ps
I Komenda ps - pokazuje VSZ i RSS
GUT – Intel 2015/16 36/50 Komenda top
I top - podsumowanie pami˛eciwolnej i zuzywanej˙ przez procesy
Jesli Rss procesu ci ˛aglerosnie´ -> przeciek pami˛eci(memory leak)!
GUT – Intel 2015/16 37/50 Narz˛edziesmem
Rok 2009 - dwie nowe metryki
I Uss (unique set size) - ilos´c´ pami˛ecizwi ˛azanejz pami˛eci˛a fizyczn ˛a,unikalna dla procesu; ilos´c´ pami˛eci,ktora si˛ezwolni po zakonczeniu´ działania procesu
I Pss (propotional set size) - dzieli sum˛eobszarów pami˛eci współdzielonej, zwi ˛azanych z pami˛eci˛afizyczn ˛a,na liczb˛e procesów mapuj ˛acychte obszary;
GUT – Intel 2015/16 38/50 Narz˛edziesmem
Informacja dost˛epnaw /proc/
GUT – Intel 2015/16 39/50 Narz˛edziesmem
smem - narz˛edziezbieraj ˛acedane z plików smaps
I Strona projektu: https://www.selenic.com/smem.
I Napisane w Python-ie, instalacja w systemie wbudowanym wymaga obecnosci´ srodowiska´ Python, co moze˙ byc´ problemem smemcap - program zbieraj ˛acyinformacje z plików smaps i zapisuj ˛acyje w formie archiwum TAR, które mog ˛abyc´ nast˛epnie analizowane na komputerze hosta
GUT – Intel 2015/16 40/50 Narz˛edziesmem
GUT – Intel 2015/16 41/50 Narz˛edziesmem
GUT – Intel 2015/16 42/50 Narz˛edziesmem
GUT – Intel 2015/16 43/50 Wykrywanie przecieków pami˛eci
I Przeciek pami˛eci (memory leak) - pami˛ec´ jest alokowana, ale nie jest zwalniana, kiedy przestaje byc´ uzywana˙
I W systemach wbudowanych:
I urz ˛adzenia maj ˛amało pami˛eci
I urz ˛adzenia działaj ˛adługo bez ponownego uruchomienia
I Narz˛edziado wykrywania przecieków: mtrace i Valgrind.
GUT – Intel 2015/16 44/50 Wykrywanie przecieków pami˛eci- mtrace
I mtrace - komponent glibc sledz´ ˛acywywołania malloc(3), free(3) i pokrewnych funkcji
Wywołanie mtrace() w programie - Runtime: przypisanie log-a do zmiennej rozpocz˛ecie sledzenia´ (mtrace-example.c) srodowiskowej´ MALLOC_TRACE
I komenda mtrace do odczytu log-a I informacja o przecieku - po zakonczeniu´ programu
GUT – Intel 2015/16 45/50 Wykrywanie przecieków pami˛eci- Valgrind
I Valgrind - narz˛edziedo identyfikacji problemów z pami˛eci˛a
I nie trzeba re-kompilowac´ sprawdzanych programu i bibliotek, ale warto kompilowac´ z opcj ˛a-g (symbole debuggera)
I uruchamia program w srodowisku´ emulowanym
I wada: program działa z obnizon˙ ˛awydajnosci´ ˛a(słaba mozliwo˙ s´c´ testowania programów działaj ˛acychw czasie rzeczywistym)
GUT – Intel 2015/16 46/50 Wykrywanie przecieków pami˛eci- Valgrind
I Narz˛edziadiagnostyczne Valgrind:
I memcheck: domyslne´ narz˛edzie, wykrywa przecieki pami˛eci
I cachegrind: zwraca liczb˛eodwołan´ do pami˛ecicache procesora (cache hit rate)
I callgrind: zwraca koszt wywołan´ funkcji
I helgrind: wskazuje na niepoprawne uzycie˙ Pthread API, potencjalne zakleszczenia, wyst ˛apieniawyscigu´
I DRD: inne narz˛edzieanalizy uzycia˙ Pthread API
I massif: uzycie˙ stosu i sterty
I Wybór narz˛edzia:opcja -tool
I Dost˛epnejako pakiet zarówno dla Yocto Project jak i Buildroot
GUT – Intel 2015/16 47/50 Wykrywanie przecieków pami˛eci- Valgrind
Wykrywanie przecieków - narz˛edzie memcheck z opcj ˛a –leakcheck=full (drukuje linie gdzie wykryto przeciek)
GUT – Intel 2015/16 48/50 Brak pami˛eci
I Standardowy mechanizm alokacji pami˛ecito “over-commit” - j ˛adropozwala na alokacj˛epami˛ecidla aplikacji bez sprawdzania, czy dost˛epnajest pami˛ec´ fizyczna
I Out of Memory (OOM): gdy cała pami˛ec´ wirtualna została przydzielona.
I System operacyjny próbuje odzyskac´ pami˛ec´ i wyjs´c´ ze stanu OOM wywołuj ˛acnisokopriorytetowy proces OOM Killer (zabija procesy, az˙ problem zniknie).
I Działaj ˛aceprocesy, które napotykaj ˛ana stan OOM próbuj ˛ac zarezerwowac´ pami˛ec´ za pomoc ˛amalloc(), napotykaj ˛abł ˛ad. Dobrze napisane programy powinny byc´ przygotowane na tak ˛a sytuacj˛e.
I Oblicza “badness score” pomi˛edzy0 i 1,000 dla kazdego˙ procesu i zamyka ten z najwyzszym˙ wynikiem
GUT – Intel 2015/16 49/50 Brak pami˛eci
Zmiana parametru sposobu alokacji pami˛eciprzez j ˛adro: /proc/sys/vm/overcommit_memory:
I Option 0: heuristic over-commit (default)
I Option 1 (always over-commit, never check)
I przydatne tylko gdy program pracuje z duzymi,˙ rzadkimi tablicami i alokuje duze˙ obszary pami˛eci,ale zapisuje tylko mał ˛acz˛es´c´ tego obszaru
I rzadko spotykane w systemach wbudowanych
I Option 2 (always check, never over-commit)
I systemy czasu rzeczywistego, aplikacje “safety-critical”
I nie udaje si˛ealokacja obszaru wi˛ekszego niz˙ dopuszczalny limit, który wynosi: limit = sizeof(swap)+(total memory)*over-commit ratio
I over-commit ratio jest kontrolowane przez /proc/sys/vm/overcommit_ratio (domyslnie´ 50%) GUT – Intel 2015/16 50/50