Programowanie Systemów Wbudowanych

Podobne dokumenty
Zarządzanie zasobami pamięci

Schematy zarzadzania pamięcia

Systemy operacyjne III

Wykład 7. Zarządzanie pamięcią

3 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.06 Rok akad. 2011/ / 22

Optymalizacja programów Open-Source. Pamięć część 1. Krzysztof Lichota

architektura komputerów w. 8 Zarządzanie pamięcią

Architektura komputerów

Pamięć wirtualna. Przygotował: Ryszard Kijaka. Wykład 4

SYSTEMY OPERACYJNE WYKLAD 4 - zarządzanie pamięcią

dr inż. Jarosław Forenc

Zarządzanie pamięcią operacyjną

Zarządzanie pamięcią operacyjną zagadnienia podstawowe

Zarządzanie pamięcią operacyjną

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Podstawowe zagadnienia informatyki

Od programu źródłowego do procesu

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Sprzętowe wspomaganie pamięci wirtualnej

Zarządzanie pamięcią. Od programu źródłowego do procesu. Dołączanie dynamiczne. Powiązanie programu z adresami w pamięci

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Współpraca procesora ColdFire z pamięcią

Mikroinformatyka. Tryb wirtualny

Zarządzanie pamięcią w systemie operacyjnym

Wykład 10 Zarządzanie pamięcią

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

Wykład 12. Zarządzanie pamięcią (część III) oraz urządzenia sieciowe. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB

Q E M U.

Programowanie na poziomie sprzętu. Tryb chroniony cz. 1

Procesor ma architekturę rejestrową L/S. Wskaż rozkazy spoza listy tego procesora. bgt Rx, Ry, offset nand Rx, Ry, A add Rx, #1, Rz store Rx, [Rz]

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

System pamięci. Pamięć wirtualna

Programowanie Systemów Wbudowanych

Hierarchia pamięci w systemie komputerowym

Wybrane zagadnienia elektroniki współczesnej

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Komputery przemysłowe i systemy wbudowane

4. Procesy pojęcia podstawowe

Model pamięci w systemie Linux

1.1 Definicja procesu

Hosting WWW Bezpieczeństwo hostingu WWW. Dr Michał Tanaś (

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Ograniczenia efektywności systemu pamięci

U M L. System operacyjny Linux zagnieżdżony w zewnętrznym systemie operacyjnym (Linux)

Ograniczenia efektywności systemu pamięci

UNIX: architektura i implementacja mechanizmów bezpieczeństwa. Wojciech A. Koszek dunstan@freebsd.czest.pl Krajowy Fundusz na Rzecz Dzieci

Pamięć. Jan Tuziemski Źródło części materiałów: os-book.com

System plików. Warstwowy model systemu plików

Podstawy. Pamięć wirtualna. (demand paging)

Działanie systemu operacyjnego

Zarządzanie pamięcią. Zarządzanie pamięcią. Podstawy. Podsystem zarządzania pamięcią. Zadania podsystemu: W systemie wielozadaniowym:

PRZYDZIAŁ PAMIĘCI OPERACYJNEJ

Działanie systemu operacyjnego

System pamięci. Pamięć wirtualna

dr inż. Jarosław Forenc

Prezentacja systemu RTLinux

ARCHITEKTURA PROCESORA,

Procesy pojęcia podstawowe. 1.1 Jak kod źródłowy przekształca się w proces

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików warstwa fizyczna

Działanie systemu operacyjnego

Podstawy programowania komputerów

System pamięci. Pamięć wirtualna

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Podstawy. Podsystem zarządzania pamięcią - zadania: Wiązanie (binding) rozkazów i danych z adresami pamięci. W systemie wielozadaniowym:

Struktury systemów operacyjnych

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Architektura systemów informatycznych

Budowa systemów komputerowych

Programowanie współbieżne Wykład 2. Iwona Kochańska

Jądro systemu operacyjnego

1) Czym jest architektura systemu Windows 7 i jak się ją tworzy? 2) Jakie są poszczególne etapy uruchomienia systemu Windows 7?

