ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 ›...

31
ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科 特任助教 浅井大史 <[email protected]> 2014年11月18日 Internet Week 2014S6 パケットフォワーディング&ルーティングの実装技術

Transcript of ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 ›...

Page 1: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

ゼロから作る高速パケット転送用OS

東京大学大学院情報理工学系研究科 特任助教 浅井大史

<[email protected]> 2014年11月18日

【Internet  Week  2014】  S6  パケットフォワーディング&ルーティングの実装技術

Page 2: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

ソフトウェアによるネットワーク機能

n  SDN:  So'ware  Defined  Network  p  Forwarding  PlaneとControl  Planeの分離  

u  Control  Planeをソフトウェアで実装  

n  NFV:  Network  Func:on  Virtualiza:on  p ネットワーク機能の仮想化  

u ネットワーク機能を汎用CPU(仮想マシン)により実現

2014年11月18日 ゼロから作る高速パケット転送用OS 2

Page 3: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

ネットワーク用OS

n  汎用CPUによるネットワーク機能の実現  =  ネットワーク用OS  p  Inexpensive  p  Flexible  p  Extensible  

X  as  a  Service  

Network  Func:on  Virtualiza:on  Service  Func:on  Chaining  

ゼロから作る高速パケット転送用OS 3 2014年11月18日

Page 4: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

Networking OS from Scratch

ゼロから作る高速パケット転送用OS 4

“Networked”  Opera:ng  System  manages      “compu:ng”  resources  

“Networking”  Opera:ng  System  manages      “compu:ng”  and  “network”  resources  

2014年11月18日

Page 5: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

