Optymalizacja programów Open Source. Krzysztof Lichota lichota@mimuw.edu.pl



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

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

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

Analizator wydajności AMD CodeAnalyst

Sposób funkcjonowania

AM 331/TOPKATIT Wsparcie techniczne użytkowników i aplikacji w Windows 7

Autor: inż. Wojciech Zatorski Opiekun pracy: dr inż. Krzysztof Małecki

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

Testing hardware Paweł Noga

Instrukcja użytkownika ARSoft-WZ1

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

Q E M U.

Narzędzia diagnostyczne protokołów TCP/IP

Inteligentny czujnik w strukturze sieci rozległej

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

Architektura komputerów

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

Marek Parfieniuk, Tomasz Łukaszuk, Tomasz Grześ. Symulator zawodnej sieci IP do badania aplikacji multimedialnych i peer-to-peer

Wykład 2: Budowanie sieci lokalnych. A. Kisiel, Budowanie sieci lokalnych

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

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

Projektowanie i implementacja wysokowydajnych aplikacji w języku

NASI SPONSORZY I PARTNERZY

dziennik Instrukcja obsługi

Działanie komputera i sieci komputerowej.

Podstawowe zagadnienia

Cyfrowy rejestrator parametrów lotu dla bezzałogowych statków powietrznych. Autor: Tomasz Gluziński

Monitorowanie wydajność w bazie Oracle11g

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

Mariusz Rudnicki PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.1

Biuletyn techniczny. CDN OPT!MA 8.5 Wskazówki dotyczące instalacji programu. Copyright 2006 COMARCH SA

Administracja i programowanie pod Microsoft SQL Server 2000

Programowanie sterowników przemysłowych / Jerzy Kasprzyk. wyd. 2 1 dodr. (PWN). Warszawa, Spis treści

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

TEST BETA PAMIĘCI PODRĘCZNEJ USB W APLIKACJI PRZYSPIESZ KOMPUTER - INSTRUKCJA

Architektura komputerów II - opis przedmiotu

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

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Budowa systemów komputerowych

Raport Hurtownie Danych

Rozwiązania VDI w środowiskach akademickich korzyści i doświadczenia z wdrożeń

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

Przegląd dostępnych hypervisorów. Jakub Wojtasz IT Solutions Architect

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wprowadzenie. Co to jest klaster? Podział ze względu na przeznaczenie. Architektury klastrów. Cechy dobrego klastra.

Dni: 5. Opis: Adresaci szkolenia

FastReporter 2 OPROGRAMOWANIE DO KOŃCOWEGO PRZETWARZANIA DANYCH

SYSTEMY OPERACYJNE SYLABUS A. Informacje ogólne

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

Systemy operacyjne. Systemy operacyjne. Systemy operacyjne. Zadania systemu operacyjnego. Abstrakcyjne składniki systemu. System komputerowy

Systemy wbudowane - wykład 9. Systemy czasu rzeczywistego Notes. Systemy czasu rzeczywistego Notes. Systemy czasu rzeczywistego Notes.

Podstawy Techniki Komputerowej. Temat: BIOS

Konwersja maszyny fizycznej na wirtualną.

wbudowane October 7, 2015 KSEM WETI PG Komputery przemysłowe i systemy wbudowane Oprogramowanie systemów wbudowanych - wydajność Wydajność

Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming

5. Model komunikujących się procesów, komunikaty

1. Opis. 2. Wymagania sprzętowe:

Materiały pomocnicze do laboratorium z Architektury Komputerów II.

Prezentacja systemu RTLinux

Zaawansowane programowanie w języku C++

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

Opis efektów kształcenia dla modułu zajęć

Ciągłe dostarczanie oprogramowania : kompletny przewodnik / Eberhard Wolff. Gliwice, cop Spis treści

Szkolenie operatorów Wirtualnego Serwera Egzaminacyjnego 14 Grudnia Prowadzący: Bartłomiej Boryń Robert Michalski

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

Szkolenie autoryzowane. MS Administracja i obsługa Windows 7. Strona szkolenia Terminy szkolenia Rejestracja na szkolenie Promocje

Warstwy systemu Windows 2000

Dokumentacja projektu QUAIKE Architektura oprogramowania