Działanie systemu operacyjnego

Lab 9 Podstawy Programowania

DYNAMICZNE PRZYDZIELANIE PAMIECI

Stronicowanie w systemie pamięci wirtualnej

16MB - 2GB 2MB - 128MB

QEMU działa na procesorach procesorach: emuluje procesory: dostępne dla s.o. hosta:

ZASADY PROGRAMOWANIA KOMPUTERÓW

Pamięć wirtualna w AS/400

Architektura komputerów

TESTOWAĆ TESTOWAĆ TESTOWAĆ TESTOWAĆ TESTOWAĆ TESTOWAĆ TESTOWAĆ

dr inŝ. Jarosław Forenc

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.

UTK ARCHITEKTURA PROCESORÓW 80386/ Budowa procesora Struktura wewnętrzna logiczna procesora 80386

Architektura mikroprocesorów TEO 2009/2010

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Monitor maszyn wirtualnych

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak

Spis treści. Dzień 1. I Konfiguracja sterownika (wersja 1410) II Edycja programu (wersja 1406) III Środowisko TIA Portal (wersja 1410)

System komputerowy. System komputerowy

Wykład 11 Zarządzanie pamięcią

Zarządzanie pamięcią. Podstawy Wymiana (swapping). Przydział ciągły pamięci. Stronicowanie. Segmentacja. Segmentacja ze stronicowaniem.

Kernel Kompilacja jądra

Komunikacja między sterownikami przez protokół ADS

Podstawy informatyki. System operacyjny. dr inż. Adam Klimowicz

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

Transkrypt:

Programowanie Systemów Wbudowanych Zarzadzanie pamięcia Iwona Kochańska Katedra Systemów Elektroniki Morskiej WETI PG April 19, 2017

Pamięć fizyczna - liniowa ( flat ) wszystkie procesy współdziela ten sam obszar pamięci przykładowe CPU: 8086-80206, ARM Cortex-M, 8- i 16-bit PIC, AVR, większość systemow 8- i 16-bitowych GUT Intel 2015/16 2/50

Pamięć fizyczna - model x86 GUT Intel 2015/16 3/50

Pamięć fizyczna - model x86 Pamięć fizyczna podzielona jest na strony Rozmiar strony jest różny dla różnych architektur. W większości przypadków to 4096 B Ograniczona przenośność programów C Trzeba znać (lub sprawdzać) całkowita ilość pamięci RAM Trzeba pilnować, by procesy miały osobne obszary pamięci Źle napisane programy moga powodować awarię całego systemu GUT Intel 2015/16 4/50

Linux to system obsługujacy pamięć wirtualna Mapowanie wirtualnej przestrzeni adreswej na: Zalety: przestrzeń pamięci fizycznej RAM urzadzenia, np. PCI, GPU RAM każdy proces może mieć własna przestrzeń adresowa; przestrzenie adresowe sa od siebie odseparowane, przestrzeń adresowa jadra jest niewidoczna dla przestrzeni adresowej użytkownika pamięć fizyczna RAM może być mapowana przez wiele procesów - pamięć współdzielona (shared memory) obszary pamięci moga mieć różne ustawienia dostępu (read, write, execute) GUT Intel 2015/16 5/50

Linux to system obsługujacy pamięć wirtualna Dwie przestrzenie adresowe: adresy fizyczne - używane przez urzadzenia (DMA, peryferia) adresy wirtualne - używane przez programy (instrukcje load/store dla procesorów RISC, wszelkie instrukcje dostępu do pamięci RAM dla procesorów CISC) Każdy adres w pamięci (fizycznej lub wirtualnej) można przedstawić jako wielokrotność rozmiaru strony oraz przesunięcia Przestrzeń adresowa pamięci wirtualnej dla procesorów 32-bitowych: od 0 do 0xffffffff, podzielona na strony o rozmiarze 4 kb dla procesorów 64-bitowych: 48 bitów adresu (maks. 256 TB), po połowie dla jadra i przestrzeni użytkownika GUT Intel 2015/16 6/50

