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

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

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

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

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

Programowanie Systemów Wbudowanych

Programy użytkowe (utilities)

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

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

Q E M U.

Programowanie w Javie

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

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

Wprowadzenie do SAS. Wprowadzenie. Historia SAS. Struktura SAS 8. Interfejs: SAS Explorer. Interfejs. Część I: Łagodny wstęp do SAS Rafał Latkowski

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Systemy operacyjne na platformach mobilnych 2 Podstawy obsługi powłoki Bash

Tworzenie plików w formacie DjVu z wykorzystaniem oprogramowania DocumentExpress Enterprise Edition

Podstawy programowania

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

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

SPIS TREŚCI: KARTY GRAFICZNE... 15

Dostęp do menu drukarki

Wprowadzenie do biblioteki klas C++

Technologia znaku wodnego dla plików dźwiękowych: Legimi Audio Watermark

PIERWSZE URUCHOMIENIE PROGRAMU ITNC PROGRAMMING STATION

Architektura komputerów

Centrum Sterowania SZARP

Szkolenia specjalistyczne

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Krótki kurs obsługi środowiska programistycznego Turbo Pascal z 12 Opracował Jan T. Biernat. Wstęp

Jak ustawić cele kampanii?

Systemy Operacyjne 1 Laboratorium 2 Procesy i sygnały w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot

Programowanie w asemblerze Linkowanie

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

Porównanie aplikacji do tworzenia harmonogramów.

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

SYSTEM KONTROLI DOSTĘPU. XChronos

Smarty PHP. Leksykon kieszonkowy

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

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/2017

Kernel Kompilacja jądra

Analiza i projektowanie aplikacji Java

(12) TŁUMACZENIE PATENTU EUROPEJSKIEGO (19) PL (11) PL/EP (96) Data i numer zgłoszenia patentu europejskiego:

PAMIĘĆ OPERACYJNA...107

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

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Systemy operacyjne. Laboratorium 8. Perl find

Historia aktualizacji

Instrukcje ustawień funkcji zwalniania wydruku

Advance Concrete 8.1 SP1 Opis zawartości

Modularny system I/O IP67

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

Ping. ipconfig. getmac

Instrukcja korzystania z Virtual Box-a i SQLPLUS-a

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

DLIBRA & DRUPAL DWA SYSTEMY, JEDNA WITRYNA

Javadoc. Piotr Dąbrowiecki Sławomir Pawlewicz Alan Pilawa Joanna Sobczyk Alina Strachocka

IBM SPSS Statistics dla systemu Linux Instrukcje instalacji (licencja sieciowa)

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

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

AMi-BOOK wersja 14.6

Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

7. Dynamiczne generowanie grafiki

Monitorowanie i zarządzanie urządzeniami sieciowymi przy pomocy narzędzi Net-SNMP

Musesort. Przeczytaj szczegóły pliku. Wyświetla okno ze szczegółami pobranymi z internetu wybranego pliku audio lub video

MentorGraphics ModelSim

Laboratorium Komputerowe Systemy Pomiarowe

Menu Plik w Edytorze symboli i Edytorze widoku aparatów

Blockly Kodowanie pomoc.

Biblioteka: sound. RGui. Podstawowe funkcje do działań na plikach.wav i próbkach dźwięku. Autor biblioteki: Matthias Heymann

4. Pliki Informacje ogólne o dostępie do plików w PHP Sprawdzanie istnienia pliku file_exists()

Program do wagi SmartScale

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

Systemy Operacyjne. Ćwiczenia

FAQ: /PL Data: 02/06/2014 WinCC Professional Alarmowanie programowe z PLC S7-1500

Java i JavaScript. Krishna Tateneni Polskie tłumaczenie: Suse Polska Aktualny opiekun tłumaczenia: Marcin Kocur

Podręczna pomoc Microsoft Power Point 2007

2. Architektura mikrokontrolerów PIC16F8x... 13

rysunkowej Rys. 1. Widok nowego arkusza rysunku z przeglądarką obiektów i wywołanym poleceniem edycja arkusza

Utworzenie pliku. Dowiesz się:

Język UML w modelowaniu systemów informatycznych

Przegląd technik wirtualizacji i separacji w nowoczesnych systemach rodziny UNIX

WIRTUALIZACJA. Kamil Frydel, Julia Romanowska, Maciej Sokołowski. 12 listopada 2007 WIRTUALIZACJA. Kamil Frydel, Julia Romanowska, Maciej Sokołowski

Pomoc dla systemu WordPress

Process Automation Toolkit (PAT)

REFERAT O PRACY DYPLOMOWEJ

Android - wprowadzenie. Łukasz Przywarty

Tworzenie oprogramowania

Przegląd technik wirtualizacji i separacji w nowoczesnych systemach rodziny UNIX

Veslava Osińska IINB UMK, Toruń. Multimedia w dokumentach

HermesEX. Dokumentacja serwisowa v

Lokalizacja jest to położenie geograficzne zajmowane przez aparat. Miejsce, w którym zainstalowane jest to urządzenie.

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

Tworzenie własnych map dla UI-View

Laboratorium - Używanie programu Wireshark do obserwacji mechanizmu uzgodnienia trójetapowego TCP

Koncepcja wirtualnej pracowni GIS w oparciu o oprogramowanie open source

INSTRUKCJA OBSŁUGI. instrukcja do kamer serii EVI

Transkrypt:

Optymalizacja programów Open Source Profilery wysokiego poziomu część 1 Krzysztof Lichota lichota@mimuw.edu.pl

strace

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 <opcje> 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

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

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 <opcje> ś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=<regexp> wyświetla kod asemblera dla funkcji pasujących do wyrażenia, wraz z czasami list=<regexp> 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=<regexp> wyświetla tylko symbole pasujące do wyrażenia i wszystkie symbole na ścieżce prowadzącej do tego symbolu ignore=<regexp> 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.