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

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

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

Pamięć wirtualna. Przygotował: Ryszard Kijaka. Wykład 4

Optymalizacja wydajności dysków pendrive. Cluster alignment.

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

Architektura komputerów

System plików warstwa logiczna

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Systemy plików i zarządzanie pamięcią pomocniczą. Struktura pliku. Koncepcja pliku. Atrybuty pliku

Wstęp do informatyki. Interfejsy, urządzenia we/wy i komunikacja. Linie magistrali

Pliki. Operacje na plikach w Pascalu

PROJEKTOWANIE SYSTEMÓW KOMPUTEROWYCH

System plików. Warstwowy model systemu plików

43 Pamięci półprzewodnikowe w technice mikroprocesorowej - rodzaje, charakterystyka, zastosowania

Podstawowe wiadomości o systemach plików.

Monitor maszyn wirtualnych

System plików i zarządzanie pamięcią pomocniczą. Koncepcja pliku. Atrybuty pliku. Struktura pliku. Typ pliku nazwa, rozszerzenie (extension)

Kolejki FIFO (łącza nazwane)

Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.

Architektura komputerów

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

Działanie systemu operacyjnego

System plików ReiserFs

Systemy wejścia-wyjścia. wyjścia

Dyski SSD a systemy plików

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

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

2 INSTALACJA OPROGRAMOWANIA. 3 3 GŁÓWNE OKNO PROGRAMU 3 4 MODUŁ OBSŁUGI ARCHIWUM 7

Działanie systemu operacyjnego

Struktura systemów komputerowych

Działanie systemu operacyjnego

Roger Access Control System. Aplikacja RCP Point. Wersja oprogramowania : 1.0.x Wersja dokumentu: Rev. C

Podstawy Informatyki DMA - Układ bezpośredniego dostępu do pamięci

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

Strojenie systemu Linux pod k¹tem serwera bazy danych Oracle 9i

Budowa systemów komputerowych

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

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

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików warstwa fizyczna

Wstęp 5 Rozdział 1. SUSE od ręki 13

Prezentacja systemu RTLinux

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

Expo Composer Garncarska Szczecin tel.: info@doittechnology.pl. Dokumentacja użytkownika

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Ćwiczenie: JavaScript Cookies (3x45 minut)

Parametry techniczne. Testy

1. Pamięć wirtualna. 2. Optymalizacja pliku pamięci wirtualnej

SPIS TREŚCI: KARTY GRAFICZNE... 15

Diagnostyka pamięci RAM

Systemy operacyjne. Paweł Pełczyński

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Architektura komputera

Zaawansowane funkcje systemów plików. Ewa Przybyłowicz

16MB - 2GB 2MB - 128MB

Architektura komputerów

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

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

MODUŁ INTEGRUJĄCY ELEKTRONICZNEGO NADAWCĘ Z WF-MAG SPIS TREŚCI

Informacje o aktualizacji Wersja 2.3

Snifery wbudowane w Microsoft Windows

Jak utworzyć RAMdysk w systemie Windows?

T: Sposoby zwiększania efektywności pracy systemu.

Działanie systemu operacyjnego

Programowanie Niskopoziomowe

Systemy operacyjne III

Architektura komputerów

Systemy operacyjne System sieciowy UNIX-a

Systemy Operacyjne - Operacje na plikach

Systemy operacyjne System plików

PAMIĘĆ OPERACYJNA...107

Dział Dopuszczający Dostateczny Dobry Bardzo dobry Celujący

Sposoby zwiększania efektywności systemu Windows

Włączanie/wyłączanie paska menu

Mosty przełączniki. zasady pracy pętle mostowe STP. Domeny kolizyjne, a rozgłoszeniowe

Potrzeba instalacji w napędach SSD akumulatorów ograniczała jednak możliwości miniaturyzacji takich napędów.

Technologie informacyjne - wykład 2 -

Budowa komputera KROK PO KROKU! Opis wszystkich części komputera w sposób zrozumiały dla nowatorów

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Tematy lekcji informatyki klasa 4a listopad 2011

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

Wykład 14. Zagadnienia związane z systemem IO

