Для простого C кода, подобного этому
#include <stdio.h>
int main()
{
int i = 0;
FILE *pf;
while (i++ <= 1000000) {
if ( i%2 == 0 ) {
pf = fopen( "myfile.txt", "a" );
fprintf( pf, "%d\n", i );
fclose( pf );
} else {
printf("%d ", i);
}
}
return 0;
}
Я использовал следующие команды для создания двоичного файла
$ gcc -c test.c
$ gcc -o test -Wl,--emit-relocs \
-Wl,--rpath=/opt/glibc-2.23-install \
-Wl,--dynamic-linker=/opt/glibc-2.23-install/lib/ld-2.23.so \
test.o
Затем я выполнил следующие две команды perf
, чтобы запись и отчет.
$ perf record -e cycles:u -j any,u -a -o perf.data.user -- test
$ perf report -i perf.data.user
Часть вывода показана ниже:
# Overhead Command Source Shared Object Source Symbol Target Symbol Basic Block Cycles
# ........ ....... .................... ......................................... ......................................... ..................
#
7.69% perf libc-2.23.so [.] __GI_____strtoll_l_internal [.] __GI_____strtoll_l_internal -
5.13% perf perf [.] perf_evsel__enable [.] perf_evsel__enable -
4.49% perf perf [.] perf_mmap__push [.] perf_mmap__push -
4.49% test libc-2.23.so [.] _int_malloc [.] _int_malloc -
3.85% perf perf [.] __perf_mmap__read_init [.] __perf_mmap__read_init -
3.85% perf ld-2.23.so [.] strcmp [.] strcmp -
3.85% test ld-2.23.so [.] _dl_map_object_deps [.] _dl_map_object_deps -
3.21% perf perf [.] record__mmap_read_evlist.constprop.27 [.] record__mmap_read_evlist.constprop.27 -
2.56% perf [unknown] [.] 0xffffffffb2c00ae7 [.] __read_nocancel -
2.56% perf perf [.] record__mmap_read_evlist.constprop.27 [.] perf_mmap__push -
2.56% perf perf [.] perf_mmap__push [.] record__mmap_read_evlist.constprop.27 -
2.56% test libc-2.23.so [.] malloc [.] malloc -
1.92% perf [unknown] [.] 0xffffffffb2c00ae7 [.] perf_mmap__push -
1.92% perf perf [.] cmd_record [.] cmd_record -
....
Я хотел бы знать, что такое [unknown]
в исходном столбце? а почему в отчете нет main
? Хотя я показал часть вывода, на самом деле в файле отчета нет main.