Patterns and Tools for Achieving Predictability and Performance with Real-time Java Presenter: Ehsan

advertisement
Patterns and Tools for Achieving
Predictability and Performance with
Real-time Java
Presenter: Ehsan
Ghaneie
Java and Real-Time Systems

Unable to offer real-time systems’ required
Quality of Service (QoS) guarantees of
predictability
–
–
Under-specified scheduling semantics of Java
threads can lead to situations where the most
eligible thread is not allowed to run
The Java garbage collector can preempt any
other Java thread, thus causing unpredictably
long preemption latencies
Real-time Specification for Java (RTSJ)


Maintains main advantages of Java such as ease of
use, portability, and native thread support
Stronger guarantees on thread semantics
–
–
–

Real-time threads (RTT)
No heap real-time threads (NHRTT)
Both have higher priority than regular Java threads
Offers predictable memory management needed for
real-time applications
–
–
–
Heap Memory
Immortal Memory
Scoped Memory
Scoped Memory



Scoped Memory blocks expire when there are no
more threads executing in their region
Can cause memory waste if short-lived objects are in
the same scope as long-lived objects =>
Nested scopes:
–
–
Longer-lived objects should be created in ancestor scopes
Shorter-lived objects should be created in appropriate child
scopes
Side Effects of Scoped Memory

Adds complexity to the design of real-time
systems written in Java
–
Tight restrictions imposed on cross-scope
memory access => Memory access rules


Lifetime rule
Single parent rule
Side Effects of Scoped Memory


Explicit control of memory creates the potential to
have memory leaks.
Lifetime of an application:
–
–
–


Initialization
Operation
Termination
Memory leak is defined as allocation of nonrecyclable objects in immortal or scoped memory
areas during operation phase
Recovering from memory leaks is an expensive
operation
Design Patterns






Immortal Singleton
Wedge Thread
Memory Pool
Encapsulated Method
Multi-scoped Object
Memory Block
Immortal Singleton



Adaptation of classical Singleton pattern
Allows for creating a unique instance of a
class from immortal memory
Can be accessed from any memory area
Wedge Thread



Prevents premature reclamation of a scoped
memory area by controlling its lifetime
Consist of a real-time thread that enters a
scope and blocks
Waits for a signal to exit the area
Memory Pool




Set of instances of a given class preallocated in a specific memory area
Pooled objects are generally mutable
When an object is required, it will be taken
from the pool
When an object is not required any longer, it
will be returned to the pool
Encapsulated Method


Avoids unnecessary memory allocations in
the current scope
Allows for allocation of objects that represent
intermediate results in a temporary scope
Multi-scoped Object


Allows transparent access of an object
regardless of the originating region of the
callee
Performs the proper memory scope traversal
to ensure that a given method is called from
the correct scope
Memory Block


Allows pooling, via serialization, of objects of
varying size in a byte array block allocated
from immortal memory
Disadvantages
–
–
Required explicit memory management
(De)serialization incurs additional overhead
Separation of Creation and
Initialization

Problem:
–
–

Creation of objects in another memory area
requires the use of Java reflection
Can become inefficient when creating objects with
parameters
Solution:
–
–
Define classes with default constructor
Provide accessor methods
Cross-scope Invocation

Problem:
–

Elaborate memory traversal must be performed to
invoke a method on an object that is not in the
calling object’s scope stack
Solution
–
ExecuteInRunnable class has been developed to
simplify cross-scope invocation
ExecuteInRunnable
Immortal Exception

Problem:
–

Exceptions may need to be thrown and handled in
different memory areas
Solution
–
–
A “Factory” class that creates exception objects in
created in immortal memory
Immortal singleton pattern is used to cache the
exception objects so they can be re-thrown
Immortal Façade

Problem:
–

Complex scoping structures of large applications
makes development and maintenance difficult
Solution
–
–
–
Façade class encapsulated the logic that handles
the cross-scope invocation
Implementation class implements the actual logic
behind the façade
Based on Gang of Four Façade design pattern
RTZen


The first implementation of Real-time CORBA
middleware in real-time Java
Goals
–
–
–
Provide a high degree of predictability while
maintaining good performance
Maintain ease of use for the application developer
by hiding the implementation details
Be compliant with both RTCORBA, and RTSJ to
offer portability
Scoped Memory Structure of RTZen
Performance

RTZen
–

JacORB
–

Implemented using RTSJ
Regular Java ORB
TAO
–
Efficient, predictable, widely used open-source
real-time CORBA ORB for C++
Real-time vs. Regular Java

Operating system: TimeSys Linux GPL 4.1
–


Based on the Linux kernel 2.4.21
Non-real-time JVM: Sun JDK 1.4 JVM
Real-time Java Platform: jRate
Real-time Java vs. C++


Jitter is almost the same
RTZen is still slower than TAO
–
Overhead of RTSJ, and Java VMs
Conclusion
Thank You!

References
–
–
Krishna Raman, Yue Zhang, Mark Panahi, Juan A.
Colmenares and Raymond Klefstad. Patterns and tools for
achieving predictability and performance with real-time
Java. In Proc. 11th IEEE Int'l Conference on Real-Time and
Embedded Computing Systems and Applications (RTCSA
2005). Hong Kong, China. August 2005.
Krishna Raman, Yue Zhang, Mark Panahi, Juan A.
Colmenares, Raymond Klefstad, and Trevor Harmon.
RTZen: highly predictable, real-time Java middleware for
distributed and embedded systems. In Proc.
ACM/IFIP/USENIX 6th Int'l Middleware Conference
(Middleware 2005). Grenoble, France. December 2005.
Download