Co je to profilování kódu? Jak používat Sysprof?
Profilování je technika sledování programu za běhu. Profilování aplikace vám umožní zjistit v kterých funkcích je při provádění programu stráveno nejvíce času. Díky tomu snadno zjistíte, které funkce přímo zpomalují program a které naopak na rychlost velký vliv nemají. Při optimalizaci aplikace se pak stačí zaměřit jen ty funkce, které problém s výkonem způsobují a získat tak za málo peněz hodně muziky.
Pár slov o profilování
Cílem profilování je získání profilu běžící aplikace. Jeho použitím zjistíte, které funkce aplikace volá, kolik v nich stráví času a graf těchto volání. Profilování je dynamická činnost. Na rozdíl od zdlouhavé statické analýzy kódu, kdy kód procházíte ručně řádek po řádku, profilování probíhá za běhu analyzované aplikace.
Na profilování existuje několik nástrojů a ne všechny pracují stejně. Většina profilerů pracuje tak, že do programu vloží značky (třeba před každé volání funkce), které jim umožní sledovat běh aplikace. U kompilátoru gcc slouží k vložení těchto značek parametr -pg. Pokud zkompilujete svůj program s tímto parametrem, bude při ukončení tohoto programu vytvořen soubor gmon.out ve kterém budou informace o jeho běhu. Ke zpracování tohoto souboru můžete použít například GNU gprof, který umí dané informace interpretovat.
Naproti tomu profiler Sysprof na to jde jinak a nepotřebuje, aby sledovaný program byl přeložen s parametrem -pg.
Sysprof
Sysprof je linuxový vzorkovací profiler. Skládá se ze dvou částí: Z jaderného modulu a GUI aplikace. Jaderný modul Sysprof periodicky generuje výpis zásobníku pro běžící proces nebo jaderné vlákno, zatímco aplikační část tyto informace zaznamenává a zpracovává.
Sysprof sleduje celý systém nikoli jen jednu konkrétní aplikaci. Díky tomu, že jde o jaderný modul, není třeba žádnou aplikaci znovu kompilovat s parametrem -pg. Při profilování je vhodné, aby byly v systému debugovací balíčky sledované aplikace, jinak nebudou zobrazeny jména jejich funkcí. V případě, že chcete profilovat vlastní aplikaci, to znamená zkompilovat ji s volbou -g (V případě, že používáte překladač gcc. Pokud používáte jiný, může být přepínač rozdílný.), která zaručí vložení debugovacích symbolů do výsledného kódu.
Použití Sysprof na Ubuntu / Kubuntu
Instalaci provede příkazem:
sudo apt-get install sysprof
Nyní je třeba zavést jaderný modul profileru pomocí příkazu:
sudo modprobe sysprof-module
Pokud dostanete chybovou hlášku:
FATAL: Module sysprof_module not found.
Spusťte tento příkaz:
sudo m-a a-i sysprof-module
Odklepněte ok a nechte pracovat.
Teď už by měl jít modul zavést.
Je čas spustit Sysprof Profiler. Pro spuštění profilování klepněte na tlačítko Start. Nyní by již mělo být sledování systému pomocí modulu Sysprof v plném proudu a je tedy třeba spustit aplikaci, kterou chcete profilovat. Aplikaci spusťte a používejte k takové činnosti, kterou chcete profilovat. Poté sledovanou aplikaci ukončete a v Sysprof klepněte na tlačítko Profile.
Ukázka výstupu Sysprof
V levém horním rámu uvidíte volané funkce. Můžete si tam najít funkci main vašeho programu a v pravém rámu uvidíte hierarchický seznam volání z této funkce, který si můžete rozklikat a prohlédnout. Zároveň u jmen funkcí uvidíte čas strávený v jednotlivých funkcích. V levém dolním rámu najdete funkce, které volali vámi aktuálně vybranou funkci.
Výsledky si můžete uložit do souboru ve formátu XML (Extensible Markup Language) a zpracovat je až později, klidně na jiném počítači.
Po skončení profilování odeberte modul z jádra příkazem:
sudo modprobe -r sysprof-module
Závěrem
V tomto článku o profilování jsem se pokusil vysvětlit co to profilování je, přiblížit způsob, jakým profilery pracují, provést vás instalací jednoho z nejznámějších linuxových profilerů Sysprof a popsat jeho ovládání.