OProfile je profil výkonu pro Linux. V tomto článku prozkoumáme, co dělá, jak jej nainstalovat a nakonfigurovat a jak dát data, která sestavuje, k použití.
Možná se divíte, proč byste potřebovali takový nástroj, protože ve většině distribucí Linuxu je ve výchozím nastavení k dispozici spousta dobrých nástrojů pro analýzu výkonu. Každá instalace obsahuje nástroje jako top a vmstat a sledovací nástroje jako strace jsou obvykle jen apt-get away. Kam se OProfile vejde?
Výše zmíněné nástroje jsou vynikající při získávání snímků systému Linux v reálném čase. Nástroje jako top nebo htop zobrazují všechny spuštěné procesy, jejich aktuální spotřebu paměti a využití procesoru. Ale vědět, jaké procesy a systémová volání spotřebovávají nejvíce zdrojů, se stává problematickým.
To je místo, kde přichází OProfile. Tato sada nástrojů nejen provádí analýzu na hlubší úrovni, ale také ukládá data a umožňuje vám vytvářet zprávy o výkonu, které nabízejí nepřeberné množství informací, které vám pomohou ladit i ten nejnepolapitelnější problém s výkonem.
OProfile není jen pro vývojáře. V desktopovém prostředí vám OProfile může pomoci sledovat úlohy na pozadí náročné na CPU nebo I / O volání, které vás zpomalují a nejsou okamžitě patrné. V rušném systému s posunem priorit procesu může být obtížné tato data shromáždit, natož interpretovat. Díky víceprocesové povaze prostředí serveru je tento úkol u tradičních nástrojů ještě obtížnější.
To znamená, že vývojáři bezpochyby využijí OProfile na maximum. Informace, které uvedu, pokryjí základy obou případů použití, takže se můžete pustit do metrik výkonu jakéhokoli programu Linux.
Instalace
Je třeba udělat velmi důležitou poznámku, než se ponořit hlouběji do OProfilu - možná jej nebudete moci nainstalovat ve virtualizovaném prostředí. Pokud používáte Linux uvnitř prostředí VirtualBox, VMWare nebo podobného virtuálního počítače, OProfile nemusí mít přístup k potřebným čítačům výkonu ke shromažďování dat. Navíc, i když jej můžete použít ve virtuálním prostředí, přesné načasování může být poněkud zkresleno na základě zatížení hostitelského systému, takže mějte na paměti, pokud nepoužíváte nativní hardware.
Několik distribucí Linuxu má ve svých systémech správy balíků OProfile, což usnadňuje instalaci:
- Debian / Ubuntu / Linux Mint - sudo apt-get install oprofile
- Fedora / CentOS - sudo yum install oprofile
- Arch - sudo pacman -S oprofile
Jednoduchý příklad
Jakmile je program nainstalován, pojďme si promočit nohy triviálním, ale užitečným příkladem. Program „ls“ je příkaz, který pravděpodobně používáte stále. Jednoduše zobrazí seznam souborů a složek v aktuálním adresáři. Vystopujme jeho výstup:
sudo operf ls
Uvidíte něco podobného jako na výše uvedeném snímku obrazovky. Jakmile je profiler hotový, oznámí „Profilování hotovo.„Uložila svá data do složky s názvem oprofile_data, kterou lze použít ke generování zprávy.
Spuštění příkazu opreport (v tomto případě bez sudo) vytvoří zprávu podobnou této:
V tomto příkladu výchozí zpráva zobrazuje počet vzorků, když CPU nebyla ve stavu HALT (jinými slovy, aktivně něco dělala). Kallsyms poskytuje vyhledávání symbolů používané profilerem a ld.tak a libc.takže jsou součástí balíčku glibc, společné knihovny propojené téměř se všemi spustitelnými soubory systému Linux, které poskytují základní funkce, které mohou vývojáři použít, aby zabránili novému vývoji kola a poskytli obecnou úroveň kompatibility mezi různými systémy. Vidíte, že skutečný program je měl mnohem méně času než HALT - většinu těžkého zvedání prováděly standardní knihovny.
Jakmile jsme se zprávou hotovi, je vhodné buď odstranit složku s daty, nebo ji uložit pro budoucí analýzu. V tomto příkladu to odstraníme, protože používáme ukázková cvičení. Protože jsme spustili příkaz pomocí sudo, musíme složku odstranit pomocí sudo. Buď opatrný!
sudo rm -Rf oprofile_data
Složitější příklad
V tomto dalším příkladu spustíme program, který ve skutečnosti dělá něco složitějšího, než jen seznam souborů v aktuální složce. Stáhněte si WordPress s wget.
sudo operf wget http: // wordpress.org / nejnovější.dehet.gz
Po tomto příkladu můžeme vygenerovat zprávu pomocí příkazu „opreport“:
Po této akci uvidíte mnohem více aktivit. Příkaz wget musel udělat spoustu práce v zákulisí, aby získal nejnovější kopii WordPress. Ačkoli není nutné každou položku zkoumat, zajímavými body zájmu jsou:
- ath9k a ath9k_hw - tyto moduly jsou zodpovědné za WiFi připojení na tomto notebooku.
- mac80211 a cfg80211 - Tyto knihovny byly pomocné při provádění síťového připojení požadovaného wget.
- libnss_dns a libresolv byly použity při řešení wordpressu.org doménu na IP adresu, aby wget mohl navázat připojení HTTP.
- libcrypto a libssl - tyto knihovny jsou součástí knihovny OpenSSL. Tím byla provedena práce na dekódování přijatých dat z adresy https: //. Všimněte si, že i když jsme zadali URL s http: //, server WordPress nás přesměroval na https: // a wget následoval toto přesměrování.
- libpthread - Tato knihovna provádí operace vláken, které programům umožňují provádět více věcí najednou. V tomto případě wget zahájil vlákno ke stažení programu a také poskytl indikátor průběhu stahování na základě ASCII na obrazovce.
Tento druh dat může vývojáři poskytnout spoustu informací. Jak je to ale důležité pro správce systému serveru nebo zkušeného uživatele na ploše? Když víme, které části programu zabírají nejvíce času CPU, můžeme zjistit, co je potřeba optimalizovat nebo kde dochází ke zpomalení, což nám umožňuje lépe se rozhodovat o tom, jak optimalizovat náš systém.
V tomto příkladu nejvíce času CPU zabraly rutiny krypto / SSL. To je pochopitelné, protože kryptografie je časově náročný úkol. Měl wordpress.web org nás nepřesměroval na https: // tato knihovna by nebyla použita, což nám šetří čas CPU. Síťová vrstva by se stále používala, ale použití kabelového připojení místo bezdrátového by pravděpodobně bylo méně zdanitelné. Zakázání indikátoru průběhu v programu wget (pomocí přepínače -nv) by ušetřilo čas CPU při zobrazování průběhu stahování.
Kopat do symbolů
I když výchozí přehled poskytuje cenné a užitečné informace, můžeme kopat dále. Spuštěním tohoto:
opreport --demangle = smart --symboly
Můžeme přesně zjistit, kolik času CPU v knihovnách spotřebovalo:
V tomto příkladu jsem použil výše uvedený příkaz wget, ale použil jsem URL http: // (ten, který nepřesměrovává na https: //) a ve stopě můžete vidět nepřítomnost knihoven OpenSSL. Namísto pouhého názvu knihovny však nyní máme úplný seznam příslušných funkcí. Jak vidíte, síťová vrstva spotřebovávala většinu času mimo HALT CPU.
Posun na další úroveň
V předchozích příkladech jsme použili OProfile, abychom se podívali na jeden program najednou. Celý svůj systém můžete zkontrolovat najednou pomocí přepínače -system-wide:
sudo operf - celý systém
Pomocí této techniky bude OProfile shromažďovat statistiky stejným způsobem a zastaví se, když stisknete kombinaci kláves CTRL + C. Poté můžete spustit příkaz opreport. Vzhledem k tomu, že profiler pravděpodobně vygeneruje mnohem více dat (zejména na počítači nebo zaneprázdněném serveru).
hlášení & gt; zpráva.txt
Přehled je nyní možné zobrazit v souboru s názvem report.txt
Nízká režie
Je důležité si uvědomit, že i když by OProfile neměl zasahovat do provozu vašich programů, vytvoří trochu režie a tím zpomalí provádění. V našich jednoduchých příkladech výše to nevytvořilo problém, ale v programu s dlouhým prováděním a rozsáhlými voláními funkcí si pravděpodobně všimnete rozdílu. Z tohoto důvodu bych nedoporučoval používat tento program v prostředí produkčního serveru, pokud se nevyskytne kritický problém s výkonem, který musí být vyřešen za provozu. Dokonce i tehdy bych to použil jen tak dlouho, abych problém našel.
Závěr
OProfile je výkonný nástroj pro profilování výkonu. Využívá nejnižší úrovně dostupné v systému Linux, aby získal čítače výkonu a metriky, které vám poskytnou cenné informace o vašich programech.
Časy dohadování ladění výkonu jsou pryč - nyní máte moc přesně vědět, co váš systém dělá a jak ho vylepšit. Studiem zpráv generovaných programem OProfile můžete přijímat informovaná rozhodnutí založená na datech o optimalizaci vašeho systému.