Rys. 1. Wynik działania programu ping: n = 5, adres cyfrowy. Rys. 1a. Wynik działania programu ping: l = 64 Bajty, adres mnemoniczny

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

Elektroniczny. Obieg Dokumentów SPRAWNA WYMIANA INFORMACJI W FIRMIE SKUTECZNA APLIKACJA DO ZARZĄDZANIA OBIEGIEM DOKUMENTÓW SPRAWNA WYMIANA

KARTA KURSU. Systemy operacyjne

4. Procesy pojęcia podstawowe

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Przykładowe sprawozdanie. Jan Pustelnik

Systemy operacyjne. Paweł Pełczyński

Systemy operacyjne III

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Systemy operacyjne. Wprowadzenie. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

LEKCJA TEMAT: Zasada działania komputera.

Włóż płytę instalacyjną z systemem Windows Vista do napędu DVD ROM lub podłącz pamięć flash USB do portu USB.

Katalog handlowy e-production

Emulacja maszyny. Program udaje zupełnie inną architekturę. Musi przetłumaczyć instrukcje emulowane na instrukcje platformy, na której działa

Zaawansowane metody pomiarów i diagnostyki w rozległych sieciach teleinformatycznych Pomiary w sieciach pakietowych. Tomasz Szewczyk PCSS

Elektronika i Telekomunikacja I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)

Program szkolenia: Microsoft SQL Server 2012/2014 Databases, przygotowującego do egzaminu

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

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

Materiały dodatkowe. Simulink Real-Time

Instalacja krok po kroku /instalacja programu, serwera bazy danych/

Opis wdrożenia Platformy Technologicznej epodreczniki.pl na zasobach Poznańskiego Centrum Superkomputerowo-Sieciowego

Ćwiczenie Zmiana sposobu uruchamiania usług

Bezpieczeństwo dla wszystkich środowisk wirtualnych

Elastyczna sieć dla rozwiązań Cloud Open vswitch

Systemy wbudowane. Uproszczone metody kosyntezy. Wykład 11: Metody kosyntezy systemów wbudowanych

Bezpieczeństwo systemów komputerowych. Java i JavaScript. Java i JavaScript. Java - historia

NS-2. Krzysztof Rusek. 26 kwietnia 2010

4. Procesy pojęcia podstawowe

CloudFerro. Chmury publiczne, chmury prywatne, serwery dedykowane zalety, wady, problemy, ograniczenia, wyzwania.

Transkrypt:

Optymalizacja programów Open Source Krzysztof Lichota lichota@mimuw.edu.pl

Ogólne zasady optymalizacji 10 zasad optymalizacji: 1. Mierzenie 2. Mierzenie 3. Mierzenie 4. Mierzenie 5. Mierzenie 6. Mierzenie 7. Mierzenie 8. Mierzenie 9. Mierzenie 10.Mierzenie Przedwczesna optymalizacja to samo zło ("Premature optimization is the root of all evil (or at least most of it) in programming." D.Knuth)

Przedwczesna optymalizacja Najczęściej prawdziwe zatory powstają zupełnie gdzie indziej niż się spodziewamy [1] Optymalizacja na zapas to strata czasu i utrata modularności oraz czytelności kodu ale... Kod musi być dobrze zaprojektowany, modularny, żeby można było go optymalizować Przepisanie jednego fragmentu programu to nie tragedia, tylko normalna praktyka [2] [1] http://www.taylor.se/blog/2006/11/22/why optimizing without profiling is inefficient/ [2] http://blogs.msdn.com/ricom/archive/2007/02/08/performance problems survery results.aspx

Pomiary Podstawą optymalizacji jest posiadanie odpowiednich pomiarów, które dobrze obrazują to, co chcemy optymalizować Pomiary muszą być uczciwe i powtarzalne Pomiary na oko są mylne (ale można też to wykorzystać do oszukiwania, zajmiemy się tym na ostatnim wykładzie)

Co można optymalizować Czas uruchomienia Szybkość działania Interakcyjność (czas odpowiedzi) Przepustowość Działanie w przypadku działania innych programów (np. intensywnych obliczeń w tle). Przypadek szczególny czas uruchomienia systemu

