perf 提供较高的 copy_user_generic_string 和 clear_page_rep

perf 提供较高的 copy_user_generic_string 和 clear_page_rep

我正在用 C++ 构建一个从磁盘读取大量数据的服务器。使用 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就是它所说的,你正在复制数据。

相关内容