gperftools неточности с CPUPROFILE_FREQUENCY

У меня есть задача, для которой gprof кажется, что не может быть использовано. Callgrind очень помогает здесь, но когда нашел решение, больше gprof-Как я. е. gperftools, погрузись в них, чтобы попробовать.

Поэтому я написал фиктивную программу и провел несколько таких испытаний:

0:10:1386682334:user@host:~$ time gcc test.c -o test -lprofiler -Lgperftools-2.
1/.libs/ -g

real    0m0.085s
user    0m0.048s
sys     0m0.032s
0:11:1386682357:user@host:~$ time CPUPROFILE_FREQUENCY=50 CPUPROFILE=~
/test_profile LD_LIBRARY_PATH=~/gperftools-2.1/.libs/ ./test && ~/gperftools-2.
1/src/pprof test test_profile --text

PROFILE: interrupts/evictions/bytes = 14/0/216

real    0m7.157s
user    0m0.008s
sys     0m0.672s
Using local file test.
Using local file test_profile.
Removing killpg from all stack traces.
Removing do_system from all stack traces.
Total: 14 samples
14 100.0% 100.0%       14 100.0% do_system
0   0.0% 100.0%       14 100.0% __libc_start_main
0   0.0% 100.0%       14 100.0% _start
0   0.0% 100.0%        2  14.3% bar
0   0.0% 100.0%       14 100.0% foo
0   0.0% 100.0%       14 100.0% main
0:12:1386682465:user@host:~$ time CPUPROFILE_FREQUENCY=50000 CPUPROFIL
E=~/test_profile LD_LIBRARY_PATH=~/gperftools-2.1/.libs/ ./test && ~/gperftools
-2.1/src/pprof test test_profile --text

PROFILE: interrupts/evictions/bytes = 80/0/520

real    0m7.199s
user    0m0.016s
sys     0m0.704s
Using local file test.
Using local file test_profile.
Removing killpg from all stack traces.
Total: 80 samples
78  97.5%  97.5%       79  98.8% do_system
1   1.2%  98.8%        1   1.2% __find_specmb
1   1.2% 100.0%        1   1.2% __libc_waitpid
0   0.0% 100.0%        1   1.2% _IO_vfprintf_internal
0   0.0% 100.0%       80 100.0% __libc_start_main
0   0.0% 100.0%        1   1.2% __printf
0   0.0% 100.0%       80 100.0% _start
0   0.0% 100.0%       27  33.8% bar
0   0.0% 100.0%       79  98.8% foo
0   0.0% 100.0%       80 100.0% main

CPUPROFILE_FREQUENCY задокументировано Вот по умолчанию на 100 и быть Сколько прерываний / сек выборок процессора-профилировщика. Я настроен на установку 50 на 7-секундной фиктивной программе, выполняющей выборку только 14 раз, а на установке на 50000 выборка только 80 раз.

Я хотел бы знать, можно ли добиться большей точности при таком простом изменении среды и не поврежден ли CPUPROFILE_FREQUENCY в gperftools.

0

Решение

Ваша программа имела время выполнения от 0,008 до 0,048 с. Профилировщик только профилирует время, потраченное на выполнение пользовательского пространства, и поэтому я думаю, что ваши результаты ожидаемы.

Попробуйте запустить фиктивную программу, которая тратит 7 секунд на реальные вычисления. Например, вычислить функцию Аккермана.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]