Linux to system obsługujacy pamięć wirtualna Przestrzeń adresowa podzielona na: przestrzeń użytkownika (user space) - high memory i przestrzeń jadra (kernel space) - low memory GUT Intel 2015/16 7/50

Linux to system obsługujacy pamięć wirtualna Segment danych (Data) - globalne i statyczne zmienne o zdefiniowanych, niezmiennych wartościach; wszelkie zmienne nie zdefiniowane wewnatrz funkcji Segment BSS - globalne i statyczne zmienne o wartości 0 lub bez wartości Sterta (Heap) - zmienne dynamiczne - przestrzeń zarzadzana poleceniami malloc, calloc, realloc, free; obszar współdzielony przez wszystkie watki, biblioteki współdzielone, moduły Stos (Stack) - zmienne lokalne; jeśli wskaźnik stosu zrówna się ze wskaźnikiem sterty, to oznacza koniec wolnej pamięci. GUT Intel 2015/16 8/50

Linux to system obsługujacy pamięć wirtualna Podział między przestrzeń użytkownika a przestrzeń jadra: parametr PAGE_OFFSET konfiguracji jadra typowy system 32-bitowy: PAGE_OFFSET = 0xc0000000, niższe 3GB - przestrzeń użytkownika przestrzeń użytkownika alokowana dla procesu przestrzeń jadra - wspólna dla wszystkich procesów. GUT Intel 2015/16 9/50

Jednostka zarzadzania pamięcia Memory Management Unit (MMU) - zestaw układów realizujacych dostęp do pamięci fizycznej żadanej przez CPU. Do ich zadań należy: translacja pamięci wirtualnej do pamięci fizycznej, ochrona pamięci, obsługa pamięci podręcznej, zarzadzanie szynami danych przełaczanie banków pamięci (w systemach 8-bitowych) Układy MMU dziela przestrzeń logiczna (wirtualna) pamięci na strony, których rozmiar wynosi 2N (kilka kilobajtów). Page frame number (PFN) - indeks strony pamięci (N starszych bitów adresu pamięci). Młodsze M bitów adresu (przesunięcie) pozostaje niezmienione GUT Intel 2015/16 10/50

MMU - Translation lookaside buffer Translation lookaside buffer (TLB) - asocjacyjna pamięć podręczna służaca do mapowania adresów wirtualnych/fizycznych Jeżeli TLB nie posiada odpowiedniego przypisania (rozmiar pamięci TLB jest ograniczony) uruchamiane sa wolniejsze, sprzętowe mechanizmy procesora przeszukujace struktury danych znajdujace się w pamięci, co wymaga niekiedy pomocy ze strony oprogramowania (systemu operacyjnego). Pozycje w tych strukturach nazywaja się wpisami (elementami) tablicy stron pamięci (PTEs - ang. page table entries), a cała struktura nazywana jest tablica stron pamięci (ang. page table). Kompletny adres w pamięci fizycznej jest ustalany poprzez dodanie bitów przesunięcia do przetłumaczonego numeru strony. GUT Intel 2015/16 11/50

MMU - Translation lookaside buffer Jeżeli w strukturach TLB lub PTE nie znajduje się odpowiedni opis aktualnie wykorzystywanej logicznej strony pamięci lub znajdujacy się wpis zabrania dostępu w danym trybie, MMU sygnalizuje CPU wyjatek zwiazany z błędnym dostępem do strony pamięci, tzw. page fault. GUT Intel 2015/16 12/50

