第5回の最後は,冒頭でみたルーターの処理のうち,(6)の統計収集処理の高速化手法について説明していきましょう。

トラフィックの統計情報を収集する二つの方法

 ルーターは,パケットの転送処理と同時に,「どのようなパケットがどれだけ流れているか」という統計情報を採取しています。これは,こうした統計情報を見ることでネットワークの状態を監視したり,解析したりすることができるからです。

 例えば,本来送られてくるはずのない送信元からパケットが届いていることから「DoSアタック」などを検出したり,同じパケットを何度も受信していることから「ネットワークのループ」を検出したりできます。こうした解析結果をフィルタ機能などに反映させることで,ネットワーク自体を攻撃や過剰トラフィックから守り,安定的に稼動させられるようになります。また,何らかの障害が発生した際には,統計情報を解析することで障害の原因や障害箇所を特定できたりします。

 しかし,こうした情報を収集して管理する処理は,ルーターにとって大きな負担になります。統計情報を収集することでルーターの処理能力が低下してしまうようでは問題です。

 ネットワーク・トラフィックの統計情報の利用方法は多岐に渡ります。そのため,それぞれの用途や目的に合った統計情報を収集するには,さまざまなレベル(これを「粒度」と呼びます)で情報を採取する必要があります。統計情報を集める範囲に着目すると,大きく二つの方法があります。それは,(1)ネットワーク全体の状況を把握するための統計情報の収集と,(2)装置内での統計情報の収集――です(図7)。この方法の違いによって,ルーターにかかる負荷も変わってきます。

図7●トラフィックの統計情報を採取する二つの方法
図7●トラフィックの統計情報を採取する二つの方法
統計情報の採取には,ネットワーク全体の状況を把握するためのものと,装置内で詳細な情報を得るためのものの二つがある。目的の違いによって,しくみや要求される性能に差がある。

 まず,(1)の「ネットワーク全体の状況を把握するための統計情報の収集」について見ていきましょう。この方法の場合,すべてのルーターで詳細な統計情報を収集して解析するというのは現実的ではありません。なぜなら情報量がとても膨大になるからです。そこで,ルーターごとにある程度集約された統計情報を集めて,ネットワーク全体のトラフィックを監視するような技術が必要となります。

 そうした技術の代表格がsFlowです。sFlowは,装置内を流れるすべてのパケットの情報を監視するのではなく,例えば「100パケットに1個」のようにサンプリングした情報を解析するトラフィック管理技術です。ルーターは,サンプリングしたフローについて詳細にパケットを解析し,どのようなフローが装置内を流れているかという情報を「コレクタ」と呼ばれる解析装置に送ります。そしてコレクタがネットワーク全体のトラフィック状況を監視します。

 sFlowに対応するルーターは,装置内に流れるトラフィックからパケットをサンプリングして抽出する機能が必要となります。ただし,サンプリングするのでルーターへ負荷は大きくありません。そもそもsFlowは,ルーターなどの装置に過大な負荷をかけずにトラフィックを管理するために考案された技術です。そのため,sFlow対応がルーターの高速化のハードルになることは考えなくていいでしょう。

