55
MegaPipe: A New Programming Interface for Scalable Network I/O Sangjin Han in collabora=on with Sco? Marshall ByungGon Chun Sylvia Ratnasamy University of California, Berkeley Yahoo! Research

MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

  • Upload
    lyhanh

  • View
    237

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

MegaPipe:  A  New  Programming  Interface    for  Scalable  Network  I/O  

Sangjin  Han    

in  collabora=on  with    

Sco?  Marshall                        Byung-­‐Gon  Chun                Sylvia  Ratnasamy    

University  of  California,  Berkeley                  Yahoo!  Research  

Page 2: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

tl;dr?  

   

MegaPipe  is  a  new  network  programming  API    

for  message-­‐oriented  workloads    

to  avoid  the  performance  issues  of  BSD  Socket  API  

OSDI  2012   2  

Page 3: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Two  Types  of  Network  Workloads  

1.  Bulk-­‐transfer  workload  §  One  way,  large  data  transfer  

§  Ex:  video  streaming,  HDFS  §  Very  cheap  

§  A  half  CPU  core  is  enough  to  saturate  a  10G  link  

3  OSDI  2012  

Page 4: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Two  Types  of  Network  Workloads  

1.  Bulk-­‐transfer  workload  §  One  way,  large  data  transfer  

§  Ex:  video  streaming,  HDFS  §  Very  cheap  

§  A  half  CPU  core  is  enough  to  saturate  a  10G  link  

2.  Message-­‐oriented  workload  –  Short  connec=ons  or  small  messages  •  Ex:  HTTP,  RPC,  DB,  key-­‐value  stores,  …  

–  CPU-­‐intensive!  

4  OSDI  2012  

Page 5: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

BSD  Socket  API  Performance  Issues  

n_events = epoll_wait(…); //  wait  for  I/O  readiness for (…) { …   new_fd = accept(listen_fd); //    new  connec=on   … bytes = recv(fd2, buf, 4096); //  new  data  for  fd2  

OSDI  2012   5  

§  Issues  with  message-­‐oriented  workloads  §  System  call  overhead  

Page 6: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

BSD  Socket  API  Performance  Issues  

n_events = epoll_wait(…); //  wait  for  I/O  readiness for (…) { …   new_fd = accept(listen_fd); //    new  connec=on   … bytes = recv(fd2, buf, 4096); //  new  data  for  fd2  

OSDI  2012   6  

§  Issues  with  message-­‐oriented  workloads  §  System  call  overhead  §  Shared  listening  socket  

Page 7: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

BSD  Socket  API  Performance  Issues  

n_events = epoll_wait(…); //  wait  for  I/O  readiness for (…) { …   new_fd = accept(listen_fd); //    new  connec=on   … bytes = recv(fd2, buf, 4096); //  new  data  for  fd2  

OSDI  2012   7  

§  Issues  with  message-­‐oriented  workloads  §  System  call  overhead  §  Shared  listening  socket  §  File  abstrac=on  overhead  

Page 8: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Microbenchmark:  How  Bad?  

RPC-­‐like  test  on  an  8-­‐core  Linux  server  (with  epoll)  

new  TCP  connec=on  

request  (64B)  

response  (64B)  

Teardown    

768  Clients   Server  

…  

10  transac=ons  

2.  Connec=on  length  

1.  Message  size  

3.  Number  of  cores  

8  OSDI  2012  

…  

Page 9: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

1.  Small  Messages  Are  Bad  

0

20

40

60

80

100

0

2

4

6

8

10

64 128 256 512 1K 2K 4K 8K 16K

CPU

Usa

ge (%

)

Thr

ough

put (

Gbp

s)

Message Size (B)

Throughput CPU Usage

Low  throughput   High  overhead  9  OSDI  2012  

Page 10: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

2.  Short  Connec=ons  Are  Bad  

0

0.3

0.6

0.9

1.2

1.5

1 2 4 8 16 32 64 128

Thr

ough

put (

1M tr

ansa

ctio

ns/s

)

Number of Transactions per Connection

19x  lower  

10  OSDI  2012  

Page 11: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

