Automatyczne testowanie jądra Linuksa

Podobne dokumenty
Automatyczne testowanie jądra Linuksa notatki

Automatyczne testowanie jądra Linuksa

Testowanie Jądra Linuxa

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

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

Testowanie oprogramowania. Piotr Ciskowski

Testowanie oprogramowania. Testowanie oprogramowania 1/34

Plan testów do Internetowego Serwisu Oferowania i Wyszukiwania Usług Transportowych

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

System komputerowy. System komputerowy

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

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

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

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

Systemy operacyjne III

Piotr Dwieczkowski. Code coverage. Mierzenie pokrycia kodu, teoria oraz praktyka w C/C++

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Szkolenie: Testowanie wydajności (Performance Testing)

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

Monitorowanie wydajność w bazie Oracle11g

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

Tworzenie oprogramowania

Testowanie oprogramowania w środowisku IBM Rational Software Architect

Analizator wydajności AMD CodeAnalyst

Wstęp do testowania : Szymon Ramczykowski

Prezentacja systemu RTLinux

Konsolidacja i wirtualizacja na platformie IBM Power: najlepszą metodą obniżenia kosztów IT

Praca dyplomowa. Program do monitorowania i diagnostyki działania sieci CAN. Temat pracy: Temat Gdańsk Autor: Łukasz Olejarz

Acceptance Test Driven Development wspierane przez narzędzie ROBOT Framework. Edyta Tomalik Grzegorz Ziemiecki

Testing hardware Paweł Noga

Programowanie Systemów Wbudowanych

Spis treści. Wstęp... 10

Technologia informacyjna. Urządzenia techniki komputerowej

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych:

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

Systemy operacyjne i sieci komputerowe Szymon Wilk System operacyjny 1

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

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

Testowanie jądra Linuxa

Win Admin Replikator Instrukcja Obsługi

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

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

Elastyczna sieć dla rozwiązań Cloud Open vswitch

Testy automatyczne. Korzystające z junit

Tester oprogramowania 2014/15 Tematy prac dyplomowych

Wykaz zmian w programie WinAdmin Replikator

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Systemy operacyjne II

INŻYNIERIA OPROGRAMOWANIA TESTOWANIE SYSTEMOWE

CONFidence 13/05/2006. Jarosław Sajko, PCSS

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

Win Admin Replikator Instrukcja Obsługi

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

BIOS i BIOS SETUP. Wykład multimedialny Urządzenia techniki komputerowej

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

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

Załącznik 1 instrukcje instalacji

Jak patrzymy na testy czyli Jak punkt widzenia zależy od punktu siedzenia. Click Piotr Kałuski to edit Master subtitle style

Jak efektywnie wykrywać podatności bezpieczeństwa w aplikacjach? OWASP The OWASP Foundation

Jarosław Kuchta Administrowanie Systemami Komputerowymi. Internetowe Usługi Informacyjne

System zarządzający grami programistycznymi Meridius

Raport Hurtownie Danych

1. Podstawy...P Polecenia podstawowe...p... 18

SYSTEMY OPERACYJNE. kik.pcz.czest.pl/so. (C) KIK PCz Materiały pomocnicze 1 PROWADZI: PODSTAWOWA LITERATURA: ZAJĘCIA: STRONA

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

Warstwy systemu Windows 2000

Inżynieria oprogramowania- Grupa dra inż. Leszka Grocholskiego II UWr 2009/2010. Aleksandra Kloc, Adam Grycner, Mateusz Łyczek. Wasza-fota.

Program szkolenia: Continuous Integration i Git

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

SYSTEMY CZASU RZECZYWISTEGO STEROWNIK WIND. Dokumentacja projektu. Danilo Lakovic. Joanna Duda. Piotr Leżoń. Mateusz Pytel

Testowanie. Ryszard Beczek & Piotr Miłkowski 1 04/11/07

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

Programowanie w Ruby

Programowanie obiektowe

Administracja i programowanie pod Microsoft SQL Server 2000

SYSTEMY OPERACYJNE SYLABUS A. Informacje ogólne

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Działanie systemu operacyjnego

ANGULARJS TWORZENIE APLIKACJI INTERNETOWYCH

Analiza ilościowa w przetwarzaniu równoległym

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

Optymalizacja Automatycznych Testów Regresywnych