Wykonywanie pomiarów Każdy pomiar zaburza w jakiś sposób działanie, więc należy wybierać techniki pomiarowe, których wpływ na badane działanie jest niewielki W trakcie badania należy zminimalizować wpływ innych czynników (np. procesy zabierające dużo pamięci, zadania wykonywane w tle) Badania należy powtórzyć kilkukrotnie a ich wyniki uśrednić (minimalizuje wpływ innych czynników) Odchylenie standardowe wskazuje na stopień chaotyczności (i powtarzalności) pomiarów.

Wykonywanie pomiarów Pomiary należy w miarę możliwości wykonywać w docelowym środowisku. Pomiary powinny być powtarzalne, najlepiej wykonywanie pomiaru zautomatyzować i to od momentu uruchomienia systemu. Należy pamiętać, by kontekst wykonywania pomiaru był taki sam, tzn. przy tych samych uruchomionych programach, sterownikach, wersji jądra, itp. Kontekst najlepiej automatycznie zapisywać przy teście. Każdy czynnik może mieć wpływ na test.

Warm startup vs cold startup W szczególności nalezy rozróżniać testowanie warm startup od cold startup Cold startup pierwsze uruchomienie programu (w szczególności po starcie systemu, kiedy nie wszystkie usługi działają albo się nie rozgrzały) Warm startup kolejne uruchomienia programu, przeważnie dużo szybsze, z powodu umieszczenia różnych elementów w pamięciach podręcznych (fragmentów plików, wpisów DNS, optymalizatora zapytań SQL,...)

Poziomy optymalizacji Optymalizacja wysokiego poziomu zmiany architektury programu, algorytmów, struktur danych Optymalizacja średniego poziomu zmiany w strukturze kodu, rezygnacja z pewnych funkcji języka (np. obiektowości, wyjątków). Optymalizacja niskiego poziomu użycie określonych funkcji procesora/dysku/itp., pakowanie struktur danych, optymalizacja kodu pod kątem architektury procesora,... [Terminologia moja własna]

Poziomy optymalizacji Najczęściej największe optymalizacje uzyskuje się poprzez zmiany na wysokim poziomie (np. algorytm bubble sort vs quick sort). Optymalizacje niższego poziomu są tracone, jeśli ulepszymy coś na wyższym poziomie (patrz przedwczesna optymalizacja) Dlatego: Optymalizacje staramy się wykonywać na jak najwyższym poziomie.

Wady optymalizacji niskiego poziomu Duży koszt utrzymania (dostosowywanie do określonych architektur) Utrata czytelności kodu. Poza tym: Często kompilator robi lepszą robotę niż człowiek!

Kiedy wykonywać optymalizacje na niskim poziomie Optymalizacje na niskim poziomie są wykonywane tylko kiedy: Zrobiliśmy już wszystkie dostępne optymalizacje na wyższym poziomie lub Nie możemy wykonać zmian na wyższym poziomie z różnych względów (kompatybilność, stopień trudności, czasochłonność,...) oraz Pomiary wskazują, że dany fragment kodu jest odpowiedzialny za znaczący spadek wydajności

Optymalizacje wysokiego poziomu Wymagają dobrego zrozumienia tego, co program ma robić i jak się zachowuje Pomaga znajomość dużej liczby dostępnych rozwiązań, by dobrać rozwiązanie do zastosowania Można osiągnąć duży efekt małym kosztem

Źródła zatorów Głupota albo nieświadomość programistów (wykonywanie zbędnych czynności albo powielanie już zrobionych) CPU Niedostatki pamięci Interakcja z dyskiem (również pośrednia, np. mmap i swap) Sieć

Źródła zatorów Interakcja z urządzeniami wejścia/wyjścia Wyświetlanie (w tym debugowanie) Błędy lub określone założenia w implementacji systemu operacyjnego, sterowników, bibliotek, itp. Inne priorytety (np. ważniejsze by system po starcie pracował bez przestojów, a nie szybko startował). Ułatwianie sobie implementacji (np. czekanie na DHCP przy starcie systemu) Synchronizacja (np. między procesorami lub węzłami w klastrze)

Źródła zatorów Zatory mogą się różnić w zależności od środowiska, użytkownika, itd. Kluczowe są pomiary i to w różnych środowiskach. Testowanie musi obejmować całość systemu i w docelowej konfiguracji, środowisku, itd.

