SlideShare a Scribd company logo
1 of 18
Download to read offline
スイッチ・ルータのしくみ
 〜TCAMのしくみ〜
     @yogata

    2013/2/24




                1
高速に転送するには
—  受信・転送先決定・転送 を高速に行う ← 結論
—  でも,,,
—  送受信のEO/変換やSerDes(シリアル化,非シリアル化)な
  はハードウェアで実装されていて,既に高速で処理可能

—  そこで,転送先決定の中身に着目
                               3.転送

            1.受信
                   2.転送先決定

               Switch/Router


                                      2
転送部でやること
—  パケットヘッダとエントリ(ルーティング・フォワーディング・
  NDP/ARPテーブル等)を比較してマッチするエントリを探す



—  ポイント
  —  例えばACLの探索
      —  プレフィックス指定やANY指定でのマッチングを行う
  —  例えばルーティングの探索
      —  ロンゲストマッチを行う
     →複数のエントリにマッチする場合,プレフィックス長をみて探索




                                      3
マッチング
—  いろんなやりかた (たとえばルーティングの場合)
 —  ソフトウェア
   —  パケットヘッダに対して,エントリを1つずつ比較して,最後にマッ
       チした全エントリの中からプレフィックス長が最大のエントリを探
       す (シーケンシャルマッチング)
   —  事前にプレフィックス長でルーティングエントリをグループ化して
       おき,プレフィックス長が大きい方から順番にマッチングする (
       シーケンシャルマッチング+エントリソート)
   —  探索木を作ってマッチングする (探索木)
 —  ハードウェア
   —  TCAM



                                         4
マッチするエントリの探索
—  (1)パケットヘッダに対してエントリを1つずつ比較して,(2)
   最後にマッチした全エントリの中からプレフィックス長が最
   大のエントリを探す (シーケンシャルマッチング)

パケットヘッダ               ルーティングテーブル          (1)全部とマッチして
  DstIP:192.0.2.100        192.0.0.0/8
                         192.168.0.0/24
                          192.0.2.0/24
                            10.0.0.0/8
                                          (2)プレフィックス長が
                                          最大のエントリを探す




                                                        5
マッチするエントリの探索
—  事前にプレフィックス長でルーティングエントリをグループ化
   しておき,プレフィックス長が大きい方から順番にマッチング
   する

パケットヘッダ               ルーティングテーブル
  DstIP:192.0.2.100      /8  192.0.0.0    10.0.0.0
                        ・・・
                        /24 192.168.0.0   192.0.2.0
                        ・・・


   —  マッチした時点で処理を終えることができる


                                                      6
マッチするエントリの探索
     —  探索木




                                                                           111*	
110*	
 101*	
100*	
011*	
010*	
 001*	
000*	

                                                                                R0,R1,R5,R6	
                                                                                                       R2,R3,R4	
                                                                                                         R7	
                                                                                                R8	
                                                                                                R9	
                                                               R10,R11	


引用元 http://cseweb.ucsd.edu/~susingh/papers/hyp-sigcomm03.pdf          HiCutアルゴリズムの場合	
                                  7
マッチするエントリの探索
—  TCAM
  —  Ternary Content Addressable Memory
  —  TCAM:マッチングを行う専用のハードウェア
    —  0, 1, どちらでも良いの3値(ternary)でマッチングを行う
    —  CAMだと,0, 1の2値でマッチングを行う




                                             8
(T)CAMのしくみ
     —  (T)CAMの3つのしくみ
         (1) 入力
         (2) マッチング
         (3) 出力               (2)マッチング                       (3)出力




                             (1)入力
引用元 http://www.pagiamtzis.com/pubs/pagiamtzis-jssc2006.pdf           9
(T)CAMのしくみ
     —  (1)入力
         —  パケットヘッダXをもとに,Xと¬Xを比較部に渡す




                      ¬X0

                      X0


                                               X

