SlideShare a Scribd company logo
1 of 23
Download to read offline
DTrace, czyli jak zobaczyć
to czego nie widać
Wojciech Macek
Agenda
● Niska wydajność, co robić?
● Rozwiązanie: DTrace
● Kilka przykładów z życia wziętych
● Agregacja danych i FlameGraph
● Off-CPU time: co program robi gdy nic nie robi
● Kilka słów o Linuksie
● Pytania i (być może) odpowiedzi
Problemy z wydajnością
● Program zajmuje 100% czasu procesora
○ Co jest najbardziej czasochłonną operacją?
○ Która ścieżka kodu wykonywana jest
najczęściej?
● Program nie zajmuje 100% czasu procesora
○ Czemu jest wywłaszczany?
○ Na co czeka (dane?)?
○ Czy są jakieś współdzielone blokady?
Narzędzie idealne
● Możliwość śledzenia przebiegu programu (kernel i
userspace)
● Podgląd:
○ stosu wywołań funkcji
○ parametrów funkcji
○ wartości zwracanej
● Statystyka, liczenie ilości zdarzeń, histogramów, min/max
● Śledzenie zmian kontekstu, blokad
● Brak ograniczeń ilości śledzonych miejsc/zdarzeń
● Reagowanie na samodzielnie zdefiniowane zdarzenia
● Brak wpływu na wydajność testowanej aplikacji
● Prosta obsługa, wygodne narzędzia, GUI
Rozwiązanie: DTrace
● Pierwsze takie narzędzie, powstało dla systemu
Solaris. Obecnie używane w:
○ FreeBSD
○ Solaris
○ macOS
○ NetBSD
○ Linux (Oracle Linux)
● Narzędzie bazujące na “hook’ach” dynamicznie
instalowanych i usuwanych
● Pozwala dynamicznie śledzić wykonanie wątków
DTrace - trzy filary
Podsystem (subsystem)
Obszar, który udostępnia
próbki. Podsystemem może być
np. fbt (kernel, w jego skład
wchodzą “probe’y” jądra),
aplikacja (wtedy próbki dotyczą
funkcji userspace) jak i
biblioteki systemowe.
Próbka (probe)
Zdarzenie, które ma być
przechwycone przez DTrace. Na
przykład:
● wejście do funkcji (entry)
● wyjście z funkcji (return)
● próbka zdefiniowana
przez programistę
Akcja (action)
Zdefiniowana przez użytkownika w
skrypcie czynność, która zostanie
wykonana przy uruchomieniu próbki w
danym podsystemie. Na przykład:
● zliczenie ilości wejść
● wyświetlenie stosu wywołań
● podejrzenie parametrów funkcji
Rozwiązanie: DTrace
● Wkompilowanie w kernel (FreeBSD)
options KDTRACE_HOOKS
● Inicjalizacja
#kldload dtraceall
● Wyświetlenie listy probe’ów
#dtrace -l
#dtrace -ln 'pid$target:::entry' -p 633
Przykład
Skrypty DTrace
Obsługa probe’a
<provider>:<module>:<p-function>:<p-name>
/ <condition> /
{
… user code
}
Zmienne predefiniowane
pid Process ID
tid Thread ID
timestamp Nanosecond timestamp since boot
execname Process name
arg0, ... Function arguments and return value
errno Last syscall failure error code
probefunc Probe function name (3rd field)
probename Probe name (4th field)
DTrace: przykład 01
#!/usr/sbin/dtrace -s
fbt::tc_windup:entry
{
stack();
}
Przykład
DTrace: przykład 02
syscall:::entry
/execname == "ls"/
{
printf("%s: %sn", execname, probefunc);
}
Przykład
DTrace: przykład 03
syscall::read:entry /execname == "ls"/ {
self->track = 1;
printf("%s: %sn", execname, probefunc); }
syscall::read:return /execname == "ls"/ {
self->track = 0;
printf("%s: %sn", execname, probefunc); }
fbt:::entry /execname=="ls" && self->track==1/ {
printf("%s: %sn", execname, probefunc); }
Przykład
Agregacje
Format
@name[ keys ] = aggfunc( args );
name Nazwa agregacji
keys Klucz agregacji
aggfunc Funkcja agregacyjna
Funkcje agregacyjne
count Ilość wystąpień
sum(arg) Sumowanie wartości
avg(arg) Średnia wartość
min(arg) Minimalna wartość
max(arg) Maksymalna wartość
lquantize(arg) Histogram liniowy
quantize(arg) Histogram "power-of-two"
DTrace: przykład 04
syscall::read:entry
{
@apps[execname] = count();
}
Przykład
@apps[“ls”] += 1;
DTrace: przykład 05
/*
* ssize_t read(int fd, void *buf, size_t nbyte);
*/
syscall::read:entry
{
@apps[execname] = quantize(arg2);
}
Przykład
DTrace: przykład 06
#!/usr/sbin/dtrace -s
profile-197 /arg0/
{
@stacks[stack()] = count();
}
Przykład
FlameGraph
● Graficzne narzędzie do wizualizacji agregacji
● Darmowe, dostępne na GitHub
https://github.com/brendangregg/FlameGraph
● Wygląd:
http://www.brendangregg.com/FlameGraphs/cpu-bash
-flamegraph.svg
FlameGraph: użycie
# git clone https://github.com/brendangregg/FlameGraph
# cd FlameGraph
# kldload dtraceall # if needed
# dtrace -x stackframes=100 -n 'profile-197 /arg0/ {
@[stack()] = count(); } tick-60s { exit(0); }' -o
out.stacks
# ./stackcollapse.pl out.stacks | ./flamegraph.pl > out.svg
Historia pewnego sterownika
● Chory: sterownik karty sieciowej 40G na
48-rdzeniowym SoC ARMv8
● Objawy: Linux potrafi 36Gb/s a FreeBSD
tylko 20Gb/s
● Diagnoza: <przykład z iperf3>
Przykład
Analiza off-CPU
DTrace off-CPU
sched:::off-cpu /execname == "iperf3"/
{
self->ts = timestamp;
}
sched:::on-cpu /self->ts/
{
@[ustack()] = sum(timestamp - self->ts);
self->ts = 0;
}
Przykład
DTrace Off-CPU
<przykład z MySQL>
Przykład
A co z Linuksem?
Q&A
Pytania?

