High Performance Java Software

30
1 High Performance JavaSoftware Comparing a Common Design in Three Languages Kevin Buesing Field Applications Engineer Objective Interface Systems http://www.ois.com

Transcript of High Performance Java Software

Page 1: High Performance Java Software

1

High Performance Java™ Software

Comparing a Common Designin Three Languages

Kevin BuesingField Applications EngineerObjective Interface Systemshttp://www.ois.com

Page 2: High Performance Java Software

2

Presentation Objectives

Compare the performance of a single middleware design implemented in Java, C++, and Ada 95.Compare performance of using C sockets vs. Java sockets vs. JNI C sockets.Compare multiple middleware designs implemented in various languages.

Page 3: High Performance Java Software

3

High Performance Java Software

Foundation KnowledgeComparing SocketsComparing One Design Implemented in

Multiple LanguagesComparing Different ORBsLessons LearnedSummary

Page 4: High Performance Java Software

4

High Performance Java Software

Foundation KnowledgeComparing SocketsComparing One Design Implemented in

Multiple LanguagesComparing Different ORBsLessons LearnedSummary

Page 5: High Performance Java Software

5

Objective Interface Perspective

• Vendor of communications software for:─ Real-time and embedded systems─ High-performance enterprise systems

• Common themes─ Invest in long-term technologies─ An extreme fixation on performance─ High reliability requirements─ Wide platform support (over 500 binary platforms)─ Committed to standards (OMG, Open Group, JCP)

Page 6: High Performance Java Software

6

Technology Used for Comparison

• ORBexpress™: High Performance CORBA• One design

─ Predictable and oriented for performance─ Replaceable transports─ Desktop, server, real-time and embedded systems

• Three ORBs implemented in their native languages─ Ada ORB written in Ada─ C++ ORB written in C++─ Java ORB written in Java─ Not language bindings─ Common design and architecture

Page 7: High Performance Java Software

7

Transport Comparison

• With ORBexpress the transport itself is typically the bottleneck─ Is using the JNI to access C sockets faster than the

Java Socket class?─ Pluggable transport API in ORBexpress makes this

easy to test─ JNI can require copies

─Depends on JVM─JVM’s that force extra copies in either the socket

class or JNI interface preclude high bandwidth utilization

• Objective Interface tests run on─ 1.7 ghz Pentium 4─ Microsoft Windows XP

C++ Sockets vs. Java Sockets vs. JNI to C++

Page 8: High Performance Java Software

8

Common Architecture ORB Comparison

• Oneway─ Data sent from the client to server─ Time to write data to the socket

• Twoway─ Data sent from the client to the server with reply.─ Time to send data to and receive reply from server

ORBexpress: Java vs. Ada vs. C++

Page 9: High Performance Java Software

9

Comparing Middleware Implementations

• Scope of analysis─ Raw transport performance

─ Java Sockets─ JNI C Sockets─C Sockets

─ ORBexpress performance─Ada 95─C++─ Java

─ Comparisons to other ORBs─Sun JDK─ TAO (C++)─ORBexpress for Java─ORBexpress for C++

Page 10: High Performance Java Software

10

Benchmarks Sources

• Independent Studies─ Lockheed Martin, ATL - Guatam Thaker

─http://www.atl.external.lmco.com/projects/QoS/─ Boeing Phantom Works - DII COE Study

─http://www.ois.com/resources/corb-10-overview.asp

• Objective Interface internal research

Page 11: High Performance Java Software

11

Hardware Used

• Lockheed Martin Advanced Technology Labs─ 933 MHz Dual Pentium III ─ Linux

• Objective Interface─ 1.7 GHz Pentium M─ Windows XP

Page 12: High Performance Java Software

12

Software Used

• Linux kernel versions─ Lockheed Martin tests

─Version 2.4.20-13• Microsoft Windows XP

─ Transport and common architecture comparisons

• ORBexpress versions used─ Version 2.5.0 for Java─ Version 2.5.1 for C++─ Version 2.4.6 for Ada

• Objective Interface’s Bench and BenchTransportdemos used in language and transport comparisons

Page 13: High Performance Java Software

13

Pitfalls of Benchmarks

• “In the computer industry there are three kinds of lies. Lies, damn lies, and benchmarks!”─ “Lying” in benchmarks is frequently unintentional

and the result of invalid comparisons─ “What’s the difference between a used car

salesman and a software salesman?”─ “The used car salesman knows when he is lying.”

• Make sure to make a valid comparisons─ Linux kernel revisions can have dramatic effects on

network performance─ The performance difference between Linux kernel

versions was greater than the middleware!

Page 14: High Performance Java Software

14

Understanding the Graphs

• All data sources are listed at the bottom of the slide

• Two elements of understanding network performance─ Latency (delay) of delivering first byte─ Added latency for additional bytes

─Extra copies─Extra system calls

• Important for comparing middleware─ Relevant performance = time added to sockets

(or whatever transport is used under middleware)

Page 15: High Performance Java Software

15

High Performance Java Software

Foundation KnowledgeComparing SocketsComparing One Design Implemented in