引用元 http://www.pagiamtzis.com/pubs/pagiamtzis-jssc2006.pdf   10
(T)CAMのしくみ
     —  (2)マッチング (CAMの場合)
   ルールのプライオリティ順に事前に並べておく	
                                                                  ルーティングテーブルやACLの各ルール	
             CAMのワードビットサイズ
                                                               各ルールの1ビット	
                                                                                                 マッチング	
  
                                                                                                 結果(出力)	




                                                    Priority Encoder
     エントリ数




                                  C	

                                                                                      C	
                                                                                               ヘッダ情報	
                                                                                    SRAMベース    とルールの	
                                                                       ヘッダ情報
                                                                                      のメモリ     マッチング	
                                                                        (入力)	
  
                                                                                   (6トランジスタ)
引用元 http://www.pagiamtzis.com/pubs/pagiamtzis-jssc2006.pdf                                               11
(T)CAMのしくみ
     —  (2)マッチング (CAMの場合)
              C=0                        C=1
                                                             ・緑枠はマッチしているパターン
    X0=0
                                                             ・この例では,Xと¬C・¬XとCを
                                                              比較
                                                             ・マッチすれば不一致なので
                                                              MLをLOWにする
                                                              (GNDに落とす)

    X0=1                                                     ・全ビットでマッチすれば終端で
                                                              ML(Match Line)がHIGHの
                                                              ままとまる


                                                                    HIGH
                                                                    LOW
引用元 http://www.pagiamtzis.com/pubs/pagiamtzis-jssc2006.pdf                      12
(T)CAMのしくみ
     —  (2)マッチング (TCAMの場合)
         —  CAMにSRAMをつけたもの                                  ・SRAMが1だと
                                                              このビットはマッチとなる
                                                             ・SRAMが0だと下のマッチングに
                                                              したがって結果を返す




                                                                  CAM


引用元 http://www.pagiamtzis.com/pubs/pagiamtzis-jssc2006.pdf                  13
(T)CAMのしくみ
—  (3)出力
  —  比較部ではマッチしたすべてのエントリを返すので,出力部で
    最もプライオリティの高いエントリを選択する
    →プライオリティエンコーダ




                                     14
(T)CAMのしくみ
—  (3)出力 (プライオリティエンコーダ)
 —  マッチしたエントリD0-3の結果に応じた出力xyVを求める




      引用元 http://filebox.ece.vt.edu/~jgtront/introcomp/encoder.swf   15
(T)CAMのしくみ
—  (3)出力 (プライオリティエンコーダ)
 —  結果を回路にする




                引用元 http://filebox.ece.vt.edu/~jgtront/introcomp/encoder.swf

 —  エントリ数が多いと大変

                                                                               16
まとめ
—  TCAMはマッチングが早いが,消費電力が大きい (らしい)
 —  パケットとエントリのマッチングをビット単位で並列で実施する
 —  その結果を集約することでマッチしたエントリを探索する
 —  複数エントリをマッチした場合は,事前に最上位エントリほど
  優先度が高いように設定しているため,専用回路(プライオリ
  ティエンコーダ)を使って最優先エントリを確定する

 —  これらすべてのマッチングを行う専用回路を用意し,1クロック
  でマッチングが完了することから,非常に高速にマッチングを
  行える

 —  ただし,回路全体を使う必要があるため消費電力が大きい
                                     17
参考
—  Content-Addressable Memory (CAM) Circuits and
  Architectures: A Tutorial and Survey
  —  http://www.pagiamtzis.com/pubs/pagiamtzis-
    jssc2006.pdf

—  Intro to Computer Engineering Tutorial Material
  —  http://filebox.ece.vt.edu/~jgtront/introcomp/
—  Packet Classification Using Multidimensional
  Cutting
  —  http://cseweb.ucsd.edu/~susingh/papers/hyp-
    sigcomm03.pdf


                                                      18

More Related Content

What's hot

What's hot (20)

Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
キメるClojure
キメるClojureキメるClojure
キメるClojure
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
IOS/IOS-XE 運用管理機能アップデート
IOS/IOS-XE 運用管理機能アップデートIOS/IOS-XE 運用管理機能アップデート
IOS/IOS-XE 運用管理機能アップデート
 
