GNU/Linux >> Znalost Linux >  >> Linux

Jak nainstalovat a používat profilovací nástroj Gprof na Linuxu

Není pochyb o tom, že testování je integrální a jedním z nejdůležitějších aspektů procesu vývoje softwaru. A testováním nemáme na mysli pouze testování kódu na chyby – detekce chyb je samozřejmě důležitá, protože nikdo by nechtěl, aby jejich software byl chybný – na výkonu kódu v dnešní době také záleží.

Pokud je testován do posledního bitu, testování výkonu efektivně testuje, kolik času konkrétní část kódu – řekněme funkce – spotřebuje. Jak to obvykle bývá, funkce nebo skupina funkcí může odpovídat jedné z mnoha funkcí softwaru. Pokud tedy prostřednictvím testování výkonu můžeme zvýšit výkon těchto funkcí v kódu, celkový výkon softwaru se zlepší.

Pokud jste programátor, který píše kód v programovacím jazyce C, Pascal nebo Fortran77 a jako vývojovou platformu používá Linux, budete rádi, že existuje výkonný nástroj, pomocí kterého můžete zkontrolovat výkon svého kódu – dotyčným nástrojem je Gprof. V tomto tutoriálu probereme podrobnosti o tom, jak si tento nástroj stáhnout, nainstalovat a používat.

Než budeme pokračovat, vezměte prosím na vědomí, že všechny příklady a pokyny uvedené v tomto tutoriálu byly testovány na Ubuntu 14.04LTS a použitá verze Gprof je 2.24.

Co je Gprof?

Takže, co přesně je Gprof? Podle oficiální dokumentace nástroje poskytuje uživatelům profil provádění jejich programů C, Pascal nebo Fortran77. Gprof v podstatě dělá to, že vypočítává množství času stráveného každou rutinou nebo funkcí. "Dále jsou tyto časy šířeny podél okrajů grafu volání. Cykly jsou objeveny a volání do cyklu jsou prováděna pro sdílení času cyklu."

Pokud to vše zní v tomto bodě trochu zmateně (zejména část v uvozovkách), nebojte se, protože to objasníme na příkladu. Takže čtěte dál.

Stáhnout a nainstalovat Gprof

Nejprve zkontrolujte, zda je nástroj již nainstalován ve vašem systému. Chcete-li to provést, stačí spustit následující příkaz v terminálu.

$ gprof

Pokud se zobrazí chyba jako:

$ a.out:Žádný takový soubor nebo adresář

pak by to znamenalo, že nástroj je již nainstalován. Jinak jej můžete nainstalovat pomocí následujícího příkazu:

$ apt-get install binutils

Použití Gprof

Netřeba dodávat, že nástroji jako Gprof nejlépe porozumíte na praktickém příkladu. Začneme tedy programem v jazyce C, který budeme profilovat pomocí Gprof. Zde je program:

//test_gprof.c

#include

void func4(void)
{
    printf("\n Uvnitř func4() \n");
    for(int count=0;count<=0XFFFF;count++);
}

void func3(void)
{
    printf("\n Uvnitř func3() \n");
    for(int count=0;count<=0XFFFFFFF;count++);
}

void func2(void)
{
    printf("\n Uvnitř func2() \n");

    for (int count=0;count<=0XFFF;count++ );

    func3();
}

void func1(void)
{
    printf("\n Uvnitř func1() \n");
    for(int count=0;count<=0XFFFFFF;count++);

    func2();
}

int main(void)
{
    printf("\n main() začíná...\n");
    for (int count=0;count<=0XFFFFF;count++);

    func1();
    func4();
    printf("\n main() končí...\n");

    return 0;
}

Upozorňujeme, že výše uvedený kód (test_gprof.c ) je speciálně napsán pro vysvětlení Gprof - není převzat z žádného skutečného projektu.

Nyní, dalším krokem je kompilace tohoto kódu pomocí gcc. Všimněte si, že v ideálním případě bych výše uvedený kód zkompiloval pomocí následujícího příkazu:

$ gcc -Wall -std=c99 test_gprof.c -o test_gprof

Ale protože musíme profilovat kód pomocí Gprof, budu muset použít -pg možnost příkazového řádku poskytovaná kompilátorem gcc. Příkaz tedy zní:

$ gcc -Wall -std=c99 -pg test_gprof.c -o test_gprof

Pokud se podíváte na manuálovou stránku gcc, zde je to, co říká o -pg možnost:

"Vygenerujte extra kód pro zápis informací o profilu vhodných pro analytický program gprof. Tuto možnost musíte použít při kompilaci zdrojových souborů, o kterých chcete data, a musíte ji použít také při propojování."

Nyní, když se vrátíme k výše uvedenému příkazu, po jeho úspěšném provedení vytvoří binární soubor s názvem test_gprof ve výstupu. Dalším krokem je spuštění tohoto spustitelného souboru. Zde je návod, jak jsem spustil binární soubor v mém případě: 