Multiple LanguagesComparing Different ORBsLessons LearnedSummary

Page 16: High Performance Java Software

16

Transport Comparison C Sockets vs. Java Sockets vs. JNI to C Sockets

• With middleware and specifically ORBexpressthe transport itself can be the primary bottleneck.─ Is JNI faster than the standard Java sockets class?─ Middleware with pluggable transports allows us to

test this.─ JVM’s that force extra copies in either the socket

class or JNI interface will preclude high bandwidth applications

• Tests done by Objective Interface on a 1.7 ghzPentium 4 running Microsoft Windows XP

Page 17: High Performance Java Software

17

Transport Comparison C Sockets vs. Java Sockets vs. JNI to C Sockets

0

50

100

150

200

250

300

0 5,000 10,000 15,000 20,000 25,000 30,000

Message Size (bytes)

Late

ncy

(use

c)

C Sockets Java Sockets JNI to C Sockets

Source: Objective Interface internal research

Page 18: High Performance Java Software

18

High Performance Java Software

Foundation KnowledgeComparing SocketsComparing One Design Implemented in

Multiple LanguagesComparing Different ORBsLessons LearnedSummary

Page 19: High Performance Java Software

19

ORBexpress Performance (I)

• Oneway─ Data is sent from the client to server without reply─ Time measured = time to write the data to socket

• Twoway─ Data sent from the client to the server with reply─ Time measured = time for client to send the data to

the server and the server responds with an reply

• ORBexpress for Java transport─ ORB and transport are 100% Java─ Used the Java standard socket class─ Not JNI interface to C sockets

Java vs. Ada vs. C++

Page 20: High Performance Java Software

20

ORBexpress Performance (II)ORBexpress for: Java vs. Ada vs. C++

0 10 20 30 40 50 60 70 80

Small Twoway

Small Oneway

Time (usec)

C++JavaAda

Source: Objective Interface internal tests

Page 21: High Performance Java Software

21

High Performance Java Software

Foundation KnowledgeComparing SocketsComparing One Design Implemented in

Multiple LanguagesComparing Different ORBsLessons LearnedSummary

Page 22: High Performance Java Software

22

Comparing Different ORBsSun JDK vs. TAO (C++) vs. ORBexpress (C++ and Java)

Source: Lockheed Martin Advanced Technology Labs

0

500

1,000

1,500

2,000

2,500

3,000

0 5,000 10,000 15,000 20,000 25,000 30,000

Message Size (bytes)

Late

ncy

(use

c)

Sun JDK 1.4 ORB ORBexpress C++ ORBexpress Java TAO C++ ORB

Page 23: High Performance Java Software

23

Comparing ORB Added LatencyORBexpress for C++ vs. ORBexpress for Java

• Important for comparing middleware:Compare to transport (sockets)

• Relevant information: ORB added latency─ ORB time minus socket time─ Allows direct comparison of ORB overhead─ ORB added latency

─Relevant measure of the ORB code efficiency─Most relevant in comparing languages─Removes Java ORB’s penalty for using a slower

socket library

• Tests Done─ 1 byte Payload─ 32,168 byte Payload

Page 24: High Performance Java Software

24

Delta ORB ComparisonORBexpress for C++ vs. ORBexpress for Java

0 20 40 60 80 100

Large (32136bytes)

Medium (16392bytes)

Small (1 byte)

Time (usec)

C++Java

Source: Objective Interface internal tests

Page 25: High Performance Java Software

25

High Performance Java Software

Foundation KnowledgeComparing SocketsComparing One Design Implemented in

Multiple LanguagesComparing Different ORBsLessons LearnedSummary

Page 26: High Performance Java Software

26

Lessons Learned

• Java-specific optimizations─ Well-written Java can beat compiled languages─ Don’t create garbage!─ Are final methods faster?

─Depends on JVM─Sun’s latest Hot-Spot JVM doesn’t care

─ Encourage early class loading

• General optimizations─ Minimization of data copies─ Minimization of context switches─ Minimization of system calls in the JVM

Page 27: High Performance Java Software

27

High Performance Java Software

Foundation KnowledgeComparing SocketsComparing One Design Implemented in

Multiple LanguagesComparing Different ORBsLessons LearnedSummary

Page 28: High Performance Java Software

28

In Summary

• Java can beat compiled Ada 95─ Typically because of integrity checks built into

Ada language─ Can suppress integrity checks, but this loses benefit

of Ada

• Great Java implementations can beat good C++ implementations

• Fewer copies and system calls in JVM’s where possible will improve performance even further

Java performance is competitive with compiled languages

Page 29: High Performance Java Software

29

Kevin BuesingField Applications EngineerObjective Interface Systemshttp://www.ois.com

29

Page 30: High Performance Java Software

30

For More Information

• Lockheed Martin Advanced Technology Labs─ Guatam Thaker─ http://www.atl.external.lmco.com/projects/QoS/

• Boeing Phantom Works - DII COE Study─ http://www.ois.com/resources/corb-10-overview.asp

• Objective Interface Systems, Inc.─ http://www.ois.com