Wyszukiwanie w witrynie

Perf – narzędzie do monitorowania i analizy wydajności dla systemu Linux


Kiedy mówimy o wydajności obliczeniowej, mamy na myśli związek między naszymi zasobami a zadaniami, które pozwalają nam wykonać w danym okresie.

W czasach zaciekłej konkurencji między firmami ważne jest, abyśmy nauczyli się jak najlepiej wykorzystywać to, co mamy. Marnowanie zasobów sprzętu lub oprogramowania albo brak wiedzy, jak z nich efektywniej korzystać, kończy się stratą, na którą po prostu nie możemy sobie pozwolić, jeśli chcemy być na szczycie.

Jednocześnie musimy uważać, aby nie doprowadzić naszych zasobów do takiej granicy, w której długotrwałe użytkowanie spowoduje nieodwracalne szkody.

W tym artykule przedstawimy stosunkowo nowe narzędzie do analizy wydajności i podamy wskazówki, których możesz użyć do monitorowania systemów Linux, w tym sprzętu i aplikacji. Pomoże Ci to upewnić się, że działają one tak, abyś był w stanie uzyskać pożądane rezultaty bez marnowania zasobów i własnej energii.

Przedstawiamy i instalujemy Perf w systemie Linux

Linux udostępnia między innymi narzędzie do monitorowania i analizy wydajności, zwane potocznie perf. Co więc odróżnia perf od innych dobrze znanych narzędzi, z którymi już jesteś zaznajomiony?

Odpowiedź jest taka, że perf zapewnia dostęp do jednostki monitorowania wydajności w procesorze, a tym samym pozwala nam dokładnie przyjrzeć się zachowaniu sprzętu i powiązanych z nim zdarzeń.

Ponadto może także monitorować zdarzenia związane z oprogramowaniem i tworzyć raporty na podstawie zebranych danych.

Możesz zainstalować perf w dystrybucjach opartych na RPM za pomocą:

yum update && yum install perf     [CentOS / RHEL / Fedora]
dnf update && dnf install perf     [Fedora 23+ releases]

W Debianie i pochodnych:

sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

Jeśli uname -r w powyższym poleceniu zwróci dodatkowe ciągi znaków oprócz aktualnej wersji (w moim przypadku 3.2.0-23-generic), być może będziesz musiał wpisać linux-tools-3.2.0-23 zamiast używać danych wyjściowych uname.

Należy również pamiętać, że perf daje niekompletne wyniki, gdy jest uruchamiany jako gość na VirtualBox lub VMWare, ponieważ nie pozwalają one na dostęp do liczników sprzętu, jak robią to inne technologie wirtualizacji (takie jak KVM lub XEN) .

Dodatkowo pamiętaj, że niektóre polecenia perf mogą być domyślnie ograniczone do uprawnień roota, co można wyłączyć (do czasu ponownego uruchomienia systemu), wykonując:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Jeśli chcesz trwale wyłączyć tryb paranoiczny, zaktualizuj następujące ustawienie w pliku /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Podpolecenia

Po zainstalowaniu perf możesz zapoznać się z jego stroną podręcznika, aby zapoznać się z listą dostępnych podpoleceń (można je traktować jako specjalne opcje otwierające określone okno w systemie). Aby uzyskać najlepsze i pełniejsze wyniki, użyj perf jako root lub poprzez sudo.

Lista osiągnięć

lista perf (bez opcji) zwraca wszystkie symboliczne typy zdarzeń (długa lista). Jeżeli chcesz zobaczyć listę wydarzeń dostępnych w danej kategorii użyj listy perf z nazwą kategorii ([hw|sw|cache|tracepoint|pmu|event_glob ]), Jak na przykład:

Wyświetl listę wstępnie zdefiniowanych zdarzeń programowych w systemie Linux:

perf list sw 

Statystyka wydajności

perf stat uruchamia polecenie i zbiera statystyki wydajności systemu Linux podczas wykonywania takiego polecenia. Co się stanie w naszym systemie, gdy uruchomimy dd?

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

