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

Slides:



Advertisements
Podobne prezentacje
MANDRIVA INSTALL FEST Nowości w Mandriva Adam Mirowski, The Camels S.C.
Advertisements

Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Serwer WWW na AT89C52 Adrian Witlib Maciej Przeor ID06SK1
Kamil Smitkiewicz Bezpieczeństwo w PHP.
Prezentacja o MS-DOS’ie
GDB Omówienie z przykładami
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski.
Biblioteki i przestrzenie nazw
Routing i protokoły routingu
Proxy WWW cache Prowadzący: mgr Marek Kopel
EBSCOhost Nowe opcje. Ulepszenia tezaurusów i ich użycia.
Oprogramowanie rejestratora pikosekundowych przebiegów elektrycznych
SO – LAB3 Wojciech Pieprzyca
Opcje kompilatora g77 g77 [opcje] pliki_źródłowe Opcje: -c tylko kompilacja bez linkowania -S kompilacja do kodu assemblera -E tylko pre-processing -o.
WINDOWS 95 WYCINEK AUTOSTART TWORZENIE POWIĄZAŃ PLIKÓW Z APLIKACJAMI
Modele baz danych - spojrzenie na poziom fizyczny
Procesy odrębne –Unikatowy PID ( ) –Zmienne –Zbiory deskryptorów plików –Przestrzeń stosu (lokalne zmienne, wywołania funkcji) –Środowisko –Licznik.
REPOZYTORIA 1. Co to są repozytoria?
Błędy popełniane przy tworzeniu prezentacji – zadanie dodatkowe
Nadstruktura języka UML w wersji 2.2 Część V Wdrożenie (pakiet UML::Deployments)
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II
System webowy do tworzenia kolektywnych prototypów aplikacji sieciowych i mobilnych Łukasz Przywarty
Podstawy programowania II
Linux - polecenia.
Generatory dokumentacji kodu źródłowego
Prezentacja funkcjonalności dziennika e-klasa
Różne obiekty w prezentacji oraz łącza.
Etykieta System NET Etykietowanie pod kontrolą. Copyright © 2008 by "elPLC" Sp. z o.o. Wszelkie prawa zastrzeżone2 Etykieta System NET ETYKIETA MANAGER.
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
Prezentacja i szkolenie
Sieci komputerowe.
Konfiguracja systemu Windows
Wzorce slajdów, animacje, różne orientacje slajdów
Maszyna wirtualna ang. virtual machine, VM.
Buforowanie D e f i n i c j a.
Robimy własne notatki - Notatnik
Przeglądanie zasobów komputera - uruchamianie programów
„Wzmacniak , bridge, brama sieciowa: różnice i zastosowanie”
Systemy zarządzania treścią Wykład 5
Systemy operacyjne (wiosna 2014)
Narzędzia klienta usługi archiwizacji Warsztaty „Usługa powszechnej archiwizacji” Michał Białoskórski, CI TASK Bartłomiej Balcerek, WCSS.
KARTY DŹWIĘKOWE.
Praca z wzorcami materiałów informacyjnych j następnie naciśnij przycisk F5 lub kliknij pozycję Pokaz slajdów > Od początku w celu rozpoczęcia kursu. Na.
Znaki specjalne Co i jak + brak przykładów.  Aby wstawić symbol lub znak specjalny należy na karcie Wstawianie w grupie Symbole kliknąć na przycisk Symbol.
Treści multimedialne - kodowanie, przetwarzanie, prezentacjaOdtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Wykład 4 Dr Aneta Polewko-Klim Dr Aneta Polewko-Klim
Podstawy programowania
Struktura systemu operacyjnego
BUDOWA WEWNĘTRZNA KOMPUTERA
Konsola MMC i jej przystawki
C++ WYKŁAD 12 ( ) Własne biblioteki. S PIS TREŚCI Kompilacja i łączenie Moduły Biblioteki Biblioteka statyczna Biblioteka współdzielona Biblioteka.
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
Testy jednostkowe. „Test jednostkowy (unit test) to fragment kodu, który sprawdza inny fragment kodu”
Wykład 4 Dr Aneta Polewko-Klim Dr Aneta Polewko-Klim
Optymalizacja programów Open- Source Optymalizacja czasu uruchamiania programu Krzysztof Lichota
Przykłady zewnętrznych bibliotek do PHP Laboratorium z Baz Danych Łukasz Zubkowicz.
Optymalizacja programów Open- Source Profilery niskiego poziomu część 2 Krzysztof Lichota
Optymalizacja programów Open-Source Pamięć część 3 Krzysztof Lichota
Optymalizacja programów Open- Source Dostęp do dysku Krzysztof Lichota
Schemat blokowy komputera
Wykład 4 Dr Aneta Polewko-Klim
Optymalizacja programów Open-Source
Optymalizacja programów Open-Source
Etykietowanie pod kontrolą
AudaPad / AudaShare AudaShare PRO (2.8)
Dynamiczny serwer aplikacyjny w C++ platforma LEFTHAND
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

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

strace

● Wypisuje wywołania funkcji systemowych wraz z najważniejszymi parametrami ● Zasada działania: śledzenie funkcji systemowych za pomocą interfejsu do debugowania (ptrace) ● Narzut: średni (każde śledzone wywołanie powoduje przełączenie kontekstu do procesu śledzącego)

Zalety strace ● Nie wymaga rekompilacji programu ani symboli do debugowania, umożliwia śledzenie każdego programu ● Pokazuje czas przebywania w funkcji systemowej i czas wywołania ● Dostępny praktycznie w każdej instalacji Linuksa ● Możliwość ograniczenia narzutu przez śledzenie tylko wybranych funkcji ● Pozwala uzyskać ślad działania programu przez korelację ze źródłami programu ● Można podłączać się do działających już programów

