Optymalizacja programów Open-Source Krzysztof Lichota

Slides:



Advertisements
Podobne prezentacje
Nigdy nie przegapisz zakłóceń
Advertisements

Procedura instalacji systemu Linux
TRADYCYJNE METODY PLANOWANIA I ORGANIZACJI PROCESÓW PRODUKCYJNYCH
SIECI KOMPUTEROWE WYKŁAD 10. RÓWNOWAŻENIE OBCIĄŻEŃ
1 Linux jako system wielozadaniowy i wielodostępny.
ELEMENTY SKŁADOWE JEDNOSTKI CENTRALNEJ
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski.
Wykład nr 1: Wprowadzenie. Pojęcia podstawowe
Systemy operacyjne Wykład nr 4: Procesy Piotr Bilski.
Wykład nr 2: Struktura systemu komputerowego a system operacyjny
Systemy operacyjne.
Schemat blokowy komputera
Systemy operacyjne Bibliografia:
Niepewności przypadkowe
Proxy WWW cache Prowadzący: mgr Marek Kopel
Proxy (WWW cache) Sieci Komputerowe
Temat nr 10: System przerwań
Autorzy: Łukasz Sztandarski Bartłomiej Granat
ZARZĄDZANIE PROCESAMI
Zastosowanie technologii CUDA w sztucznej inteligencji
ZESTAW KOMPUTEROWY.
KONFIGURACJA KOMPUTERA
Co to jest BIOS? Opracowali: Mateusz Dąbrowski Mateusz Nowotnik
Komputery macierzowe.
TBD - P ERFORMANCE W BAZACH M ICROSOFT SQL S ERVER, CZYLI O CO W TYM W OGÓLE CHODZI Michał Grodzicki MCTS SQL SERVER lipca 2012.
Podstawy programowania II
… iSCSI … Windows Server 2012 Łukasz Dylewski.
Systemy operacyjne.
Budowa systemu komputerowego
Realizacja prostej sieci komputerowej
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE
Wymiana integracja ? oprogramowania dr Danuta Kajrunajtys.
Topologie sieci lokalnych.
Systemy plików FAT, FAT32, NTFS
Budowa i działanie komputera - jednostka
Narzędzia administracyjne
Maszyna wirtualna ang. virtual machine, VM.
M i k r o j ą d r o D e f i n i c j a. M i k r o j ą d r o to rodzaj jądra systemu operacyjnego, które zawiera tylko najbardziej niezbędne elementy, takie.
POŚREDNIK Jak reprezentowana jest informacja w komputerze? liczby – komputer został wymyślony jako zaawansowane urządzenie służące do wykonywania.
Defragmentacja dysku Jednym z kluczowych czynników wydajności operacji wejścia/wyjścia jest poziom fragmentacji plików. Fragmentacja oznacza zapisywanie.
Architektura PC.
„Wzmacniak , bridge, brama sieciowa: różnice i zastosowanie”
Spis treści Architektura systemu windows Pamięć wirtualna Plik wymiany
Etapy uruchamiania systemu Pliki konfiguracyjne
Systemy rozproszone  Rozdzielenie obliczeń między wiele fizycznych procesorów.  Systemy luźno powiązane – każdy procesor ma lokalną pamięć; procesory.
Podstawy programowania
SPRZET KOMPUTEROWY.
Bazy i Systemy Bankowe Sp. z o.o. ul. Kasprzaka 3, 85 – 321 Bydgoszcz
Derekursywacja i optymalizacja kodu
Procesy, wątki Program a proces Proces: Przestrzeń adresowa, kod, dane, stos (część pamięci do przechowania zmiennych lokalnych i niektórych adresów) Otwarte.
Dokumentacja obsługi programów Kamil Smużyński Piotr Kościński.
Wdrożenie Foglight w Urzędzie Dozoru Technicznego
Podstawy programowania
Rodzaje systemów operacyjnych
Struktura systemu operacyjnego
Problematyka izolacji wydajności w systemach wirtualizowanych
Środowisko wspomagania automatycznej instalacji GNU/Linux „Multistart” prezentacja pracy dyplomowej Marta i Paweł Szcześniak.
© Copyright 2012 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice. Bankowość w telefonie.
mysz drukarka Jednostka centralna monitor klawiatura.
Programowanie strukturalne i obiektowe Klasa I. Podstawowe pojęcia dotyczące programowania 1. Problem 2. Algorytm 3. Komputer 4. Program komputerowy 5.
Optymalizacja programów Open- Source Inne zagadnienia Krzysztof Lichota
Procedura instalacji Linuksa. Z serwera pobieramy obraz płyty. Nagrywamy obraz na płytę. Sprawdzamy ustawienia w BIOS – podczas uruchamiania systemu napęd.
Schemat blokowy komputera
Optymalizacja programów Open-Source
Optymalizacja programów Open-Source
Grzegorz Chodak Wykład
System operacyjny cz.2 i ostatnia
JavaBeans by Paweł Wąsala
Zapis prezentacji:

Optymalizacja programów Open-Source Krzysztof Lichota

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] inefficient/ inefficient/ [2] survery-results.aspxhttp://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 ● - analiza procesu uruchamiania środowiska GNOME ● - zalecenia jak optymalizować ze strony GNOME ● 09.html#gtkfilechooser-profile-3 - ciekawy blog jednego z programistów GNOME, między innymi o jego zmaganiach z optymalizacją czasu wyświetlania okienka otwarcia pliku w GNOME 09.html#gtkfilechooser-profile-3 ● - blog jednego z inżynierów Microsoftu zajmującego się optymalizacją