Dean,

  I have updated to use MutexLocker instead at same link: http://cr.openjdk.java.net/~minqi/8237750/webrev-01/

  Tested locally, passed jtreg/runtime.

Thanks
Yumin

On 5/1/20 4:24 PM, Dean Long wrote:
OK, I didn't realize compute_fingerprint is using ZIP_CRC32.

dl

On 5/1/20 2:42 PM, Yumin Qi wrote:
Hi, Dean
  Thanks for the review. I will try MutextLocker, for AOT, I think currently the tests are not using CDS then it will load classes from stream, that will use libzip's Crc32.   I will check for AOT to see if it really loads libzip with the patch. For test compiler/aot/DeoptimizationTest.java:

#0  ClassLoader::load_zip_library () at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/classLoader.cpp:978 #1  0x00007ffff57d4693 in ClassLoader::crc32 (crc=0, buf=0x7ffff0244ee0 "\312\376\272\276", len=1888) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/classLoader.cpp:1028 #2  0x00007ffff57cef5d in ClassFileStream::compute_fingerprint (this=0x7ffff0245640) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/classFileStream.cpp:80 #3  0x00007ffff57c40ed in ClassFileParser::create_instance_klass (this=0x7ffff7fc6fc0, changed_by_loadhook=false, cl_inst_info=..., __the_thread__=0x7ffff0033000) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/classFileParser.cpp:5630 #4  0x00007ffff5dea647 in KlassFactory::create_from_stream (stream=0x7ffff0245640, name=0x7ffff40550f0, loader_data=0x7ffff022dbc0, cl_info=..., __the_thread__=0x7ffff0033000)     at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/klassFactory.cpp:207 #5  0x00007ffff57d53e4 in ClassLoader::load_class (name=0x7ffff40550f0, search_append_only=false, __the_thread__=0x7ffff0033000) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/classLoader.cpp:1285 #6  0x00007ffff6234fcf in SystemDictionary::load_instance_class (class_name=0x7ffff40550f0, class_loader=..., __the_thread__=0x7ffff0033000) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:1550 #7  0x00007ffff6232d0a in SystemDictionary::resolve_instance_class_or_null (name=0x7ffff40550f0, class_loader=..., protection_domain=..., __the_thread__=0x7ffff0033000)     at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:882 #8  0x00007ffff623137e in SystemDictionary::resolve_instance_class_or_null_helper (class_name=0x7ffff40550f0, class_loader=..., protection_domain=..., __the_thread__=0x7ffff0033000)     at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:302 #9  0x00007ffff623124c in SystemDictionary::resolve_or_null (class_name=0x7ffff40550f0, class_loader=..., protection_domain=..., __the_thread__=0x7ffff0033000) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:285 #10 0x00007ffff6230f57 in SystemDictionary::resolve_or_fail (class_name=0x7ffff40550f0, class_loader=..., protection_domain=..., throw_error=true, __the_thread__=0x7ffff0033000)     at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:233 #11 0x00007ffff62311eb in SystemDictionary::resolve_or_fail (class_name=0x7ffff40550f0, throw_error=true, __the_thread__=0x7ffff0033000) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:275 #12 0x00007ffff6236722 in SystemDictionary::resolve_wk_klass (id=SystemDictionary::Object_klass_knum, __the_thread__=0x7ffff0033000) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:2029 #13 0x00007ffff623681e in SystemDictionary::resolve_wk_klasses_until (limit_id=SystemDictionary::Cloneable_klass_knum, start_id=@0x7ffff7fc79d4: SystemDictionary::Object_klass_knum, __the_thread__=0x7ffff0033000)     at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:2039 #14 0x00007ffff623ac01 in SystemDictionary::resolve_wk_klasses_through (end_id=SystemDictionary::Class_klass_knum, start_id=@0x7ffff7fc79d4: SystemDictionary::Object_klass_knum, __the_thread__=0x7ffff0033000)     at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.hpp:418 #15 0x00007ffff62369b0 in SystemDictionary::resolve_well_known_classes (__the_thread__=0x7ffff0033000) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:2082 #16 0x00007ffff6236517 in SystemDictionary::initialize (__the_thread__=0x7ffff0033000) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/classfile/systemDictionary.cpp:1985 #17 0x00007ffff62afe15 in Universe::genesis (__the_thread__=0x7ffff0033000) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/memory/universe.cpp:326 #18 0x00007ffff62b1e51 in universe2_init () at /home/minqi/ws/jdk15/jdk/src/hotspot/share/memory/universe.cpp:847 #19 0x00007ffff5af21ed in init_globals () at /home/minqi/ws/jdk15/jdk/src/hotspot/share/runtime/init.cpp:128 #20 0x00007ffff627feff in Threads::create_vm (args=0x7ffff7fc7e50, canTryAgain=0x7ffff7fc7d5b) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/runtime/thread.cpp:3879 #21 0x00007ffff5bf537d in JNI_CreateJavaVM_inner (vm=0x7ffff7fc7ea8, penv=0x7ffff7fc7eb0, args=0x7ffff7fc7e50) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/prims/jni.cpp:3789 #22 0x00007ffff5bf5677 in JNI_CreateJavaVM (vm=0x7ffff7fc7ea8, penv=0x7ffff7fc7eb0, args=0x7ffff7fc7e50) at /home/minqi/ws/jdk15/jdk/src/hotspot/share/prims/jni.cpp:3872 #23 0x00007ffff7bca4c9 in InitializeJVM (pvm=0x7ffff7fc7ea8, penv=0x7ffff7fc7eb0, ifn=0x7ffff7fc7f00) at /home/minqi/ws/jdk15/jdk/src/java.base/share/native/libjli/java.c:1538 #24 0x00007ffff7bc70b5 in JavaMain (_args=0x7fffffffab10) at /home/minqi/ws/jdk15/jdk/src/java.base/share/native/libjli/java.c:417 #25 0x00007ffff7bceb5f in ThreadJavaMain (args=0x7fffffffab10) at /home/minqi/ws/jdk15/jdk/src/java.base/unix/native/libjli/java_md_solinux.c:734 #26 0x00007ffff71c56ba in start_thread (arg=0x7ffff7fc8700) at pthread_create.c:333 #27 0x00007ffff790041d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