汎用OS(Linux/*BSD)の課題

n  Not  good  for  networking  p プロセス・スレッド・VMによる  

ネットワーク機能の抽象化  u  Tickによる割り込みオーバーヘッド  u コンテキストスイッチによるオーバーヘッド  – キャッシュ汚染、TLBミス、etc.  

u パケット処理に最適でない I/Oスケジューラ  –  I/Oのボトルネックが全体の性能に影響  

ゼロから作る高速パケット転送用OS 5 2014年11月18日

Page 6: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

ゼロから作る高速パケット転送用OS

n  「ゼロから作る」  p 汎用ハードウェアの限界値を見極める  

u ボトルネック解析  p 新しいアーキテクチャを検討する  

u スケジューラ  u メモリ管理  u 権限管理  u プロトコルスタック  u ルーティングテーブル管理インスタンス  

2014年11月18日 ゼロから作る高速パケット転送用OS 6

Page 7: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

ゼロから作る高速パケット転送用OS

n  「ゼロから作る」  p 汎用ハードウェアの限界値を見極める  

u ボトルネック解析  p 新しいアーキテクチャを検討する  

u スケジューラ  u メモリ管理  u 権限管理  u プロトコルスタック  u ルーティングテーブル管理インスタンス  

2014年11月18日 ゼロから作る高速パケット転送用OS 7

Page 8: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

汎用ハードウェアの限界を目指す

n  汎用NICにおける高レート転送での  ボトルネック解析  p ボトルネック  

u  CPU?  u Memory?  u  PCIe  bus?  u  or  something  else?  

ゼロから作る高速パケット転送用OS 8 2014年11月18日

Page 9: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

10/40/100GbE時代のパケット転送

n  Ethernet  p 最短フレーム長:64-­‐Byte  (=最高レート)  

u  1GbE:  1.488Mpps  =  672  ns/packet  

u  10GbE:  14.88Mpps  =  67.2  ns/packet  

u  40GbE:  59.52Mpps  =  16.8  ns/packet  

u  100GbE:  148.8Mpps  =  6.72  ns/packet

2014年11月18日 ゼロから作る高速パケット転送用OS 9

Page 10: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

Myths

n  汎用機における  パケット転送のボトルネック  p  CPU:CPUが遅い  p  メモリ:メモリコピーが遅い  

u  メモリコピーの削減  –  netmap  [Rizzo,  USENIX  ATC  2012]  –  Intel®  DPDK  

p  割り込み:割り込みが重い  u  Linuxにおける解決策:NAPI  u  ポーリング  

–  Intel®  DPDK  

10 ゼロから作る高速パケット転送用OS 2014年11月18日

Page 11: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

汎用機におけるスループット

11

PCIe

CPU

I/O Hub

IntegratedMemory

Controller

CPU

Memory Memory

IntegratedMemory

Controller

(a) (a)

(c)

(b)

I/OControllerHub

On-board NIC

Direct Media Interface

(a)  3.3GHz  clock  CPU  •  0.3ns  per  cycle  (220  cycles  /  packet)  

•  +  スーパースカラ  (b)  CPU-­‐Memory  bus  (N.B.,  64  bit  wide  access)  

•  DDR3-­‐1333  Dual  Channel:  21.333GB/s  (170.667Gbps)  •  DDR3-­‐1600  Dual  Channel:  25.600GB/s  (204.800Gbps)  •  DDR3-­‐1866  Dual  Channel:  29.867GB/s  (238.933Gbps)    

(c)  PCIe  bus  •  Gen2:  500MB/s  (x1)  =  4Gbps  

•  usually  x8  for  a  two-­‐port  10GbE  NIC  •  x16  is  not  enough  for  a  two-­‐port  40GbE  NIC  

•  Gen3:  985MB/s  (x1)  =  7.88Gbps  (d)  DMI  bus  

•  v1.0:  2GB/s  (1GB/s  per  direc:on  =  8Gbps)  •  v2.0:  4GB/s  (2GB/s  per  direc:on  =  16Gbps)

ゼロから作る高速パケット転送用OS

Bokleneck?

Bokleneck?

2014年11月18日

Page 12: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

汎用機におけるレイテンシ

n  Data  access  latency  (*)  p  L1  cache:  4-­‐5  cycles  ~  1.2-­‐1.5ns  p  L2  cache:  12  cycles  ~  3.6ns  p  L3  cache:  27.85  cycles  ~  8.4ns  p RAM:  28  cycles  +  49-­‐56  ns  ~  65ns  

u ただし、アウトオブオーダー実行などで軽減  

12

(*)  hkp://www.7-­‐cpu.com/cpu/SandyBridge.html ゼロから作る高速パケット転送用OS 2014年11月18日

Page 13: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

本当のボトルネックは、どこ?  

Page 14: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

PCIe NICのボトルネック

n  PCIeのレジスタアクセス  =  Memory  Mapped  I/O  (MMIO)  

–  (当然)キャッシュが効かない  

p  1529.17  cycles  /  read  u  392.1  ns  /  read  

p  282.621  cycles  /  write  u  72.47  ns  /  write

※同一のレジスタに1M回アクセスしたときの平均を  CPUのPerformance  Monitoring  Counter  (PMC)により計測

CPU:  Intel  Core  i7  4770K  Memory:  Corsair  DDR3-­‐1866  8GB  x4  NIC:  Intel  X520-­‐DA2  

2014年11月18日 ゼロから作る高速パケット転送用OS 14

Page 15: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

汎用NICにおけるボトルネック

15

Ring  buffer Descriptors Buffer

ゼロから作る高速パケット転送用OS

Generic  NIC  architecture

2014年11月18日

Page 16: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

汎用NICにおけるボトルネック

16

Ring  buffer Descriptors Buffer

Packet  recep:on  1.  NIC  receives  a  packet  2.  NIC  transfer  the  packet  data  to  

a  buffer  in  RAM  via  DMA  3.  NIC  proceeds  the  head  pointer  4.  So'ware  processes  the  packet  5.  So'ware  proceeds  the  tail  

pointer  to  release  the  packet  

(3)  head

(2)

(5)  tail

ゼロから作る高速パケット転送用OS

Generic  NIC  architecture

2014年11月18日

Page 17: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

汎用NICにおけるボトルネック

17

Ring  buffer Descriptors Buffer

Packet  transmission  1.  So'ware  writes  a  packet  to  a  

buffer  in  RAM  2.  So'ware  proceeds  the  tail  

pointer  to  commit  the  packet  3.  NIC  transfer  the  packet  data  

from  the  buffer  in  RAM  via  DMA  

4.  NIC  transmit  the  packet  5.  NIC  proceeds  the  head  pointer  

to  no:fy  the  packet  is  transmiked  

(2)  tail

(1)

(5)  head

ゼロから作る高速パケット転送用OS

Generic  NIC  architecture

2014年11月18日

Page 18: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

汎用NICにおけるボトルネック

18

Ring  buffer Descriptors Buffer

Packet  recep:on  1.  NIC  receives  a  packet  2.  NIC  transfer  the  packet  data  to  

a  buffer  in  RAM  via  DMA  3.  NIC  proceeds  the  head  pointer  4.  So'ware  processes  the  packet  5.  So'ware  proceeds  the  tail  

pointer  to  release  the  packet  

(3)  head

(2)

(5)  tail

ゼロから作る高速パケット転送用OS 2014年11月18日

Page 19: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

汎用NICにおけるボトルネック

19

Ring  buffer Descriptors Buffer

Packet  transmission  1.  So'ware  writes  a  packet  to  a  

buffer  in  RAM  2.  So'ware  proceeds  the  tail  

pointer  to  commit  the  packet  3.  NIC  transfer  the  packet  data  

from  the  buffer  in  RAM  via  DMA  

4.  NIC  transmit  the  packet  5.  NIC  proceeds  the  head  pointer  

to  no:fy  the  packet  is  transmiked  

(2)  tail

(1)

(5)  head

ゼロから作る高速パケット転送用OS 2014年11月18日

Page 20: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

(これを踏まえて、)Txでラインレートを出すには?

n  手順  p  予めUDPパケットを構成(CPUサイクルを使わない)  p  Txのリングバッファが空いていれば  

n  パケット一気に送る  u  Descriptorの構成  u  nパケットごとにTx  tailを進める

20 ゼロから作る高速パケット転送用OS

txq_tail = 0;for ( ;; ) {

txq_head = read_txq_head();/* Available Tx queue length */txq_len = txq_sz

- (txq_sz - txq_head + txq_tail) % txq_sz;/* Check the available Tx queue length */if ( txq_len < n ) continue;for ( i = 0; i < n; i++ ) {

// Set packet to the ring buffer to txq_tailtxq_ring[txq_tail].pkt = pkt_to_transmit;txq_tail = (txq_tail + 1) % txq_sz

}/* Commit */write_txq_tail(txq_tail);

}

