Java IPC and the CLIP library

Post on 24-May-2015

8,211 views 3 download

Tags:

description

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

transcript

Java IPCAnd the CLIP Library

Clark N. HobbieLong Term Software, LLC

clark.hobbie@ltsllc.com

Who Gives a Damn?

3/3/2009 http://ltsllc.com/slides/ipc.html 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 4

What Are the Options?

• Sockets• Message Queues• Semaphores• Shared Memory

3/3/2009 http://ltsllc.com/slides/ipc.html 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 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 7

Java

RandomAccessFile raf = new RandomAccessFile("/temp/smfile", "rw");

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 8

CLIP

SharedMemory smem =

new SharedMemory("/temp/smfile");

3/3/2009 http://ltsllc.com/slides/ipc.html 9

What is IPC?

Inter-Process Communication (IPC)• Multiple processes• Naming• Synchronization• Bandwidth

3/3/2009 http://ltsllc.com/slides/ipc.html 10

Naming

Me Tarzan,who you?

3/3/2009 http://ltsllc.com/slides/ipc.html 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 12

File Naming

Many IPC methods use the file systembecause• Visible to all processes• Has access control built in

3/3/2009 http://ltsllc.com/slides/ipc.html 13

File Naming Examples

• Memory Mapped Files• Named Pipes/FIFOs

3/3/2009 http://ltsllc.com/slides/ipc.html 14

Synchronization

• Event ordering• Mutual exclusion

3/3/2009 http://ltsllc.com/slides/ipc.html 15

Example: Online Purchase

1. Get user credit information2. Decision purchase3. Update credit information

3/3/2009 http://ltsllc.com/slides/ipc.html 16

Without Event Ordering

Client A1 Get credit info

2 Decision purchase3 Update info

Client B

2 Get credit info

4 Decision purchase5 Update info

3/3/2009 http://ltsllc.com/slides/ipc.html 17

With Event Ordering

Client A1 Get credit info

2 Decision purchase3 Update info

Client B

2 Wait for A

4 Get credit info5 Decision purchase6 Update info

3/3/2009 http://ltsllc.com/slides/ipc.html 18

Synchronization is Event Ordering

Instead of this order:• A gets credit info• B gets credit info• A decisions purchase• A updates info• B decisions purchase• B updates credit info

We want this order:• A gets credit info• A decisions purchase• A updates info• B gets credit info• B decisions purchase• B updates credit info

3/3/2009 http://ltsllc.com/slides/ipc.html 19

Which Type of IPC is Appropriate?

3/3/2009 http://ltsllc.com/slides/ipc.html 20

IPC Types

• Shared Memory • Semaphores• Sockets • Message Queues

3/3/2009 http://ltsllc.com/slides/ipc.html 21

Shared Memory

3/3/2009 http://ltsllc.com/slides/ipc.html 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 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 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 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 26

Example: World of Warcraft!

Shared Memory!

3/3/2009 http://ltsllc.com/slides/ipc.html 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 28

WoW: Design

Client(Martha)

Client(Lancelot)

Client(EvilOne)

Client(Conan)

Orders

Player Order

EvilOne killLancelot

ConanMartha Stewart

killkill

make cookies…

3/3/2009 http://ltsllc.com/slides/ipc.html 29

WoW: Design

Results

Player Result

EvilOne deadLancelot

ConanMartha Stewart

deaddead

overweight…

Orders

Player Order

EvilOne killLancelot

ConanMartha Stewart

killkill

make cookies…

Server Process

3/3/2009 http://ltsllc.com/slides/ipc.html 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 31

Sockets

3/3/2009 http://ltsllc.com/slides/ipc.html 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 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 34

Sockets: CLIP

• Some utility classes– ThreadedSocketServer

• JRE already has excellent support

3/3/2009 http://ltsllc.com/slides/ipc.html 35

Example: Google Maps

Copyright © Google

3/3/2009 http://ltsllc.com/slides/ipc.html 36

GMapsCombining Data

Image Streets

Overlay

Images are Copyright © www.Google.com

3/3/2009 http://ltsllc.com/slides/ipc.html 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 38

GMaps: Design

Server Process

Java VM

ClientClientClientClientClientWorkerProcess

ClientClientClientClientClientClientThread

TCP/IP

Worker Pool

3/3/2009 http://ltsllc.com/slides/ipc.html 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 40

Message Queues

3/3/2009 http://ltsllc.com/slides/ipc.html 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 42

Message Queue Details

• Synchronization– Accept, read, write– 25 usec

• Bandwidth– 167 MB/sec

3/3/2009 http://ltsllc.com/slides/ipc.html 43

Platform Differences

• Direction– Linux is one-way– Windows is two-way

• Naming– Linux: any– Windows: must be \\.\pipe\name

• Misc– Windows pipes are networkable

3/3/2009 http://ltsllc.com/slides/ipc.html 44

Message Queues: CLIP

• MessageQueue class• One direction• File naming• JNI under the hood

3/3/2009 http://ltsllc.com/slides/ipc.html 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 46

Semaphores

3/3/2009 http://ltsllc.com/slides/ipc.html 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 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 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 50

Semaphores CLIP

• Semaphore class• File system naming• JNI under the hood

3/3/2009 http://ltsllc.com/slides/ipc.html 51

Example: The Liminator

3/3/2009 http://ltsllc.com/slides/ipc.html 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 53

Liminator: Design

Running

ClientClientClientClientClientClient

Waiting

ClientClientClientClientClientClient

Semaphore

3/3/2009 http://ltsllc.com/slides/ipc.html 54

Semaphores vs Shared Memory

• About the same speed• No naming support• No JRE support

3/3/2009 http://ltsllc.com/slides/ipc.html 55

Summary

3/3/2009 http://ltsllc.com/slides/ipc.html 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 57

Summary of IPC Types

NoN/A25 usecSemaphores

Yes250MB25 usecShared Memory

No167MB25 usecMessage Queues

15MB

Band

70 usec

Sync Java Support?

IPC Type

YesSockets

3/3/2009 http://ltsllc.com/slides/ipc.html 58

Resources

codeproject.comCode Projectjava.sun.comSun Forums

JTUXbasepath.com/aup/jtux

Java

Advanced UNIX Programmingbasepath.com/aup/index.htm

Linuxmsdn.microsoft.comWindowsltsllc.com/talks/ipcSlides & code

3/3/2009 http://ltsllc.com/slides/ipc.html 59

The End

3/3/2009 http://ltsllc.com/slides/ipc.html 60

Which Option is Best?

Sync?

Data?

Semaphores

Yes

No

> 10MB/s?Yes

Sockets

No

SharedMemory

MessageQueues

Yes

No

1-to-1?

SharedMemory*

No

Yes