perf дает высокие значения copy_user_generic_string иclear_page_rep
Я создаю сервер на С++, который много читает с диска. При записи с помощью perf я получаю такой отчет:
28.20% server [kernel.kallsyms] [k] copy_user_generic_string
18.14% server [kernel.kallsyms] [k] clear_page_rep
7.31% server server [.] SearchEngine::value_intersection<FullTextRecord>
5.64% server server [.] SearchEngine::value_intersection<DomainLinkFullTextRecord>
4.20% server libz.so.1.2.11 [.] inflate
1.63% server [kernel.kallsyms] [k] rmqueue
1.39% server server [.] SearchEngine::value_intersection<LinkFullTextRecord>
1.23% server [kernel.kallsyms] [k] page_fault
1.15% server [kernel.kallsyms] [k] native_queued_spin_lock_slowpath
1.04% server [kernel.kallsyms] [k] xas_load
0.87% server [kernel.kallsyms] [k] __pagevec_lru_add_fn
0.81% server [kernel.kallsyms] [k] find_get_entry
0.80% server libz.so.1.2.11 [.] crc32_z
0.65% server [kernel.kallsyms] [k] down_read_trylock
0.61% server [kernel.kallsyms] [k] workingset_activation
0.56% server [kernel.kallsyms] [k] iommu_map_page
0.51% server [kernel.kallsyms] [k] generic_file_buffered_read
0.50% server libc-2.31.so [.] __memmove_avx_unaligned_erms
Есть ли способ узнать, какая часть моего кода вызывает высокие значения copy_user_generic_string иclear_page_rep?
Пытался найти информацию об этих двух в Интернете, но не смог найти хорошей документации.
1 ответ
clear_page_rep
— это обнуление страниц памяти ядром перед тем, как они будут обработаны вашим процессом. Это означает, что вы выделяете большие куски памяти. Они очищаются в целях безопасности, иначе вам могут быть обработаны страницы с данными, поступающими от другого процесса или даже ядра.
copy_user_generic_string
там написано, что вы копируете данные.