~392.1ns

~72.47ns

2014年11月18日

Page 21: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

Txでのラインレート

0

2

4

6

8

10

12

14

16

1 2 3 4 5 6 7 8

Pack

et ra

te [M

pps]

Bulk transfer size [packets]

Frame = 64B96B

128B192B256B384B512B768B

1024B1536B

14.88Mpps

=  n

~500ns/packet

~250ns/packet

~125ns/packet

2014年11月18日 ゼロから作る高速パケット転送用OS 21

Page 22: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

ルーティングは?

22 ゼロから作る高速パケット転送用OS

RX  queue  ring TX  queue  ring

Time hw sw sw hw

Strategy  •  バルクで転送する!  

•  PCIeのレジスタアクセス中に溜まったパケットはバルク処理  

2014年11月18日

Page 23: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

ルーティングは?

23 ゼロから作る高速パケット転送用OS

rxq_tail = txq_tail = 0;blkcnt = 0;/* # of packets to be routed in bulk transfer */nr_blk = 256 /* can be another value */;for ( ;; ) {

/* Rx queue head */rx_desc = GET_RX_DESC_HEAD(netdev);

if ( DMA_COMPLETED(rx_desc) ) {// Lookup routing table and copy from Rx to Tx// Rewrite destination MAC address, TTL--,// and calculate checksumblkcnt++;if ( blkcnt >= nr_blk ) {

blkcnt = 0;write_rxq_tail(rxq_tail);write_txq_tail(txq_tail);

}} else {

blkcnt = 0;write_rxq_tail(rxq_tail);write_txq_tail(txq_tail);

}}