Organizacja pamięci w procesorach graficznych

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

ICD Wprowadzenie. Wprowadzenie. Czym jest In-Circuit Debugger? 2. O poradniku 3. Gdzie szukać dodatkowych informacji? 4

Systemy operacyjne i sieci komputerowe Szymon Wilk Superkomputery 1

Projekt ZSWS. Instrukcja uŝytkowania narzędzia SAP Business Explorer Analyzer. 1 Uruchamianie programu i raportu. Tytuł: Strona: 1 z 31

Systemy operacyjne II

Jądro systemu operacyjnego

System wejścia-wyjścia

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Procesor ma architekturę rejestrową L/S. Wskaż rozkazy spoza listy tego procesora. bgt Rx, Ry, offset nand Rx, Ry, A add Rx, #1, Rz store Rx, [Rz]

Warstwy systemu Windows 2000

Przykładowe zagadnienia na sprawdzian z wiedzy ogólnej. Linux to nazwa: A. Programu biurowego. B. Systemu operacyjnego. C. Przeglądarki internetowej.

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

SYSTEMY WEJŚCIA-WYJŚCIA

sprowadza się od razu kilka stron!

System pamięci. Pamięć wirtualna

Transkrypt:

Optymalizacja programów Open-Source Dostęp do dysku Krzysztof Lichota lichota@mimuw.edu.pl

Wprowadzenie

Dostęp do dysku a wydajność Dysk jest kilka rzędów wielkości wolniejszy od procesora czy pamięci (patrz prezentacja Federico) Samo przesłanie danych z dysku jest stosunkowo szybkie, najwolniejsze jest ustawienie głowicy (seek) oraz opóźnienie podejścia sektora pod głowicę Przepustowość standardowego dysku ATA przy dostępie sekwencyjnym wynosi około 60 MB/s, w przypadku dostępu random access spada do 1 MB/s albo mniej Dlatego należy unikać (niepotrzebnych) dostępów losowych, zwłasza czytania wielu małych plików.

Cechy dostępu do dysku Dyski dzielą się na talerze, które mają ścieżki podzielone na sektory Ścieżki są oddzielone od siebie (odmiennie niż płyt CD, które mają jedną spiralną ścieżkę), więc żeby odczytać coś z następnej, trzeba przesunąć głowicę Czas odczytu sektora = czas przesunięcia (seek time) + czas ustawienia nad sektorem + czas przesłania sektora (sektorów) Nie wszystkie sektory są odczytywane tak samo szybko zależy to od położenia ścieżki (patrz ZCAV)

Cechy dostępu do dysku (2) Czas przesunięcia nad ścieżkę jest mniej więcej proporcjonalny do odległości między ścieżkami Logiczne bloki są wewnętrznie remapowane na fizyczne bloki przez dysk, ale spodziewa się on, że system operacyjny będzie używał dysku w ten sposób, że dane używane razem są na bliskich ścieżkach System operacyjny wprowadza dodatkowe przemapowania związane z układem bloków plików na dysku, itp. ale zwykle pliki w jednym katalogu są umieszczane na dysku blisko siebie

Wnioski z cech dostępu do dysku Dane, które mają być używane razem należy umieszczać jak najbliżej na dysku Jak coś wczytujemy, to należy wczytywać strumieniowo, w szczególności czasem bardziej opłaca się wczytać więcej i wyrzucić część niż wczytywać po kawałku Małe dane lepiej upakować w jednym dużym pliku zamiast rozsiewać w kilku małych

Odczyty a zapisy Kluczowe w wydajności programów desktopowych są zazwyczaj odczyty Zapisy są buforowane w pamięci i zrzucane później, kiedy są ku temu możliwości Nie można buforować odczytów, bo program czeka na odczytane dane, można tylko przewidywać, czego program będzie potrzebował i wczytać to wcześniej (readahead) również dzięki podpowiedziom programu (hints)

Analiza korzystania z dysku

