Testowanie Jądra Linuxa

Podobne dokumenty
Automatyczne testowanie jądra Linuksa

Automatyczne testowanie jądra Linuksa

GNU GProf i GCov. przygotował: Krzysztof Jurczuk Politechnika Białostocka Wydział Informatyki Katedra Oprogramowania ul. Wiejska 45A Białystok

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

Struktury systemów operacyjnych

Tworzenie oprogramowania

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

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

REFERAT PRACY DYPLOMOWEJ

Testowanie jądra Linuksa. Michał Pilipczuk Michał Świtakowski Piotr Wojnarowski

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

IO - Plan wdrożenia. M.Jałmużna T.Jurkiewicz P.Kasprzyk M.Robak. 5 czerwca 2006

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

Wstęp do Informatyki. Klasyfikacja oprogramowania

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

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

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

Plan Testów Systemu SOS

Sposoby wykrywania i usuwania błędów. Tomasz Borzyszkowski

Testowanie oprogramowania. Piotr Ciskowski

Q E M U.

Tomasz Greszata - Koszalin

Wstęp do testowania : Szymon Ramczykowski

IO - Plan testów. M.Jałmużna T.Jurkiewicz P.Kasprzyk M.Robak. 5 czerwca 2006

Maciej Oleksy Zenon Matuszyk

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

<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0>

Monitorowanie wydajność w bazie Oracle11g

Automatyczne generowanie testów z modeli. Bogdan Bereza Automatyczne generowanie testów z modeli

Przypadki bez przypadków. Jak dobierać scenariusze testowe.

Przypadki testowe. Spis treści. Plan testów. From Sęp. Wstęp. 2 Plan testów

Instalacja, aktualizacja i migracja do Windows 7

Testowanie według modelu (MBT) Stowarzyszenie Inżynierii Wymagań wymagania.org.pl

Parametry wydajnościowe systemów internetowych. Tomasz Rak, KIA

Systemy operacyjne oparte na mikrojądrze na przykładzie Minix3. Maciej Łaszcz, Wojciech Łowiec, Patryk Spanily 2 XII 2008

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

Dlaczego testowanie jest ważne?

Testowanie oprogramowania. Testowanie oprogramowania 1/34

Komputery przemysłowe i systemy wbudowane

System komputerowy. System komputerowy

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

Ćwiczenie Nr 7 Instalacja oraz konfiguracja wskazanego systemu operacyjnego

Usługa: Testowanie wydajności oprogramowania

Tworzenie aplikacji Web Alicja Zwiewka. Page 1

KARTA KURSU. Systemy operacyjne

Zespół: Agata Chrobak Kornel Jakubczyk Tomek Klukowski Przemek Kosiak. Projekt SZOP Plan testów

Rozwiązanie Compuware dynatrace

Spis treści. O autorze 9. O recenzentach 10. Przedmowa 13. Rozdział 1. Oto Linux Mint 17_

MS Visual Studio 2005 Team Suite - Performance Tool

Struktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski

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

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

Jako, że jesteśmy Linuksowcami będziemy używać OCR dla Linuksa. Właśnie zainstalowałeś silnik OCR ze słownikiem (by nie robił błędów)

Systemy operacyjne. wykład dr Marcin Czarnota laboratorium mgr Radosław Maj

Projektowanie oprogramowania. Wykład Weryfikacja i Zatwierdzanie Inżynieria Oprogramowania Kazimierz Michalik

Wprowadzenie do programowania współbieżnego

Tworzenie bezpiecznego środowiska kont shellowych

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

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

dr inż. Konrad Sobolewski Politechnika Warszawska Informatyka 1

FastReporter 2 OPROGRAMOWANIE DO KOŃCOWEGO PRZETWARZANIA DANYCH

Materiały dodatkowe. Simulink Real-Time

Dystrybucje Linuksa c.d.

Programowanie Systemów Wbudowanych

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

Systemy operacyjne i sieci komputerowe Szymon Wilk System operacyjny 1

Win Admin Replikator Instrukcja Obsługi

