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

Podobne dokumenty
Optymalizacja programów Open Source. Profilery wysokiego poziomu część 2. Krzysztof Lichota

Optymalizacja programów Open Source. Profilery wysokiego poziomu część 1. Krzysztof Lichota

Zarządzanie zasobami pamięci

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

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Optymalizacja programów Open-Source. Dostęp do dysku. Krzysztof Lichota

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

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

1. Pamięć wirtualna. 2. Optymalizacja pliku pamięci wirtualnej

Zarządzanie pamięcią operacyjną

Architektura komputerów

Optymalizacja programów Open Source. Krzysztof Lichota

Systemy operacyjne III

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

Zarządzanie pamięcią operacyjną zagadnienia podstawowe

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

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

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)

1. Aplikacja LOGO! App do LOGO! 8 i LOGO! 7

Komputery przemysłowe i systemy wbudowane

Zarządzanie pamięcią operacyjną

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

Strojenie systemu Linux pod k¹tem serwera bazy danych Oracle 9i

Optymalizacja programów Open-Source. Optymalizacja czasu uruchamiania programu. Krzysztof Lichota

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

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

Moduł 2 Użytkowanie komputerów i zarządzanie plikami wymaga od kandydata znajomości obsługi komputera osobistego.

MentorGraphics ModelSim

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików. Warstwowy model systemu plików

Wykonać Ćwiczenie: Active Directory, konfiguracja Podstawowa

Robert Barański, AGH, KMIW Writing TDM and TDMS Files in LabVIEW v1.0

DOS COMMAND.COM. Rys. 2. Główne moduły programowe systemu operacyjnego DOS. Interpreter poleceń. Rys. 3. Warstwowa struktura systemu DOS

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

WYKŁAD 3 Jądro systemu i procesy. Marcin Tomana Wyższa Szkoła Informatyki i Zarządzania

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

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

dr inż. Jarosław Forenc

Instrukcja obsługi platformy PROMEDIO Transmisje. wersja dla ucznia

Przetwarzanie potokowe pipelining

Programowanie Systemów Wbudowanych

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

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

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Zarządzanie projektami informatycznymi

Instalacja programu Warsztat 3 w sieci

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

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

Pokaz slajdów na stronie internetowej

System operacyjny MS-DOS

Programowanie mikroprocesorów jednoukładowych

Współpraca procesora ColdFire z pamięcią

Prezentacja emulatora QEMU Zajęcia SO

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

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

Spis treści. O autorze 13 Przedmowa 15 Wprowadzenie 17

Schematy zarzadzania pamięcia

Systemy Operacyjne I: Procesy

1.1 Definicja procesu

4. Procesy pojęcia podstawowe

Linux: Procesy. Systemy Operacyjne. Mateusz Hołenko. 26 marca 2013

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

Archiwum DG 2016 PL-SOFT

PRZYDZIAŁ PAMIĘCI OPERACYJNEJ

Q E M U.

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Działanie systemu operacyjnego

Wykład 8. Pamięć wirtualna. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

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

Ograniczenia efektywności systemu pamięci

Laboratorium - Zarządzanie pamięcią wirtualną w systemie Windows Vista

EGZAMIN POTWIERDZAJĄCY KWALIFIKACJE W ZAWODZIE Rok 2019 CZĘŚĆ PRAKTYCZNA

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

Instrukcja korzystania z Virtual Box-a i SQLPLUS-a

JAVA (wersja 1.5.x SUN Microsystems), ShockWave FLASH, lokalne wyświetlanie plików w standardzie PDF (moduł zewnętrzny).

INSTRUKCJA I WSKAZÓWKI

Podstawowe zagadnienia informatyki

Wydajny Linux. Jakub Woźniak KN Sieci Komputerowych i Systemów Rozproszonych Tenesys

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

dr inż. Jarosław Forenc

Windows Serwer 2008 R2. Moduł 8. Mechanizmy kopii zapasowych

Kurs Podstawowy S7. Spis treści. Dzień 1

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego

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

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie

Struktury systemów operacyjnych Usługi, funkcje, programy. mgr inż. Krzysztof Szałajko

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

Przy wykonywaniu rozliczeń obowiązują pewne zasady, do których nie zastosowanie się będzie skutkowało odrzuceniem raportów ze strony NFZ:

Działanie systemu operacyjnego

Zadanie1. Wykorzystując serwis internetowy Wikipedii wyjaśnij następujące pojęcia: wirtualizacja, VirtualBox, Vmware, KVM, Virtual PC, Hyper-V.

SAS Institute TECHNICAL SUPPORT

Systemy operacyjne III

Architektura i administracja systemów operacyjnych