3.  Mul=-­‐Core  Will  Not  Help  (Much)  

0

0.3

0.6

0.9

1.2

1.5

1 2 3 4 5 6 7 8

Thr

ough

put (

1M tr

ansa

ctio

ns/s

)

# of CPU Cores

Ideal  scaling  

Actual  scaling  

11  OSDI  2012  

Page 12: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

MEGAPIPE  DESIGN  

12  OSDI  2012  

Page 13: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Design  Goals  

OSDI  2012   13  

§  Concurrency  as  a  first-­‐class  ci=zen  

§  Unified  interface  for  various  I/O  types  §  Network  connec=ons,  disk  files,  pipes,  signals,  etc.  

§  Low  overhead  &  mul=-­‐core  scalability  § Main  focus  of  this  presenta=on  

Page 14: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

OSDI  2012   14  

Overview  

Low    per-­‐core  

performance  

Poor    mul=-­‐core  scalability  

System  call  overhead  

Shared  listening  socket  

VFS  overhead  

System  call  batching  

Listening  socket  

par==oning    

Lightweight  socket  

Problem Cause Solution

Page 15: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Key  Primi=ves  §  Handle  

§  Similar  to  file  descriptor  § But  only  valid  within  a  channel  

§  TCP  connec=on,  pipe,  disk  file,  …  

§  Channel  §  Per-­‐core,  bidirec=onal  pipe  between  user  and  kernel  § Mul=plexes  I/O  opera=ons  of  its  handles  

OSDI  2012   15  

Page 16: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Sketch:  How  Channels  Help  (1/3)  

OSDI  2012   16  

User

Kernel

Handles

Channel

I/O  Batching  

Page 17: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Sketch:  How  Channels  Help  (2/3)  

OSDI  2012   17  

Core 1 Core 2 Core 3

Shared  accept  queue  

accept()  

New  connec=ons  

Page 18: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Sketch:  How  Channels  Help  (2/3)  

OSDI  2012   18  

Core 1 Core 2 Core 3

Listening  socket  par==oning  

New  connec=ons  

Page 19: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Sketch:  How  Channels  Help  (3/3)  

OSDI  2012   19  

Core 1 Core 2 Core 3

VFS

Page 20: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Sketch:  How  Channels  Help  (3/3)  

OSDI  2012   20  

Core 1 Core 2 Core 3

VFS

Lightweight  socket  

Page 21: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

MegaPipe  API  Func=ons  

§  mp_create()  /  mp_destroy()  §  Create/close  a  channel  

§  mp_register()  /  mp_unregister()  §  Register  a  handle  (regular  FD  or  lwsocket)  into  a  channel  

§  mp_accept()  /mp_read()  /  mp_write()  /  …  §  Issue  an  asynchronous  I/O  command  for  a  given  handle  

§  mp_dispatch()  §  Dispatch  an  I/O  comple=on  event  from  a  channel  

OSDI  2012   21  

Page 22: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Comple=on  No=fica=on  Model  §  MegaPipe  

§  Go-­‐and-­‐Wait  (Comple=on  no=fica=on)  

OSDI  2012   22  

§  BSD  Socket  API  §  Wait-­‐and-­‐Go  (Readiness  model)  

mp_read(handle1, …); mp_read(handle2, …); … ev = mp_dispatch(channel); … ev = mp_dispatch(channel); …    

epoll_ctl(fd1, EPOLLIN); epoll_ctl(fd2, EPOLLIN); epoll_wait(…); … ret1 = recv(fd1, …); … ret2 = recv(fd2, …); …  

L

J

J Batching  J Easy  and  intui=ve  J Compa=ble  with  disk  files  

Page 23: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

1.  I/O  Batching  

OSDI  2012   23  

§  Transparent  batching  §  Exploits  parallelism  of  independent  handles  

MegaPipe  User-­‐Level  Library  

MegaPipe  Kernel  Module  

Read data from handle 6 Accept a new connection Read data from handle 3 Write data to handle 5

New connection arrived Write done to handle 5

Read done from handle 6

Applica=on  

MegaPipe API (non-batched)

Batched system calls