System Broker. Wersja 5.1

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Paweł Skrobanek. C-3, pok pawel.skrobanek.staff.iiar.pwr.wroc.pl

Optymalizacja programów Open Source. Krzysztof Lichota

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

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Uniwersytet Mikołaja Kopernika. Wydział Matematyki i Informatyki Wydział Fizyki, Astronomii i Informatyki Stosowanej

Struktury systemów operacyjnych Usługi, funkcje, programy. mgr inż. Krzysztof Szałajko

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

Wykład 8. Testowanie w JEE 5.0 (1) Autor: Zofia Kruczkiewicz. Zofia Kruczkiewicz

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

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

Zegar - układ wysyłający regularne impulsy o stałej szerokości (J) i częstotliwości (f)

Overlord - Plan testów

Sprawa numer: BAK.WZP Warszawa, dnia 16 sierpnia 2016 r.

K. Konopko; Toolchain. Jądro Linuksa. dr inż. Krzysztof Konopko

Narzędzie konfiguracji rozruchu

Zagadnienia egzaminacyjne INFORMATYKA. Stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ

Uniwersytet Mikołaja Kopernika w Toruniu. Profilowanie ruchu sieciowego w systemie GNU/Linux

Część II: Instalacja systemu Mediqus

Przykładowe sprawozdanie. Jan Pustelnik

Bezpieczeństwo systemów komputerowych

Galileo - encyklopedia internetowa Plan testów

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie

Porównanie metod i technik testowania oprogramowania. Damian Ryś Maja Wojnarowska

Podstawy programowania. Wprowadzenie

Plan testów. Robert Dyczkowski, Piotr Findeisen, Filip Grzdkowski. 4 czerwca 2006

Podstawy Techniki Komputerowej. Temat: BIOS

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

Modelowanie Data Mining na wielką skalę z SAS Factory Miner. Paweł Plewka, SAS

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

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

Transkrypt:

Testowanie Jądra Linuxa "Given enough eyeballs, all bugs are shallow" Eric Raymond Tylko skąd wziąć te przyglądające się oczy? Michał Grabowski Piotr Szczepański Paweł Zuzelski

W temacie: Wprowadzenie do testowania Podziały Metodologie Testy Poprawnościowe Pokrywanie kodu Testy Wydajnościowe

Czemu trzeba testować jądro? Gwarancja, że kolejne wersje jądra będą dobrze działać Wcześniejsze wykrycie błędu zaoszczędzi nam wiele czasu Wielkość jądra i fakt rozwijania go przez wielu użytkowników, może przyczyniać się do błędów Ewentualne błędy jądra mogą wywołać daleko idące konsekwencje Sumienie użytkownika Open Source

Skąd błędy? Przejście z wersji jądra 2.6.27 do 2.6.28 potrzebowało: 70 dni prac 8995 commitów edycji 11076 plików 975 468 lini dodano 489 931 usunięto

Podstawowy podział testów: -poprawnościowe (czy system zachowuje się poprawnie dla różnych danych) -wydajnościowe (jaki jest czas działania systemu dla różnych danych) -długotrwałego działania (jak system zachowuje się w przypadku dłuższego działania) -obciążeniowe i przeciążeniowe (dla jakich obiążeń system działa poprawnie, jak zachowuje się dla większych)

Testy poprawnościowe Tworzenie scenariuszy testowych Analiza statyczna kodu Przeglądanie i analizowanie kodu Weryfikacja formalna Testy dynamiczne

Testy wydajnościowe Przeprowadzanie duzej liczby testow, usrednianie wynikow Testy powinny byc przeprowadzane w niezmiennym srodowisku Wyniki musza byc uzyskiwane w sposob automatyczny, powtarzalny Ograniczenie czynników zewnętrznych Testy długotrwałe

Podział testów Szklanoskrzynkowe Testowanie oprorgamowania z uwzględnieniem kodu Czarnoskrzynkowe Traktowanie oprorgamowania jako zamkniętej skrzynki reagującej na dane wejściowe

