Bug 1806725

Summary: java-11 performance regression
Product: Red Hat Enterprise Linux 8 Reporter: Jenifer Abrams <jhopper>
Component: java-11-openjdkAssignee: Deepak Bhole <dbhole>
Status: CLOSED NOTABUG QA Contact: OpenJDK QA <java-qa>
Severity: high Docs Contact:
Priority: unspecified    
Version: 8.1CC: jvanek
Target Milestone: rc   
Target Release: 8.0   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2020-02-28 21:58:51 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Jenifer Abrams 2020-02-24 20:37:20 UTC
Description of problem:
RHEL8.1 java-11 performance regression vs RHEL 7.6 java-11, using the specjbb2005 benchmark.

There are some CVE mitigation differences, would like to try measuring the older java-11 on my RHEL 8.1 environment if it is possible to force install the el7 rpm.


Version-Release number of selected component (if applicable):

RHEL 8.1 update 2.4
  java-11-openjdk-11.0.5.10-2.el8_1.x86_64  
  4.18.0-147.3.1.el8_1.x86_64
microcode	: 0x2000064	(pre Nov 19)
vulnerabilities/itlb_multihit:KVM: Mitigation: Split huge pages
vulnerabilities/l1tf:Mitigation: PTE Inversion; VMX: conditional cache flushes, SMT disabled
vulnerabilities/mds:Mitigation: Clear CPU buffers; SMT disabled
vulnerabilities/meltdown:Mitigation: PTI
vulnerabilities/spec_store_bypass:Mitigation: Speculative Store Bypass disabled via prctl and seccomp
vulnerabilities/spectre_v1:Mitigation: usercopy/swapgs barriers and __user pointer sanitization
vulnerabilities/spectre_v2:Mitigation: Full generic retpoline, IBPB: conditional, IBRS_FW, RSB filling
vulnerabilities/tsx_async_abort:Mitigation: Clear CPU buffers; SMT disabled

RHEL 7.6 GA
  java-11-openjdk-11.0.ea.28-7.el7.x86_64
  3.10.0-957.el7.x86_64
microcode	: 0x200004d	GA ~Nov 2018
vulnerabilities/l1tf:Mitigation: PTE Inversion; VMX: SMT disabled, L1D conditional cache flushes
vulnerabilities/meltdown:Mitigation: PTI
vulnerabilities/spec_store_bypass:Mitigation: Speculative Store Bypass disabled via prctl and seccomp
vulnerabilities/spectre_v1:Mitigation: Load fences, __user pointer sanitization
vulnerabilities/spectre_v2:Mitigation: IBRS (kernel)


Steps to Reproduce:

specjbb2005 benchmark, using the following params:
input.jvm_instances=1
input.starting_number_warehouses=4
input.increment_number_warehouses=4
input.ending_number_warehouses=8
input.ramp_up_seconds=120
input.measurement_seconds=120

Running 6 JBB instances on the same baremetal 32c Skylake, looking at total throughput across all instances. Switching between RHEL 8.1 and 7.6 disk for the comparison. 

Actual results:
8.1 / java-11-openjdk-11.0.5.10-2.el8_1
total WH4	1,188,621	
total WH8	1,404,064	


7.6 / java-11-openjdk-11.0.ea.28-7.el7
total WH4	1,383,549
total WH8	1,537,329

regression of 9-16%


Additional info:
numactl pinned results show even higher regression (numabalancing improvements reduce pinning impacts on RHEL8.x):
-- pinned 3 JBB instances on each numa node -- 
8.1: 
total WH4	1,216,123
total WH8	1,448,118

7.6:
total WH4	1,440,882
total WH8	1,730,265

Comment 2 Deepak Bhole 2020-02-28 21:58:51 UTC
The EL7 and EL8 sources for OpenJDK are the same. The difference is the implementation of mitigations in the RHEL-7 and 8 kernel.

If performance is a factor, the mitigations should be adjusted (keeping in mind the security implications). For examples, see:
https://access.redhat.com/articles/3311301