Notes
Outline
Building reliable, high-performance communication systems from components
Xiaoming Liu, Christoph Kreitz, Robbert van Renesse, Jason Hickey, Mark Hayden, Ken Birman, Bob Constable
(shepherd: Peter Lee)
Cornell, Caltech, Compaq (CMU, Cedilla)
Why software components?
Why not?
Configuration is hard
Performance is bad
Abstraction barriers
Poor locality
Redundant code
Group Communication
History
Specification
Specification
Abstract IOA specification
of totally ordered multicast
S: array[integer] of message
next: integer
deliv: array[process] of integer
action Multicast(m) { S[next++] := m; }
action Deliver(p, m)
precond: deliv[p] < next && m == S[deliv[p]]
{ deliv[p]++; }
Layer correctness
Stack correctness
Efficiency?
Ensemble stacks have many layers, improving clarity, but inefficient.
5 optimization techniques:
Avoiding (in-line) garbage collection
Avoiding marshaling
Delaying non-critical message processing
Identifying common paths
Header compression
A protocol layer is a function!
(off-line) partial evaluation
Two-phase optimization
Header compaction
Architecture (deliver only)
Architecture
Performance
Three different versions:
Original (ORIG)
Hand-optimized (HAND)
Machine-optimized (MACH)
300 MHz UltraSparc/Solaris 2.6
OCaml 2.0 native code compiler
Code latency (msec)
Lessons learned
Design with formalization in mind
Use small, but not too small components
Use a language with formal semantics
Use IOA as a specification language
Use formal tool with in-house expertise
Final remarks
See CD or Web for code samples, links to all code, as well as how to reproduce our results
Still working on a machine-generated proof of correctness