Vyhledávání na webu

Perf – nástroj pro sledování a analýzu výkonu pro Linux


Když mluvíme o výkonu ve výpočetní technice, máme na mysli vztah mezi našimi zdroji a úkoly, které nám umožňují dokončit v daném časovém období.

V době nelítostné konkurence mezi společnostmi je důležité, abychom se naučili co nejlépe využít to, co máme. Plýtvání hardwarovými nebo softwarovými prostředky nebo nedostatečná schopnost vědět, jak je používat efektivněji, končí jako ztráta, kterou si prostě nemůžeme dovolit, pokud chceme být na vrcholu naší hry.

Zároveň si musíme dávat pozor, abychom naše zdroje nevyčerpali na hranici, kdy trvalé používání způsobí nenapravitelné škody.

V tomto článku vám představíme relativně nový nástroj pro analýzu výkonu a poskytneme tipy, které můžete použít k monitorování systémů Linux, včetně hardwaru a aplikací. To vám pomůže zajistit, aby fungovaly tak, abyste byli schopni produkovat požadované výsledky bez plýtvání zdroji nebo vlastní energií.

Představení a instalace Perf v Linuxu

Linux mimo jiné poskytuje nástroj pro sledování a analýzu výkonu nazvaný pohodlně perf. Co tedy odlišuje perf od jiných známých nástrojů, které již znáte?

Odpověď zní, že perf poskytuje přístup k jednotce sledování výkonu v CPU, a umožňuje nám tak zblízka sledovat chování hardwaru a související události.

Kromě toho může také monitorovat softwarové události a vytvářet zprávy ze shromážděných dat.

perf můžete nainstalovat v distribucích založených na RPM s:

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

V Debianu a odvozeninách:

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

Pokud uname -r ve výše uvedeném příkazu vrací další řetězce kromě skutečné verze (v mém případě 3.2.0-23-generic), možná budete muset zadat linux-tools-3.2.0-23 namísto použití výstupu uname.

Je také důležité poznamenat, že perf přináší neúplné výsledky při spuštění v hostovi nad VirtualBoxem nebo VMWare, protože neumožňují přístup k hardwarovým čítačům jako jiné virtualizační technologie (jako KVM nebo XEN) .

Navíc mějte na paměti, že některé příkazy perf mohou být ve výchozím nastavení omezeny na root, což lze zakázat (dokud nebude systém restartován) takto:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Pokud potřebujete trvale zakázat paranoidní režim, aktualizujte následující nastavení v souboru /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Dílčí příkazy

Jakmile nainstalujete perf, můžete se podívat na jeho manuálovou stránku, kde najdete seznam dostupných dílčích příkazů (podpříkazy si můžete představit jako speciální volby, které otevírají určité okno do systému). Nejlepších a úplnějších výsledků dosáhnete, pokud použijete perf buď jako root, nebo pomocí sudo.

Seznam výkonů

seznam perf (bez možností) vrátí všechny typy symbolických událostí (dlouhý seznam). Pokud chcete zobrazit seznam událostí dostupných v konkrétní kategorii, použijte seznam perf následovaný názvem kategorie ([hw|sw|cache|tracepoint|pmu|event_glob ]), jako:

Zobrazit seznam softwarových předdefinovaných událostí v Linuxu:

perf list sw 

Statistika výkonu

perf stat spouští příkaz a shromažďuje statistiky výkonu Linuxu během provádění takového příkazu. Co se stane v našem systému, když spustíme dd?

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

Výše uvedené statistiky mimo jiné ukazují:

  1. Provedení příkazu dd trvalo 21,812281 milisekund CPU. Pokud toto číslo vydělíme hodnotou „uplynulého času v sekundách“ níže (23,914596 milisekund), dostaneme 0,912 (využitý CPU).
  2. Během provádění příkazu 15 kontextových přepínačů (známých také jako přepínače procesů) značí, že CPU byly 15krát přepnuty z jednoho procesu (nebo vlákna) do druhého.
  3. 2 Migrace CPU jsou očekávaným výsledkem, když je u 2jádrového CPU pracovní zátěž rozdělena rovnoměrně mezi počet jader.
    Během této doby (21,812281 milisekund) byl celkový počet spotřebovaných cyklů CPU 62 025 623, což vyděleno 0,021812281 sekundami dává 2,843 GHz.
  4. Pokud vydělíme počet cyklů celkovým počtem instrukcí, dostaneme 4,9 cyklů na instrukci, což znamená, že dokončení každé instrukce trvalo téměř 5 cyklů CPU (v průměru). Můžeme to (alespoň částečně) vinit z počtu poboček a chybných větví (viz níže), které nakonec plýtvají nebo zneužívají cykly CPU.
  5. Při provádění příkazu bylo zjištěno celkem 3 552 630 větví. Toto je reprezentace rozhodovacích bodů a smyček v kódu na úrovni CPU. Čím více větví, tím nižší výkon. Aby to kompenzovaly, všechny moderní CPU se pokoušejí předvídat tok, který kód bude trvat. 51 348 zmeškaných větví znamená, že funkce predikce byla chybná 1,45 % případů.

Stejný princip platí pro shromažďování statistik (nebo jinými slovy profilování) za běhu aplikace. Jednoduše spusťte požadovanou aplikaci a po přiměřené době (což je na vás) ji zavřete a perf zobrazí statistiky na obrazovce. Analýzou těchto statistik můžete identifikovat potenciální problémy.

Perf top

perf top je podobný příkazu top v tom, že zobrazuje profil systému téměř v reálném čase (známý také jako živá analýza).

Pomocí možnosti -a zobrazíte všechny známé typy událostí, zatímco možnost -e vám umožní vybrat konkrétní kategorii události (kterou vrací seznam výkonů):

Zobrazí všechny události cyklů.

perf top -a 

Zobrazí všechny události související s hodinami CPU.

perf top -e cpu-clock 

První sloupec ve výstupu výše představuje procento vzorků odebraných od začátku běhu, seskupené podle funkce Symbol a Sdílený objekt. Další možnosti jsou k dispozici v man perf-top.

Výkonový rekord

Záznam perf spustí příkaz a uloží statistická data do souboru s názvem perf.data v aktuálním pracovním adresáři. Funguje podobně jako perf stat.

Zadejte perf record a poté příkaz:

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

Zpráva o výkonu

perf report formátuje data shromážděná v perf.data výše do přehledu výkonu:

sudo perf report

Všechny výše uvedené dílčí příkazy mají vyhrazenou manuálovou stránku, kterou lze vyvolat jako:

man perf-subcommand

kde dílčí příkaz je buď list, stat, top, record nebo nahlásit. Toto jsou nejčastěji používané dílčí příkazy; ostatní jsou uvedeny v dokumentaci (odkaz naleznete v části Souhrn).

souhrn

V této příručce jsme vám představili perf, nástroj pro sledování a analýzu výkonu pro Linux. Důrazně vám doporučujeme, abyste se seznámili s jeho dokumentací, která je udržována na https://perf.wiki.kernel.org.

Pokud najdete aplikace, které spotřebovávají vysoké procento zdrojů, můžete zvážit úpravu zdrojového kódu nebo použít jiné alternativy.

Pokud máte dotazy k tomuto článku nebo návrhy na zlepšení, jsme všichni ušima. Neváhejte nás kontaktovat pomocí formuláře pro komentáře níže.