Mapowanie pamięci wirtualnej Każda strona pamięci wirtualnej może być: niemapowana (próba dostępu -> SIGSEGV -> komunikat segmentation fault) mapowana na stronę fizyczna pamięci prywatna dla procesu mapowana na stronę fizyczna pamięci współdzielona z innym procesem mapowana na stronę fizyczna pamięci używana przez jadro j adro może dodatkowo mapować strony p. wirtualnej na obszary pamięci zarezerwowane dla np. buforów pamięci sterowników GUT Intel 2015/16 13/50

Mapowanie pamięci wirtualnej - COW mapowanie i współdzielenie z flaga copy on write gdy istnieje potrzeba współdzielenia dużej ilości danych zamiast rzeczywistego, kosztownego kopiowania pamięci zwracany jest wskaźnik do oryginalnych danych; kopiowanie jest wykonywane dopiero, gdy zachodzi potrzeba ich modyfikacji. Przykład: funkcja fork() tworzy proces potomny, który posiada dokładna kopię kontekstu procesu nadrzędnego, jak również kopię jego pamięci (mapowana na ta sama przestrzeń fizyczna). strony pamięci, które moga być zmodyfikowane zarówno przez proces jak i jego potomka, otrzymuja znacznik "kopiowane przy zapisie". gdy jeden z procesów modyfikuje pamięć, 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ędny i potomny zaczynaja odwoływać się do fizycznie różnych stron. GUT Intel 2015/16 14/50

Mapowanie pamięci wirtualnej - COW GUT Intel 2015/16 15/50

Zalety pamięci wirtualnej niepoprawne odwołania do pamięci przechwytywane i sygnalizowane przez SIGSEGV proces działa we własnej przestrzeni pamieci, odizolowany od innych procesów efektywne wykorzystanie pamięci - współdzielenie części kodu i danych ( np. bibliotek) możliwość zwiększenia ilości pamięci poprzez pliki wymiany (swap files) GUT Intel 2015/16 16/50

Wady pamięci wirtualnej trudno ustalić, jakie jest aktualne zużycie pamięci (przez aplikację) overcommit - praktyka przedzielania pamięci wirtualnej bez gwarancji, że dostępna jest odpowiednia ilość pamięci fizycznej opóźnienia wprowadzane przez zarzadzanie pamięcia i obsługę wyjatków (page faults) GUT Intel 2015/16 17/50

Przestrzeń pamięci jadra Przestrzeń pamieci jadra - każdej alokacji w przestrzeni wirtualnej odpowiada przestrzeń fizyczna! Obszary: jadro (kod i dane załadowane z obrazu jadra podczas rozruchu systemu) segmenty:.text,.init,.data,.bss pamięć dla sterowników urzadzeń moduły jadra GUT Intel 2015/16 18/50

Przestrzeń pamięci jadra pamięć alokowana przez void * kmalloc(size_t size, int flags) slab allocator - efektywny mechanizm ciagłej alokacji pamięci; zachowanie kmalloc zależy od parametru flags: GFP_KERNEL: zwykła alokacja, może zostać chwilowo wstrzymana (zwolniona) i ponownie zaalokowana. GFP_ATOMIC: alokacja dokonana w całości lub wcale. zwolnienie pamięci: void kfree(const void *objp); pamięć alokowana przez void *vmalloc(unsigned long size); większe obszary pamięci niż kmalloc() (przestrzeń adresowa wirtualna jest ciagła, ale fizyczna - niekoniecznie) odpowiednik malloc() w przestrzeni użytkownika, zwolnienie pamięci: void vfree(const void *addr); Przykład programu: http://www.roman10.net/2011/07/29/linuxkernel-programmingmemory-allocation/ GUT Intel 2015/16 19/50

Ile pamięci używa jadro? rozmiar obrazu jadra zwykle jadro jest małe w porównaniu z całkowita ilościa pamięci budowa małego jadra ( Linux-tiny, Linux Kernel Tinification), projekt https://tiny.wiki.kernel.org/. GUT Intel 2015/16 20/50