詳細なトラフィック情報を収集すると負荷が高まる

 (1)の方法に対して,(2)の「装置内での統計情報の収集」は,ルーターに大きな負荷となる可能性があります。

 装置内の統計情報は,トラブルが発生したときなどの問題解析を容易にするために活用されます。その場合,さまざまな粒度の統計情報を採取できることが望まれます。そのため,(a)装置全体,(b)物理ポートごと,(c)ユーザー(論理インタフェース)ごと,(d)特定フローごと――といった粒度でトラフィックの情報を採取する必要があります。これらの情報は,SSRAMやSDRAMといったメモリーに格納されます。

 ハイエンド・ルーターともなると,物理インタフェース・ポートの数は装置あたり数十~数百にあり,装置内を流れるフローの数は数千~数万にもなります。こうした単位ごとに,各種統計情報をすべて取得しなければならないということを考えると,その負荷の大きさが想像できるでしょう。

 それでは,負荷の度合いを具体例で見ていきます。

 例えば,(a)~(d)の統計情報を,入力時と出力時それぞれに採取するとなると,一つのパケットがルーターを通過する度に,合計で8種類の統計情報をメモリーに書き込まなければなりません。前述のように,10Gビット/秒のイーサネット回線では,最小フレーム長のデータが連続で流れている場合,1パケットあたりの処理に割ける時間はわずか67nsです。このわずかな時間に,一つのメモリーに8種類の統計情報を読み書きするのは非常に困難です。

 統計情報を採取する基本動作は,(1)メモリーの該当番地からそれまでの統計情報を読み出し(メモリー・リード),(2)今回の統計情報を加算し,(3)再度該当番地に書き戻す(メモリー・ライト)――という3段階に分かれます。10Gビット/秒の回線では,この3段階の動作を,単純計算で67nsecの間に8回繰り返さなければならないのです。そうなると,メモリー・リードとメモリー・ライトを実行するための1回のメモリー・アクセスに割ける時間は,67ns÷(8×2回)=4.1ns となります。

 逆算すると,これは約240MHzでアクセス可能なメモリーが必要ということになります。現在のメモリーのトレンドでは,SSRAMと呼ばれるメモリーならば,この速度で読み書きが実現可能です。ただし,実際のハイエンド・ルーターは複数の10ギガ・イーサネット・ポートを備えます。そうなると,単純に2回線ならば2倍,4回線ならば4倍のメモリー・アクセス性能が求められます。

 また,採取する統計情報も8種類とは限りません。もっと多くの情報が必要になる場合もあります。そうなると,現在の技術では一つのメモリーでその要求を満たすことができなくなります。そこで,メモリーを並列に配置して,同時に複数メモリーをアクセスすることで必要な性能を稼ぐ必要があります(図8)。

図8●メモリーを並列に配置することで統計情報を高速に採取する
図8●メモリーを並列に配置することで統計情報を高速に採取する
ルーター内部の統計情報はさまざまなレベル(粒度)で採取する必要があり,統計情報の種類が多くなる分,高速化の処理が求められる。具体的な解決策は,メモリーを複数用意して処理できる帯域を増やすことだ。

 メモリーを並列化することでアクセス性能は向上します。ハイエンド・ルーターでは一般的に,このようにメモリーを並列化して統計情報を採取しています。ただし,本来は一つのメモリーでよいところを複数個のメモリーを実装する必要があるので,製品のコストを引き上げる原因にもなります。

 ルーティング処理の速度がルーターの性能を決めます。ここまで見てきたように,ハイエンド・ルーターではさまざまな工夫を凝らすことで,10ギガ・イーサネットなど高速化するインタフェースに対応しています。しかし,単純にメモリーを並列化したのでは,機器のコストが跳ね上がってしまい,商品の競争力がなくなります。製品の価値を高め,更に競争力を持たせるためには,「どのような性能が求められるのか」というポイントに加えて,その実現方法として「性能とコストのトレードオフを考慮して使用メモリーや採用する技術の種類を決める」ということが重要になっているのです。

林 剛久(はやし たけひさ) アラクサラネットワークスCTO
1980年に日立製作所入社。メインフレームやUNIXサーバーなどのコンピュータ関連開発に従事したのちに,1998年よりルーターおよびスイッチ開発チームの責任者となる。独自開発ASICのハードウエア転送によるハイエンド高速ルーター/スイッチ・シリーズを製品化。また,世界に先駆けてIPv6を実装し,実用化をリードする。現在,日立製作所とNECが合弁で立ち上げたルーター/スイッチ事業会社であるアラクサラネットワークスのCTOを勤める。(アラクサラネットワークスのホームページ

赤羽 真一(あかはね しんいち) アラクサラネットワークス 第二製品開発部
1997年に日立製作所中央研究所入社。ルーター向け高速検索技術の研究と検索エンジンのハードウエア化に取り組む。現在アラクサラネットワークスにて検索エンジンの開発及び高速化,高機能化の検討に従事している。

石川 有一(いしかわ ゆういち) アラクサラネットワークス 第二製品開発部
2000年に日立製作所中央研究所入社。以来,フロー検出技術およびQoS,特に帯域監視技術の開発に取り組み,事業部と連携して同技術をハードウエア搭載するルーター,スイッチの検索エンジンを設計してきた。現在,アラクサラネットワークスで引き続き,検索エンジンの開発に従事している。

加賀野井 晴大(かがのい てるお) アラクサラネットワークス 第二製品開発部
1993年にNEC入社。NECにてATM通信用ネットワーク・プロセッサおよびルーター用検索エンジンの開発,北米でのテクニカル・マーケティングを経て,現在アラクサラネットワークスにて検索エンジンを中心としたキャリア向け製品開発に従事している。

<<【3】を読む