reference capabilities for concurrency and scalabilityreference capabilities for concurrency and...

51
Reference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October 24th 2017 sa Structured Aliasing

Upload: others

Post on 12-Oct-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Reference Capabilities for Concurrency and Scalability

An Experience ReportElias Castegren, Tobias Wrigstad

OCAP, Vancouver October 24th 2017

sa

Structured Aliasing

Page 2: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

What the CAP?

• Object capability

— An unforgeable reference to an object — The permission to perform (one or more) operations on that object

• Reference capability

— An (unforgeable) object capability— The permission to perform (one or more) operations on that reference

{foo, bar}

{foo, bar}

{...}

Page 3: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

This Talk

• Reference capabilities for data-race freedom

• Reference capabilities for atomic ownership transfer

{foo} {bar}

{foo, bar}∅

Page 4: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Boom!

Warning: Aliasing May Cause Data-Races

Page 5: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

???

Warning: Aliasing May Cause Data-Races

Page 6: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

???

Warning: Aliasing May Cause Data-Races

Aliasing doesn’t cause data-races! Lack of mutual

exclusion causes data-races!

Page 7: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Object Capabilities Are Not Enough

• An object capability tells you something about what you can do with an object

• A reference capability implicitly tells you something about what others can do

{foo, bar}

{foo, bar}

{move}

Page 8: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Kappa [ECOOP ’16]

Page 9: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Reference Capabilities for Concurrency Control

• A capability grants access to some object

• The type of a capability defines the interface to its object

• A capability assumes exclusive access

Thread-safety ⇒ No data-races

• How thread-safety is achieved is controlled by the capability’s mode

x : Tlinear

reference

Page 10: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Reference Capabilities á la Mode

• Exclusive modes

• Sharable modes

linear local

read

Globally unique Thread-local

Precludes mutating aliases

locked

Implicit locking

!

active

Asynchronous actor

Page 11: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

linear

local

read

Precludes mutating aliases

locked

subordinate

Guarantee mutual exclusion

Encapsulated

⎫ ⎬ ⎭active

Reference Capabilities á la Mode

Page 12: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Encore

• Actor-based programming language

Page 13: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Encore

• Actor-based programming language

Page 14: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Encore

• Actor-based programming language

• Uses reference capabilities to enforce safe sharing between actors

Page 15: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

• Actor-based programming language

• Uses reference capabilities to enforce safe sharing between actors

Encore

Page 16: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Switching to a Delegating Model

Page 17: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Switching to a Delegating Model

Page 18: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Switching to a Delegating Model

Page 19: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Far References with Reference Capabilities

{copyNear, copyFar}

{copy}

local

{foo, bar}

{!foo, !bar}

”active”

Page 20: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Taking Far References Further

• Safely breaking encapsulation

!

Page 21: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Taking Far References Further

• Safely breaking encapsulation

!

Page 22: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Actors without Borders [PLACES’17]

!

Page 23: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Safe Object Sharing

• Any two aliases are e.g. composable, synchronised, thread-local, encapsulated… ⇒ No data-races

• Whoever controls the aliasing controls the concurrency!

!. . .

Page 24: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Pony [AGERE ’15] and Orca [OOPSLA’17]

Thursday@OOPSLA 11:15-11:37

Page 25: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Recap

• Object capabilities specify the permitted operations on an object

• Reference capabilities specify the permitted operations on a reference

• Strictly following the reference capability model gives global guarantees:

— Encapsulation

— Thread-locality

— Uniqueness

— Absence of mutable aliases

— …

f

Page 26: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Refcap > Ocap? Refcap ⇒ Ocap? Refcap ⊆ Ocap?

• Reference capabilities can be a compliment to object capabilities

• Reference capabilities allow specifying how object capabilities may be further shared

— Shallow/transitive permission

— Local/distributed permission

• Can object capabilities ”emulate” reference capabilities?

— Only partially

