On Wed, 12 Jan 2022 15:18:46 GMT, Tyler Steele <[email protected]> wrote:
>> Just in time for the holidays I have completed an implementation of the JFR
>> functionality for AIX. As a side note, this is my first submission to
>> OpenJDK đź‘‹
>>
>> ### Implementation notes and alternatives considered
>>
>> After modifying the build system to allow the --enable-jvm-feature-jfr to
>> work on AIX, my task was to implement the interfaces from os_perf.hpp. The
>> os_perf_aix.cpp implementation that existed was, I believe, a copy of the
>> Linux implementation. A review of the code in that file showed that
>> NetworkInterface, CPUPerformanceInterface, and SystemProcessInterface would
>> require modification to work on AIX. Using the Linux implementation as a
>> guide, I initially expected to use files from the aix procfs like
>> /proc/<pid>/psinfo, and /proc/<pid>/status in a manner similar to the Linux
>> implementation. However, I ended up using libperfstat for all functionality
>> required by the interfaces.
>>
>> ### Testing
>>
>> Testing for JFR seems to be quite light in the repo both before and after
>> this change. In addition to performing manual testing, I have added some
>> basic sanity checks that ensure events can be created and committed (using
>> jtreg), and performs some basic checks on the results of the interface
>> member functions (using gtest).
>>
>> ### More notes
>>
>> I've sent an email to the JFR group about a TOC overflow warning I
>> encountered while building (for the release server target). I believe the
>> fix is to pass -qpic=large when using the xlc toolchain, but my
>> modifications to flags-cflags.m4 have not been successful in removing this
>> warning.
>
> Tyler Steele has updated the pull request with a new target base due to a
> merge or a rebase. The pull request now contains five commits:
>
> - Merge branch 'master' into JDK-8203290
> - Clean up & testing
>
> - Run JFR tests in test/jdk/jdk/jfr
> - Fix issues found from above test suite
> - Remove unecessary jtreg & gtest tests
> - Remove ineffective `qpic=large`
> - TODO: jdk/jfr/event/runtime/TestNativeLibrariesEvent.java
> - Merge branch 'JDK-8203290' of github.com:backwaterred/jdk into JDK-8203290
> - 8203290: Implements Java Flight Recorder on AIX
>
> - changes build system to allow jfr feature on aix
> - implements NetworkPerformance, CPUPerformance, and SystemProcess
> interfaces from os_perf.hpp
> - implements jfr sanity tests
> - 8203290: Implements Java Flight Recorder on AIX
>
> - changes build system to allow jfr feature on aix
> - implements NetworkPerformance, CPUPerformance, and SystemProcess
> interfaces from os_perf.hpp
> - implements jfr sanity tests
You could test it like this:
In JfrThreadSampler.cpp, you have the OSThreadSampler::protected_task()
function:
Insert the following to crash the system:
void OSThreadSampler::protected_task(const os::SuspendedThreadTaskContext&
context) {
+int* null_ptr = nullptr;
+*null_ptr = 5;
...
If crash protection is enabled and active, for release builds, you will not get
a system crash. Instead, you will get this output (in debug builds you will get
a crash as expected):
[10.740s][error][jfr ] Thread method sampler crashed
[10.786s][error][jfr ] Thread method sampler crashed
[10.798s][error][jfr ] Thread method sampler crashed
[10.810s][error][jfr ] Thread method sampler crashed
[10.822s][error][jfr ] Thread method sampler crashed
[10.834s][error][jfr ] Thread method sampler crashed
[10.847s][error][jfr ] Thread method sampler crashed
[10.858s][error][jfr ] Thread method sampler crashed
...
-------------
PR: https://git.openjdk.java.net/jdk/pull/6885