Uploaded image for project: 'Lucene - Core'
  1. Lucene - Core
  2. LUCENE-10099

Add -Ptests.asyncprofile option.

Details

    • Test
    • Status: Open
    • Minor
    • Resolution: Unresolved
    • None
    • None
    • modules/test-framework
    • None
    • New

    Description

      Allow async-profiler in addition to the JFR profiler.

      async profiler description:

      This project is a low overhead sampling profiler for Java that does not suffer from Safepoint bias problem. 
      It features HotSpot-specific APIs to collect stack traces and to track memory allocations.
      The profiler works with OpenJDK, Oracle JDK and other Java runtimes based on the HotSpot JVM.
      async-profiler can trace the following kinds of events:
      
      * CPU cycles
      * Hardware and Software performance counters like cache misses, branch misses, page faults, context switches etc.
      * Allocations in Java Heap
      * Contented lock attempts, including both Java object monitors and ReentrantLocks
      

       

      The "tests.asyncprofile" mode switch turns on the async-profiler (https://github.com/jvm-profiling-tools/async-profiler) during test execution,
      and prints a simple summary at the end.

      For example, top-10 histogram of methods (cpu samples):

      gradlew -p lucene/core test -Ptests.asyncprofile=true

      Alternatively, you can profile heap allocations instead: TBD

      Requirements

      • You need to download async-profiler 2.x (https://github.com/jvm-profiling-tools/async-profiler)
      • You need the .so lib in a standard shared folder or one of the directories from LD_LIBRARY_PATH (Linux, though not Arch by
        default), DYLD_LIBRARY_PATH (Mac OS), or -Djava.library.path. I think ${HOME}/libs also works
        on Linux. We could also allow specifying the location directly as an option.
      • Debug version of Java is important for best results and is required for heap allocation profiling. Available as package on Ubuntu, can be built with a small modification on Arch.

      The following permissions need to be set to allow for the proper permissions for profiling:

      # sysctl kernel.perf_event_paranoid=1 
      # sysctl kernel.kptr_restrict=0

       

      Attachments

        Issue Links

          Activity

            People

              markrmiller Mark Robert Miller
              markrmiller Mark Robert Miller
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 40m
                  40m