Wady strace ● Nie każde wywołanie funkcji w programie przekłada się na wywołanie systemowe (np. buforowanie wejścia/wyjścia) ● Spory narzut ● Śledzi tylko wywołania systemowe ● Nie pokazuje dostępu do dysku przy mmapowanych plikach

Wywołanie strace ● strace -o plik.strace -- polecenie argumenty ● W przypadku śledzenia procesów potomnych do osobnych plików wynik jest w plik.strace.PID

Przydatne opcje strace ● -f – śledzi procesy potomne ● -ff – śledzi procesy potomne i zapisuje wynik do osobnych plików ● -T – pokazuje czas przebywania w funkcji systemowej ● -tt – pokazuje czas absolutny wywołania (rozdzielczość mikrosekundowa) ● -ttt – jak -tt ale czas jest w postaci sekund (do łatwiejszego przetwarzania w skryptach) ● -r – wypisuje czas od poprzedniego wywołania funkcji systemowej

Przydatne opcje strace ● -e trace=funkcja1,funkcja2 – śledzi tylko podane funkcje systemowe ● -e trace=file – śledzi wszystkie funkcje na plikach ● -e trace=process – śledzi wszystkie funkcje dotyczące procesów (fork, exec,...) ● -e trace=network – śledzi wszystkie funkcje sieciowe ● -e trace=signal – śledzi funkcje związane z sygnałami ● -e trace=ipc – śledzi wywołania IPC (InterProcess Communication – semafory, łącza, itp.) ● -e abbrev=funkcje – dla których skracać struktury

Przydatne opcje strace ● Można podłączyć się do działających programów za pomocą opcji -p pid ● Za pomocą opcji -i można wydrukować miejsce wywołania w programie i przełożyć to na funkcję za pomocą symboli do debugowania

ltrace

● Śledzi wywołania funkcji bibliotek dynamicznych ● Zasada działania: breakpointy w kodzie i śledzenie przez interfejs debuggera ● Narzut: średni (śledzenie powoduje przełączanie do kontekstu procesu śledzącego)

Zalety ltrace ● Pokazuje wywołania funkcji bibliotecznych, co daje dużo lepszy ślad

Wady ltrace ● Nie pokazuje argumentów funkcji ● Nie działa dla niektórych programów (np. OpenOffice) ● Działa tylko na niektórych architekturach Linuksa ● Nie działa dla programów używających trików do ładowania (np. kdeinit w KDE)

Przydatne opcje Obsługuje podobne opcje jak strace i oprócz tego: ● --demangle – tłumaczy symbole C++ na zrozumiałe ● -l biblioteka – śledzi tylko symbole z danej biblioteki ● -S – pokazuje również wywołania systemowe

Google profiler

● Zasada działania – próbkowanie ze zrzutem backtrace ● Narzut – niewielki (w zależności od częstotliwości próbkowania)

Przykład – graf dla Gwenview

Zalety ● Łatwy w użyciu (LD_PRELOAD do istniejącego kodu) ● Intuicyjny i przejrzysty sposób prezentacji wyników ● Wolnodostępny, na licencji BSD ● Łatwa modyfikacja prezentacji wyników (pprof jest napisany w Perlu)

Wady ● Nie pokazuje, gdzie proces śpi ● Nie obsługuje zewnętrznych symboli (pakiety -dbg) – można to łatwo dodać ● Skleja różne instancje template – też można to zmodyfikować ● Mała rozdzielczość (domyślnie 1/100 sekundy), zwiększenie rozdzielczości zwiększa narzut

Sposób użycia Tworzenie profilu ● CPUPROFILE=ścieżka-do-pliku-profilu LD_PRELOAD=libprofiler.so ścieżka-do-programu ● Za pomocą zmiennej środowiskowej PROFILEFREQUENCY można sterować częstotliwością próbkowania Generowanie wyniku ● pprof ścieżka-do-programu ścieżka-do-profilu >plik- z-grafem.ext

Przydatne opcje pprof Format wyświetlania ● --text - tekstowy ● --ps – PostScript (można wysłać do kghostview za pomocą „pprof –ps... | kghostview -”) ● --gif – do pliku GIF

Przydatne opcje pprof Opcje formatu tekstowego: ● --cum – w widoku tekstowym sortuje po skumulowanym czasie ● --disasm= - wyświetla kod asemblera dla funkcji pasujących do wyrażenia, wraz z czasami ● --list= - wyświetla kod źródłowy funkcji pasujących do wyrażenia, wraz z czasami

Przydatne opcje pprof Opcje wyświetlania grafu ● --addresses – jeden węzeł na adres w programie ● --lines – jeden węzeł na linię kodu (wymaga symboli) ● --functions – jeden węzeł na funkcję (domyślny, nie wymaga symboli) ● --files – jeden węzeł na plik kodu źródłowego

Przydatne opcje pprof Opcje do ograniczania wyniku/rozmiaru grafu. ● --focus= - wyświetla tylko symbole pasujące do wyrażenia i wszystkie symbole na ścieżce prowadzącej do tego symbolu ● --ignore= - ignoruje symbole określone wyrażeniem i wszystkie prowadzące do niego ● opcje do odrzucania krawędzi

Często spotykane problemy ● Generowanie grafu powinno się odbywać na tej samej maszynie, co generowanie profilu (adresy w bibliotekach mogą się różnić) ● Sygnał może spowodować ucięcie profilu lub w ogóle nie będzie on utworzony ● Jeśli biblioteka nie zawiera informacji o symbolach, wszystkie próbki mogą być przypisane do jednego symbolu ● Niektóre krawędzie grafu mogą być niewidoczne (graf jest niespójny) – zależy od opcji wyświetlania.