Ile pamięci używa jadro? Odczyt /proc/meminfo. Kernel memory usage to suma: Slab: pamięć alokowana przez slab allocator więcej informacji - odczyt /proc/slabinfo KernelStack: przestrzeń adresowa stosu PageTables: pamięć do przechowywania tablic stronicowania VmallocUsed: pamięć alokowana przez vmalloc() więcej informacji - odczyt /proc/vmallocinfo GUT Intel 2015/16 21/50

Ile pamięci używa jadro? GUT Intel 2015/16 22/50

Ile pamięci używa jadro? lsmod - ile pamięci zużywa kod i dane modułów jadra? GUT Intel 2015/16 23/50

Obszar pamięci użytkownika Stronicowanie na żadanie (Demand-paging) - Linux mapuje strony pamięci fizycznej tylko wtedy, gdy program odwołuje się do odpowiedniego miejsca w pamięci wirtualnej malloc(3) zwraca wskaźnik do pamięci wirtualnej operacja odczytu/zapisu przechwytywana przez jadro page fault jadro znajduje obszar pamięci fizycznej i dodaje go do tablicy stronicowania GUT Intel 2015/16 24/50

Obszar pamięci użytkownika Bład stronicowania (page fault) - gdy jadro przechwytuje dostęp do strony pamięci nie mapowanej na pamięć fizyczna Dwa rodzaje błędów stronicowania: minor - rozwiazaniem jest znalezienie przez jadro wolnego obszaru pamięci fizycznej i powiazanie go z przestrzenia adresowa procesu w pamięci wirtualnej major - pamięć wirtualna jest mapowana na plik (np. za pomoca mmap(2)). Próba odczytu z takiej pamięci: jadro musi znaleźć obszar pamięci fizycznej jadro musi wypełnić pamięć fizyczna danymi z pliku GUT Intel 2015/16 25/50

Mapa pamięci procesu Dostęp do mapy pamięci procesu - przez system plików proc Przykład: mapa pamięci procesu init (PID 1)... Pierwsze trzy kolumny: adres poczatku i końca pamięci wirtualnej, flagi uprawnień: r = read w = write x = execute s = shared p = private (copy on write) Mapowanie pamięci zwiazanej z plikiem: kolumna 4: przesunięcie względem poczatku pliku, kolumna 5: numer urzadzenia blokowego, kolumna 6: inod pliku, kolumna 7: nazwa pliku GUT Intel 2015/16 26/50

Partycja wymiany (Swap) Partycja wymiany służy do tymczasowego przechowywania danych w sytuacji, gdy ich ilość przekracza zasoby wolnej pamięci RAM lub gdy z różnych powodów korzystniej jest przechowywać je na dysku twardym zwiększenie efektywnego rozmiaru pamięci fizycznej koszt obsługi partycji wymiany jest duży w systemie o małej ilości pamięci fizycznej mechanizm rzadko używany w systemach wbudowanych GUT Intel 2015/16 27/50

Wykorzystanie partycji wymiany do kompresji pamięci (zram) sterownik zram tworzy urzadzenia blokowe: /dev/zram0, /dev/zram1, itd. zawartość pamięci jest kompresowana przed zapisem do zram współczynnik kompresji: 30% - 50% całkowity zysk wolnej pamięci: 10% koszt: kompresja (przetwarzanie), zwiększone zużycie mocy stosowane w niektórych urzadzeniach Android GUT Intel 2015/16 28/50

Mapowanie pamięci Proces rozpoczyna swoje życie z pewna ilościa pamięci segment kodu programu (text) segment danych (data) biblioteki wspóldzielone Proces może alokować dodatkowa pamięć na stercie (heap), podczas działania, za pomoca malloc(3); domyślnie bez ograniczeń na stosie (stack), za pomoca alloca(3); domyślnie - max. 8 MB; nie zalecane. Alokacja przekraczajaca limit -> sygnał SIGSEGV Ładowanie bibliotek współdzielonych - dlopen(3). GUT Intel 2015/16 29/50

