3

I am building a server in c++ that reads a lot from disc. When recording with perf I get this report:

  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

Is there any way to know which part of my code causes the high copy_user_generic_string and clear_page_rep?

Tried finding information about those two online but could not find any good documentation.

joscul
  • 31

1 Answers1

1

clear_page_rep is the zeroing of the memory pages by the kernel before they are handled to your process. This means that you allocate large chunks of memory. These are cleared for security purposes, otherwise you can be handled pages with data coming from another process or even the kernel.

copy_user_generic_string is what it says, you are copying data around.