Załącznik nr 1. Specyfikacja techniczna portalu internetowego Łódź, r.

Overlord - Plan testów

Opracował: Jan Front

Opis Przedmiotu Zamówienia na przeprowadzenie testów bezpieczeństwa systemu wspomagania nadzoru archiwalnego e-nadzór

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

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Nowe spojrzenie na systemy monitoringu i sterowania sieciami ciepłowniczymi

VMware vsphere: Automation Fast Track

MESco. Testy skalowalności obliczeń mechanicznych w oparciu o licencje HPC oraz kartę GPU nvidia Tesla c2075. Stanisław Wowra

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

SYSTEM OPERACYJNY. Monika Słomian

Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki. Paweł Parys. Nr albumu: Aukcjomat

Java jako język programowania

Podstawowe protokoły transportowe stosowane w sieciach IP cz.2

Acronis Universal Restore

Transkrypt:

Szymon Giżecki Chu Hong Hai Mateusz Kopeć Automatyczne testowanie jądra Linuksa Systemy Operacyjne Projekt studencki

Plan prezentacji...czyli o czym będziemy mówili: Metodologie testowania jądra Linuksa Testy poprawnościowe Testy wydajnościowe Mechanizmy testowania Fault Injection Zestawy testów Linux Test Project gcov i pokrycie kodu jądra testami Tracing Analiza procesu bootowania - Bootchart 2

Testy poprawnościowe Statyczna analiza kodu Przygotowanie testów Przeprowadzenie testów 3

Statyczna analiza kodu Idea: szukanie błędów przed budowaniem aplikacji Weryfikacja modelowa (model checking) Analiza przepływu danych (data-flow analysis) Abstract interpretation Asercje Semantyka Narzędzia: Sparse Cppcheck Coverity Prevent 4

Wybór zestawów testowych Obciążenie głównych zasobów Pokrycie dużej części kodu Automatyzacja Publikacja wyników 5

Ocena wykorzystania zasobów CPU Pamięć I/O Networking Narzędzia: top, sar i iostat (iostat -x 1) 6

Analiza pokrycia kodu jądra gcov lcov 7

Ocena końcowego testu Przed przeprowadzeniem testów: Uruchomienie wybranego zestawu na stabilnej wersji jądra Wykrycie konfliktów między testami Usunięcie Zbieranie statystyk narzędziem sar Punkt odniesienia dla przyszłych prawdziwych testów Bardzo ważne pytanie: skąd wziąć testy? Odpowiedź: LTP 8

Przeprowadzenie testu Za miarę stabilności i niezawodności systemu uznajemy jego czas ciągłego i bezawaryjnego działania. W związku z tym testy są uruchomione i działają bez przerwy przez długi okres czasu (30, 60, 90 dni). Przed testem właściwym często jest uruchomiony 24-godzinny test wstępny w celu sprawdzenia poprawności konfiguracji systemu. Podczas testowania odpowiednie narzędzia bez przerwy zbierają statystyki dotyczące systemu. Aby ustawić cykliczne zapisywanie danych statystycznych można używać narzędzia cron. 9

Testy wydajnościowe Co mierzymy Narzędzia 10

Co mierzymy Określenie miary np. ilość wysłanych wiadomości na sekundę Dobór odpowiednich benchmarków Tworzenie dokumentacji Wybór danych, które będą zbierane Zanim uruchomimy testy musimy odpowiednio dostosować sprzęt i oprogramowanie. 11

Narzędzia Wirtualny system plików /proc Lockmeter (SGI) Kernprof (SGI) Trace facility (IBM) sstat schedret acgparse 12

Narzędzia komercyjne 13

Mechanizmy testowania Fault Injection Czym jest mechanizm fault injection Rodzaje fault injection A jak to się robi w Unix'ie? Wparcie w Kernel u FERRARI A Flexible Software-Based Fault and Error Injection System 14

Linux Test Project Linus's Law (according to Eric S. Raymond) Given enough eyeballs, all bugs are shallow" Projekt założony w roku 2000 przez konsorcjum SGI (Silicon Graphics) Pierwszy zunifikowane podejście do testowania jądra linuxa Utrzymywany jako projekt OpenSource Na dzień dzisiejszy największy projekt testujący jądro 15

Linux Test Project Napisany głównie w C (~94.5%), pozostałe części Perl (~0.5%) oraz Shell (~5%) Ponad 3000 testów Kto i kiedy powinien używać Środowisko Zanim uruchomimy LTP 16