Mapowanie pamięci (mmap) Proces może też alokować pamięć za pomoca mmap(2) mapuje length bajtów pamięci z pliku o deskryptorze fd, poczawszy od offset w pliku i zwraca wskaźnik do obszaru pamięci; prot - parametr ochrony (kombinacja read, write, execute i flagi MAP_SHARED lub MAP_PRIVATE) GUT Intel 2015/16 30/50

Mapowanie pamięci (mmap) Alokacja pamięci prywatnej flaga MAP_ANONYMOUS i fd = -1. malloc(3) w glibc alokuje pamięć do 128kB, potem woła mmap Alokacja pamięci współdzielonej flaga MAP_SHARED i fd = shm_open() shm_open(3) - create POSIX shared memory objects GUT Intel 2015/16 31/50

Mapowanie pamięci (mmap) Alokacja pamięci urzadzenia dokładna implementacja - zależna od sterownika Przykład: Linux frame buffer, /dev/fb0. Interfejs zdefiniowany w /usr/include/linux/fb.h, funkcja ioctl zwraca rozmiar ekranu i liczbę bitów na pixel mmap - prośba do sterownika wideo o udostępnienie bufora ramek dla aplikacji do odczytu/zapisu Przykład: interfejs strumieniowy wideo, V4L2 (/usr/include/linux/videodev2.h) GUT Intel 2015/16 32/50

Ile pamięci używa aplikacja? polecenie free - ile wolnej pamięci widzi jadro jadro wykorzystuje wolna pamięć na bufory i cache-e, które moga być zwolnione/skompresowane w każdej chwili GUT Intel 2015/16 33/50

Ile pamięci używa aplikacja? 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ęci używa aplikacja? Dwie metryki ilości pamięci używanej przez proces Vss (virtual set size) - nazywana VSZ w komendzie ps i VIRT w top całkowita ilość pamięci mapowanej przez proces (suma obszarów pokazanych w /proc/<pid>/maps) Rss (resident memory size) - nazywana RSS w ps i RES w top całkowita ilość pamięci mapowanej na pamięć fizyczna wartość większa od rzeczywistej pamięci fizycznej zużywanej przez proces - obszary współdzielone policzone wielokrotnie! GUT Intel 2015/16 35/50

Komenda ps Komendy top i ps z BusyBox - ograniczona ilość informacji Pakiet procps - pełne wersje top i ps Komenda ps - pokazuje VSZ i RSS GUT Intel 2015/16 36/50

Komenda top top - podsumowanie pamięci wolnej i zużywanej przez procesy Jesli Rss procesu ciagle rośnie -> przeciek pamięci (memory leak)! GUT Intel 2015/16 37/50

Narzędzie smem Rok 2009 - dwie nowe metryki Uss (unique set size) - ilość pamięci zwiazanej z pamięcia fizyczna, unikalna dla procesu; ilość pamięci, ktora się zwolni po zakończeniu działania procesu Pss (propotional set size) - dzieli sumę obszarów pamięci współdzielonej, zwiazanych z pamięcia fizyczna, na liczbę procesów mapujacych te obszary; GUT Intel 2015/16 38/50

Narzędzie smem Informacja dostępna w /proc/<pid>/smaps GUT Intel 2015/16 39/50

Narzędzie smem smem - narzędzie zbierajace dane z plików smaps Strona projektu: https://www.selenic.com/smem. Napisane w Python-ie, instalacja w systemie wbudowanym wymaga obecności środowiska Python, co może być problemem smemcap - program zbierajacy informacje z plików smaps i zapisujacy je w formie archiwum TAR, które moga być następnie analizowane na komputerze hosta GUT Intel 2015/16 40/50

Narzędzie smem GUT Intel 2015/16 41/50

Narzędzie smem GUT Intel 2015/16 42/50