Page 24: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

2.  Listening  Socket  Par==oning  §  Per-­‐core  accept    queue  for  each  channel  

§  Instead  of  the  globally  shared  accept  queue  

OSDI  2012   24  

User

Kernel

mp_register()  

Accept  queue  

Listening  socket  

Page 25: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

2.  Listening  Socket  Par==oning  §  Per-­‐core  accept    queue  for  each  channel  

§  Instead  of  the  globally  shared  accept  queue  

OSDI  2012   25  

User

Kernel

mp_register()  

Accept  queue  

Accept  queue  

Accept  queue  

Listening  socket  

Page 26: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

2.  Listening  Socket  Par==oning  §  Per-­‐core  accept    queue  for  each  channel  

§  Instead  of  the  globally  shared  accept  queue  

OSDI  2012   26  

User

Kernel

Accept  queue  

Accept  queue  

Accept  queue  

Listening  socket  

mp_accept()  

New  connec=ons  

Page 27: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

3.  lwsocket:  Lightweight  Socket  §  Common-­‐case  op=miza=on  for  sockets  

§  Sockets  are  ephemeral  and  rarely  shared  § Bypass  the  VFS  layer  § Convert  into  a  regular  file  descriptor  only  when  necessary  

OSDI  2012   27  

File  instance  (states)  

inode  dentry  

TCP  socket  

File  descriptor  

File  name?  

Page 28: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

3.  lwsocket:  Lightweight  Socket  §  Common-­‐case  op=miza=on  for  sockets  

§  Sockets  are  ephemeral  and  rarely  shared  § Bypass  the  VFS  layer  § Convert  into  a  regular  file  descriptor  only  when  necessary  

OSDI  2012   28  

File  instance  (states)  

inode  dentry  

TCP  socket  

File  descriptor   File  descriptor  

dup()  or  fork()  

Page 29: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

3.  lwsocket:  Lightweight  Socket  §  Common-­‐case  op=miza=on  for  sockets  

§  Sockets  are  ephemeral  and  rarely  shared  § Bypass  the  VFS  layer  § Convert  into  a  regular  file  descriptor  only  when  necessary  

OSDI  2012   29  

File  instance  (states)  

inode  dentry  

TCP  socket  

File  descriptor   File  descriptor  

File  instance  (states)  

open()  

Page 30: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

3.  lwsocket:  Lightweight  Socket  §  Common-­‐case  op=miza=on  for  sockets  

§  Sockets  are  ephemeral  and  rarely  shared  § Bypass  the  VFS  layer  § Convert  into  a  regular  file  descriptor  only  when  necessary  

OSDI  2012   30  

File  instance  (states)  

inode  dentry  

TCP  socket  

File  descriptor  

TCP  socket  

lwsocket  

Page 31: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

EVALUATION  

31  OSDI  2012  

Page 32: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Microbenchmark  1/2  §  Throughput  improvement  with  various  message  sizes  

OSDI  2012   32  

64 B 256 B 512 B

1 KiB

2 KiB 4 KiB

0

20

40

60

80

100

120

1 2 3 4 5 6 7 8

Thr

ough

put I

mpr

ovem

ent (

%)

# of CPU Cores

Page 33: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Microbenchmark  1/2  §  Throughput  improvement  with  various  message  sizes  

OSDI  2012   33  

64 B 256 B 512 B

1 KiB

2 KiB 4 KiB

0

20

40

60

80

100

120

1 2 3 4 5 6 7 8

Thr

ough

put I

mpr

ovem

ent (

%)

# of CPU Cores

Page 34: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Microbenchmark  1/2  §  Throughput  improvement  with  various  message  sizes  

OSDI  2012   34  

64 B 256 B 512 B

1 KiB

2 KiB 4 KiB

0

20

40

60

80

100

120

1 2 3 4 5 6 7 8

Thr

ough

put I

mpr

ovem

ent (

%)

# of CPU Cores

Page 35: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Microbenchmark  2/2  §  Mul=-­‐core  scalability    

