Hi,

I took this for a spin on my setup, and see a ~500k increase in both
instructions and cycles - I guess one of your runs saw more
interference than the other.

From a startup performance point of view the advertised cost seems
more or less negligible. (For context we've optimized away 10M
instructions since JDK 14 GA - a 0.5M step in the wrong direction won't
be noticeable)

/Claes

On 2020-04-01 15:35, Baesken, Matthias wrote:
Hello, please review this binary hardening related change.

To improve binary hardening, we should enable full relro in the OpenJDK builds. Currently
our build settings enable only partial relro (they miss z,now).
See https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro

"Both partial and full RELRO reorder the ELF internal data sections to protect them from being overwritten in the event of a buffer-overflow, but only full RELRO mitigates the above mentioned popular technique of overwriting the GOT entry to get control of program execution."

See also :
https://wiki.debian.org/Hardening

Some documentations/blogs mention slight performance impact of full relro (for startup performance) .


My quick checks on an example Linux server show not much impact (checked on linux x86_64) .

1)time on a   java HelloWorld  varies   (for both a patched and unpatched  JDK)    between 0,6 and 0,7 seconds  ;

2) perf - runs on a java HelloWorld   show  a bit less  cycles (not clear why) but more  instructions :

"normal  JVM" :

         185,085,660      cycles                    #    2.424 GHz              
        ( +-  0.54% )  (83.18%)

         128,415,594      stalled-cycles-frontend   #   69.38% frontend cycles 
idle     ( +-  0.80% )  (80.98%)

          84,990,433      stalled-cycles-backend    #   45.92% backend  cycles 
idle     ( +-  1.78% )  (65.38%)

         102,950,894      instructions              #    0.56  insns per cycle

                                                    #    1.25  stalled cycles 
per insn  ( +-  1.48% )  (86.90%)



Changed JVM with z,now  set :



         182,514,813      cycles                    #    2.394 GHz              
        ( +-  0.58% )  (80.14%)

         126,879,112      stalled-cycles-frontend   #   69.52% frontend cycles 
idle     ( +-  0.81% )  (81.24%)

          82,691,295      stalled-cycles-backend    #   45.31% backend  cycles 
idle     ( +-  1.72% )  (69.16%)

         103,958,399      instructions              #    0.57  insns per cycle

                                                    #    1.22  stalled cycles 
per insn  ( +-  1.21% )  (89.47%)

Bug/webrev :

https://bugs.openjdk.java.net/browse/JDK-8241996

http://cr.openjdk.java.net/~mbaesken/webrevs/8241996.0/

Best regards, Matthias

Reply via email to