More Related Content

Similar to DTrace, czyli jak zobaczyć to czego nie widać.

PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...
PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...
PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...PROIDEA
 
MCTS 70-536 Study Group - Diagnostics
MCTS 70-536 Study Group - DiagnosticsMCTS 70-536 Study Group - Diagnostics
MCTS 70-536 Study Group - DiagnosticsMarcin Daczkowski
 
ETW w służbie programisty .NET
ETW w służbie programisty .NETETW w służbie programisty .NET
ETW w służbie programisty .NETKonrad Kokosa
 
Exatel Security Days 2017 - Niech dane pozostaną z Tobą! Sieciowe techniki ek...
Exatel Security Days 2017 - Niech dane pozostaną z Tobą! Sieciowe techniki ek...Exatel Security Days 2017 - Niech dane pozostaną z Tobą! Sieciowe techniki ek...
Exatel Security Days 2017 - Niech dane pozostaną z Tobą! Sieciowe techniki ek...Leszek Mi?
 
Techniki kompilacji
Techniki kompilacjiTechniki kompilacji
Techniki kompilacjiPiotr B
 
Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.Semihalf
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL versionMaciej Lasyk
 
Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyl...
Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyl...Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyl...
Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyl...RST Software Masters
 
Embedded Debugging, czyli co kryje się w jądrze?
Embedded Debugging, czyli co kryje się w jądrze?Embedded Debugging, czyli co kryje się w jądrze?
Embedded Debugging, czyli co kryje się w jądrze?Semihalf
 
Info meet pomiary wydajności
Info meet pomiary wydajnościInfo meet pomiary wydajności
Info meet pomiary wydajnościmagda3695
 
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.Semihalf
 
Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Semihalf
 