Testy regresyjne Zazwyczaj wykonywanie testów regresyjnych związane jest z ponownym uruchomieniem zestawu testów, które wcześniej kończyły się poprawnie. Ma ono na celu ujawnienie potencjalnych problemów powstałych na skutek dokonanych zmian.

Projektowanie testów Pokrycie wszystkich gałęzi kodu Szczególne uwzględnienie przypadków brzegowych Sprawdzanie współbieżności Zachowanie przy błędach systemowych

Projektowanie testów Obciążanie zasobów systemowych (procesor, pamięć, sieć) Pokrycie kodu, weryfikuje ile procent naszego programu przebrnęło przez testy Oczywiście gdy 100% kodu zostanie wykonane, nie mamy żadnej gwarancji poprawności! Finalny, długotrwały test obciażeniowy

Automatyzacja testów Główne cele: Równoległość prac Jak najszybszy przechwyt błędów Jak najwygodniejsze udostępnianie wyników Zastąpienie czynnika ludzkiego maszynowym Platforma autotest : # svn checkout svn://test.kernel.org/autotest/trunk autotest Dzielenie się wynikami Test.kernel.org

Automatyczne testy uruchamianie testów znajdowanie błędu klasyfikacja błędu przekazanie błędu developerowi śledzenie błędu próba naprawienia naprawa nowa notka do teamu testujacego

Automatyczne testy- zalety konsekwentność - gwarancja, że kolejne testy zostaną przeprowadzone tą samą drogą upowszechnianie wiedzy - wiedza jak przeprowadzać dane testy jest nie trzymana i jednej osoby ale w systemie udostępnianie - proste sposoby udostępniania testów i ich wyników odtwarzanie - tworzenie scenariuszy testowych, gotowych do odtworzenia i pokazania błędu

Linux Test Project

Linux Test Project Zestaw testów regresyjnych jądra Linuksa Projekt zapoczątkowany przez SGI, obecnie rozwijany przez IBM Nowe wydanie publikowane raz w miesiącu Autorzy publikują wyniki testów dla wybranych wresji kernela/glibc

Struktura LTP Wiele niezależnych małych programów do testowania poszczególnych elementów systemu, zgodnych z określonym szablonem. Aktualnie zawiera ponad 3000 testów. Programy automatyzujące wykonywanie testów.

Narzędzia LTP Makefile Reguły do kompilacji I instalacji zestawu testów Reguła do uruchomienia wszystkich testów runltp pan Skrypt do uruchamiania grup testów wykorzystujący pan Skrypt do uruchamiania poszczególnych testów

Testy w ramach LTP Grupy testów DOTS Database Opensource Test Suite Ballista testy wywołań systemowych Command testy podstawowych komend Kdump testy mechanizmu kdump Kernel testy jądra Network testy sieci

Testowanie zgodności ze standardami POSIX - Portable Operating System Interface Zestaw standardów określonych przez IEEE definiujących interfejs uniksa SUSv3 Otwarty odpowiednik POSIX LSB Linux Standard Base LSB 2.0.1 zatwierdzony jako standard ISO 23360

Testowanie zgodności ze standardami Open POSIX Test Suite zestaw testów badających zgodność dystrybucji ze standardami POSIX i SUSv3 Zapoczątkowany jako osobny projekt, później włączony do LTP Projekt martwy od 2005 roku LSB test suite Własny zestaw testów

Automatyczne testy Kerncomp automatyczne testy budowania instalacji I bootowania kernela dla architektury IA64 Automatyczne testu budowania Linuksa dla architektury ARM http://armlinux.simtec.co.uk/faq.html Testy cross-kompilacji Linuksa http://l4x.org/k/

GNU Gcov Narzędzie analizujące wykonywujący się kod twojego programu, daje informacje o: Jak często wykonują się poszczególne linie Które linia kodu się aktualnie wykonuje Często narzędzie to urzywa się wraz z Gprof, które służy między innymi do wykrywania wąskich gardeł naszego prorgamu. Ile czasu wykonania przypada na poszczególne sekcje

