Jak działa flaga gcc-pg?
Próbuję zrozumieć, jak działa znacznik -pg
(LUB -p
) podczas kompilacji kodu C z gcc
.
Oficjalna dokumentacja gcc stwierdza tylko :
-pg
Wygeneruj dodatkowy kod do zapisu informacji o Profilu odpowiednich dla programu analitycznego gprof. Musisz użyć tej opcji podczas kompilacji plików źródłowych, o których chcesz DANE, a także musisz jej użyć podczas łączenia.
To naprawdę mnie interesuje, ponieważ robię mały badania nad profilerami-próba wybrania najlepszego narzędzia do pracy.
3 answers
Kompilowanie za pomocą -pg
instrumentów Twojego kodu tak, aby gprof
przekazywał szczegółowe informacje, patrz Instrukcja gprof, 9.1 implementacja profilowania
Profilowanie działa poprzez zmianę sposobu kompilacji każdej funkcji w twoim programie, tak aby kiedy zostanie wywołana, ukryła pewne informacje o tym, skąd została wywołana. Na tej podstawie profiler może dowiedzieć się, jaka funkcja go wywołała i policzyć, ile razy została wywołana. Tej zmiany dokonuje kompilator, gdy Twój program jest kompilowany z opcją
-pg
, która powoduje, że każda funkcja wywołujemcount
(lub_mcount
lub__mcount
, w zależności od systemu operacyjnego i kompilatora) jako jedną z pierwszych operacji.Procedura
mcount
, zawarta w bibliotece profilowania, jest odpowiedzialna za rejestrowanie w tabeli Wykresów wywołań w pamięci zarówno jej procedury macierzystej (dziecka), jak i rodzica rodzica. Zazwyczaj odbywa się to poprzez zbadanie ramki stosu, aby znaleźć zarówno adres dziecka, jak i adres zwrotny w oryginale rodzic. Ponieważ jest to operacja bardzo zależna od maszyny,mcount
sama w sobie jest zazwyczaj krótką procedurą wstępną języka asemblacji, która wyodrębnia wymagane informacje, a następnie wywołuje__mcount_internal
(normalną funkcję C) z dwoma argumentami-frompc
iselfpc
.__mcount_internal
jest odpowiedzialny za utrzymanie wykresu wywołania w pamięci, który rejestrujefrompc
,selfpc
, i liczba razy każdy z tych łuków połączeń był przemierzany....
Należy pamiętać, że z takim oprzyrządowaniem profiler, jesteś profilowanie tego samego kodu, który skompilowałbyś w wydaniu bez profilowania oprzyrządowania. Istnieje narzut związany z samym kodem oprzyrządowania. Ponadto kod oprzyrządowania może zmieniać użycie instrukcji i pamięci podręcznej danych.
W przeciwieństwie do oprzyrządowania, oprzyrządowanie takie jak Intel VTune działa na kodzie bez oprzyrządowania, patrząc na licznik programu docelowego w regularnych odstępach czasu, używając przerwań systemu operacyjnego. Może również kwerendować specjalne Rejestry PROCESORA, aby dać ci jeszcze lepszy wgląd w to, co się dzieje.Zobacz także Profilery oprzyrządowanie a próbkowanie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
Ten link zawiera krótkie wyjaśnienie, jak działa gprof.
Ten link daje obszerną krytykę tego. (Sprawdź moją odpowiedź na zarchiwizowane pytanie.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:16:51
Z tego źródła: https://elinux.org/images/0/0c/Bird-LS-2009-Measuring-function-duration-with-ftrace.pdf :
" Oprzyrządowanie występuje w dwóch głównych formularze-jawnie zadeklarowane tracepoints i implicit tracepoints. Wyraźne tracepoints składają się z programisty zdefiniowanego deklaracje określające lokalizację tracepoint, oraz dodatkowe informacje o tym, jakie dane powinny być zbierane w określonym miejscu śledzenia. Implicit tracepoints są umieszczane w kodzie automatycznie przez kompilatora, albo ze względu na flagi kompilatora, albo przez programistę redefinicja powszechnie używanych makr.
Do funkcji instrumentu implicite, gdy jądro jest skonfigurowane do obsługi śledzenia funkcji, kernel build system dodaje -pg do FLAG używanych z kompilator. Powoduje to, że kompilator dodaje kod do prologu każdej funkcji, która wywołuje specjalny zespół rutyna zwana mcount. Ta opcja kompilatora jest specjalnie przeznaczone do wykorzystania do profilowania i śledzenia cele. "
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-23 07:49:14