Narzędzia do analizy dostępów do dysku Nie ma zbyt wielu narzędzi pozwalających na analizę dostępów do dysku Narzędzia dzielą się na rejestrujące dostępy do plików (ścieżka, położenie w pliku) i rejestrujące dostępy do dysków albo urządzeń blokowych (numer bloku na urządzeniu) W przypadku urządzeń rejestrujących dostępy do urządzeń blokowych należy pamiętać, że w przypadku urządzeń LVM/RAID dostępy do prawdziwego dysku mogą być inne

strace Przydatne wywołania: strace e trace=open,read,write,lseek,_llseek śledzi odczyty, zapisy i przesunięcia w plikach strace e trace=file śledzi inne operacje na plikach (open, stat, itp.) Zalety: Dokładnie pokazuje odczyty i zapisy Wady: Nie uwzględnia dostępów przez mmap() Nie pokazuje jak odczyty i zapisy przekładają się na dostęp do dysku (mogą być w cache) ani jaka jest pozycja bloków

vm/block_dump Loguje operacje na przestrzeni adresowej (zapisy i odczyty stron) oraz zapisy i węzłów Pokazuje nazwę procesu, pid, numer bloku i nazwę urządzenia Logowanie odbywa się do bufora na komunikaty systemowe (przez printk) Włączenie/wyłączenie przez zapisanie 1/0 do pliku /proc/sys/vm/block_dump

Zalety vm/block_dump Pokazuje zarówno dostępy przez mmap() jak i zwykłe odczyty/zapisy (wszystkie idą przez operacje na przestrzeni adresowej) Pokazuje dostępy opóźnione (np. demona kjournald) Pokazuje stan całego systemu Pozwala zobaczyć, czy coś działa w tle i zakłóca pomiary

Wady vm/block_dump Opóźnione/przedwczesne odczyty/zapisy przez mmap() mogą być przypisywane do innych procesów niż żądające (np. kswapd, kjournald) Nie wszystkie odczyty/zapisy są logowane jeśli dane są już w pamięci podręcznej, to nie są ściągane (można wyczyścić cache za pomocą vm/drop_caches) Nie pokazuje, którego pliku dotyczy odczyt/zapis Logowanie ma spory narzut, więc nie nadaje się do ciągłego analizowania

Wady vm/block_dump (2) Granularność na poziomie stron Logowanie na dysk powoduje zakłócenia poprzez dostępy do dysku na logowanie, można wyłączyć demona klogd, ale wtedy bufor się szybko przepełni alternatywnie można zrzucać wynik dmesg na własną rękę, np. przez sieć Loguje mnóstwo informacji do bufora na informacje jądra, który ma ograniczoną wielkość i może się przepełnić

blktrace Modyfikacja jądra pozwalająca śledzić operacje na blokach w warstwie blokowej jądra Linuksa Dostępny standardowo od wersji jądra 2.6.17, wcześniej jako patche Wymaga włączenia przy kompilacji jądra, nie jest standardowo dostępny Może śledzić operacje odczytu/zapisu do dysku (urządzenia blokowego), ale również bardziej skomplikowane operacje w schedulerze urządzenia (np. sklejanie lub podział żądań)

bltrace (2) Zdarzenia są buforowane w jądrze i mogą zostać odczytane za pomocą specjalnego programu pomocniczego poprzez relayfs Pokazuje nazwę i pid procesu, typ, pozycję i rozmiar żądania oraz operację

Zalety blktrace Pozwala śledzić co się dzieje z żądaniem odczytu programu w warstwie blokowej, np. czy nie czeka na sklejenie z innym Bardzo mały narzut (około 2% w skrajnych przypadkach) Pozwala filtrować zdarzenia według typu i uruchamiać śledzenie tylko dla niektórych urządzeń Ślad ma stosunkowo mały rozmiar, więc można go przechowywać nawet na RAM dysku Posiada tryb do przesyłania śladu siecią

Wady blktrace Nie pokazuje powiązania między numerem bloku a plikiem na dysku Trzeba samemu skompilować jądro Brak strony domowej, dokumentacja jedynie w paczce z programem