GNU Gcov Działa wyłącznie z kompilatorem GNU CC. Prosty przykład użycia: Kompilujemy, z odpowiednimi flagami gcc -fprofile-arcs -ftest-coverage test.c -o test Odpalamy nasz prorgam Analiza wyników gcov test.c Odczyt danych z pliku test.c.gcov polecamy man gcov ;]

GNU Gprof Użycie: Kompilacja: gcc -pg test.c -o test Uruchomienie gprof test wybrane pola płaskiego profilu : %time procent czasu spędzony w funkcji %calls ilość wywołań %cumulative/self seconds - czas spędzony w funkcji wraz z wywołaniami/ bez wywołań man gprof równie dobry

GNU Lcov Frontend dla programu gcov tworzony w ramach projektu LTP. Może współpracować zarówno z kernelem (takim przypadku dane gcov są dostępne w katalogu /proc/) jak i z aplikacjami przestrzeni użytkownika.

Testy Wydajnościowe Testy Wydajnościowe (benchmarki, testy wzorcowe): testują różne charakterystyki sprzętu komputerowego i oprogramowania Benchmark Syntetyczny Benchmark Aplikacyjny Testy Wydajnościowe: "przeprowadzane w celu oceny stopnia spełnienia wymagań wydajnościowych przez system"

Inżynieryjność programowania Inżynieryjne podejście do tworzenia dużych systemów informatycznych Godzimy się na błędy Nie znamy optymalnych złożonościowo algorytmów Znamy jedynie algorytmy aproksymujące rozwiązanie

Wydajność "Wydajność [...] wyraża ilość pracy wykonanej w określonym przedziale czasu" Wydajność w odniesieniu do jednostki czasu ze względu na skomplikowanie systemu tak naprawde mierzymy tylko konkretną wartość tj. wydajność w odniesieniu tylko i wyłącznie do zadania testowego. Testy nie zawsze uwzględniają skoplikowane zależności pomiędzy elementami systemu.

Dlaczego mierzymy? Dla Sportu Żeby sie pochwalić (speedtest) Bo liczby są fajne W celu dokonania wyboru Zakupu oprogramowania/sprzetu; Lepszego algorytmu; Oszacowania wydajności porządanej dla określonego zastosowania; Diagnostycznie Znalezienie wąskich gardeł Znajdywanie awarii sprzetu/oprogramowania Znajdywania błędów

Benchmark syntetyczny Z reguły działające w petli wykonanie wielokrotnie okreslonej czynności. Przykładowe wskaźniki(w Lmbench) Context switching in ms Fork, exec process in ms Communication latencies in ms(pipe, tcp,... ) File delete in ms Communication bandwidts in MB/s(pipe, tcp,...) Page fault in micros

Benchmark aplikacyjny Przykłady Benchmarków Aplikacyjnych kodowania filmu do formatu XviD uruchomienie systemu kompilacja jdra linux pakowanie plików(zip) wczytywanie poziomu gry renderowanie obiektu 3D liczba klatek w grze na sekunde

Pomiar i jego wiarygodność Zakładamy, że pomiar jest powtarzalny i niezależny od otoczenia Chcemy ominąć "oszustwa" komputera w rodzaju cache'owania Uśrednienie wielu pomiarów nie musi być reprezentatywne Zakładamy, że nie zmieniają się warunki fizyczne(np. temperatura rdzenia) Używamy przy pomiarach tej samej wersji wersjach oprogramowania (np. kompilacja jądra przy użyciu gcc, renderowanie w 3Dstudio, benchmark 3DMark); Pomiar może być zależny od niektórych charakterystyk systemu jak np. fragmentacja systemu plików podczas kompilacji. Pilnujemy żeby nie "dociążając" komputera podczas testów(np. instalacja aktualizacji podczas testów czasu dostępu dysku) Testowanie na maszynie virtualnej: fatalny pomysł;