$ ./test_gprof

Po provedení příkazu uvidíte soubor s názvem gmon.out se vygeneruje v aktuálním pracovním adresáři.

$ ls gmon*
gmon.out


Právě tento soubor obsahuje všechny informace, které nástroj Gprof potřebuje k vytvoření pro člověka čitelných profilovacích dat. Nyní tedy použijte nástroj Gprof následujícím způsobem:

$ gprof test_gprof gmon.out> profile-data.txt

Obecná syntaxe tohoto příkazu je v zásadě:

$ gprof [název-spustitelného-souboru] gmon.out> [název-souboru-který-bude-obsahovat-profilovací-data]

Než se nám zobrazí informace, soubor profile-data.txt soubor obsahuje, stojí za zmínku, že výstup, který Gprof čitelný člověkem vytváří, je rozdělen na dvě části:plochý profil a graf volání. Zde je to, co říká manuálová stránka Gprof o informacích v těchto dvou sekcích:

„Plochý profil ukazuje, kolik času váš program strávil v jednotlivých funkcích a kolikrát byla tato funkce volána. Pokud chcete jednoduše vědět, které funkce vypalují většinu cyklů, je to zde stručně uvedeno.“ em>

"Graf volání ukazuje pro každou funkci, které funkce ji volaly, které další funkce volala a kolikrát. Je zde také odhad, kolik času bylo stráveno podprogramy každé funkce. To může naznačovat místa, kde byste se mohli pokusit eliminovat volání funkcí, která zabírají hodně času.“

Vyzbrojeni těmito informacemi budete nyní v lepší pozici, abyste porozuměli datům přítomným ve vašem výstupním souboru profilování (profile-data.txt v mém případě). Zde je plochý profil v mém případě:

Plochý profil:

Každý vzorek se počítá jako 0,01 sekundy.
% kumulativního vlastního součtu
čas sekund sekundy hovory ms/hovor ms/jmeno hovoru
96,43> 0,81 0,81 1 810,00 810,00 func3
3,57 0,84 0,03 1 30,00 840,00 func1
0,00 0,84 0,00
1 0,00 func 810,0.0.c

A zde je význam jednotlivých polí:

Pokračujeme, zde je graf volání v mém případě:

Graf hovoru (vysvětlení následuje)


zrnitost:každý vzorový zásah pokrývá 4 bajty po dobu 1,19 % z 0,84 sekund

index % času samo děti nazývané jméno
0,03 0,81 1/1 hlavní [2]
[1] 100,0 0,03 0,81 1 funkce1 [1]
0,00 0,81 1/1 funkce2 [3]
-- ---------------------------------------------

[2] 100,0 0,00 0,84 hlavní [2]
0,03 0,81 1/1 funkce1 [1]
0,00 0,00 1/1 funkce4 [5]
---- --------------------------------------------
0,00 0,81 1 /1 funkce1 [1]
[3] 96,4 0,00 0,81 1 funkce2 [3]
0,81 0,00 1/1 funkce3 [4]
------------- -----------------------------------
0,81 0,00 1/1 funkce2 [3]
[4] 96,4 0,81 0,00 1 func3 [4]
---------------------------------- ----------- ---
0,00 0,00 1/1 hlavní [2]
[5] 0,0 0,00 0,00 1 funkce4 [5]

Následující snímky obrazovky vysvětlují informace, které graf volání obsahuje:

Pokud vás zajímá zdroj výše uvedených snímků obrazovky, dovolte mi, abych vám řekl, že všechny tyto informace jsou ve výstupním souboru, který obsahuje informace o profilování, včetně plochého profilu a grafu volání. V případě, že chcete, aby byly tyto informace z výstupu vynechány, můžete použít -b možnost poskytnutá Gprof.

Závěr

Netřeba dodávat, že jsme zde jen poškrábali povrch, protože Gprof nabízí spoustu funkcí (stačí se podívat na jeho manuálovou stránku). Nicméně cokoli, co jsme zde probrali, by vám mělo stačit, abyste mohli začít. V případě, že Gprof již používáte a chcete zde se všemi sdílet něco souvisejícího s tímto nástrojem, stačí napsat komentář níže.


Linux
  1. Jak nainstalovat a používat Flatpak v Linuxu

  2. Jak nainstalovat a používat nástroj příkazového řádku Mosh Linux

  3. GPROF Tutorial – Jak používat Linux GNU GCC Profiling Tool

  1. Jak nainstalovat a používat telnet na Kali Linux

  2. Jak nainstalovat a používat Linux Screen?

  3. Jak nainstalovat a používat Traceroute v Linuxu

  1. Jak nainstalovat a používat SSHFS na Linuxu

  2. Jak nainstalovat a používat Slack v Linuxu

  3. Jak nainstalovat a používat PuTTY na Linuxu