Zatory w CPU Duże zużycie CPU Również w jądrze! Narzut na przełączanie kontekstu (dużo wątków) Obsługa przerwań

Zatory sieciowe Częsty problem DNS Timeout TCP Czas powrotu odpowiedzi (roundtrip time, np. protokół X) Ograniczenia przepustowości Korkowanie TCP (TCP_CORK)

Najsłabsze ogniwo Program jest tylko tak szybki jak najsłabsze ogniwo w przetwarzaniu Eliminacja zatorów w najsłabszym ogniwie powoduje ujawnienie zatorów w innym (i tak w nieskończoność) Dlatego konieczne jest ustalenie wystarczająco dobrej wydajności. Jeśli najsłabszymi ogniwami są elementy niezależne od nas i ich wydajność jest gorsza niż nasza docelowa wydajność nie ma sensu optymalizować.

Wykrywanie najsłabszego ogniwa Identyfikacja najsłabszego ogniwa i badanie maksymalnej wydajności systemu może się odbywać przez zastąpienie go wirtualnym urządzeniem o maksymalnej wydajności. To samo dotyczy całych modułów programu (np. backend do przechowywania danych, moduł szyfrujący). Można w ten sposób określić maksymalną wydajność programu, której nie da się przeskoczyć przy wymianie tylko tego elementu.

Idealne urządzenia CPU użycie szybkiego komputera Pamięć maszyna z dużą ilością pamięci Dysk Użycie RAM dysku Użycie przeznaczenie dużej ilości pamięci na cache i warm start. Sieć Komunikacja przez loopback (uwaga na narzut związany z uruchamianiem serwera na tym samym komputerze) lub przez szybką sieć Cache DNS

Idealne urządzenia Wyświetlanie buforujące X servery, użycie innego drivera wyświetlania (FB, Ascii art). Output wysyłanie do /dev/null

Wirtualizacja systemu Wirtualizacja zdarzeń (wirtualizacja CPU, pamięci, itp.) Symulowanie sieci (np. Sam moduł algorytmu podłączony do symulatora sieci) Maszyny wirtualne

Uwagi końcowe Maksymalna automatyzacja jest wskazana uruchamianie po raz setny programu z zadanymi parametrami, przy jednoczesnym uruchomieniu programu nadzorującego, zebraniu wyników, uśrednieniu i wyprodukowaniu wykresów może doprowadzić do pasji (albo załamania) Właściwe narzędzia to klucz do sukcesu, ale trzeba znać dobrze ich mocne i słabe strony oraz sposób działania (co dokładnie mierzą i jak, jaki jest narzut, itp.).

Plan zajęć (1) 1.Ogólne zasady optymalizacji programów, źródła opóźnień w programach (1 zajęcia). 2.Narzędzia analizy kodu wysokiego poziomu (logowanie zdarzeń, profilery wysokiego poziomu) (2 3 zajęcia). 3.Narzędzia analizy kodu niskiego poziomu (profilery kodu maszynowego i analizatory użycia pamięci podręcznej procesora). Sposoby restrukturyzacji kodu i użycie wstawek w instrukcjach maszynowych (2 zajęcia).

Plan zajęć (2) 4.Analiza zużycia pamięci i narzędzia do radzenia sobie z problemami z pamięcią (3 zajęcia). 5.Analiza korzystania z dysku i sposoby optymalizacji korzystania z dysku (2 zajęcia). 6.Optymalizacja czasu uruchamiania programów (1 zajęcia).

Plan zajęć (3) 7.Symulowanie lepszej wydajności, czyli techniki oszukiwania użytkownika (1 zajęcia). 8.Prezentacja wyników analizy wybranych programów przez studentów (2 3 zajęcia).

Lektura http://www.gnome.org/~lcolitti/gnome startup/analysis/ analiza procesu uruchamiania środowiska GNOME http://developer.gnome.org/doc/guides/optimisation/ zalecenia jak optymalizować ze strony GNOME http://primates.ximian.com/~federico/news 2005 09.html#gtk ciekawy blog jednego z programistów GNOME, między innymi o jego zmaganiach z optymalizacją czasu wyświetlania okienka otwarcia pliku w GNOME http://blogs.msdn.com/ricom/default.aspx blog jednego z inżynierów Microsoftu zajmującego się optymalizacją