Narzędzia diagnostyczne protokołów TCP/IP

Fiery Remote Scan. Uruchamianie programu Fiery Remote Scan. Skrzynki pocztowe

Instrukcja logowania do systemu e-bank EBS

Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows XP

Transkrypt:

Optymalizacja programów Open-Source Pamięć część 1 Krzysztof Lichota lichota@mimuw.edu.pl

Dlaczego pamięć jest ważna Współczesne systemy operacyjne stosują wirtualizację pamięci i symulują większą pamięć poprzez swapowanie Czas dostępu do dysku jest kilka rzędów wielkości wolniejszy od dostępu do pamięci Efektywny czas dostępu do pamięci: częstość_braku_strony*czas_sprowadzenia_strony + (1 częstość_braku_strony) * czas_dostępu_do_pamięci

Dlaczego pamięć jest ważna Jeśli nasz proces zużywa dużo pamięci, to inne procesy mają mniej i cały system działa wolniej Każdy proces ma swoje pole robocze zbiór stron, które są mu niezbędne do sensownego działania Przypadek skrajny migotanie (thrashing), występuje kiedy suma pól roboczych programów w systemie jest większa niż dostępna pamięć Dużo wcześniej system zaczyna się dławić, ponieważ do sprawnego działania system potrzebuje też pamięci podręcznej dysku

Pamięć w systemie

Podział pamięci w systemie operacyjnym Pamięć dla programów Pamięć podręczna dysku (cache) do przyspieszania odczytu Bufory na zapisane dane przyspieszają zapis poprzez opóźnienie go do momentu aż system będzie miał wolne zasoby Pamięć jądra struktury jądra, które muszą być cały czas w pamięci (np. kod do obsługi błędów braku strony) oraz pamięć wirtualna jądra, która może zostać wymieciona na dysk

Program free Pokazuje zużycie pamięci: free wolna pamięć (powinna być mała) cached pamięć podręczna dysku buffers bufory /+ buffers/cache pamięć po odjęciu buforów i cache (czyli to, co tak naprawdę jest interesujące) Dokładniejsze dane: /proc/meminfo

vmstat Podaje interesujące statystyki zużycia pamięci, komunikacji ze swap i dyskiem oraz zużycia CPU standardowe parametry pamięci (wolna, cache, itp.) si/so ilość pamięci ściągnięta/wysłana do swapa bi/bo ilość danych ściągnięta/wysłana na dysk standardowe parametry CPU (user, kernel, iowait) cs liczba przełączeń kontekstu na sekundę in liczba przerwań na sekundę Wywołanie vmstat 1 powtarza wyświetlanie co 1s Do rysowania wykresów można użyć OpenOffice lub automatycznie generować za pomocą gnuplot

Pamięć w programie

Pamięć w programie Dane użytkowe (sterta ang. heap) Stos Kod bibliotek i programu Pliki wmapowane za pomocą mmap() Część pamięci używanej przez program (piksmapy) jest tak naprawdę w X serwerze!

Pamięć w programie Czasem pamięć jest automatycznie współdzielona między procesami przez system operacyjny: kod programu, wmapowane pliki tylko do odczytu, biblioteki dynamiczne cała pamięć procesu przy fork() (poprzez copy onwrite), nawet stos! Kod bibliotek i programu jest zasadniczo współdzielony, ale relokacja symboli może spowodować, że część nie będzie współdzielona, tylko prywatna

Pamięć w programie RSS (Resident Set Size) liczba stron w pamięci używanych przez program (łącznie ze współdzielonymi) VmSize rozmiar pamięci wirtualnej procesu Shared rozmiar pamięci potencjalnie współdzielonej z innymi procesami Te statystyki mogą być bardzo mylące, jeśli próbuje się ich użyć do podsumowania całego systemu lub dokładniejszego porównania programów [1] [1] http://www.kdedevelopers.org/node/1567

time Podaje statystyki z uruchomienia procesu Wywołanie: /usr/bin/time <opcje> polecenie Opcja f format pozwala wybrać statystyki do pokazania Przydatne statystyki do analizy pamięci: %F liczba major page faults %R liczba minor page faults %M maksymalny RSS w czasie życia programu %p średni rozmiar niewspółdzielonego stosu %t średni RSS procesu

ps Pokazuje podobne statystyki podobne jak time, ale dla wszystkich procesów i nie wymaga uruchamiania programu pod nadzorem Można wypisywać tylko jeden proces za pomocą opcji p pid Jeśli zależy nam na interaktywnym wyświetlaniu statystyki, to można użyć programu top Więcej opcji: man ps