4Developers 2015: Orleans - aplikacje, które skalują i dystrybuują się same -...
4Developers 2015: Orleans - aplikacje, które skalują i dystrybuują się same -...4Developers 2015: Orleans - aplikacje, które skalują i dystrybuują się same -...
4Developers 2015: Orleans - aplikacje, które skalują i dystrybuują się same -...PROIDEA
 
Gluster FS
Gluster FSGluster FS
Gluster FS3camp
 
tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?Brainhub
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaMaciej Ziarko
 

Similar to DTrace, czyli jak zobaczyć to czego nie widać. (20)

DTrace
DTraceDTrace
DTrace
 
test
testtest
test
 
PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...
PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...
PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...
 
MCTS 70-536 Study Group - Diagnostics
MCTS 70-536 Study Group - DiagnosticsMCTS 70-536 Study Group - Diagnostics
MCTS 70-536 Study Group - Diagnostics
 
Monitoring sieci
Monitoring sieciMonitoring sieci
Monitoring sieci
 
ETW w służbie programisty .NET
ETW w służbie programisty .NETETW w służbie programisty .NET
ETW w służbie programisty .NET
 
Exatel Security Days 2017 - Niech dane pozostaną z Tobą! Sieciowe techniki ek...
Exatel Security Days 2017 - Niech dane pozostaną z Tobą! Sieciowe techniki ek...Exatel Security Days 2017 - Niech dane pozostaną z Tobą! Sieciowe techniki ek...
Exatel Security Days 2017 - Niech dane pozostaną z Tobą! Sieciowe techniki ek...
 
Techniki kompilacji
Techniki kompilacjiTechniki kompilacji
Techniki kompilacji
 
Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL version
 
Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyl...
Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyl...Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyl...
Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyl...
 
Embedded Debugging, czyli co kryje się w jądrze?
Embedded Debugging, czyli co kryje się w jądrze?Embedded Debugging, czyli co kryje się w jądrze?
Embedded Debugging, czyli co kryje się w jądrze?
 
Info meet pomiary wydajności
Info meet pomiary wydajnościInfo meet pomiary wydajności
Info meet pomiary wydajności
 
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.
ARM CoreSight - sprawdź, co tak naprawdę robi Twój SoC.
 
Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?
 
4Developers 2015: Orleans - aplikacje, które skalują i dystrybuują się same -...
4Developers 2015: Orleans - aplikacje, które skalują i dystrybuują się same -...4Developers 2015: Orleans - aplikacje, które skalują i dystrybuują się same -...
4Developers 2015: Orleans - aplikacje, które skalują i dystrybuują się same -...
 
Gluster FS
Gluster FSGluster FS
Gluster FS
 
GlusterFS
GlusterFSGlusterFS
GlusterFS
 
tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
 

More from Semihalf

Meetup #1 - Świat Komputera Przed Systemem Operacyjnym
Meetup #1 - Świat Komputera Przed Systemem Operacyjnym Meetup #1 - Świat Komputera Przed Systemem Operacyjnym
Meetup #1 - Świat Komputera Przed Systemem Operacyjnym Semihalf
 
Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01Semihalf
 
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018Semihalf
 
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018Semihalf
 
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018Semihalf
 
CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special. CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special. Semihalf
 
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Semihalf
 
Skazani na firmware. ARM Trusted Firmware. S07E02
Skazani na firmware. ARM Trusted Firmware. S07E02Skazani na firmware. ARM Trusted Firmware. S07E02
Skazani na firmware. ARM Trusted Firmware. S07E02Semihalf
 
Skazani na firmware. Świat komputera przed systemem operacyjnym.
Skazani na firmware. Świat komputera przed systemem operacyjnym.Skazani na firmware. Świat komputera przed systemem operacyjnym.
Skazani na firmware. Świat komputera przed systemem operacyjnym.Semihalf
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKSemihalf
 
Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).Semihalf
 
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.Semihalf
 
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?Semihalf
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Semihalf
 
Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Semihalf
 
Architektura mikrokontrolera pisana słowem.
Architektura mikrokontrolera pisana słowem.Architektura mikrokontrolera pisana słowem.
Architektura mikrokontrolera pisana słowem.Semihalf
 
Bootloadery i programy bare metal.
Bootloadery i programy bare metal.Bootloadery i programy bare metal.
Bootloadery i programy bare metal.Semihalf
 