不揮発メモリ(NVDIMM)とLinuxの対応動向について
不揮発メモリ(NVDIMM)とLinuxの対応動向について不揮発メモリ(NVDIMM)とLinuxの対応動向について
不揮発メモリ(NVDIMM)とLinuxの対応動向について
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
 
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
 
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりましたジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
 
さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築
 
P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
Onieで遊んでみようとした話
Onieで遊んでみようとした話Onieで遊んでみようとした話
Onieで遊んでみようとした話
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
 
ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 

Similar to TCAMのしくみ (6)

XLWrapについてのご紹介
XLWrapについてのご紹介XLWrapについてのご紹介
XLWrapについてのご紹介
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
CMSI計算科学技術特論B(10) 大規模MD並列化の技術1
CMSI計算科学技術特論B(10) 大規模MD並列化の技術1CMSI計算科学技術特論B(10) 大規模MD並列化の技術1
CMSI計算科学技術特論B(10) 大規模MD並列化の技術1
 
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件についてOpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
 
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみようHokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
 
A Multiple Pairs Shortest Path Algorithm 解説
A Multiple Pairs Shortest Path Algorithm 解説A Multiple Pairs Shortest Path Algorithm 解説
A Multiple Pairs Shortest Path Algorithm 解説
 

TCAMのしくみ

  • 2. 高速に転送するには —  受信・転送先決定・転送 を高速に行う ← 結論 —  でも,,, —  送受信のEO/変換やSerDes(シリアル化,非シリアル化)な はハードウェアで実装されていて,既に高速で処理可能 —  そこで,転送先決定の中身に着目 3.転送 1.受信 2.転送先決定 Switch/Router 2
  • 3. 転送部でやること —  パケットヘッダとエントリ(ルーティング・フォワーディング・ NDP/ARPテーブル等)を比較してマッチするエントリを探す —  ポイント —  例えばACLの探索 —  プレフィックス指定やANY指定でのマッチングを行う —  例えばルーティングの探索 —  ロンゲストマッチを行う →複数のエントリにマッチする場合,プレフィックス長をみて探索 3
  • 4. マッチング —  いろんなやりかた (たとえばルーティングの場合) —  ソフトウェア —  パケットヘッダに対して,エントリを1つずつ比較して,最後にマッ チした全エントリの中からプレフィックス長が最大のエントリを探 す (シーケンシャルマッチング) —  事前にプレフィックス長でルーティングエントリをグループ化して おき,プレフィックス長が大きい方から順番にマッチングする ( シーケンシャルマッチング+エントリソート) —  探索木を作ってマッチングする (探索木) —  ハードウェア —  TCAM 4
  • 5. マッチするエントリの探索 —  (1)パケットヘッダに対してエントリを1つずつ比較して,(2) 最後にマッチした全エントリの中からプレフィックス長が最 大のエントリを探す (シーケンシャルマッチング) パケットヘッダ ルーティングテーブル (1)全部とマッチして DstIP:192.0.2.100 192.0.0.0/8 192.168.0.0/24 192.0.2.0/24 10.0.0.0/8 (2)プレフィックス長が 最大のエントリを探す 5
  • 6. マッチするエントリの探索 —  事前にプレフィックス長でルーティングエントリをグループ化 しておき,プレフィックス長が大きい方から順番にマッチング する パケットヘッダ ルーティングテーブル DstIP:192.0.2.100 /8 192.0.0.0 10.0.0.0 ・・・ /24 192.168.0.0 192.0.2.0 ・・・ —  マッチした時点で処理を終えることができる 6
  • 7. マッチするエントリの探索 —  探索木 111* 110* 101* 100* 011* 010* 001* 000* R0,R1,R5,R6 R2,R3,R4 R7 R8 R9 R10,R11 引用元 http://cseweb.ucsd.edu/~susingh/papers/hyp-sigcomm03.pdf HiCutアルゴリズムの場合 7
  • 8. マッチするエントリの探索 —  TCAM —  Ternary Content Addressable Memory —  TCAM:マッチングを行う専用のハードウェア —  0, 1, どちらでも良いの3値(ternary)でマッチングを行う —  CAMだと,0, 1の2値でマッチングを行う 8
  • 9. (T)CAMのしくみ —  (T)CAMの3つのしくみ (1) 入力 (2) マッチング (3) 出力 (2)マッチング (3)出力 (1)入力 引用元 http://www.pagiamtzis.com/pubs/pagiamtzis-jssc2006.pdf 9
  • 10. (T)CAMのしくみ —  (1)入力 —  パケットヘッダXをもとに,Xと¬Xを比較部に渡す ¬X0 X0 X 引用元 http://www.pagiamtzis.com/pubs/pagiamtzis-jssc2006.pdf 10
  • 11. (T)CAMのしくみ —  (2)マッチング (CAMの場合) ルールのプライオリティ順に事前に並べておく ルーティングテーブルやACLの各ルール CAMのワードビットサイズ 各ルールの1ビット マッチング   結果(出力) Priority Encoder エントリ数 C C ヘッダ情報 SRAMベース とルールの ヘッダ情報 のメモリ マッチング (入力)   (6トランジスタ) 引用元 http://www.pagiamtzis.com/pubs/pagiamtzis-jssc2006.pdf 11
  • 12. (T)CAMのしくみ —  (2)マッチング (CAMの場合) C=0 C=1 ・緑枠はマッチしているパターン X0=0 ・この例では,Xと¬C・¬XとCを  比較 ・マッチすれば不一致なので  MLをLOWにする  (GNDに落とす) X0=1 ・全ビットでマッチすれば終端で  ML(Match Line)がHIGHの  ままとまる HIGH LOW 引用元 http://www.pagiamtzis.com/pubs/pagiamtzis-jssc2006.pdf 12
  • 13. (T)CAMのしくみ —  (2)マッチング (TCAMの場合) —  CAMにSRAMをつけたもの ・SRAMが1だと  このビットはマッチとなる ・SRAMが0だと下のマッチングに  したがって結果を返す CAM 引用元 http://www.pagiamtzis.com/pubs/pagiamtzis-jssc2006.pdf 13
  • 14. (T)CAMのしくみ —  (3)出力 —  比較部ではマッチしたすべてのエントリを返すので,出力部で 最もプライオリティの高いエントリを選択する →プライオリティエンコーダ 14
  • 15. (T)CAMのしくみ —  (3)出力 (プライオリティエンコーダ) —  マッチしたエントリD0-3の結果に応じた出力xyVを求める 引用元 http://filebox.ece.vt.edu/~jgtront/introcomp/encoder.swf 15
  • 16. (T)CAMのしくみ —  (3)出力 (プライオリティエンコーダ) —  結果を回路にする 引用元 http://filebox.ece.vt.edu/~jgtront/introcomp/encoder.swf —  エントリ数が多いと大変 16
  • 17. まとめ —  TCAMはマッチングが早いが,消費電力が大きい (らしい) —  パケットとエントリのマッチングをビット単位で並列で実施する —  その結果を集約することでマッチしたエントリを探索する —  複数エントリをマッチした場合は,事前に最上位エントリほど 優先度が高いように設定しているため,専用回路(プライオリ ティエンコーダ)を使って最優先エントリを確定する —  これらすべてのマッチングを行う専用回路を用意し,1クロック でマッチングが完了することから,非常に高速にマッチングを 行える —  ただし,回路全体を使う必要があるため消費電力が大きい 17
  • 18. 参考 —  Content-Addressable Memory (CAM) Circuits and Architectures: A Tutorial and Survey —  http://www.pagiamtzis.com/pubs/pagiamtzis- jssc2006.pdf —  Intro to Computer Engineering Tutorial Material —  http://filebox.ece.vt.edu/~jgtront/introcomp/ —  Packet Classification Using Multidimensional Cutting —  http://cseweb.ucsd.edu/~susingh/papers/hyp- sigcomm03.pdf 18