/proc Dużo informacji o procesach można bezpośrednio z /proc ps i top używają go zresztą do pobierania informacji Ciekawe pliki w /proc/pid: status stan procesu, podsumowanie zużycia pamięci statm dokładniejsze informacje o pamięci procesu maps/smaps informacje o obszarach pamięci wirtualnej procesu Żeby odczytać dane o bieżącym procesie można użyć dowiązania symbolicznego /proc/self Specyficzne dla Linuksa (dlatego lepiej używać ps)

/proc/pid/maps /proc/pid/maps pokazuje obszary pamięci wirtualnej w procesie Flagi: r/w do odczytu/zapisu x do wykonywania p prywatne (mogą być współdzielone przez copyon write) s współdzielone explicite Biblioteki są wmapowane 2 razy raz jako wykonywalne i raz jako do zapisu (żeby zrobić relokacje) Na i386 prawo wykonywania implikuje prawo odczytu

/proc/pid/smaps Pokazuje szczegółowe statystyki dla każdego obszaru pamięci wirtualnej RSS liczba stron w pamięci Shared_Clean współdzielone, które można w każdej chwili wyrzucić, bo są zapisane Shared_Dirty współdzielone, które zawierają niezapisane zmiany i które przed wyrzuceniem trzeba zapisać Private_Clean prywatne, które można wyrzucić Private_Dirty prywatne, które trzeba zapisać Tutaj Shared oznacza, że jest więcej niż jeden proces, który posiada strony w swoich tablicach stron!

exmap Pokazuje szczegółowe statystyki zużycia pamięci Potrafi pokazać statystyki pamięci dla procesu/biblioteki/sekcji ELF/symbolu Używa modułu jądra do uzyskania statystyk Ma interfejs graficzny Może pokazywać odwrotne mapowanie z plików do procesów Pokazuje ilość współdzielonej pamięć rozdzieloną proporcjonalnie pomiędzy wszystkie używające jej procesy

xrestop Pokazuje zużycie pamięci w X serwerze dla poszczególnych programów Używa rozszerzenie X serwera X resource Domyślnie pokazuje podobny widok jak top Opcja b pozwala zrzucać dane wsadowo Uwaga jak każdy program X pokazuje zużycie serwera X wskazywanego przez zmienną DISPLAY, więc jak podłączamy się zdalnie do komputera, to pokaże wyniki dla naszego lokalnego X serwera.

Ukryte problemy z używaniem pamięci Wycieki pamięci powodują zwiększanie objętości programu w trakcie działania Fragmentacja powoduje, że program zaczyna zużywać więcej pamięci niż tak naprawdę potrzebuje Rozdzielczość stronicowania to rozmiar jednej strony (na i386 4 KB), więc każda operacja tworząca prywatną kopię strony powoduje zużycie co najmniej 1 strony, a jak struktura jest na granicy stron, to co najmniej dwóch

Co można optymalizować Znaleźć dane, które są w pamięci niepotrzebnie Znaleźć dane, które są duplikowane (np. jednocześnie w pamięci procesu i X serwerze) Trzymać tylko część danych w pamięci potrzebną w danej chwili (programy graficzne, edytory tekstu) Użyć bardziej kompaktowych struktur danych Usunąć fragmentację Zmniejszyć zużycie czasoprzestrzenne jeśli dane są konieczne, to trzymać je najkrócej jak się da Usunąć wycieki pamięci (to bardziej debugowanie)

Co można optymalizować Lepiej zarządzać danymi mmapowanymi (np. wyrzucać niepotrzebne za pomocą madvise) Współdzielić co się da (np. pliki konfiguracyjne, ikony), np. używając mmap() do danych niezmienianych lub pamięci dzielonej dla generowanych Ulepszyć współdzielenie kodu poprzez eliminację relokacji Zmniejszyć rozmiar danych aktywnie używanych w pamięci poprzez skompaktowanie ich na mniejszej liczbie stron Nie linkować się z niepotrzebnymi bibliotekami

Na co zwrócić uwagę Każdy wątek ma swój stos w trybie użytkownika (ok. 1MB domyślnie) więcej wątków oznacza więcej zużytej pamięci (ale może być współdzielona przez copy on write) Każdy wątek/proces ma swój stos w trybie jądra (niestronicowany), o rozmiarze 4 KB lub 8 KB

Bibliografia http://bmaurer.blogspot.com/2006/03/memory usage with http://www.kdedevelopers.org/node/1567 http://lxr.linux.no/source/documentation/filesystems/proc. http://monkey.linuxworld.com/cgi bin/dwww?type=runman http://lists.kde.org/?l=kde devel&m=116786313023874&w http://www.berthels.co.uk/exmap/ http://primates.ximian.com/~federico/docs/2007 02 FOSD http://people.redhat.com/berrange/olpc/performance/epip