1 / 37

An In-Depth Examination of Java I/O Performance and Possible Tuning Strategies

An In-Depth Examination of Java I/O Performance and Possible Tuning Strategies. Kai Xu xuk@cs.wisc.edu Hongfei Guo guo@cs.wisc.edu. Outline. Why bother? (Problems) Our goals Java I/O overview Tests design Test results and analysis Conclusions. Why bother?.

hollis
Download Presentation

An In-Depth Examination of Java I/O Performance and Possible Tuning Strategies

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. An In-Depth Examination of Java I/O Performance and Possible Tuning Strategies Kai Xu xuk@cs.wisc.edu Hongfei Guo guo@cs.wisc.edu

  2. Outline • Why bother? (Problems) • Our goals • Java I/O overview • Tests design • Test results and analysis • Conclusions

  3. Why bother? • Growing interest in using Java • Much works had been done in Java performance evaluation but • NOT in Java I/O

  4. Our Goals • Is it really bad (Compared with C/C++) • How bad • Possible tuning strategies • How well they work

  5. OutputStream InputStream FileOutputStream FileInputStream ByteArrayOutputStream ByteArrayInputStream FilterOutputStream FilterInputStream BufferedOutputStream BufferedInputStream DataOutputStream DataInputStream An Overview of Java I/O Classes Random AccessFile

  6. Test Design • Access patterns Sequential write/read Random write/read • Data interested Elapse time, CPU breakdown • Comparison group: C/C++

  7. Test Design (continued) • Tests on basic Java I/O strategies Test 1: The lowest level I/O Test 2: Buffered I/O Test 3: Direct buffering Test 4: Operation size Test 5: Java JNI

  8. Test Setup • Hardware configuration CPU: Pentium III 667 MHz Memory: 128 MB Disk: 10 GB IDE • Software configuration OS : Redhat 6.2 JVM : JDK 1.2.2 • Profiling Tools: PerfAnal profiler, gprof profiler 2.9.5, time

  9. Test 1: The lowest level Java I/O • Test parameters: buffer size : 0 Byte operation size : 1 Byte • Sequential Write/Read • Random Write/Read

  10. Sequential Write/Read

  11. Breakdown -- File size: 100M

  12. Random Write/Read

  13. Breakdown -- File size: 10M

  14. Test 1 Analysis • Java raw I/O: 200%x slower • Java system calls cost more • read : 224%x • write:158%x • Random Access is similar

  15. Test 2: Buffered I/O in Java • Test parameters: buffer size : 1024 Bytes file size : 100 MB • Sequential Write/Read • Buffering Strategies: • No Buffering: (FileInputStream/FileOutputStream) • BufferedInputStream/BufferedOutputStream • Direct Buffering

  16. Buffering Strategies in Java

  17. CPU Breakdown

  18. Test 2 Analysis • Buffering improves I/O • reducing system calls • Buffered Stream: ~25% • Direct Buffering: ~40% • special purpose vs. general purpose • No buffering for random access

  19. Test 3: Direct Buffering • Test parameters: file size : 100 MB operation size : 1 Byte • Sequential Write/Read • Random Write/Read

  20. Sequential Write/Read

  21. Breakdown – Java

  22. Breakdown – C

  23. Random Write/Read

  24. Breakdown – Java

  25. Breakdown – C

  26. Test 3 Analysis • Direct buffering improves I/O: ~50% • reducing system calls • slower than C/C++: ~300% • Larger buffer? no big gain: Amdahl’s law! • Does not help in random access • low hit ratio: less than 1%

  27. Test 4: Operation Size • Test parameters: buffer size : 0 Byte • Sequential Write/Read • Random Write/Read

  28. Sequential Write/Read: 100M

  29. Random Write/Read: 10M

  30. Test 4 Analysis • Increasing operation size helps: ~ 85% • reducing I/O system calls • comparable to C/C++ • Large operation size • no big gain. • Random Access is similar

  31. Test 5: Java JNI • Test parameters: file size : 100 MB buffer size : 4 KB • Sequential Write/Read

  32. Java JNI Buffering

  33. Breakdown – JNI buffering

  34. Test 5 Analysis • I/O system calls are cheap (C/C++ level); • But, cost of calling native method is high; • Small operation size: • more native calls, • comparable to Direct Buffering; • Large operation size: • less native calls, • comparable to C/C++.

  35. Conclusions • Java raw I/O: 200%x slower than C • Buffering improves I/O • Reducing system calls • 220% improvement vs. no buffer • But, still 364%x slower than C • Random I/O – no help with buffering? – locality of access;

  36. Conclusions (continued) • Increasing operation size helps • Comparable to C/C++ • JNI • system calls are cheap (C/C++ level); • cost of calling native method is high; • reduce native call times: • Comparable to C/C++

  37. Thank You…

More Related