Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Java IPC
And the CLIP Library
      Clark N. Hobbie
  Long Term Software, LLC
    clark.hobbie@ltsllc.com
Who Gives a Damn?
You Should Care Because…
•   If you are in a corner
•   Java sync is one VM only
•   Others require JNI
•   Platform diffe...
What Are the Options?
•   Sockets
•   Message Queues
•   Semaphores
•   Shared Memory




3/3/2009         http://ltsllc.c...
Which Option Should I Use?
Shared Memory
•   JRE support
•   Highest bandwidth
•   Decent synchronization
•   Naming suppo...
Why Should I Care about CLIP?
• New primitives
     – Semaphores
     – Message Queues
• Simplifies existing primitives
  ...
Java

RandomAccessFile raf = new RandomAccessFile(quot;/temp/smfilequot;, quot;rwquot;);
FileChannel chan = raf.getChannel...
CLIP

SharedMemory smem =
           new SharedMemory(quot;/temp/smfilequot;);




3/3/2009            http://ltsllc.com/s...
What is IPC?
Inter-Process Communication (IPC)
•   Multiple processes
•   Naming
•   Synchronization
•   Bandwidth



3/3/...
Naming

           Me Tarzan,
           who you?




3/3/2009          http://ltsllc.com/slides/ipc.html   10
Naming
How do you…
• Connect processes together?
• Determine who is allowed to connect?
• Examples
     – TCP/IP?
     – E...
File Naming
Many IPC methods use the file system
because
• Visible to all processes
• Has access control built in




3/3/...
File Naming Examples
• Memory Mapped Files
• Named Pipes/FIFOs




3/3/2009        http://ltsllc.com/slides/ipc.html   13
Synchronization
•      Event ordering
•      Mutual exclusion




3/3/2009          http://ltsllc.com/slides/ipc.html   14
Example: Online Purchase
1. Get user credit information
2. Decision purchase
3. Update credit information




3/3/2009    ...
Without Event Ordering
       Client A                                         Client B
1 Get credit info
                ...
With Event Ordering
       Client A                                         Client B
1 Get credit info
                   ...
Synchronization is Event Ordering
Instead of this order:               We want this order:
•   A gets credit info         ...
Which Type of IPC is Appropriate?




3/3/2009    http://ltsllc.com/slides/ipc.html   19
IPC Types
•   Shared Memory
•   Semaphores
•   Sockets
•   Message Queues




3/3/2009       http://ltsllc.com/slides/ipc....
Shared Memory




3/3/2009     http://ltsllc.com/slides/ipc.html   21
Shared Memory
•   Preferred approach
•   Any to any
•   get/put semantics
•   Synchronization support
•   JRE support
•   ...
Shared Memory Details
• Synchronization
     – File Locking
     – Lock/unlock ~ 25 usec
• Naming
     – File naming
• Ban...
Memory Mapped Files
• Start with a file
     – Appears the same to everyone
     – Reads/writes appear to everyone
• Now s...
Why Dear God, Why?!!
• Originally Unix
     – Where everything is a file
     – mmap system call
     – CreateFileMapping ...
Example: World of Warcraft!


                                                  Shared Memory!




3/3/2009      http://lt...
WoW: Requirements
•   One client process per player
•   One server process for all
•   Server periodically reads all order...
WoW: Design

       Client
                             Orders
     (EvilOne)

                   Player                 O...
WoW: Design

                                                                                Results
            Orders
  ...
Shared Memory: Summary
•   Preferred IPC
•   250 to 1000MB/sec
•   File naming
•   Synchronization through file locking
• ...
Sockets




3/3/2009   http://ltsllc.com/slides/ipc.html   31
Sockets
•   TCP/IP
•   Point to point
•   Stream oriented
•   Client/Server
•   Synchronized
•   Java support
•   Naming s...
Sockets Details
• Naming
     – 127.0.0.1 port 7777
• Synchronization
     – Accept, read, write
     – 70 usec
• Bandwidt...
Sockets: CLIP
• Some utility classes
     – ThreadedSocketServer
• JRE already has excellent support




3/3/2009         ...
Example: Google Maps




                         Copyright © Google


3/3/2009        http://ltsllc.com/slides/ipc.html  ...
GMaps
                   Combining Data
                                                         Streets
           Image
...
GMaps: Requirements
•   C legacy code
•   One instance/process
•   Receive file name
•   Process for 1 to 10 sec
•   Respo...
GMaps: Design

                                                                  Worker Pool
           Server Process

  ...
Sockets vs Shared Memory
• Faster synchronization
     – 25 usec vs. 70 usec
• More bandwidth
     – 250 MB/sec vs. 15 MB/...
Message Queues




3/3/2009      http://ltsllc.com/slides/ipc.html   40
Message Queues
•   Point to point
•   Message or stream
•   Client/Server
•   Synchronization support
•   No Java Support
...
Message Queue Details
• Synchronization
     – Accept, read, write
     – 25 usec
• Bandwidth
     – 167 MB/sec




3/3/20...
Platform Differences
• Direction
     – Linux is one-way
     – Windows is two-way
• Naming
     – Linux: any
     – Windo...
Message Queues: CLIP
•   MessageQueue class
•   One direction
•   File naming
•   JNI under the hood




3/3/2009         ...
Message Queues vs. Shared
                   Memory
• Less bandwidth
     – Synchronized: 250MB vs. 167MB
     – Unsynchro...
Semaphores




3/3/2009    http://ltsllc.com/slides/ipc.html   46
Semaphores
•   Synchronization only
•   Any to any
•   Access via increment/decrement
•   No Java support
•   No naming su...
Semaphore Details
• Integer value
• Decrement reserves
     – Blocks if the value is 0 or less
• Increment releases
     –...
Semaphore Details
• Synchronization
     – 25 usec
• Platform naming differences
     – Linux: /somename
     – Windows: s...
Semaphores CLIP
• Semaphore class
• File system naming
• JNI under the hood




3/3/2009      http://ltsllc.com/slides/ipc...
Example: The Liminator




3/3/2009         http://ltsllc.com/slides/ipc.html   51
The Liminator: Requirements
• Start with Google Maps
• Too many processes == poor performance
• Limit processes with a sem...
Liminator: Design
                                    Semaphore




            Client                                    ...
Semaphores vs Shared Memory
• About the same speed
• No naming support
• No JRE support




3/3/2009      http://ltsllc.co...
Summary




3/3/2009   http://ltsllc.com/slides/ipc.html   55
Summary
• IPC
     – Multiple processes
     – Naming
     – Bandwidth
• CLIP
     – Open source Linux & Windows
     – Ne...
Summary of IPC Types
           IPC Type         Sync                  Band      Java
                                    ...
Resources
Slides & code ltsllc.com/talks/ipc
Windows       msdn.microsoft.com
Linux          Advanced UNIX Programming
   ...
The End




3/3/2009   http://ltsllc.com/slides/ipc.html   59
Which Option is Best?

                      No
                               Shared
           Sync?
                   ...
Upcoming SlideShare
Loading in …5
×

Java IPC and the CLIP library

10,481 views

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

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

×