Użycie blktrace Uruchomić system pod skompilowanym jądrem Zamontować system plików debugfs: mount t debugfs none /debug Uruchomić: blktrace d urządzenie r /debug o nazwa Wykonać operacje, które chcemy śledzić Przerwać blktrace za pomocą blktrace k lub Ctrl C, ślad jest w pliku nazwa blktrace.numer Przetworzyć ślad na formę tekstową za pomocą blkparse i nazwa blktrace.numer

Użycie blktrace (2) Przydatne opcje blktrace: w sekundy zakończenie po podanej liczbie sekund a typ śledzi tylko określony typ zdarzeń (np. READ, WRITE, ISSUE, SYNC, COMPLETE) Można śledzić na żywo : blktrace d /dev/sda o blkparse i

Inne narzędzia kprobes/jprobes narzędzie do instrumentacji i śledzenia wywołań w jądrze Linuksa w trakcie pracy, może być użyte do przechwytywania odczytów/zapisów

Własne narzędzia Ponieważ każde z istniejących narzędzi ma swoje wady, czasem trzeba napisać własne, które robi dokładnie to, czego od niego oczekujemy Przy optymalizacji układu plików na live CD napisałem własną modyfikację modułu SquashFS jądra Linuksa, która wpina się w funkcję odczytu strony (z pamięci adresowej) i zapisuje nazwę pliku, offset w pliku i numer bloku

Poprawianie korzystania z dysku

Zmiana architektury programu Najlepszym rozwiązaniem jest zmiana zachowania programu tak, by nie używał losowych dostępów, trzymał wszystkie pliki w jednym katalogu, używał możliwie dużych plików Szczegółowe dostosowanie wymaga zanalizowania wzorca zachowań programu i dostosowania struktur na dysku tak, by wczytywać i zapisywać dane strumieniowo Skrajny przykład system plików GoogleFS, który działa strumieniowo

Scalanie plików Jeśli program używa wielu małych plików, można je scalić w jeden plik i wczytywać ten jeden plik Jeśli pliki mogą być modyfikowane, tworzymy plik, który służy jako pamięć podręczna sprawdzamy, czy któryś plik nie był zmodyfikowany (za pomocą stat), jeśli nie, to wczytujemy duży plik (tak działa np. ksycoca w KDE)

readahead Jeśli wiemy, których danych będziemy potrzebować, należy z wyprzedzeniem wskazać systemowi operacyjnemu, żeby je wczytał do pamięci podręcznej System operacyjny robi to też na własną rękę, jeżeli program zaczyna robić odczyty sekwencyjne przez jakiś czas, ale działa to z opóźnieniem i nie zawsze odpowiada dokładnie zachowaniu programu, więc może nawet przeszkadzać

posix_madvise/posix_fadvise Funkcje systemowe podpowiadające systemowi operacyjnemu w jaki sposób będziemy korzystać z pliku posix_fadvise dostęp przez deskryptor, przez funkcje read()/write() posix_madvise() dostęp przez mmap (zakres przestrzeni adresowej procesu) readahead() specyficzna dla Linuksa, odpowiada posix_fadvise() z parametrem WILLNEED

posix_madvise/posix_fadvise (2) Typy podpowiedzi (to nie są dokładne nazwy flag): SEQUENTIAL dostęp do pliku będzie sekwencyjny, więc należy wczytać więcej kolejnych bloków z wyprzedzeniem RANDOM dostęp do pliku będzie losowy, więc nie należy wczytywać z wyprzedzeniem WILLNEED te bloki będą potrzebne, więc należy je wczytać DONTNEED te bloki nie będą potrzebne w najbliższej przyszłości NOREUSE (tylko fadvise) te dane będą użyte tylko raz, potem można je wyrzucić

Bibliografia http://www.coker.com.au/bonnie++/zcav/results.html http://www.cs.ucsb.edu/research/tech_reports/reports/20 http://lxr.linux.no/source/documentation/filesystems/proc. http://www.gelato.org/pdf/apr2006/gelato_ice06apr_blktr http://brick.kernel.dk/snaps/ http://www.redhat.com/magazine/005mar05/features/kpro http://lwn.net/articles/132196/ http://lichota.net/~krzysiek/projects/kubuntu/dapper livecd