|
|
|
Xiaoming Liu, Christoph Kreitz, Robbert van
Renesse, Jason Hickey, Mark Hayden, Ken Birman, Bob Constable |
|
(shepherd: Peter Lee) |
|
|
|
Cornell, Caltech, Compaq (CMU, Cedilla) |
|
|
|
|
|
|
|
Configuration is hard |
|
Performance is bad |
|
Abstraction barriers |
|
Poor locality |
|
Redundant code |
|
|
|
|
|
|
|
|
|
|
|
|
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]++; } |
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Three different versions: |
|
Original (ORIG) |
|
Hand-optimized (HAND) |
|
Machine-optimized (MACH) |
|
300 MHz UltraSparc/Solaris 2.6 |
|
OCaml 2.0 native code compiler |
|
|
|
|
|
|
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 |
|
|
|
|
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 |
|
|
|