FaSST: Fast, Scalable, and Simple Distributed Transactions with Two-Sided (RDMA) Datagram RPCs
Anuj Kalia (CMU) Michael Kaminsky (Intel Labs) David Andersen (CMU)
1
FaSST: Fast, Scalable, and Simple Distributed Transactions with - - PowerPoint PPT Presentation
FaSST: Fast, Scalable, and Simple Distributed Transactions with Two-Sided (RDMA) Datagram RPCs Anuj Kalia (CMU) Michael Kaminsky (Intel Labs) David Andersen (CMU) 1 One-slide summary Node 1 Node 2 One-sided (READ) NIC Two-sided (SEND)
Anuj Kalia (CMU) Michael Kaminsky (Intel Labs) David Andersen (CMU)
1
2
CPU NIC DRAM
Node 2 Node 1
One-sided (READ) Two-sided (SEND)
Existing systems
Use one-sided RDMA (READs and WRITEs) for transactions
FaSST
RECV
Distributed ACID transactions can be fast in datacenters FaRM [SOSP 15, NSDI 14], DrTM [SOSP 15, EuroSys 15], RSI [VLDB 16]
Enablers:
3
Node 1 Node 2 Node N Node 3
x y y‘ x‘
How to access remote data structures?
Existing systems FaSST Method One-sided READs Two-sided RPCs Round trips ≧2 1 Hash table
x
Node 1 Node 2
READ (pointer) READ (value) RPC request RPC response
4
5
Experiment: Fetch 32-byte chunks with READs, or RPCs
Tput/machine (M/s)
5 10 15 20
O(1,0) tput READs GETs/s (2 READs) RPCs4.4 9.0 18.0
READs GETs/s (2 READs) RPCs
FaRM [SOSP 15, Fig 2]
(2x ConnectX-3 NICs)
CPU-limited
Tput/machine (M/s)
15 30 45 60
O(1,0) tput READs Effective GETs/s w/ READs RPCs40.9 24.6 49.2
FaSST
(1x Connect-IB NIC)
NIC-limited
Existing systems FaSST
Method One-sided READs Two-sided RPCs Round trips ≧2 1 Scalable transport
Effect: NIC cache misses
Lock-free I/O
Effect: Low per-thread tput
6
7
Node 3 Node N Node 2
Node 1
Thread
Thread
Req rate/node (M/s)
20 40 60
Number of nodes (N)
20 40 60 80 100
READs FaSST RPCs
NIC cache
Problem:
Cache overflow
READs & WRITEs must use a connected transport layer
Node 1 Node 2
One-sided systems
READ (Reliable Connected) RPC req WRITE (Reliable Connected) RPC resp WRITE (Reliable Connected)
8
Problem:
Connection sharing
Req rate/thread (M/s)
5 10 15
Sequencer throughput2.1 10.9
No sharing Sharing
Single-thread tput w/ sharing
Node 3 Node N Node 2
Node 1
Thread
Thread
Problem:
Cache overflow
NIC cache
9
Node 1 Node 2
Req SEND (Unreliable Datagram) Resp SEND (Unreliable Datagram)
FaSST
But it supports only two-sided (SEND/RECV) operations
NIC cache
Node 3 Node N Node 2
Node 1
Thread
Thread
Req rate/thread (M/s)
1 2 3 4 5
Sequencer throughput3.6 2.1
READs
(sharing)
FaSST RPCs
READs vs FaSST RPCs
Local overhead offsets remote gains
RPC-based designs are simple
10
11
Node 2 Node 1 Switch
+ Link layer flow control + Link layer retransmission
Handle packet loss similar to machine failure: See paper
Tput/machine (M/s)
1 2 3 4
TAPT tput3.6 1.9
FaRM FaSST
TATP benchmark
(80% rdonly txns)
12
Nodes NICs Cores FaRM 50 2x ConnectX-3 16 DrTM+R 6 1x ConnectX-3 10 FaSST 50 1x ConnectX-3 8 vs FaRM: FaSST uses 50% fewer h/w resources vs DrTM+R: FaSST makes no data locality assumptions
Tput/machine (M/s)
1 2
TAPT tput1.6 0.9
DrTM+R FaSST
SmallBank benchmark
(85% rw txns)
Transactions with one-sided RDMA are:
Transactions with two-sided datagram RPCs are:
13
Code: https://github.com/efficient/fasst