Инструмент perf не может правильно собирать информацию JIT в Spark - PullRequest
1 голос
/ 13 июля 2020

Я хотел бы проанализировать программу Terasort с помощью Perf. Выполните следующую команду:

perf record -k mono $PID
perf inject -i perf.data --jit -o perf.data.jitted
perf report -i perf.data.jitted

Кроме того, добавляются следующие параметры виртуальной машины:

-agentpath:/usr/local/lib64/libperf-yarn-jvmti.so

И это то, что я узнал из https://blog.openj9.org/2019/07/18/inspecting-openj9-performance-with-perf-on-linux-jit-compiled-methods/.

Хорошо работает в SPECJbb2015 или других Java программах, но сталкивается с этой проблемой в Terasort of Spark.

Некоторые функции могут видеть только адрес и не могут быть связаны с jitted- $ PID.so . Я подтверждаю, что эти функции представляют собой JIT-код, сгенерированный C2.

Overhead  Command          Shared Object                      Symbol
   4.93%  Executor task l  perf-599505.map                    [.] 0x0000fffdbd86982c
   4.60%  Executor task l  perf-599505.map                    [.] 0x0000fffdbd86984c
   3.57%  Executor task l  perf-599505.map                    [.] 0x0000fffdbd838c48
   3.18%  Executor task l  perf-599505.map                    [.] 0x0000fffdbd838c34
   2.81%  java             libjvm.so                          [.] PSPromotionManager::copy_to_survivor_space<false>
   2.00%  Executor task l  perf-599505.map                    [.] 0x0000fffdbdaf9df0
   1.59%  Executor task l  perf-599505.map                    [.] 0x0000fffdbd9cbba8
   1.54%  Executor task l  jitted-599505-22693.so             [.] class org.apache.spark.shuffle.sort.ShuffleExternalSorter.writeSortedFile(bool)
   1.36%  Executor task l  perf-599505.map                    [.] 0x0000fffdbd688118
   1.13%  java             [kernel.kallsyms]                  [k] clear_page
   1.07%  java             libjvm.so                          [.] PSPromotionManager::process_array_chunk_work<unsigned int>
   0.98%  Executor task l  jitted-599505-19295.so             [.] class org.apache.hadoop.hdfs.DFSInputStream.read(byte[], int, int)
...