• Can a reference capability be revoked?

— Weak references

Page 27: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

horisontuppsala 2009

Uppsala universitets årsmagasin

Spädbarns sociala kompetens

Fler farmaceuter i vården

Innovationer inom life science

Professorn som skapar blixtar

@CartesianGlee

EliasC

eliasc.github.io

Page 28: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

• Relying on locks...

• Relying on isolation…

• Relying on immutability…

• …bans shared mutable state altogether

Ensuring Mutual Exclusion

Page 29: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

• Relying on locks...

• Relying on isolation…

• Relying on immutability…

• …bans shared mutable state altogether

Ensuring Mutual Exclusion

Toorest

rictive?

Page 30: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Example: A Treiber Stack

struct Node { var elem : T; val next : Node; }

next

elem

struct Stack { var top : Node; }

Stack N N N

T T T

top

Page 31: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Example: A Treiber Stack

Stack N N N

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

top

Page 32: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Example: A Treiber Stack

Stack N N N

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

oldTop

top

Page 33: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Example: A Treiber Stack

Stack N N N

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

oldTop

oldTop

top

Page 34: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Example: A Treiber Stack

Stack N N N

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

oldTop

oldTop

top

Page 35: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Example: A Treiber Stack

Stack N N N

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

oldTop

oldTop

top

Page 36: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Example: A Treiber Stack

Stack N N N

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

oldTop

oldTop

top

Page 37: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Example: A Treiber Stack

Stack N N N

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

oldTop

oldTop

top

Page 38: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Example: A Treiber Stack

Stack N N N

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

oldTop

oldTop

top

Page 39: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Example: A Treiber Stack

Stack N N N

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

oldTop

oldTop

top

Page 40: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Fine-Grained Concurrency ≠ Mutual Exclusion

Stack N N N

T T T

Shared Mutable state!

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

Page 41: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

Treiber Stack with Reference Capabilities

Stack N{readElem}

{compare

{speculate}

and swap}

Page 42: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

Treiber Stack with Reference Capabilities

Stack N{readElem}

{compare

{speculate} {… }and swap

}…

Page 43: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Capability Transfer with Compare-and-Swap

Stack N N N

top

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

{…} {…}

Page 44: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Capability Transfer with Compare-and-Swap

Stack N N N

top

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

{…} {…}

Page 45: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Capability Transfer with Compare-and-Swap

Stack N N N

top

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

{…} {…}

Page 46: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Capability Transfer with Compare-and-Swap

Stack N N N

top

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

{…}

{…}

Page 47: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Capability Transfer with Compare-and-Swap

Stack N N N

top

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T T

{…} {…}∅

Page 48: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

Capability Transfer with Compare-and-Swap

Stack

N

N N

top

def pop(s : Stack) : T { while(true) { val oldTop = s.top; if(CAS(s.top, oldTop, oldTop.next)) return oldTop.elem; } }

T T

{…}

Page 49: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

LOLCAT [ECOOP ’17]

• Linear Ownership:

— At most one capability may access an object’s mutable fields

• Three fundamental lock-free data-structures

— Treiber Stack— Michael—Scott Queue— Tim Harris List

• No uncontrolled data-races!

Page 50: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

A Taxonomy of Reference Capabilities

Capability

Shared

Atomic Immutable

Unsafe

Lock-Free Active

Subordinate

Optimistic Pessimistic Oblivious

Local

Locked Read

Exclusive

Linear

Safe

Page 51: Reference Capabilities for Concurrency and ScalabilityReference Capabilities for Concurrency and Scalability An Experience Report Elias Castegren, Tobias Wrigstad OCAP, Vancouver October

horisontuppsala 2009

Uppsala universitets årsmagasin

Spädbarns sociala kompetens

Fler farmaceuter i vården

Innovationer inom life science

Professorn som skapar blixtar

@CartesianGlee

EliasC

eliasc.github.io