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

Slides:



Advertisements
Podobne prezentacje
Proces doboru próby. Badana populacja – (zbiorowość generalna, populacja generalna) ogół rzeczywistych jednostek, o których chcemy uzyskać informacje.
Advertisements

Tworzenie odwołania zewnętrznego (łącza) do zakresu komórek w innym skoroszycie Możliwości efektywnego stosowania odwołań zewnętrznych Odwołania zewnętrzne.
PRACA Z APLIKACJAMI SYSTEM PRZEMIESZCZANIA oraz NADZORU WYROBÓW AKCYZOWYCH EMCS PL 1.
Wyszukiwanie informacji w Internecie. Czym jest wyszukiwarka? INTERNET ZASOBY ZAINDEKSOWANE PRZEZ WYSZUKIWARKI Wyszukiwarka to mechanizm, który za pomocą.
ELEMENTY ZESTAWU KOMPUTEROWEGO
Excel 2007 dla średniozaawansowanych zajęcia z dnia
Przemiany energii w ruchu harmonicznym. Rezonans mechaniczny Wyk. Agata Niezgoda Projekt współfinansowany przez Unię Europejską w ramach Europejskiego.
Poczta elektroniczna – e- mail Gmail zakładanie konta. Wysyłanie wiadomości.
Literary Reference Center Przewodnik
Co potrafię w przyjaźni z komputerem?.  Z jakich elementów się składa? Z jakich elementów się składa?  Do czego służy? Do czego służy?  Jakie programy.
Zmienne losowe Zmienne losowe oznacza się dużymi literami alfabetu łacińskiego, na przykład X, Y, Z. Natomiast wartości jakie one przyjmują odpowiednio.
… przemy ś lenia pedagogiczne. „Najważniejszym okresem w życiu nie są lata studiowania na wyższej uczelni, ale te najwcześniejsze, czyli okres od narodzenia.
Zapraszamy na naszą stronę. Zależy nam na kontakcie z Wami. Czytajcie, komentujcie i dyskutujcie na forum. Nic o Was bez Was Zapraszamy na naszą stronę.
Seminarium magisterskie/licencjackie dr Renata Karkowska Zakład Ubezpieczeń i Rynków Kapitałowych Katedra Systemów Finansowych Gospodarki (wpisać proponowany.
„Książki nie mają właściwości róż, dlatego nie szukajmy wciąż najświeższych”
Materiały pochodzą z Platformy Edukacyjnej Portalu Wszelkie treści i zasoby edukacyjne publikowane na łamach Portalu
Model warstwowy OSI Model OSI (Open Systems Interconnection) opisuje sposób przepływu informacji między aplikacjami programowymi w jednej stacji sieciowej.
„Jak zwiększyć bezpieczeństwo uczestników ruchu drogowego?” Co nam dała realizacja projektu?
Sieci komputerowe. Podział sieci. Podstawowe pojęcia związane z sieciami. Internet - określenia podstawowych terminów. Komunikacja w sieci.
Komunikatory Zespół Szkół Zawodowych Nr 3 im. Adama Kocura w Katowicach - Janowie.
Czym jest gramofon DJ-ski?. Gramofon DJ-ski posiada suwak Pitch służący do płynnego przyspieszania bądź zwalniania obrotów talerza, na którym umieszcza.
Instalacja nienadzorowana windows xp Jakub klafta.
Python. Języki Programistyczne Microcode Machine code Assembly Language (symboliczna reprezentacja machine code) Low-level Programming Language (FORTRAN,
Definiowanie i planowanie zadań typu P 1.  Planowanie zadań typu P  Zadania typu P to zadania unikalne służące zwykle dokonaniu jednorazowej, konkretnej.
Wykonał: Mgr Inż. Krzysztof Harwacki. Value Mapping for Lean management Sytuacja stanowi mały, prosty przykład zastosowania mapowania strumienia wartości.
Jak tworzymy katalog alfabetyczny? Oprac.Regina Lewańska.
, + - = 0,5 CZYTAJ DOKŁADNIE ZADANIA I POLECENIA. IM TRUDNIEJSZE ZADANIE, TYM BARDZIEJ WARTO JE PRZECZYTAĆ KILKA RAZY.
API jądra do obsługi przestrzeni użytkownika Co jest tematem tej prezentacji: Transport danych pomiędzy przestrzeniami użytkownika i jądra (asm/uaccess.h)
System operacyjny Renata P. System operacyjny - jest to zbiór nadrzędnych i niezbędnych programów umożliwiających pracę na komputerze. Jest on pośrednikiem.
Mikroprocesory.
Test analizy wariancji dla wielu średnich – klasyfikacja pojedyncza
Ucz i ucz się z TIK!.
T.15 Wybór narzędzi dla reengineeringu (szczegóły).
Komunikacja ze szkołą i nauczycielami - dziennik elektroniczny
Schematy blokowe.
SYSTEM KWALIFIKACJI, AWANSÓW I SPADKÓW
Podstawowe polecenia systemu
Prezentacja o Ubuntu Jakub Kociemba 2TI.
Full Text Finder Przegląd Publication Finder
Liczby pierwsze.
ALGORYTMY I STRUKTURY DANYCH
Akademia C# lab. 9 Zdarzenia i delegaty.
Optymalizacja programów Open-Source
Przewodnik Udoskonalanie listy wyników w wyszukiwarce naukowej
Lekcja 1 – Hello World! Visual Studio, coś łatwego na początek 
KOREKTOR RÓWNOLEGŁY DLA UKŁADÓW Z NIEMINIMALNOFAZOWYMI OBIEKTAMI Ryszard Gessing Instytut Automatyki, Politechnika Śląska Plan referatu Wprowadzenie.
Dobieranie komputera Podzespoły.
PROGRAMY DO KONTROLI RODZICIELSKIEJ
System operacyjny cz.2.
Git - system kontroli wersji
System operacyjny 2.
Bezpieczeństwo dostępu do danych w systemie Windows
Języki programowania.
Laboratorium 1 – obsługa wejść i wyjść
Tornister Warto zauważyć, że problem przeciążonych tornistrów szkolnych wynika  z kilku przyczyn: - Dzieci często noszą w plecakach więcej podręczników.
Zaawansowana administracja systemem operacyjnym GNU/Linux
Koszyk danych.
Podstawy informatyki Zygfryd Głowacz.
SKJ Serwer WWW Michail Mokkas.
Implementacja rekurencji w języku Haskell
Znajdowanie liczb pierwszych w zbiorze
Tytuł prezentacji szkoleniowej
REGRESJA WIELORAKA.
Odsetki naliczane za czas postępowania 30 marca 2017
POZNAJEMY PULPIT Opracowanie: mgr Barbara Benisz SP nr 20 w Rybniku
Program na dziś Wprowadzenie Logika prezentacji i artykułu
Negocjacje - Cień przyszłości
Autor: Magdalena Linowiecka
Andrzej Majkowski informatyka + 1.
INSTRUKCJA LOGOWANIA do E-DZIENNIKA SP BOJSZOWY
Zapis prezentacji:

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

sysprof

● Działa na zasadzie próbkowania (sprawdza backtrace okresowo) ● Narzut – niewielki (ale większy niż np. Google profiler)

Zalety sysprofa ● Bardzo łatwy w użyciu – wystarczy wstawić moduł do jądra i uruchomić program profilujący ● Pozwala na profiling całego systemu naraz – Pokazuje co się dzieje w systemie, co w innych sposobach profilowania łatwo można przeoczyć (np. demon, który się w trakcie testu uruchomił) – Pokazuje czas spędzony w procesach zależnych (np. Xorg) ● Pokazuje czas spędzony w jądrze ● Nie wymaga symboli do debugowania, żeby uzyskać sensowny profil

Zalety sysprofa (2) ● Pokazuje, co się dzieje w trakcie uruchomienia programu (linkowanie, inicjalizacja bibliotek, konstruktory, itp.) a nie tylko to, co się dzieje po starcie ● Można łatwo zachować ślad i go potem wczytać ● Ślad jest w formacie XML, więc można go potem łatwo obrabiać standardowymi narzędziami do XML ● Zawiera od razu standardowe narzędzie graficzne, które w obrazowy sposób prezentuje informacje i pozwala szybko znaleźć główne zatory

Wady sysprofa ● Wymaga uprawnień administratora, by wstawić moduł do jądra (ale na szczęście tylko po to) ● Nie pokazuje, kiedy program śpi ● Brak programu do uruchomienia profilera bez GUI (np. przy starcie systemu) ● Żeby zmienić częstotliwość próbkowania (domyślnie 200/s) trzeba zmienić źródła modułu ● Profiling jednego wybranego programu może wymagać przeklikania się przez długi stos wywołań

sysprof – na co zwrócić uwagę ● Profilowanie serwera X może wymagać rekompilacji (trzeba wymusić stosowanie modułów.so – szczegóły w README sysprofa) ● Maksymalna głębokość stosu wywołań to 512, można zmienić w źródłach modułu (SYSPROF_MAX_ADDRESSES) ● Maksymalna liczba przechowywanych naraz próbek to 256, można zmienić w źródłach modułu, gdy profiler nie nadąża z odczytywaniem (N_TRACES)

Logowanie

Zalety logowania ● Pozwala uzyskać bardzo szczegółowe informacje, co, gdzie, jak i dlaczego się dzieje ● Pozwala śledzić „historię” jakiegoś żądania, które przemieszcza się między różnymi modułami

Wady logowania ● Może mieć spory narzut (tym większy, im bardziej szczegółowo logujemy) ● Wymaga ręcznej ingerencji w kod programu ● Logowanie na tym samym komputerze może wprowadzać zakłócenia

Co logować ● Czas (z jak największą dokładnością) ● Wszystkie informacje pozwalające zlokalizować miejsce w programie, gdzie wystąpiło zdarzenie (nazwa pliku, linia, nazwa funkcji, unikalny identyfikator, np. napis) ● Najważniejsze parametry mające wpływ na wydajność (długość listy, rozmiar bufora, itp.) ● Numer wątku/procesora jeśli program jest wielowątkowy ● Inne parametry pozwalające określić kontekst (np. plik, do którego piszemy)

Co logować (2) ● Informacje pozwalające unikalnie zidentyfikować śledzoną strukturę (jeśli tworzymy historię) ● Linie logu powinny mieć ujednolicony format, żeby można je było przetwarzać

Śledzenie historii ● Ma głównie znaczenie przy optymalizowaniu latency i bandwidth w przetwarzaniu potokowym, gdzie przetwarzanie czegoś rozkłada się na wiele etapów i opóźnienia mogą wynikać z przestojów na jakimś etapie przetwarzania ● Przykład na bandwidth: serwer HTTP przepuszczający żądanie przez różne moduły, zablokowanie ostatniego (np. modułu logującego z powodu dostępu do dysku) powoduje przestój na wcześniejszych etapach i obniżenie bandwidth, chociaż system wydaje się nie obciążony

Śledzenie historii (2) ● Przykład na latency: żądanie odczytu z dysku wysłane z procesu, przechodzące przez podsystem wejścia/wyjścia (np. KIO), przesyłane do kolejnego procesu (KIO-slave), do serwera FTP i z powrotem do programu. ● Przykład na latency (2): program wyświetlający się na zdalnym serwerze X na wolnym łączu, żądanie przechodzi przez różne moduły w lokalnej bibliotece X, przez łącze, potem przez różne moduły w zdalnym serwerze X i w końcu dociera do karty graficznej.

Jak unikać narzutu logowania Stosować systemy logujące, które: ● Nie blokują w momencie logowania (np. przekazują pamięcią dzieloną do innego procesu zamiast zapisywać na dysk) ● Jak się nie da, to przynajmniej nie zapisywać synchronicznie (np. na stderr), a w żadnym wypadku nie wyświetlać na konsoli w trybie graficznym! ● Logować przez sieć (unikać narzutu programu logującego zrzucającego dane na dysk) ● Logować na ramdysk

Na co należy zwrócić uwagę ● Logowanie z różnymi poziomami niekoniecznie powoduje obniżenie narzutu logowania – jeśli wyłączamy logowanie należy wyłączyć także np. generowanie argumentów, które są logowane, np. log(PERF)<<funkcja_wypisująca_wielką_strukturę() ● Wyłączenie logowania na poziomie LOG_DEBUG powoduje tylko nie wypisywanie wyjścia funkcji do logu, ale i tak zostanie ona wykonana!

Na co należy zwrócić uwagę (2) ● Należy używać makr, które rozwijają się do pustych instrukcji i inicjalizować argumenty wewnątrz nich, np.: DEBUG(log(PERF)<<funkcja_wypisująca_wielką_strukturę()) ● Logowanie czasu za pomocą standardowych funkcji powoduje wywołanie funkcji systemowej i może mieć znaczący wpływ na wydajność programu! Jeśli to stanowi problem można logować czas na podstawie hardware counters.

Systemy logowania

Zastane systemy logowania ● Przeważnie każdy projekt ma już jakiś system logowania, który można wykorzystać (np. kdDebug() w KDE) ● Wystarczy dołożyć swoje makra, żeby np. automatycznie był dodawany czas, nazwa pliku czy numer linii ● Należy sprawdzić w jaki sposób zastany system logowania działa, żeby nie wprowadzać zbędnych opóźnień

Przydatne rzeczy do logowania ● __LINE__ - makro preprocesora rozwijające się do numeru bieżącej linii w programie ● __FILE__ - makro preprocesora rozwijające się do nazwy pliku źródłowego w programie ● __func__ (standard C99) i __FUNCTION__ (gcc) – literał zawierający nazwę funkcji (bez sygnatury) ● __PRETTY_FUNCTION__ (g++) - zawiera pełną nazwę funkcji z namespace i argumentami ● gettimeofday() - zwraca czas z dokładnością do mikrosekund (o ile sprzęt pozwala)

cout/cerr i logowanie do plików ● Wypisywanie na cerr jest kosztowne, bo każde wypisanie jest synchronizowane ● Jeśli potrzebny nam prosty system logowania, można logować do pliku i zrobić duży bufor wejścia/wyjścia, żeby zmniejszyć liczbę wywołań funkcji systemowych

log4cxx ● Zaawansowana i elastyczna biblioteka do logowania ● Pozwala logować do plików, przez sieć, na konsolę, do logu systemowego, itp. ● Pozwala logować asynchronicznie ● Do zmiany sposobu logowania wystarczy zmienić plik konfiguracyjny lub zmienną środowiskową, nie trzeba zmieniać kodu

Bibliografia ● ● ● ● ● time-2 time-2 ● FOSDEM/html/index.html FOSDEM/html/index.html