2014年11月18日

Page 24: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

性能評価

Transmitter RouterRX TX

RX

untag

untag

untag

CPU:    Intel(R)  Core(TM)  i7  4770K  (3.90GHz,  quad  core)    Memory:  32GiB,  DDR3-­‐1866  NIC:    Intel(R)  X520-­‐DA2  (2  ports)  

2014年11月18日 ゼロから作る高速パケット転送用OS 24

性能評価用  ハードウェアスイッチ  (ポートのカウンタ値の5分平均)

評価対象

パケット送信機(自作OS) ソフトウェアルータ(自作OS)

Page 25: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

ルーティングの性能評価

0

1

2

3

4

5

6

7

8

9

10

0 200 400 600 800 1000 1200 1400 1600

Thro

ughp

ut [G

bps]

Frame size [byte]

My implementationLinux

Line rate

※1経路   TTL減算とチェックサム計算はCPU

2014年11月18日 ゼロから作る高速パケット転送用OS 25

Page 26: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

遅延計測

n  実験機材  p  テスター  

u  Spirent  Communica:ons社 Spirent  TestCenter  –  本計測はInterop  Tokyo  2014中に  

株式会社東陽テクニカ様のご協力頂き計測しました。  u  使用型番  

–  シャーシ SPT-­‐N4U-­‐110  –  モジュール CV-­‐10G-­‐S8    

p  PCルータ  u  CPU:  Intel®  Core  i7  4770K    u Memory:  DDR-­‐3-­‐1866  (8GB  x4)  u  NIC:  Intel®  X520-­‐DA2  (1ポートのみ使用)  

ゼロから作る高速パケット転送用OS 26 2014年11月18日

Page 27: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

Low Latency

1  

10  

100  

1000  

1   2   3   4   5   6   7   8   9   10  

Latency  [us]

Test  traffic  (64-­‐byte  frame)  [Gbps]

avg  

min  

max  

ラインレートの90%までは低遅延(~10us)を実現

ゼロから作る高速パケット転送用OS 27 2014年11月18日

0.001Mppsでパケロス  詳細は今後の課題

Page 28: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

今後の予定

n  Networking  Opera:ng  System  p 新しいアーキテクチャの設計  

u  I/Oスケジューラ  etc.  

p ルーティングプロトコルなど  ネットワークOSとして必要な機能を搭載  

n  40GbE  NICへの対応  

28 ゼロから作る高速パケット転送用OS 2014年11月18日

Page 29: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

まとめ

n  パケット転送におけるボトルネック  p  Not  CPU  

u  (少数経路のルーティング程度なら)  p  Not  memory  p  PCIe  MMIO  

n  高速パケット転送用OS  p  検証済み  

u  10GbEのラインレートルーティング  u  10GbE  x4  の Tx  転送

2014年11月18日 ゼロから作る高速パケット転送用OS 29

Page 30: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

2014年11月18日 ゼロから作る高速パケット転送用OS 30

Page 31: ゼロから作る高速パケット転送用OS - Japan … › ja › materials › iw › 2014 › proceedings › s...ゼロから作る高速パケット転送用OS 東京大学大学院情報理工学系研究科

n  Rou:ng  p  4.897Mpps  (59.52Mpps  input)  

n  Tx  p  17.83Mpps  (Write  Back)  p  24.24Mpps  (Polling)  

2014年11月18日 ゼロから作る高速パケット転送用OS 31