§ with  various  connec=on  lengths  (#  of  transac=ons)  

OSDI  2012   35  

1 2 4

8

16 32 64 128

1

2

3

4

5

6

7

8

1 2 3 4 5 6 7 8

Para

llel S

peed

up

# of CPU Cores

1

2

3

4

5

6

7

8

1 2 3 4 5 6 7 8 # of CPU Cores

Baseline   MegaPipe  

Page 36: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Macrobenchmark  

§  memcached  §  In-­‐memory  key-­‐value  store  §  Limited  scalability  

§ Object  store  is  shared  by  all  cores  with  a  global  lock  

§  nginx  § Web  server  §  Highly  scalable  

§ Nothing  is  shared  by  cores,  except  for  the  listening  socket  

OSDI  2012   36  

Page 37: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

memcached  

MegaPipe Baseline

0

150

300

450

600

750

900

1050

1 2 3 4 5 6 7 8 9 10

Thr

ough

put (

1k r

eque

sts/

s)

Number of Requests per Connection 37  OSDI  2012  

§  memaslap  with  90%  GET,  10%  SET,  64B  keys,  1KB  values  

Global  lock  bo?leneck  

3.6x  

3.9x  2.4x  

1.3x  

Page 38: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

memcached  

MegaPipe

MegaPipe-FL

Baseline

Baseline-FL

0

150

300

450

600

750

900

1050

1 2 4 8 16 32 64 128 256 ∞

Thr

ough

put (

1k r

eque

sts/

s)

Number of Requests per Connection 38  OSDI  2012  

§  memaslap  with  90%  GET,  10%  SET,  64B  keys,  1KB  values  

Page 39: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

nginx  

0

20

40

60

80

100

0

4

8

12

16

20

1 2 3 4 5 6 7 8

Impr

ovem

ent (

%)

Thr

ough

put (

Gbp

s)

# of CPU Cores

Improvement MegaPipe Baseline

39  OSDI  2012  

§  Based  on  Yahoo!  HTTP  traces:  6.3KiB,  2.3  trans/conn  on  avg.  

Page 40: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

CONCLUSION  

40  OSDI  2012  

Page 41: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Related  Work  §  Batching  [FlexSC,  OSDI’10]  [libflexsc,  ATC’11]  

§  Excep=on-­‐less  system  call  § MegaPipe  solves  the  scalability  issues  

§  Par==oning  [Affinity-­‐Accept,  EuroSys’12]  §  Per-­‐core  accept  queue  § MegaPipe  provides  explicit  control  over  par==oning  

§  VFS  scalability  [Mosbench,  OSDI’10]  § MegaPipe  bypasses  the  issues  rather  than  mi=ga=ng  

OSDI  2012   41  

Page 42: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Conclusion  

§  Short  connec=ons  or  small  messages:  §  High  CPU  overhead  §  Poorly  scaling  with  mul=-­‐core  CPUs  

§  MegaPipe  §  Key  abstrac=on:  per-­‐core  channel    §  Enabling  three  op=miza=on  opportuni=es:  

§ Batching,  par==oning,  lwsocket  §  15+%  improvement  for  memcached,  75%  for  nginx  

42  OSDI  2012  

Page 43: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

BACKUP  SLIDES  

43  OSDI  2012  

Page 44: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Small  Messages  with  MegaPipe  

OSDI  2012   44  

0

0.3

0.6

0.9

1.2

1.5

1.8

1 2 4 8 16 32 64 128

Thr

ough

put (

1M tr

ans/

s)

# of Transactions per Connection

Baseline Throughput MegaPipe

Page 45: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

1.  Small  Messages  Are  Bad  à  Why?  

§  #  of  messages  ma?ers,  not  the  volume  of  traffic  §  Per-­‐message  cost  >>>  per-­‐byte  cost  

§  1KB  msg  is  only  2%  more  expensive  than  64B  msg  

§  10G  link  with  1KB  messages  à  1M  IOPS!  §  Thus  1M+  system  calls  

§  System  calls  are  expensive  [FlexSC,  2010]  § Mode  switching  between  kernel  and  user  §  CPU  cache  pollu=on  

45  OSDI  2012  

Page 46: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Short  Connec=ons  with  MegaPipe  

OSDI  2012   46  

0

20

40

60

80

100

0

2

4

6

8

10

64 128 256 512 1K 2K 4K 8K 16K

CPU

Usa

ge (%

)

Thr

ough

put (

Gbp

s)

Message Size (B)

Baseline CPU Usage MegaPipe

Page 47: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

2.  Short  Connec=ons  Are  Bad  à  Why?  

§  Connec=on  establishment  is  expensive  §  Three-­‐way  handshaking  /  four-­‐way  teardown  

§ More  packets  § More  system  calls:  accept(),  epoll_ctl(),  close(),  …  

§  Socket  is  represented  as  a  file  in  UNIX  §  File  overhead  § VFS  overhead  

47  OSDI  2012  

Page 48: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Mul=-­‐Core  Scalability  with  MegaPipe  

OSDI  2012   48  

0

20

40

60

80

100

0

0.3

0.6

0.9

1.2

1.5

1 2 3 4 5 6 7 8

Eff

icie

ncy

(%)

Thr

ough

put (

1M tr

ans/

s)

# of CPU Cores

Baseline Per-Core Efficiency MegaPipe

Page 49: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

3.  Mul=-­‐Core  Will  Not  Help  à  Why?  

49  OSDI  2012  

User

Kernel

Listening  socket  

§  Shared  queue  issues  [Affinity-­‐Accept,  2012]  

§  Conten=on  on  the  listening  socket  §  Poor  connec=on  affinity  

accept()  

RX  

TX  

Page 50: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

3.  Mul=-­‐Core  Will  Not  Help  à  Why?  

50  OSDI  2012  

File  instance  

inode  dentry  

TCP  socket  

Applica=on  

Process ���file descriptor table

VFS

TCP/IP

§  File/VFS  mul=-­‐core  scalability  issues  

Shared  by  threads  

Globally  visible  in  the  system  

Page 51: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Overview  

Core 1

Core N Channel instance

File handles

lwsocket handles

Pending completion

events

VFS

TCP/IP

MegaPipe user-level library

User application thread

Batched async I/O commands

Batched completion

events

51  OSDI  2012  

Linux kernel

Core 2

MegaPipe API

Handles

Channel

Page 52: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Ping-­‐Pong  Server  Example  ch = mp_create() handle = mp_register(ch, listen_sd, mask=my_cpu_id) mp_accept(handle)

while true: ev = mp_dispatch(ch) conn = ev.cookie if ev.cmd == ACCEPT: mp_accept(conn.handle) conn = new Connection() conn.handle = mp_register(ch, ev.fd, cookie=conn) mp_read(conn.handle, conn.buf, READSIZE) elif ev.cmd == READ: mp_write(conn.handle, conn.buf, ev.size) elif ev.cmd == WRITE: mp_read(conn.handle, conn.buf, READSIZE) elif ev.cmd == DISCONNECT: mp_unregister(ch, conn.handle) delete conn OSDI  2012   52  

Page 53: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Contribu=on  Breakdown  

OSDI  2012   53  

Page 54: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

memcached  latency    

54  OSDI  2012  

0

500

1000

1500

2000

2500

3000

3500

0 256 512 768 1024 1280 1536

Lat

ency

(µs)

# of Concurrent Client Connections

Baseline-FL 99%

MegaPipe-FL 99%

Baseline-FL 50%

MegaPipe-FL 50%

Page 55: MegaPipe:)A)New)Programming)Interface)) for)Scalable ... · MegaPipe:)A)New)Programming)Interface)) for)Scalable)Network) ... interface)for)various)I/O)types)! Network) ... socket

Clean-­‐Slate  vs.  Dirty-­‐Slate  

§  MegaPipe:  a  clean-­‐slate  approach  with  new  APIs  §  Quick  prototyping  for  various  op=miza=ons  §  Performance  improvement:  worthwhile!  

§  Can  we  apply  the  same  techniques  back  to  the  BSD  Socket  API?  §  Each  technique  has  its  own  challenges  

§  Embracing  all  could  be  even  harder  

§  Future  WorkTM  

OSDI  2012   55