LTP rodzaje testów - Unit testing - Integration testing - System testing - Regression testing - Stress testing - Nie ma compilation ani performance 17

LTP zbiór testowanych właściwości Przejrzysta struktura LTP testuje: Zarządzanie pamięcią, Scheduler, Wątki jądra, System plików, LVM, EVMS, Kompresje, /proc, Zdalne polecenia, Sockets, NFS, NIS, IP/V6, Sieć (Ethernet i Wireless), FDDI, ATM, Napędy (CDROM, DVD, FDD, a nawet Tape), IDE, Sterowniki SCSI / RAID 18

LTP jak to działa? 19

LTP Zbieranie danych Podejścia do zbierania danych Podział ze względu na logikę i funkcjonalności. Łatwe do zdefiniowania relacje Drzewo Pół-automatyzacja Dane jako kod ASCII 20

LTP Processing danych Przetwarzanie danych Raw test data + coverage data + raw coverage data W wyniku dokument HTML, zawierający: Części kernela, na które test miał wpływ Części kernela z powiązanego podsystemu, na które test nie miał wpływu Częstotliwość i liczba uruchomionych linii kodu 21

LTP rozwój 1 LTP 2002 LTP Marzec 2008 22

LTP rozwój 2 Przyrost pomiędzy grudniem 2007 a marcem 2008 23

LTP Tworzenie własnych testów Napisane w C - macra TEST() i zmienne TEST_RETURN TEST_ERRNO Nie powinien wymagać żadnej pre-konfiguracji 24

LTP Tworzenie własnych testów Bardzo przydatna funkcja parse_opts #include "test.h" #include "usctest.h" char *parse_opts(int argc, char *argv[], option_t option_array[], void (*user_help_func)()); typedef struct { char *option; int *flag; char **arg; } option_t; 25

LTP Przykładowe wyjście 1 26

LTP Przykładowe wyjście 2 27

LTP co dalej? Dodanie wsparcia dla różnych języków Dodanie nowych obszarów, np. zarządzania mocą, KDUMP, kontrolerów Nowe techniki raportowania, np. XML Dodanie benchmarków Oczywiście rozwój testów, w szczególności duży nacisk kładziony na functional i regression testing. 28

Jeśli nie LTP, to: Linux Benchmark Suite Czego nie ma w LTP: Kernel Lockmetering Kernel Profiling UnixBench Wysokopoziomowy zbiór benchmarków integrujący testy CPU i I/O, oraz zachowanie systemu pod zróżnicowanym obciążeniem SPEC CPU2000 Benchmark testujący surowe CPU oraz kompilację 29