Interpretacja rezultatów Rezultat dotyczy "przykładowych danych" Pomiar jest obarczony błędem - choć często zminimalizowanym gdyż operacje na PC są silnie skwantowane Pomiar nie musi mieć typowego rozkładu statystycznego(np. rozkład Gaussa) Obecność anomalii Producenci sprzętu optymalizują go pod kątem benchmarków syntetycznych O szybkości działania(wyniku testu) nie musi decydować tylko badany element(wąskie gardła) Nie zawsze pomiar podstawowej wartości daje pełny obraz o danym sprzącie/programi - np. napędy optyczne... obciążają procesor Benchmarki aplikacyjne wydają się wiarygodniejsze od syntetycznych - lepiej symulują pracę systemu ale dają mniej szczegółowe informacje

Testy wydajnościowe zgodności ze specyfikacją wydajności Mamy wskazany w specyfikacji wskaźnik wydajności oraz wartość wymaganą Symulujemy realne użycie systemu np: uruchomienie równolegle konsol via ssh uruchomienie równolegle wielu procesów "coś" robiących Pomiar wskaźników: "w stresie" - przy obciążeniu bliskim maksymalnemu w przeciążeniu - przy obciązeniu wyższym od maksymalnego mogą pojawić sie wówczas błędy w działaniu aplikacji lub nieprzewidywane zachowania

Bootchart Owen Taylor wrote: "Ideally, system boot would involve a 3-4 second sequential read of around 100 megabytes of data from the hard disk, CPU utilization would be parallelized with that, and all queries on external systems would be asynchronous... startup continues and once the external system responds, the system state is updated. Plausibly the user could startwork under 10 seconds on this ideal system. The challenge is to create a single poster showing graphically what is going on during the boot, what is the utilization of resources, how the current boot differs from the ideal world of 100% disk and CPU utilization, and thus, where are the opportunities for optimization. " http://www.redhat.com/archives/fedora-devel-list/2004-november/msg00447.html

Bootchart Bootchart (Ziga Mahkovec, 2005) Fedora Core 3

Bootchart Fedora Core 3 dostrzeżone problemy to miedzy innymi: rhgb używa za dużo CPU (znaleziono i poprawiono bug) modprobe floppy na laptopach bez stacji dyskietek zabiera 4 sekundy...

Bootchart Redukcja: Z 1:38s do 0:48s!

Linux Kernel Performance Project http://kernel-perf.sourceforge.net/ Systematyczne benchmarki kolejnych dystrybucji jądra. Aplikacje z zestawu do testowania z przykładowymi wykresami przykladowe wykresy dla procesora: 2XP Xeon Core 2 Duo 2.66Ghz

Linux Kernel Performance Project Volanomark (http://www.volano.com/benchmarks.html) Wydajność komunikacj sieciowej i serwerów.

Linux Kernel Performance Project Netperf ( http://www.netperf.org/netperf/netperfpage.html ) Wydajność komunikacji różnych typów sieci.

Linux Kernel Performance Project Aim ( http://sourceforge.net/projects/re-aim-7 ) Wydajność sieci, pamięci i operacji dyskowych.

Linux Kernel Performance Project lmbench ( http://www.bitmover.com/lmbench ) Niskopoziomowe testy wydajnościowe podstawowych zadań kernela fileio ( http://sysbench.sourceforge.net ) Wydajość operacji wejścia-wyjścia aiostress ( ftp://ftp.suse.com/pub/people/mason/utils/aio-stress.c ) Wydajność operacji wejścia-wyjścia, systemu plików iozone ( http://www.iozone.org ) Wydajność systemu plików dbbech/tbench ( ftp://samba.org/pub/tridge/dbench ) Emuluje pomiar wydajności serweru plików vmregress ( http://www.skynet.ie/~mel/projects/vmregress ) Wydajność pamięci wirtualnej kernela

Linux Kernel Performance Project Tiobench ( http://sourceforge.net/projects/tiobench/ ) Wydajność operacji wejścia-wyjścia.

Linux Kernel Performance Project Mmbench ( http://sourceforge.net/projects/tiobench/mmbench ) Wydajność zarządzania pamięcią.

Linux Kernel Performance Project oraz JAVA*, kernbuild, cpu-int, cpu-fp