Jak napisać własny RTOS!
Jak napisać własny RTOS!Jak napisać własny RTOS!
Jak napisać własny RTOS!Semihalf
 
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.Semihalf
 
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.Semihalf
 

More from Semihalf (20)

Meetup #1 - Świat Komputera Przed Systemem Operacyjnym
Meetup #1 - Świat Komputera Przed Systemem Operacyjnym Meetup #1 - Świat Komputera Przed Systemem Operacyjnym
Meetup #1 - Świat Komputera Przed Systemem Operacyjnym
 
Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01
 
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
 
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
 
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018
 
CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special. CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special.
 
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
 
Skazani na firmware. ARM Trusted Firmware. S07E02
Skazani na firmware. ARM Trusted Firmware. S07E02Skazani na firmware. ARM Trusted Firmware. S07E02
Skazani na firmware. ARM Trusted Firmware. S07E02
 
Skazani na firmware. Świat komputera przed systemem operacyjnym.
Skazani na firmware. Świat komputera przed systemem operacyjnym.Skazani na firmware. Świat komputera przed systemem operacyjnym.
Skazani na firmware. Świat komputera przed systemem operacyjnym.
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
 
Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).
 
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
 
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?
Jak stworzyć wysokowydajny i skalowalny stos sieciowy dla 72 rdzeni CPU?
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.
 
Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.
 
Architektura mikrokontrolera pisana słowem.
Architektura mikrokontrolera pisana słowem.Architektura mikrokontrolera pisana słowem.
Architektura mikrokontrolera pisana słowem.
 
Bootloadery i programy bare metal.
Bootloadery i programy bare metal.Bootloadery i programy bare metal.
Bootloadery i programy bare metal.
 
Jak napisać własny RTOS!
Jak napisać własny RTOS!Jak napisać własny RTOS!
Jak napisać własny RTOS!
 
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
 
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.
Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.
 

