Java IPC and the CLIP library

9,029
-1

Published on

A talk on interprocess communications with the Java programming language. It also talks about the CLIP library which offers new IPC primitives and simplified access to existing primitives. This was given at the 3/3/2009 Denver Open Source Users Group

Published in: Technology
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
9,029
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
84
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Java IPC and the CLIP library

  1. 1. Java IPC And the CLIP Library Clark N. Hobbie Long Term Software, LLC clark.hobbie@ltsllc.com
  2. 2. Who Gives a Damn?
  3. 3. You Should Care Because… • If you are in a corner • Java sync is one VM only • Others require JNI • Platform differences 3/3/2009 http://ltsllc.com/slides/ipc.html 3
  4. 4. What Are the Options? • Sockets • Message Queues • Semaphores • Shared Memory 3/3/2009 http://ltsllc.com/slides/ipc.html 4
  5. 5. Which Option Should I Use? Shared Memory • JRE support • Highest bandwidth • Decent synchronization • Naming support 3/3/2009 http://ltsllc.com/slides/ipc.html 5
  6. 6. Why Should I Care about CLIP? • New primitives – Semaphores – Message Queues • Simplifies existing primitives – Shared Memory 3/3/2009 http://ltsllc.com/slides/ipc.html 6
  7. 7. Java RandomAccessFile raf = new RandomAccessFile(quot;/temp/smfilequot;, quot;rwquot;); FileChannel chan = raf.getChannel(); MappedByteBuffer buf = chan.map(MapMode.READ_WRITE, 0, size); byte[] other = new byte[1024]; buf.position(0); buf.get(other, 0, 1024); 3/3/2009 http://ltsllc.com/slides/ipc.html 7
  8. 8. CLIP SharedMemory smem = new SharedMemory(quot;/temp/smfilequot;); 3/3/2009 http://ltsllc.com/slides/ipc.html 8
  9. 9. What is IPC? Inter-Process Communication (IPC) • Multiple processes • Naming • Synchronization • Bandwidth 3/3/2009 http://ltsllc.com/slides/ipc.html 9
  10. 10. Naming Me Tarzan, who you? 3/3/2009 http://ltsllc.com/slides/ipc.html 10
  11. 11. Naming How do you… • Connect processes together? • Determine who is allowed to connect? • Examples – TCP/IP? – Email? – Telephones? 3/3/2009 http://ltsllc.com/slides/ipc.html 11
  12. 12. File Naming Many IPC methods use the file system because • Visible to all processes • Has access control built in 3/3/2009 http://ltsllc.com/slides/ipc.html 12
  13. 13. File Naming Examples • Memory Mapped Files • Named Pipes/FIFOs 3/3/2009 http://ltsllc.com/slides/ipc.html 13
  14. 14. Synchronization • Event ordering • Mutual exclusion 3/3/2009 http://ltsllc.com/slides/ipc.html 14
  15. 15. Example: Online Purchase 1. Get user credit information 2. Decision purchase 3. Update credit information 3/3/2009 http://ltsllc.com/slides/ipc.html 15
  16. 16. Without Event Ordering Client A Client B 1 Get credit info 2 Get credit info 2 Decision purchase 3 Update info 4 Decision purchase 5 Update info 3/3/2009 http://ltsllc.com/slides/ipc.html 16
  17. 17. With Event Ordering Client A Client B 1 Get credit info 2 Wait for A 2 Decision purchase 3 Update info 4 Get credit info 5 Decision purchase 6 Update info 3/3/2009 http://ltsllc.com/slides/ipc.html 17
  18. 18. Synchronization is Event Ordering Instead of this order: We want this order: • A gets credit info • A gets credit info • B gets credit info • A decisions purchase • A decisions purchase • A updates info • A updates info • B gets credit info • B decisions purchase • B decisions purchase • B updates credit info • B updates credit info 3/3/2009 http://ltsllc.com/slides/ipc.html 18
  19. 19. Which Type of IPC is Appropriate? 3/3/2009 http://ltsllc.com/slides/ipc.html 19
  20. 20. IPC Types • Shared Memory • Semaphores • Sockets • Message Queues 3/3/2009 http://ltsllc.com/slides/ipc.html 20
  21. 21. Shared Memory 3/3/2009 http://ltsllc.com/slides/ipc.html 21
  22. 22. Shared Memory • Preferred approach • Any to any • get/put semantics • Synchronization support • JRE support • Naming support 3/3/2009 http://ltsllc.com/slides/ipc.html 22
  23. 23. Shared Memory Details • Synchronization – File Locking – Lock/unlock ~ 25 usec • Naming – File naming • Bandwidth – Synchronized 250MB/sec – Unsynchronized 1000MB/sec 3/3/2009 http://ltsllc.com/slides/ipc.html 23
  24. 24. Memory Mapped Files • Start with a file – Appears the same to everyone – Reads/writes appear to everyone • Now speed it up – Until its as fast as memory – Like having the OS buffer 3/3/2009 http://ltsllc.com/slides/ipc.html 24
  25. 25. Why Dear God, Why?!! • Originally Unix – Where everything is a file – mmap system call – CreateFileMapping system call • Solves the naming problem • Solves the access problem 3/3/2009 http://ltsllc.com/slides/ipc.html 25
  26. 26. Example: World of Warcraft! Shared Memory! 3/3/2009 http://ltsllc.com/slides/ipc.html 26
  27. 27. WoW: Requirements • One client process per player • One server process for all • Server periodically reads all orders • Server issues results 3/3/2009 http://ltsllc.com/slides/ipc.html 27
  28. 28. WoW: Design Client Orders (EvilOne) Player Order EvilOne kill Client Lancelot kill (Lancelot) Client Martha Stewart kill (Conan) Conan make cookies … Client (Martha) 3/3/2009 http://ltsllc.com/slides/ipc.html 28
  29. 29. WoW: Design Results Orders Server Process Player Result Player Order EvilOne dead EvilOne kill Lancelot Lancelot dead kill Martha Stewart Martha Stewart dead kill Conan overweight Conan make cookies … … 3/3/2009 http://ltsllc.com/slides/ipc.html 29
  30. 30. Shared Memory: Summary • Preferred IPC • 250 to 1000MB/sec • File naming • Synchronization through file locking • JRE support 3/3/2009 http://ltsllc.com/slides/ipc.html 30
  31. 31. Sockets 3/3/2009 http://ltsllc.com/slides/ipc.html 31
  32. 32. Sockets • TCP/IP • Point to point • Stream oriented • Client/Server • Synchronized • Java support • Naming support 3/3/2009 http://ltsllc.com/slides/ipc.html 32
  33. 33. Sockets Details • Naming – 127.0.0.1 port 7777 • Synchronization – Accept, read, write – 70 usec • Bandwidth – 15 MB/sec 3/3/2009 http://ltsllc.com/slides/ipc.html 33
  34. 34. Sockets: CLIP • Some utility classes – ThreadedSocketServer • JRE already has excellent support 3/3/2009 http://ltsllc.com/slides/ipc.html 34
  35. 35. Example: Google Maps Copyright © Google 3/3/2009 http://ltsllc.com/slides/ipc.html 35
  36. 36. GMaps Combining Data Streets Image Overlay Images are Copyright © www.Google.com 3/3/2009 http://ltsllc.com/slides/ipc.html 36
  37. 37. GMaps: Requirements • C legacy code • One instance/process • Receive file name • Process for 1 to 10 sec • Respond with new file name 3/3/2009 http://ltsllc.com/slides/ipc.html 37
  38. 38. GMaps: Design Worker Pool Server Process Java VM Client Client Client Client Client Client Client Client Client Client Client Worker Thread Process TCP/IP 3/3/2009 http://ltsllc.com/slides/ipc.html 38
  39. 39. Sockets vs Shared Memory • Faster synchronization – 25 usec vs. 70 usec • More bandwidth – 250 MB/sec vs. 15 MB/sec 3/3/2009 http://ltsllc.com/slides/ipc.html 39
  40. 40. Message Queues 3/3/2009 http://ltsllc.com/slides/ipc.html 40
  41. 41. Message Queues • Point to point • Message or stream • Client/Server • Synchronization support • No Java Support • No naming support 3/3/2009 http://ltsllc.com/slides/ipc.html 41
  42. 42. Message Queue Details • Synchronization – Accept, read, write – 25 usec • Bandwidth – 167 MB/sec 3/3/2009 http://ltsllc.com/slides/ipc.html 42
  43. 43. Platform Differences • Direction – Linux is one-way – Windows is two-way • Naming – Linux: any – Windows: must be .pipename • Misc – Windows pipes are networkable 3/3/2009 http://ltsllc.com/slides/ipc.html 43
  44. 44. Message Queues: CLIP • MessageQueue class • One direction • File naming • JNI under the hood 3/3/2009 http://ltsllc.com/slides/ipc.html 44
  45. 45. Message Queues vs. Shared Memory • Less bandwidth – Synchronized: 250MB vs. 167MB – Unsynchronized: 1000MB vs. 167MB • No Java support • Platform differences 3/3/2009 http://ltsllc.com/slides/ipc.html 45
  46. 46. Semaphores 3/3/2009 http://ltsllc.com/slides/ipc.html 46
  47. 47. Semaphores • Synchronization only • Any to any • Access via increment/decrement • No Java support • No naming support 3/3/2009 http://ltsllc.com/slides/ipc.html 47
  48. 48. Semaphore Details • Integer value • Decrement reserves – Blocks if the value is 0 or less • Increment releases – May wake a blocked process • N-ary semaphores – Values other than 0 or 1 3/3/2009 http://ltsllc.com/slides/ipc.html 48
  49. 49. Semaphore Details • Synchronization – 25 usec • Platform naming differences – Linux: /somename – Windows: somename – Ad hoc access control 3/3/2009 http://ltsllc.com/slides/ipc.html 49
  50. 50. Semaphores CLIP • Semaphore class • File system naming • JNI under the hood 3/3/2009 http://ltsllc.com/slides/ipc.html 50
  51. 51. Example: The Liminator 3/3/2009 http://ltsllc.com/slides/ipc.html 51
  52. 52. The Liminator: Requirements • Start with Google Maps • Too many processes == poor performance • Limit processes with a semaphore – Initial value = max number of processes – Reserve when trying to spawn – Release when complete 3/3/2009 http://ltsllc.com/slides/ipc.html 52
  53. 53. Liminator: Design Semaphore Client Client Client Client Client Client Client Client Client Client Client Client Running Waiting 3/3/2009 http://ltsllc.com/slides/ipc.html 53
  54. 54. Semaphores vs Shared Memory • About the same speed • No naming support • No JRE support 3/3/2009 http://ltsllc.com/slides/ipc.html 54
  55. 55. Summary 3/3/2009 http://ltsllc.com/slides/ipc.html 55
  56. 56. Summary • IPC – Multiple processes – Naming – Bandwidth • CLIP – Open source Linux & Windows – New primitives via JNI – Simplify others 3/3/2009 http://ltsllc.com/slides/ipc.html 56
  57. 57. Summary of IPC Types IPC Type Sync Band Java Support? Semaphores 25 usec N/A No Sockets 70 usec 15MB Yes Message Queues 25 usec 167MB No Shared Memory 25 usec 250MB Yes 3/3/2009 http://ltsllc.com/slides/ipc.html 57
  58. 58. Resources Slides & code ltsllc.com/talks/ipc Windows msdn.microsoft.com Linux Advanced UNIX Programming basepath.com/aup/index.htm Java JTUX basepath.com/aup/jtux Sun Forums java.sun.com Code Project codeproject.com 3/3/2009 http://ltsllc.com/slides/ipc.html 58
  59. 59. The End 3/3/2009 http://ltsllc.com/slides/ipc.html 59
  60. 60. Which Option is Best? No Shared Sync? Memory Yes Yes Yes Yes Data? > 10MB/s? 1-to-1? No No No Shared Message Semaphores Sockets Memory* Queues 3/3/2009 http://ltsllc.com/slides/ipc.html 60
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×