Narzędzie smem GUT Intel 2015/16 43/50

Wykrywanie przecieków pamięci Przeciek pamięci (memory leak) - pamięć jest alokowana, ale nie jest zwalniana, kiedy przestaje być używana W systemach wbudowanych: urzadzenia maja mało pamięci urzadzenia działaja długo bez ponownego uruchomienia Narzędzia do wykrywania przecieków: mtrace i Valgrind. GUT Intel 2015/16 44/50

Wykrywanie przecieków pamięci - mtrace mtrace - komponent glibc śledzacy wywołania malloc(3), free(3) i pokrewnych funkcji Wywołanie mtrace() w programie - rozpoczęcie śledzenia (mtrace-example.c) Runtime: przypisanie log-a do zmiennej środowiskowej MALLOC_TRACE komenda mtrace do odczytu log-a informacja o przecieku - po zakończeniu programu GUT Intel 2015/16 45/50

Wykrywanie przecieków pamięci - Valgrind Valgrind - narzędzie do identyfikacji problemów z pamięcia nie trzeba re-kompilować sprawdzanych programu i bibliotek, ale warto kompilować z opcja -g (symbole debuggera) uruchamia program w środowisku emulowanym wada: program działa z obniżona wydajnościa (słaba możliwość testowania programów działajacych w czasie rzeczywistym) GUT Intel 2015/16 46/50

Wykrywanie przecieków pamięci - Valgrind Narzędzia diagnostyczne Valgrind: memcheck: domyślne narzędzie, wykrywa przecieki pamięci cachegrind: zwraca liczbę odwołań do pamięci cache procesora (cache hit rate) callgrind: zwraca koszt wywołań funkcji helgrind: wskazuje na niepoprawne użycie Pthread API, potencjalne zakleszczenia, wystapienia wyścigu DRD: inne narzędzie analizy użycia Pthread API massif: użycie stosu i sterty Wybór narzędzia: opcja -tool Dostępne jako pakiet zarówno dla Yocto Project jak i Buildroot GUT Intel 2015/16 47/50

Wykrywanie przecieków pamięci - Valgrind Wykrywanie przecieków - narzędzie memcheck z opcj a leakcheck=full (drukuje linie gdzie wykryto przeciek) GUT Intel 2015/16 48/50

Brak pamięci Standardowy mechanizm alokacji pamięci to over-commit - jadro pozwala na alokację pamięci dla aplikacji bez sprawdzania, czy dostępna jest pamięć fizyczna Out of Memory (OOM): gdy cała pamięć wirtualna została przydzielona. System operacyjny próbuje odzyskać pamięć i wyjść ze stanu OOM wywołujac nisokopriorytetowy proces OOM Killer (zabija procesy, aż problem zniknie). Działajace procesy, które napotykaja na stan OOM próbujac zarezerwować pamięć za pomoca malloc(), napotykaja bład. Dobrze napisane programy powinny być przygotowane na taka sytuację. Oblicza badness score pomiędzy 0 i 1,000 dla każdego procesu i zamyka ten z najwyższym wynikiem GUT Intel 2015/16 49/50

Brak pamięci Zmiana parametru sposobu alokacji pamięci przez jadro: /proc/sys/vm/overcommit_memory: Option 0: heuristic over-commit (default) Option 1 (always over-commit, never check) przydatne tylko gdy program pracuje z dużymi, rzadkimi tablicami i alokuje duże obszary pamięci, ale zapisuje tylko mała część tego obszaru rzadko spotykane w systemach wbudowanych Option 2 (always check, never over-commit) systemy czasu rzeczywistego, aplikacje safety-critical nie udaje się alokacja obszaru większego niż dopuszczalny limit, który wynosi: limit = sizeof(swap)+(total memory)*over-commit ratio over-commit ratio jest kontrolowane przez /proc/sys/vm/overcommit_ratio (domyślnie 50%) GUT Intel 2015/16 50/50