DTrace, czyli jak zobaczyć to czego nie widać.

  • 1. DTrace, czyli jak zobaczyć to czego nie widać Wojciech Macek
  • 2. Agenda ● Niska wydajność, co robić? ● Rozwiązanie: DTrace ● Kilka przykładów z życia wziętych ● Agregacja danych i FlameGraph ● Off-CPU time: co program robi gdy nic nie robi ● Kilka słów o Linuksie ● Pytania i (być może) odpowiedzi
  • 3. Problemy z wydajnością ● Program zajmuje 100% czasu procesora ○ Co jest najbardziej czasochłonną operacją? ○ Która ścieżka kodu wykonywana jest najczęściej? ● Program nie zajmuje 100% czasu procesora ○ Czemu jest wywłaszczany? ○ Na co czeka (dane?)? ○ Czy są jakieś współdzielone blokady?
  • 4. Narzędzie idealne ● Możliwość śledzenia przebiegu programu (kernel i userspace) ● Podgląd: ○ stosu wywołań funkcji ○ parametrów funkcji ○ wartości zwracanej ● Statystyka, liczenie ilości zdarzeń, histogramów, min/max ● Śledzenie zmian kontekstu, blokad ● Brak ograniczeń ilości śledzonych miejsc/zdarzeń ● Reagowanie na samodzielnie zdefiniowane zdarzenia ● Brak wpływu na wydajność testowanej aplikacji ● Prosta obsługa, wygodne narzędzia, GUI
  • 5. Rozwiązanie: DTrace ● Pierwsze takie narzędzie, powstało dla systemu Solaris. Obecnie używane w: ○ FreeBSD ○ Solaris ○ macOS ○ NetBSD ○ Linux (Oracle Linux) ● Narzędzie bazujące na “hook’ach” dynamicznie instalowanych i usuwanych ● Pozwala dynamicznie śledzić wykonanie wątków
  • 6. DTrace - trzy filary Podsystem (subsystem) Obszar, który udostępnia próbki. Podsystemem może być np. fbt (kernel, w jego skład wchodzą “probe’y” jądra), aplikacja (wtedy próbki dotyczą funkcji userspace) jak i biblioteki systemowe. Próbka (probe) Zdarzenie, które ma być przechwycone przez DTrace. Na przykład: ● wejście do funkcji (entry) ● wyjście z funkcji (return) ● próbka zdefiniowana przez programistę Akcja (action) Zdefiniowana przez użytkownika w skrypcie czynność, która zostanie wykonana przy uruchomieniu próbki w danym podsystemie. Na przykład: ● zliczenie ilości wejść ● wyświetlenie stosu wywołań ● podejrzenie parametrów funkcji
  • 7. Rozwiązanie: DTrace ● Wkompilowanie w kernel (FreeBSD) options KDTRACE_HOOKS ● Inicjalizacja #kldload dtraceall ● Wyświetlenie listy probe’ów #dtrace -l #dtrace -ln 'pid$target:::entry' -p 633 Przykład
  • 8. Skrypty DTrace Obsługa probe’a <provider>:<module>:<p-function>:<p-name> / <condition> / { … user code } Zmienne predefiniowane pid Process ID tid Thread ID timestamp Nanosecond timestamp since boot execname Process name arg0, ... Function arguments and return value errno Last syscall failure error code probefunc Probe function name (3rd field) probename Probe name (4th field)
  • 9. DTrace: przykład 01 #!/usr/sbin/dtrace -s fbt::tc_windup:entry { stack(); } Przykład
  • 10. DTrace: przykład 02 syscall:::entry /execname == "ls"/ { printf("%s: %sn", execname, probefunc); } Przykład
  • 11. DTrace: przykład 03 syscall::read:entry /execname == "ls"/ { self->track = 1; printf("%s: %sn", execname, probefunc); } syscall::read:return /execname == "ls"/ { self->track = 0; printf("%s: %sn", execname, probefunc); } fbt:::entry /execname=="ls" && self->track==1/ { printf("%s: %sn", execname, probefunc); } Przykład
  • 12. Agregacje Format @name[ keys ] = aggfunc( args ); name Nazwa agregacji keys Klucz agregacji aggfunc Funkcja agregacyjna Funkcje agregacyjne count Ilość wystąpień sum(arg) Sumowanie wartości avg(arg) Średnia wartość min(arg) Minimalna wartość max(arg) Maksymalna wartość lquantize(arg) Histogram liniowy quantize(arg) Histogram "power-of-two"
  • 13. DTrace: przykład 04 syscall::read:entry { @apps[execname] = count(); } Przykład @apps[“ls”] += 1;
  • 14. DTrace: przykład 05 /* * ssize_t read(int fd, void *buf, size_t nbyte); */ syscall::read:entry { @apps[execname] = quantize(arg2); } Przykład
  • 15. DTrace: przykład 06 #!/usr/sbin/dtrace -s profile-197 /arg0/ { @stacks[stack()] = count(); } Przykład
  • 16. FlameGraph ● Graficzne narzędzie do wizualizacji agregacji ● Darmowe, dostępne na GitHub https://github.com/brendangregg/FlameGraph ● Wygląd: http://www.brendangregg.com/FlameGraphs/cpu-bash -flamegraph.svg
  • 17. FlameGraph: użycie # git clone https://github.com/brendangregg/FlameGraph # cd FlameGraph # kldload dtraceall # if needed # dtrace -x stackframes=100 -n 'profile-197 /arg0/ { @[stack()] = count(); } tick-60s { exit(0); }' -o out.stacks # ./stackcollapse.pl out.stacks | ./flamegraph.pl > out.svg
  • 18. Historia pewnego sterownika ● Chory: sterownik karty sieciowej 40G na 48-rdzeniowym SoC ARMv8 ● Objawy: Linux potrafi 36Gb/s a FreeBSD tylko 20Gb/s ● Diagnoza: <przykład z iperf3> Przykład
  • 20. DTrace off-CPU sched:::off-cpu /execname == "iperf3"/ { self->ts = timestamp; } sched:::on-cpu /self->ts/ { @[ustack()] = sum(timestamp - self->ts); self->ts = 0; } Przykład
  • 21. DTrace Off-CPU <przykład z MySQL> Przykład
  • 22. A co z Linuksem?