Powyższe statystyki wskazują m.in.:

  1. Wykonanie polecenia dd zajęło procesorowi 21,812281 milisekundę. Jeśli podzielimy tę liczbę przez poniższą wartość „sekund, które upłynęły” (23,914596 milisekund), otrzymamy 0,912 (wykorzystany procesor).
  2. Podczas wykonywania polecenia 15 przełączeń kontekstu (znanych również jako przełączniki procesów) wskazuje, że procesory zostały przełączone 15 razy z jednego procesu (lub wątku) do innego.
  3. 2 migracje procesora to oczekiwany rezultat, gdy w przypadku 2-rdzeniowego procesora obciążenie jest równomiernie rozłożone pomiędzy liczbą rdzeni.
    W tym czasie (21,812281 milisekund) łączna liczba zużytych cykli procesora wyniosła 62 025 623, co podzielone przez 0,021812281 sekundy daje 2,843 GHz.
  4. Jeśli podzielimy liczbę cykli przez całkowitą liczbę instrukcji, otrzymamy 4,9 cykli na instrukcję, co oznacza, że wykonanie każdej instrukcji zajęło prawie 5 cykli procesora (średnio). Możemy za to winić (przynajmniej częściowo) liczbę rozgałęzień i braków rozgałęzień (patrz poniżej), co kończy się marnowaniem lub niewłaściwym wykorzystaniem cykli procesora.
  5. Podczas wykonywania polecenia napotkano łącznie 3 552 630 oddziałów. Jest to reprezentacja punktów decyzyjnych i pętli w kodzie na poziomie procesora. Im więcej gałęzi, tym niższa wydajność. Aby to zrekompensować, wszystkie nowoczesne procesory próbują przewidzieć przepływ kodu. 51 348 braków w gałęziach wskazuje, że funkcja przewidywania była błędna w 1,45% przypadków.

Ta sama zasada dotyczy gromadzenia statystyk (lub innymi słowy profilowania) podczas działania aplikacji. Po prostu uruchom żądaną aplikację i po rozsądnym czasie (który zależy od Ciebie) zamknij ją, a perf wyświetli statystyki na ekranie. Analizując te statystyki, możesz zidentyfikować potencjalne problemy.

Perfekcyjny top

perf top jest podobne do polecenia top, ponieważ wyświetla profil systemu niemal w czasie rzeczywistym (znany również jako analiza na żywo).

Opcja -a wyświetli wszystkie znane typy zdarzeń, natomiast opcja -e umożliwi wybranie konkretnej kategorii zdarzeń (zwróconej przez lista osiągnięć):

Wyświetli wszystkie zdarzenia cykli.

perf top -a 

Wyświetli wszystkie zdarzenia związane z zegarem procesora.

perf top -e cpu-clock 

Pierwsza kolumna powyższych wyników reprezentuje procent próbek pobranych od początku analizy, pogrupowanych według symbolu funkcji i obiektu współdzielonego. Więcej opcji jest dostępnych w man perf-top.

Perfekcyjny rekord

Rekord perf uruchamia polecenie i zapisuje dane statystyczne w pliku o nazwie perf.data w bieżącym katalogu roboczym. Działa podobnie do statystyki wydajności.

Wpisz perf record i podaj polecenie:

perf record dd if=/dev/null of=test.iso bs=10M count=1

Raport wydajności

raport wydajności formatuje dane zebrane w perf.data powyżej w raport wydajności:

sudo perf report

Wszystkie powyższe podpolecenia mają dedykowaną stronę podręcznika, którą można wywołać w następujący sposób:

man perf-subcommand

gdzie polecenie podrzędne to lista, stat, góra, rekord lub zgłoś. Są to najczęściej używane polecenia podrzędne; inne są wymienione w dokumentacji (link znajduje się w sekcji Podsumowanie).

Streszczenie

W tym przewodniku przedstawiliśmy Ci perf, narzędzie do monitorowania i analizy wydajności dla systemu Linux. Gorąco zachęcamy do zapoznania się z jego dokumentacją znajdującą się na stronie https://perf.wiki.kernel.org.

Jeśli znajdziesz aplikacje zużywające duży procent zasobów, możesz rozważyć modyfikację kodu źródłowego lub skorzystać z innych alternatyw.

Jeśli masz pytania dotyczące tego artykułu lub sugestie dotyczące ulepszeń, wszyscy jesteśmy uszami. Skontaktuj się z nami, korzystając z poniższego formularza komentarza.