This is not with CDS.

Thanks
Yumin

On 5/1/20 2:11 PM, Dean Long wrote:
It looks like Zip_lock could be a MutexLocker instead of a MonitorLocker.

dl

On 5/1/20 10:24 AM, Yumin Qi wrote:
Hi, please review:
bug 8237750: https://bugs.openjdk.java.net/browse/JDK-8237750
webrev: http://cr.openjdk.java.net/~minqi/8237750/webrev-01/
Summary:
  zip library is loaded unconditionally at start up but it is only needed when
  1) bootclasspath contains zip or
  2) UseAOT enabled or
  3) VerifySharedArchive turned on or
  4) CDS archives custom loaded classes
   If none of above in java application, it is not necessary to have zip library loaded.

  Solution by loading zip library on demand when needed.

Performance for java -Xint version:

Results of " perf stat -r 50 bin/java -Xshare:on -XX:SharedArchiveFile=jdk2.jsa -Xint -version "    1:     59611556    59450206 (-161350)      ----- 39.799 40.274 (  0.475)    ++    2:     59602708    59425234 (-177474)      ----- 40.591 41.183 (  0.592)    ++    3:     59579718    59441272 (-138446)      ---- 40.777 40.471 ( -0.306)      -    4:     59584882    59410155 (-174727)      ----- 40.824 40.233 ( -0.591)      --    5:     59590998    59447252 (-143746)      ---- 40.400 40.493 (  0.093)    6:     59589523    59441934 (-147589)      ---- 40.475 40.064 ( -0.411)      --    7:     59581820    59413612 (-168208)      ----- 39.763 40.077 (  0.314)     +    8:     59593678    59418738 (-174940)      ----- 40.912 39.724 ( -1.188)      -----    9:     59573058    59412554 (-160504)      ----- 40.126 40.033 ( -0.093)   10:     59591469    59419291 (-172178)      ----- 40.731 40.689 ( -0.042)
============================================================
          59589940    59428022 (-161917)      ----- 40.438 40.322 ( -0.116)
instr delta =      -161917    -0.2717%
time  delta =       -0.116 ms -0.2859%

Tests: hs-tier1-4.
Due to zip library not loaded at default, I removed 'zip' from pmap list in test case: *test/hotspot/jtreg/serviceability/sa/ClhsdbPmap.java

**
* Thanks
Yumin




Reply via email to