Jeśli nie LTP, to: HINT HINT (http://hint.byu.edu/) (Hierarchical INTegration) Benchmark, używający świeżego podejścia QUIPS (QUality Improvement Per Second). HINT odzwierciedla zmiany prędkości działanie maszyny w miarę wzrastania uptime'u. Bardzo łatwo skalowalny i dostępny na wiele architektur 30

Jeśli nie LTP, to: HINT 31

GCOV i pokrycie kodu jądra testami Czym jest COV? Sprawdzenie stopnia przetestowania kodu White box testing Jedna z pierwszych technik Kryteria pokrycia: Pokrycie funkcji Pokrycie instrukcji (statement coverage) Pokrycie decyzji/rozgałęzień (decision/branch coverage) Pokrycie warunków (condition coverage) Pokrycie ścieżek (path coverage) Pokrycie wejścia/wyjścia (entry/exit coverage) 32

GCOV i pokrycie kodu jądra testami Istnieją zależności między kryteriami Niektóre aplikacje potrzebują 100% pokrycia Niemniej jednak, na ogół jest to niemożliwe Problemy z pełnym pokryciem: Duża ilość ścieżek Nieskończona ilość ścieżek Ścieżki niewykonywalne przy żadnym wejściu problem stopu Techniki radzenia sobie z tym: Grupowanie ścieżek w klasy 33

GCOV i pokrycie kodu jądra testami Pokrycie testami kodu jądra czemu tak potrzebne? Intensywne użycie zasobów nie zawsze implikuje intensywne użycie kodu jądra. Użyteczne narzędzia: gcov lcov Jak używamy? Sekwencyjnie! 34

GCOV i pokrycie kodu jądra testami gcov przykładowe wyjście 35

GCOV i pokrycie kodu jądra testami lcov przykładowe wyjście 36

GCOV i pokrycie kodu jądra testami lcov przykładowe wyjście (szczegółowe) 37

Tracing Czym jest tracing? Logging vs. tracing 38

Tracing Najważniejsze cechy narzędzia do trace'u: Zajrzenie w głąb działającego systemu Wyszukiwanie wąskich gardeł systemu Śledzenie wykonań procesów i środowiska, w którym się wykonują Tryb flight-recorder (coś jak czarna skrzynka samolotu) Możliwość zaglądania w przestrzeń użytkownika i jądra Przykładowe narzędzia: SystemTap Dtrace for Linux Kprobes LTTng i LLTV 39

Tracing SystemTap przykład 40

Przykładowe testy jądra - Bootchart Bootchart narzędzie do analizy procesu ładowania systemu operacyjnego Linux Powstał jako odpowiedź na wyzwanie postawione przez Owena Taylora: Wyzwaniem jest stworzenie aplikacji ukazującej na jednym rysunku, co dzieje się podczas bootowania systemu i wskazanie szans na optymalizację tego procesu, poprzez ukazanie jak bardzo rzeczywiste bootowanie odbiega od idealnego, w którym nieustannie występuje 100% zapotrzebowanie na procesor i dostęp do dysku. 41

Przykładowe testy jądra - Bootchart Jak to działa? Uruchamia /sbin/bootchartrd zamiast /sbin/init Bootchart od razu uruchamia /sbin/init, ale sam zaczyna zbierać statystyki do tymczasowego systemu plików (tmpfs) Skąd dane? /proc/stat /proc/diskstats /proc/[pid]/stat Warunek zakończenia działania pojawienie się jednego z wyróżnionych procesów Domyślne zbieranie statystyk co 0.2 sekundy Możliwość użycia process accounting 42

Przykładowe testy jądra - Bootchart Wizualizacja Za pomocą aplikacji java lub formularza na stronie internetowej Konieczność uproszczenia wykresu: Łączenie podobnych procesów w jedną grupę procesów Usuwanie krótko żyjących i bezczynnych procesów Graficzny sposób przedstawiania wyników (PNG, SVG, EPS) 43

Przykładowe testy jądra - Bootchart Przykład Fedora Core 3 44

Przykładowe testy jądra - Bootchart 45

Przykładowe testy jądra - Bootchart 46

Przykładowe testy jądra - Bootchart 47

Przykładowe testy jądra - Bootchart 48

Przykładowe testy jądra - LKP Linux Kernel Performance Project projekt mający na celu zwiększenie wydajności systemów Linux Częste testy wydajnościowe na tym samym sprzęcie różnych wersji jądra Linuxa Wydawałoby się, że każda kolejna wersja jądra powinna być lepsza od poprzedniej :) Spójrzmy zatem na przykładowe wyniki... 49

Przykładowe testy jądra VolanoMark 50

Przykładowe testy jądra Netperf tcp TCP-S-112k test strumienia TCP z 112KB socket buffers i wiadmościami 4KB TCP-S-64k test strumienia TCP z 64KB socket buffers i wiadmościami 4KB TCP-RR-1 test TCP Request/Response z 1 byte'owymi zapytaniami i odpowiedziami 51

Przykładowe testy jądra Netperf udp UDP-RR-1 test UDP Request/Response z 1 byte'owymi zapytaniami i odpowiedziami UDP-RR-516 test UDP Request/Response z 516 byte'owymi zapytaniami I 4 byte'owymi odpowiedziami UDP-U-4k test UDP Unidirectional z 64KB socket buffers i 4KB wiadomościami UDP-U-1k test UDP Unidirectional z 64KB socket buffers i 1KB wiadomościami 52

Przykładowe testy jądra Mmbench 53

Przykładowe testy jądra Fileio 54

Przykładowe testy jądra Iozone 50% obciążenie pamięci 55

Przykładowe testy jądra Iozone 120% obciążenie pamięci 56

Przykładowe testy jądra Tiobench różne operacje, algorytm cfq 57

Przykładowe testy jądra Tiobench różne operacje, algorytm noop 58

Przykładowe testy jądra Tiobench random read, różne algorytmy 59