Comments
Description
Transcript
特別研究報告 ネットワークプロセッサを用いた 実験用
特別研究報告 題目 ネット ワークプロセッサを用いた 実験用ネット ワークエミュレータシステムの構築 指導教官 村田 正幸 教授 報告者 東條 晴基 平成 14 年 2 月 19 日 大阪大学 基礎工学部 情報科学科 平成 13 年度 特別研究報告 ネットワークプロセッサを用いた実験用ネットワークエミュレータシステムの構築 東條 晴基 内容梗概 近年のインターネットユーザの増加に伴うネットワークトラヒックの急増に対し 、輻輳を 回避しネットワーク資源を有効に利用することを目的とし たさまざ まな研究が行われ 、多 くのトラヒック制御方式やアーキテクチャ等が提案されてきた。提案方式の有効性を示すに は数学的解析手法、ソフトウェアによるシミュレーションによる評価のみでは不十分で、実 ネットワーク上に実装し 、性能評価実験を行う必要がある。しかし 、ハード ウェアを用いた 実装は多大な費用がかかるため、計算機上で動作するパケット処理システムを用いて、小規 模なネットワークを構築し 、評価実験を行うのが一般的である。しかし 、ネットワークプロ セッサの登場により、より高速かつ大規模な実験ネットワークを構築することができるよう になった。 本報告では、インテル社のネットワークプロセッサである IXP1200 を用いて実験用ネッ トワークエミュレータシステムを構築した結果を述べる。まず、IXP1200 のハード ウェア構 成やその特徴について触れ、それらのハード ウェアを用いて実現されているパケット入出力 機構について述べる。次に、実験用ネットワークエミュレータシステムに期待される機能と して、パケットバッファリング機能、パケット伝送遅延発生機能、パケットロス発生機能等 を挙げ、各機能を IXP1200 上に実装するための設計指針を述べている。また、それらの設 定を容易に行うための設定用シグナリングプロトコルの提案を行っている。最後に、提案す るネットワークエミュレータシステムを IXP1200 のシミュレータソフトウェア WorkBench 上に実装し 、IXP1200 実機に提案機能を実装した際に予想される性能の計測評価、および 実装した機能の動作確認を行った結果を示すことにより、システムの性能を低下させること なく機能を実現することができることを示している。 1 主な用語 ネットワークプロセッサ、インテル IXP1200、ネットワークエミュレータシステム、実験用 ネットワーク、マイクロエンジン 2 目次 1 はじめに 2 IXP1200 ネットワークプロセッサ 2.1 2.2 3 7 10 ハード ウェア構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.1.1 マイクロエンジン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.2 StrongARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.1.3 IX-Bus ユニット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.1.4 メモリユニット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.1.5 その他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 パケット転送処理機構 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.1 入出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.2 スイッチング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.3 デイジーチェイン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 21 ネット ワークエミュレータシステム 3.1 特徴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2 機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3 3.2.1 ルータバッファにおけるパケット処理機構 . . . . . . . . . . . . . . . 22 3.2.2 リンク特性設定機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.3 リンク帯域設定機能、バックグランドトラヒック設定機能 . . . . . . 23 3.2.4 パケットフィルタリング . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2.5 設定用シグナリングプロトコル . . . . . . . . . . . . . . . . . . . . . 24 設計指針 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3.1 ルータバッファにおける TD 機構 . . . . . . . . . . . . . . . . . . . . 24 3.3.2 ルータバッファにおける RED 機構 . . . . . . . . . . . . . . . . . . . 25 3.3.3 確率分布指定機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.3.4 一般分布指定機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3 4 5 3.3.5 パケットロス発生機能 . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.6 パケット伝送遅延発生機能 . . . . . . . . . . . . . . . . . . . . . . . . 32 3.3.7 設定用シグナリングプロトコル . . . . . . . . . . . . . . . . . . . . . 34 性能評価 40 4.1 パケットサイズとスループットの関係 . . . . . . . . . . . . . . . . . . . . . . 41 4.2 使用ポート数とスループットの関係 . . . . . . . . . . . . . . . . . . . . . . . 42 4.3 入力レートとスループットの関係 . . . . . . . . . . . . . . . . . . . . . . . . 43 4.4 パケットロス発生機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.5 パケット伝送遅延発生機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 47 おわりに 4 図目次 1 IXP1200 の内部ハード ウェア構成 . . . . . . . . . . . . . . . . . . . . . . . . 10 2 IXP1200 の外部ハード ウェア構成 . . . . . . . . . . . . . . . . . . . . . . . . 11 3 マイクロエンジンのマルチスレッド 機構 . . . . . . . . . . . . . . . . . . . . 12 4 SRD におけるパケット処理手順 . . . . . . . . . . . . . . . . . . . . . . . . . 18 5 出力ポートキュー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 6 デイジーチェイン機構 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 7 ネットワークエミュレータシステム . . . . . . . . . . . . . . . . . . . . . . . 21 8 確率分布テーブル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 9 確率分布のテーブルのメモリマップ . . . . . . . . . . . . . . . . . . . . . . . 31 10 制御パケットフォーマット . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 11 TD エミュレーションのための Prm パケットフォーマット . . . . . . . . . . 35 12 NESP の状態遷移図 13 RED エミュレーションのための Prm パケットフォーマット . . . . . . . . . 37 14 遅延時間分布設定および廃棄確率分布設定のための Prm パケットフォーマット 38 15 確率分布テーブル作成のための Prm パケットフォーマット . . . . . . . . . . 38 16 入力パケットサイズとスループットの関係 . . . . . . . . . . . . . . . . . . . 41 17 使用ポート数とスループットの関係 . . . . . . . . . . . . . . . . . . . . . . . 42 18 パケット入力レートとスループットの関係 . . . . . . . . . . . . . . . . . . . 43 19 パケットロス発生機能の精度 . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 20 パケットロス発生機能のスループット . . . . . . . . . . . . . . . . . . . . . . 45 21 パケット伝送遅延発生機能の精度 . . . . . . . . . . . . . . . . . . . . . . . . 46 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5 表目次 1 制御パケットのフラグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 6 1 はじめに 近年のインターネットユーザの増加に伴うネットワークトラヒックの急増に対し 、輻輳を 回避しネットワーク資源をより有効に利用するための研究がさまざまな方面から行われてい る。その結果、これまでに多岐に渡るトラヒック制御方式、アーキテクチャ等が提案され 、 評価、実装されている。それらの提案方式を評価し 、その有効性および現行方式に対する優 位性を示すためには、数学的解析手法、およびコンピュータ上のシミュレーション技法のみ では不十分で、提案方式を実装し 、実ネットワーク上における評価実験を行うことが必要不 可欠である。しかし 、提案方式をハード ウェアを用いて実装するためには多大な費用が必要 である上に、ハード ウェアの特性上、その機能拡張および改善にさまざまな制約が生じ 、ま た再利用性にも欠ける。したがって、提案方式に対する性能評価の多くは、ソフトウェアを 用いて PC ルータ上に提案方式の実装を行っているものが多い。例えば 、ルータバッファに おけるパケット処理方式の評価実験においては、ALTQ [1] 等の計算機上で動作するパケッ ト処理システムが多く用いられている。 それらの評価実験においては、実運用されているネットワーク環境を反映させることは困 難であるため 、小規模な実験用ネットワークを構築し 、そこで提案方式の評価を行うのが 一般的である。しかし近年、より大規模なネットワークを想定し 、コンピュータ上のシミュ レーションでは考慮することができない実装時のオーバヘッド 等の事象を含めたより詳細な 評価を行うために、ソフトウェア/ハード ウェア処理によってネットワーク遅延、パケット ロスなど の特定のネットワーク特性を実験ネットワーク内でエミュレートする、ネットワー クエミュレータシステムが導入されつつある。 ネットワークエミュレータシステムは、計算機上で動作するシステム、独自のハード ウェア によるシステム、および本報告中で対象とする、主にパケット処理に特化した命令を持つネッ トワークプロセッサを利用するシステムの 3 つに分けることができる。計算機上で動作する システムには、システムカーネルにモジュールを追加することで実現されている ALTQ [1] や NISTNet [2] 等がある。ALTQ はパケット処理機構として Class-Based Queueing (CBQ) [3] 、 Random Early Detection (RED) [4] 、RED with In and Out (RIO) [5] 、Hierarchical Fair Service Curve (HFSC) [6] 等を実現する機能を持つ。NISTNet は通過するパケットを確率 7 的あるいは周期的に廃棄したり、遅延を発生させる機能を持つ。また、Linux カーネルモ ジュールとして実装されており、X Window システムに対応し 、環境設定を GUI を用いて 行うことができる。これらの方式はソフトウェアで実現されているため、新機能の追加や改 善を容易に行うことができるが 、計算機をベースにしているために CPU の処理能力やネッ トワークカード の性能によって、パケット処理能力が制限されるという欠点を持つ。 独自のハード ウェアによるシステムには、STORM [7] 、MicroNET [8] 等がある。例えば STORM は、最大 10 までのマルチノード、マルチ WAN 環境をシミュレートすることが可 能であり、パケットロス、遅延、リンクエラー等の発生機能、およびゲートウェイバッファ のエミュレーション機能等を持つ。これらのシステムは独自のハード ウェアを用いるため、 高速かつ大規模な IP ネットワークをエミュレートすることができる反面、ある目的に特化 された機能を実現するために特殊な設計をしていることが多いため、機能拡張性に乏しいと いえる。 一方、ネットワークプロセッサは、パケット処理に適したハード ウェア構成、および命令 セットを持つため、高速なパケット処理が可能なネットワークエミュレータシステムを構築 することができる。さらに、パケット処理部はプログラマブルあるため、機能拡張性に優れ、 プログラム資源を再利用することが可能である。さらに、ソフトウェアネットワークシミュ レータである ns [9] のようにプログラム資源を公開・共有することで、開発を促進すること もできるため、安価かつ効率的に実験用ネットワークエミュレータシステムの構築が可能で あると考えられる。 そこで本報告では、インテル社の IXP1200 [10] ネットワークプロセッサを用い、実験用 ネットワークエミュレータシステムの構築を行う。まず、本報告で対象とした IXP1200 の ハード ウェアの全体構成を示し 、次に各ハード ウェアをマイクロエンジン、IX-Bus ユニッ ト、メモリユニット等の部分に分けて各々のスペックや用途について説明を行い、単純なパ ケット転送を行うプログラムである Simplified Reference Design (SRD) [11] の解析を通じ て、IXP1200 を用いたパケット処理システムの概要を示す。IXP1200 によるパケット転送 処理は大きく分けて、ネットワークから到着した入力ポートへのパケットの IXP1200 内部 への転送、転送されたパケットに対するあらかじめプログラムされたマイクロエンジンによ 8 るさまざまな処理、処理されたパケットの出力ポートへの移動、および出力ポートからネッ トワークへのパケット送出という 4 つの手順から構成される。 本報告では、この SRD を基本として、ネットワークエミュレータシステムの構築を行う。 まず、ネットワークエミュレータシステムに必要な機能としてパケットバッファリング機 能、パケットロス発生機能、パケット伝送遅延発生機能などを挙げ、それらの機能概略を示 し 、IXP1200 上へ実装するための設計指針を示す。また、提案したエミュレータシステム の各機能を、IXP1200 が持つマイクロエンジン上で動作するアセンブラコード によって実 現し 、その性能評価を行う。提案方式の評価は、マイクロエンジンコード 開発環境である WorkBench [12] を用いて行い、予測される処理オーバヘッド、パケット処理能力等の検証 をおこなう。 以下、2 章では IXP1200 のハード ウェア各部の説明を行い、パケット処理の基本的な過程 について述べる。3 章ではネットワークエミュレータシステムを構築するために、IXP1200 上で実現すべき機能を挙げ、その設計指針について述べる。4 章ではそれらのうちいくつか の機能を実装し 、シミュレータを用いた性能評価結果を示す。最後に 5 章で本報告のまとめ と今後の課題について述べる。 9 Intel StrongARM SA1100 Core 32 8KByte Data Cache 16KByte Instruction Cache PCI Unit 512Byte mini Data Cache 64 SDRAM Unit 32 SRAM Unit Scratch Pad Memory 64 IX-Bus Interface Hash Unit Micro Engine0 Micro Engine1 Micro Engine2 Mciro Engine3 Micro Engine4 Micro Engine5 図 1: IXP1200 の内部ハード ウェア構成 2 IXP1200 ネット ワークプロセッサ 本報告で用いる IXP1200 はパケット処理に適したネットワークプロセッサである。本章 では IXP1200 を構成するハード ウェア、および各ハード ウェアを構成するユニットの特徴 や用途の紹介を行う。また、IXP1200 を用いて実現されている単純なパケット転送処理機 構を例に挙げ、各ハード ウェアの動作に関する詳細な説明を行う。 2.1 ハード ウェア構成 IXP1200 はパケット処理に関するプログラミングを行うことができるマイクロエンジンを 6 個、および主にマイクロエンジンの制御用途に用いられる StrongARM コアを 1 個の、合計 7 個の RISC プロセッサを持ち、外部メモリを扱うために SRAM ユニット、および SDRAM ユニットを有する。さらに、パケット等のデータ転送用内部バスとして PCI ユニットや IX- Bus ユニットと呼ばれる独自のバス機構を有する。図 1 は IXP1200 内における各ユニット の配置図を、図 2 は IXP1200 と周辺ハード ウェアの配線図をそれぞれ示す。以降では、各 部についての詳細な説明を行う。 10 PCI Unit PCI-Bus 32 32 SRAM IXP1200 Command SDRAM 64 Control IX-Bus Interface IX-Bus 64 Network Interface Device Another IXP1200 Network 図 2: IXP1200 の外部ハード ウェア構成 2.1.1 マイクロエンジン マイクロエンジンは IXP1200 内でパケット処理を行うために用いられる。IXP1200 は 6 つのマイクロエンジンを持ち、それらは互いに独立して動作する。また、1 つのマイクロエ ンジンは 4 つのスレッドを動作させることができるため、全体で 24 個のスレッドがパケッ ト処理を行うことができる。しかし 、各マイクロエンジン内の 4 つのスレッドは並列に動作 することはできないため、スレッドは適宜切り替えられて動作する。したがって、全体では 6 つのスレッドが並列処理を行うことが可能である。この機構はマルチスレッド 機構と呼ば れ 、マイクロエンジン内のスレッド の切り替えは各スレッドが用いているプログラム・カウ 11 thread 0 thread stalled r/w memory thread stalled thread 1 thread stalled r/w memory thread stalled thread 2 thread stalled r/w memory thread stalled thread3 r/w memory 図 3: マイクロエンジンのマルチスレッド 機構 ンタと相対レジスタセットを入れ替えることにより行われる。スレッド 切り替えは、主にメ モリ参照のように実行に長い時間を必要とする命令を行う間の待ち時間を、他のスレッドが 有効に利用するために行われる。またスワップ命令を用いて、スレッド の切り替えを意図的 に行うことも可能である。 また、マイクロエンジンは 1 命令あたりの実行速度を向上させることを目的とした、パイ プライン制御処理機構を持つ。これにより、外部参照やメモリ参照等の一部を除くすべての 命令を 1 クロックサイクルで実行することができる。またメモリ参照等、他のハード ウェア とデータ転送を行う際に利用する転送レジスタ、および汎用レジスタを 1 スレッドあたり 32 個利用することができる。 マイクロエンジンは RISC プロセッサであり、プログラムによってその動作を記述するこ とが可能である。以下に、マイクロエンジンが持つ 5 種類の命令群を示す。 データ処理命令 算術演算、論理演算、移動命令、シフト命令等 分岐命令群 ジャンプ命令、スレッド 分岐命令、サブルーチンコール等 12 メモリ参照命令群 Scratch Pad メモリ、SRAM 、SDRAM を参照するための命令群 外部参照命令群 R-FIFO 、T-FIFO を参照および利用するための命令群 CSR (Control Status Register) アクセス命令群 制御レジスタを利用するための命令群 また、移動命令および メモリ参照命令は、パケット処理を容易にするためにバイト (8 ビッ ト ) 単位、ワード (16 ビット ) 単位、ロングワード (32 ビット ) 単位、クワッド ワード (64 ビッ ト ) 単位でのデータ処理が可能となるように設計されている。 2.1.2 StrongARM StrongARM は小さい消費電力で、高い処理能力を持つマイクロプロセッサの総称で、主にデ ジタルビデオカメラ等の携帯製品に利用されている。IXP1200 で用いられている StrongARM は SA (StrongARM) ファミリー [13] の SA1100 RISC コアであり、動作周波数は 200 MHz である。また、16 KBytes の命令キャッシュ、8 KBytes のデータキャッシュ、512 Bytes の ミニキャッシュを持つ。 IXP1200 上の StrongARM は、主にマイクロエンジンの制御に用いられるが 、マイクロ エンジンとの間のデータ転送機能を利用することにより、三角関数や指数関数の演算等とい うマイクロエンジンで行えない複雑な処理を StrongARM 上で実行し 、その結果をマイクロ エンジンに転送することができるため、マイクロエンジンの負荷を減少させ、IXP1200 全 体の処理能力を向上させることができると考えられる。 2.1.3 IX-Bus ユニット IX-Bus ユニットは IX-Bus 、T-FIFO 、R-FIFO 、IX-Rdy-Bus 、ハッシュユニット、IXP1200 CSRs (Control Status Registers: 制御レジスタ群) 、および Scratch Pad メモリから構成さ れ 、ネットワークインタフェースと IXP1200 内部間のインタフェースを提供している。 13 ネットワークインタフェースと IXP1200 内部間のパケットの移動に用いられる IX-Bus は、 85 MHz の周波数で動作し 、単方向 32 ビット、双方向 64 ビットのデータインタフェースを 持ち、最大 5.44 Gbps でのデータ転送が可能である。また、IX-Bus を介して複数の IXP1200 を接続することが可能で、それによりさらに高速なパケット処理を行うことができる [14]。 T-FIFO 、R-FIFO はネットワークインタフェースと IXP1200 内部間のパケット転送のた めのバッファとして用いられる。ネットワークインタフェースを通してネットワークから受信 したパケットは R-FIFO を経由して IXP1200 内部へ移動し 、処理を受けた後、T-FIFO 、ネッ トワークインタフェースを経由して、ネットワークへ出力される。IX-Rdy-Bus は T-FIFO 、 R-FIFO 内のパケットの蓄積状態を監視するために用いられ、IX-Rdy-Bus が持つレジスタ 内のビットによってパケットの受信/送信をマイクロエンジン等に通知することができる。 また、R-FIFO 、T-FIFO からのデータの移動許可に関する信号の送受信は、受信/送信ス テートマシンと呼ばれるパケット処理機構によって行われる。 ハッシュユニットは 48/64 ビットのハッシュ操作を固定時間で行うことができる。ハッシュ 操作は CSRs および SRAM 転送レジスタ (マイクロエンジンが持つ SRAM データ転送用の 32 ビットレジスタ) を用いてハッシュ・キーを生成し 、別の 2 つの SRAM 転送レジスタか らハッシュ処理を行う値を受け取り、ハッシュ処理後、データを取りだした 2 つの SRAM 転送レジスタに結果を格納する。また、1 個のハッシュ・キーに対して最大 6 個の SRAM 転 送レジスタを用いることで、3 組の SRAM 転送レジスタに対して同時にハッシュ操作を行 うことが可能である。 IXP1200 CSRs (Control Status Registers) にはマイクロエンジンから受信ステートマシ ンへパケットの受信要求を伝える際に用いる RCV REQ レジスタや受信要求を受信した後に 受信制御情報が書き込まれる RCV CTL レジスタ等のマイクロエンジン 、および 、IX-Bus ユニットにおけるパケット送受信処理の制御を行うためのレジスタや 、SRAM 転送レジス タにサイクル数を書き込む際に用いられる CYCLE CNT 等のレジスタが含まれる。これら のレジスタは CSR アクセス命令を用いることで利用することができる。 Scratch Pad メモリは IX-Bus ユニット内に存在し 、IXP1200 が持つ唯一の内部メモリで ある。4 KBytes の容量を持ち、1024 個の 32 ビットエントリを持つ。そのため Scratch Pad 14 メモリへのアクセスは 32 ビット単位で行われる。また、Scratch Pad メモリは IX-Bus ユ ニット内に存在するため、アクセス時間は約 20 クロックサイクル (本報告で用いる IXP1200 は 200 MHz で動作するため、1 クロックサイクル 5 nsec である) であり、外部メモリである SRAM (30 クロックサイクル) および SDRAM (50 クロックサイクル) に比べて高速なアク セスが可能である。さらにデータ転送を最大 3.2 Gbps で行うことができるため、主に制御 信号のやりとりやマイクロエンジンが用いるプログラム変数の格納場所として利用される。 Scratch Pad メモリに対して実行可能な操作は、2 つのオペランド を用いて指定する 32 ビット幅のエントリの内容を SRAM 転送レジスタへ読み出す READ 命令、SRAM 転送レ ジスタに格納されている値を指定するエントリに書き込む WRITE 命令、前回指定したエ ントリの値を 1 増加させる INCR 命令、指定するエントリに対して SRAM 転送レジスタに 格納されている値を用いてビ ットマスク操作を行う BIT WR 命令の 4 操作である。 2.1.4 メモリユニット IXP1200 は内部メモリである Scatch Pad メモリの他に、外部メモリである SRAM 、およ び SDRAM を用いるためのインタフェースとなる SRAM ユニット、および SDRAM ユニッ トを持つ。 SRAM ユニットは 8 MBytes までの SRAM 領域をサポートすることができる。32 ビット のデータインタフェースを持ち、CPU 動作周波数の 1/2 の周波数で動作するため、3.2 Gbps でのアクセスが可能である。SRAM ユニットは、IXP1200 の中で唯一排他制御機構である CAM (Common Access Method) を持ち、あるスレッドが参照中のメモリ領域に他のスレッ ドがアクセスすることを禁止することができる。SRAM ユニットはこの CAM を実現させ るためのレジスタを 8 個持つ。また、SRAM 領域に線形リスト状のスタックを生成するた めの Push/Pop レジスタをそれぞれ 8 エントリ持つ。Push/Pop レジスタは、SRAM 領域上 に生成した各々のリストの先頭要素が格納されているメモリアドレス値を格納している。 SRAM ユニットを用いて SRAM に対して実行することができる操作は、Scratch Pad メモ リに対する 4 つの操作 (READ 、WRITE 、INCR 、BIT WR 命令) に加え、指定したアドレス をロックしてから内容を SRAM 転送アドレスに読み出す READ LOCK 命令、ロックされたア 15 ドレスに SRAM 転送レジスタの値を書き込み、そのアドレスを解放する WRITE UNLOCK 命令、READ LOCK 命令でロックされたアドレスを解放する UNLOCK 命令、Push/Pop レジスタが生成したスタックに SRAM 転送レジスタの内容を追加する PUSH 命令、および スタックトップからデータを読み出し 、その内容を SRAM 転送レジスタに格納する POP 命令の計 10 操作である。これらの操作により、SRAM に対してさまざまなメモリアクセス を行うことができるため、SRAM は IXP1200 の出力ポートに対して用意される出力ポート キューの先頭を指すポインタや、現在のキューサイズなど 、さまざまなデータの格納場所と して用いられる。 また、SRAM ユニットは 4 つのマイクロエンジン・コマンド キューと呼ばれるキューを 持つ。これは、マイクロエンジンからのメモリアクセス命令をその内容に応じてキューに格 納し 、READ/WRITE 命令を連続して実行できるようにするなどの、メモリアクセス効率 の向上のためのスケジューリングを行う。 SDRAM ユニットは 256 MBytes までの SDRAM 領域をサポートすることができる。64 ビットのデータインタフェースを持ち、CPU の 1/2 の周波数で動作するため、6.4 Gbps で のアクセスが可能である。SDRAM ユニットはデータ転送用のデータバス、コマンド 転送用 のコマンドバスを各々1 本ずつ持つ。コマンドバスは SDRAM に対してデータ転送を行う前 にデータの列アドレスを指定する Row Access Strobe (RAS) 、データの行アドレスを指定す る Column Access Strobe (CAS) 、読み出しによるデータ損失を防止するための Pre-Charge (PRE C) コマンドを実行するために用いられる。また、SDRAM ユニットは Direct Memory Access (DMA) のように、転送用のレジスタを用いずに IX-Bus ユニットとの間で直接デー タ転送を行うことができる。また、SRAM ユニットと同様、メモリアクセス効率を向上さ せるための 4 つのマイクロエンジン・コマンド キューを持つ。 SDRAM は通常、入出力されるパケットを格納するために用いられ、2 つのバンク (領域) に分けられる。この 2 つのバンクおよび SDRAM ユニットが持つ独立した 2 本のバス (デー タバスとコマンドバス) を用いて 、あるバンクに対してメモリアクセスを行う間に、他方の バンクに対して別のメモリアクセスコマンドを実行をすることが可能になる。したがって、 メモリアクセスを行うバンクを交互に切り替えることによってメモリアクセスコマンドの実 16 行時間を短縮し 、効率のいいメモリアクセスを行うことができる。 2.1.5 その他 IXP1200 の評価ボードである IXP1200EB は、ネットワークインタフェースとして、全二 重通信が可能である 8 個の 10/100 base-T のイーサネットポート、および 2 個の 1000 base-SX のイーサネットポートを持つ。また、シリアルポートと PCI ユニットを持ち、他の計算機か らシリアルポート経由で IXP1200 にアクセスし 、データ転送を行うことができる。PCI ユ ニットは 32 ビットのデータインタフェース、33 MHz または 66 MHz の周波数で動作する。 また、OS と拡張カード 間の入出力方法を標準化した規格である I2O (Intelligent I/O) [15] をサポートしており、本来計算機側の CPU が行う入出力制御を I/O コントローラで実行す ることが可能になる。これにより、CPU の負担を軽減することができる。 2.2 パケット 転送処理機構 本節では インテル社が提供している単純なパケット転送を行うプログラムである SRD (Simplified Reference Design) を基に、IXP1200 がそのハード ウェアを用いてパケットの送 受信処理を行う手順についての説明を行う。 2.1.1 節で述べたように IXP1200 は 6 つのマ イクロエンジンを持ち、それぞれが独立して動作する。SRD ではその特徴を利用し 、各マイ クロエンジンはパケット受信あるいは送信のいずれかの処理のみを行うようにプログラムさ れている。また、受信処理用マイクロエンジンと送信処理用マイクロエンジンの個数は 2:1 の比率とすることで 、IXP1200 のハード ウェアが持つ能力を最も有効に利用することがで きる [16]。以下では、パケット転送処理を図 4 に示すように、スイッチング処理、およびデ イジーチェイン処理に分割し 、それぞれについて説明する。 2.2.1 入出力 外部ネットワークから到着した IXP1200 へのパケットは、以下に示す手順にしたがって 処理され 、外部ネットワークへ送出される。 17 Receive Memory uEngine Dispatch Switching Transfer uEngine R-FIFO T-FIFO .. . .. . .. . 図 4: SRD におけるパケット処理手順 ネットワークからの到着パケット 処理 ネットワークインタフェースデバイスは外部ネットワークと IXP1200 とを接続するためのデ バイスで、パケットはそのデバイスを経由して IXP1200 に到着する。到着パケットは IX-Bus を経由し 、R-FIFO へ格納される。R-FIFO 内のパケットの管理は IX-Bus 内にある受信ス テートマシンが行う。 パケット の IXP1200 内への転送 マイクロエンジンは IX-Rdy-Bus を監視し 、受信フラグが立っている、すなわち R-FIFO に パケットが格納されていれば 、受信ステートマシンにパケット転送要求を送る。受信ステー トマシンはマイクロエンジンからパケット転送要求を受理すると、マイクロエンジンに受理 確認信号を送信する。マイクロエンジンは受理確認信号を受信すると、R-FIFO 内のパケッ トを SDRAM に転送する。この後、2.2.2 節で説明するスイッチング処理が行われる。 パケット の外部ネット ワークへの送出 スイッチング処理が終わると、マイクロエンジンはパケットを送信するために T-FIFO へ 移動させる。そのために、マイクロエンジンは IX-Rdy-Bus を監視し 、送信フラグの状態か 18 Output Port Queue Head Pointer Tail Pointer ... SRAM SDRAM 図 5: 出力ポートキュー らパケットを T-FIFO へ送信することができるか否かを判断する。送信可能であれば 、パ ケットを SDRAM から T-FIFO へ移動し 、送信ステートマシンにパケットの移動を知らせ る信号を送る。送信ステートマシンはマイクロエンジンからパケット移動の信号を受ける と、T-FIFO 内に格納されているパケットを IX-Bus に移動し 、パケットを外部ネットワー クへ送出する。 2.2.2 スイッチング IXP1200 に新しくパケットが到着すると、そのパケットを格納する SDRAM 領域へのポ インタを SRAM 上に作成し 、以降のパケット参照のために用いる。パケットを SDRAM に 転送した後、パケットヘッダ情報から各パケットの目的アドレスを参照し 、出力ポートを 決定する。その後、パケットへのポインタを SRAM 上に用意されている出力ポートごとの 出力ポートキューの末尾に追加 (ディスパッチ) することでスイッチング処理が完了する。 SRD では、各出力ポートキューは 8192 個のパケットを格納することができ、キューの末尾 が先頭に接続されているサイクリック構造を持つ。格納されたパケットは図 5 に示すように SDRAM 上に不連続に格納されているが、SRAM 上の出力ポートキューは SDRAM 上に格 19 64Byte Port0 Port1 Port2 Output Ports Port3 Network Port4 Port7 図 6: デ イジーチェイン機構 納されたパケットへのポインタのリストであるため、出力ポートキューへのパケットの到着 順ど おりにパケット転送処理を行うことができる。 2.2.3 デイジーチェイン SRD が用いているパケット送信プログラムは、図 6 に示すデ イジーチェインと呼ばれる アルゴ リズムを用いて、各出力ポートキューに格納されたパケットを公平に外部ネットワー クへ送信する。デイジーチェインは出力ポートキューを順に参照し 、キュー内に出力できる パケットが存在する場合は 64 Byte 分のビット送信を行い、次の出力ポートキューの参照 を行う。 またキュー内に出力できるパケットが存在しない場合は処理を行わずに次の出力 ポートキューの参照を行う。すなわちデイジーチェインは、各出力ポートキューのパケット を 64 Byte 単位で処理を行うラウンド ロビンアルゴ リズムに相当する。 20 Network Emulator System Host PC WWW serv etc Host PC WWW serv etc Packet Delay .. . .. . Packet Loss .. . .. . RED TD 図 7: ネットワークエミュレータシステム 3 ネット ワークエミュレータシステム 本章では、本報告において構築するネットワークエミュレータシステムの特徴、およびエ ミュレーションを行うネットワーク機能について述べ、各機能をインテル IXP1200 上に実 装する際の設計指針を示す。また、実装した機能に関しては設計指針に加え、詳細なアルゴ リズムの説明を行う。 3.1 特徴 図 7 に、提案するネットワークエミュレータシステムの全体図を示す。システムはネット ワークインタフェースとして 8 個の 10/100 base-T のポートを持ち、エミュレートする機能 として、パケットバッファリング機能、パケット伝送遅延、パケットロス、ビットエラー等 の発生機能を持つ。システムを利用するユーザは、データの送受信を行うホストを IXP1200 に接続し 、IXP1200 がエミュレートするネットワーク特性として各ポートの帯域や伝搬遅 延時間、出力バッファにおけるパケット処理機構等のさまざまな設定、およびパラメータの 決定を行い、実験用ネットワークを構築する。次節以降では、本報告で提案するエミュレー タシステムに必要と考えられるネットワーク機能を紹介し 、その設計指針について述べる。 21 3.2 機能 3.2.1 ルータバッファにおけるパケット 処理機構 現在多くのルータバッファで採用されているパケット処理機構は、単純な TD (Tail Drop) 機構である。これはルータバッファにおけるパケット処理機構として最も基本的な機構であ るため、エミュレータシステムに必要不可欠である。TD 機構は、パケットをその到着順に バッファに格納し 、FIFO (First In First Out) 規律にしたがって到着順にパケット処理を行 い、出力する。バッファが一杯になっている間は、到着するパケットは廃棄される。 また、近年実装が進みつつあるパケット処理機構として RED (Random Early Detection) 機構 [4] が挙げられる。これは、バッファが一杯になる前に確率的なパケット廃棄を行うこ とで、ルータのスループットを保ちながらキュー長 (バッファ内パケット数) を小さく抑え る機構である。また、TD 機構で発生するバースト (連続) 的なパケット廃棄を防止すること ができる。RED 機構はパケットが到着するごとに、ローパスフィルタの一種である重み付 き指数平均を用い、現在のキュー長 (バッファ内パケット数) q から平均キュー長 q を以下の 式にしたがって計算する。 q ←− (1 − wq ) · q + wq · q (1) ここで、wq は重みを表す RED 機構の制御パラメータである。この平均キュー長 q を 2 つの しきい値 minth および maxth と比較することにより、以下のように到着パケットに対する 処理を行う。 1. q < minth ならば到着パケットをバッファへ格納する。 2. minth ≤ q < maxth ならば以下の式を用いて決定される確率 pa で到着パケットを廃棄 する。 pb ←− q − minth · maxp maxth − minth (2) pb 1 − count · pb (3) pa ←− ここで、maxp はパケット廃棄確率の大きさを決定する RED 機構の制御パラメータで ある。 22 3. maxth ≤ q ならば到着パケットを廃棄する。 また、その他実現の必要があると考えられるパケット処理機構として、RED 機構の拡張 方式であり、キュー長の安定性を向上させる SRED (Stabilized RED) 機構 [17] 、フロー (コ ネクション ) 間の公平性を向上させる FRED (Flow RED) 機構 [18] 、DiffServ[19] で用いら れる RIO (RED with In and Out) 機構等が挙げられる。 3.2.2 リンク特性設定機能 ネットワーク内のリンク特性をエミュレートするために必要な機能として、以下に示す機 能が必要であると考えられる。 パケット 伝送遅延発生機能 リンクの物理的距離をエミュレートする パケット ロス発生機能 輻輳等によるネットワーク内におけるパケット廃棄をエミュレートする ビット エラー発生機能 無線回線、衛星回線に多く見られるリンクのノイズをエミュレートする また、これらの機能の実現の際には、固定確率のみではなく、さまざ まな確率分布を用いる ことが考えられる。したがって、確率分布を指定する機能が必要である。 3.2.3 リンク帯域設定機能、バックグランドト ラヒック設定機能 IXP1200EB はネットワークインタフェースとして 10/100base-T および 1000base-SX の みを持ち、小さい帯域のインタフェースを持たない。そのためアクセスリンク等を想定した、 帯域の小さなリンクを実験用ネットワーク内に実現するためには、帯域を設定する機能が 必要である。また、バックグランドトラヒックを発生させる機能を内部に用意することで、 バックグランドトラヒックを発生させ、実験ネットワークに負荷をかけるための外部ホスト を用意する必要がなくなる。 23 3.2.4 パケットフィルタリング TCP/IP レベルの動作をエミュレートする機能として、特定の IP アドレスからのパケッ トまたは 、特定の IP アドレスに向けてのパケットに対して、パケット廃棄または優先的な パケット転送等の処理を行うパケットフィルタリングおよびルーティング等の機能が必要で あると考えられる。これにより、DiffServ ネットワーク等のエミュレーションや、TCP ト ラヒックと UDP トラヒックが混在する環境を想定した実験用ネットワークの構築等が可能 となる。 3.2.5 設定用シグナリングプロト コル 提案システムにおいて実現するエミュレーション機能の設定は、通常 IXP1200 内部のプ ログラムやパラメータの変更によって行うことができるが、ネットワークエミュレータシス テムを用いるユーザが容易に設定を行うために、外部ホストからの設定が可能となるシグナ リングプロトコルが必要であると考えられる。これにより、ユーザは IXP1200 内部の構成 やプログラムの詳細を知ることなく、用意されたネットワークエミュレーション機能を用い て実験用ネットワークを構築することが可能になる。 3.3 設計指針 本節では 3.2 節で述べた機能のうち、本報告において構築したネットワークエミュレータ システムに実装した機能を挙げ、その設計指針を示す。 3.3.1 ルータバッファにおける TD 機構 TD 機構はある一定サイズのバッファを持ち、ルータバッファが一杯になるまで到着パケッ トがキューに格納される。したがって、バッファサイズ (格納可能なパケット数の上限) を 設定し 、パケットが到着する度に現在のキュー長 (バッファ内パケット数) とバッファサイ ズを比較し 、キュー長がバッファサイズより大きい場合には到着パケットを廃棄する。以下 に、マイクロエンジンにおいて実行される受信側処理および送信側処理の手順を示す。 24 受信側処理 1. 出力ポート i ごとにバッファサイズ Bi を設定し 、Scratch Pad メモリに変数として保持 する。 2. 出力ポート i のキュー長 qi を格納する変数を Scratch Pad メモリに作成し 、0 に初期化 する。 3. R-FIFO にパケットが到着するまで待機し、到着すればパケットを R-FIFO から SDRAM 領域へ転送する。 4. SDRAM 領域への転送が完了すれば 、到着パケットが出力されるポート j を調べ、該当 するポートのキュー長 qj とバッファサイズ Bj を取得し 、比較する。 5. qj < Bj の場合、出力ポートキューに到着パケットを格納し 、qj ←− qj + 1 とする。 6. qj ≥ Bj の場合、バッファ溢れが発生したと判断し 、到着したパケットを廃棄する。パ ケット廃棄は、パケットが格納されている SDRAM 領域を開放し 、パケット参照のた めに作成したポインタを廃棄することで実現する。 送信側処理 1. パケット転送の終了後、出力ポート i のキュー長 qi を、qi ←− qi − 1 とする。 3.3.2 ルータバッファにおける RED 機構 RED 機構が用いる平均キュー長、およびパケット廃棄確率の導出は、3.2.1 節で示した式 (1)-(3) にしたがって行う。その際、制御パラメータである wq 、maxp 、および 変数である q 、pa 、pb 等は小数値を取るが、IXP1200 のマイクロエンジンは小数値を取り扱うことがで きないため、これらの変数は擬似的に固定小数点による実数として表現する。IXP1200 の マイクロエンジンが用いるレジスタは 32 ビットであるため、ここでは小数点を 15 、16 ビッ トの間に固定し 、上位 16 ビットを整数部分、下位 16 ビットを小数部分として扱う。これ により、小数は 0.0000152587890625 から 0.9999847412109375 までの数値を、整数は 0 から 65535 までの数値を表現することができる。また、平均キュー長、およびパケット廃棄確率 の導出の際には、乗除演算を行う必要があるが、任意の数に対する乗除演算は処理時間が大 きくなることが考えられる。そこで、乗除数または被乗除数の一方を 2 のべき乗に設定、あ 25 るいは近似することで 、ビットシフト操作のみで演算を行う。式 (1)–(3) は以下のように変 形することができる。 q ←− q + (q − q) · wq pb ←− (q − minth ) · pa ←− pb 1 − count · pb maxp maxth − minth (4) (5) (6) したがって、wq 、maxp 、および (maxth − minth ) を 2 のべき乗に設定し 、(1 − count・pb) を 2 のべき乗に近似することで、ビットシフト操作のみで乗除算を行うことが可能となる。 以下に、マイクロエンジンにおいて実行される受信側処理/送信側処理の手順を示す。 受信側処理 1. 出力ポート i ごとに RED 機構のパラメータ (maxth,i 、minth,i 、maxp,i 、wq,i ) を設定 し 、Scratch Pad メモリ領域に変数として保持する。 2. 出力ポート i ごとに平均キュー長 q i 、通過パケット数 counti 、キュー長 qi を格納する 変数を Scratch Pad メモリに作成し 、0 に初期化する。 3. R-FIFO にパケットが到着するまで待機し、到着すればパケットを R-FIFO から SDRAM 領域へ転送する。 4. SDRAM 領域への転送が完了すれば 、到着パケットが出力されるポート j を調べ、出力 ポート j の平均キュー長 q j を式 (4) を用いて導出する。 5. q j < minth,j の場合、到着パケットを出力ポートキューに格納し 、qj ←− qj + 1 とする。 6. minth,j ≤ q j < maxth,j の場合、パケット廃棄率を式 (5) 、(6) を用いて導出し 、乱数を 用いて到着パケットの廃棄判定を行う。廃却しない場合には qj ←− qj + 1 とする。 7. q j ≥ maxth,j の場合、到着パケットを廃棄する。 送信側処理 1. パケット転送の終了後、出力ポート i のキュー長 qi を、qi ←− qi − 1 とする。 26 3.3.3 確率分布指定機能 本報告で構築するネットワークエミュレータシステムにおいては、RED 機構およびパケッ トロス発生機能が用いるパケット廃棄確率、パケット伝送遅延発生機能が用いる遅延時間等 の設定の際に、固定値や一様分布にもとづく確率だけではなく、以下に示すさまざまな確率 分布を用いることができる。以下に、利用できる確率分布とその実現方法について述べる。 一様分布 CSR 命令を用いて得られるマイクロエンジンのクロックサイクル数 Ct を乱数の種として用 い、下記の線形合同法 [20] の式を用いて擬似乱数列 rn の生成を行う。 rn ←− A ∗ Ct (mod P ) ここで、A は A > 0 である定数、P は乱数の周期を示す。本報告では A = 7 、P = 1024 を 用いており、0 から 1023 までの乱数を発生している。 ポアソン分布 一様分布を用いて生成される擬似乱数列を用いて、ポアソン定数を指定し 、以下に示すポア ソン分布乱数列の生成式の計算を行うことにより、ポアソン分布によるパケット廃棄を実現 する [21]。λ をポアソン定数、ui を一様分布の乱数列とすると式 (7) を満たす最小の k がポ アソン乱数列 pn の要素となる。また、λ 、exp(−λ) はあらかじめ計算し 、Scratch Pad メモ リに格納しておくことで、マイクロエンジンにおける計算量を減少させる。 k ui < exp(−λ) (7) i=1 pn ←− k 指数分布 一様分布を用いて生成される擬似乱数列を用い、ポアソン定数を指定し 、指数分布乱数列の 生成を以下の式を用いて行う [22]。ここで ui は一様分布の乱数列であり、超越関数である 27 ln の計算は ln をテイラー展開し 、近似計算を行う。 en ←− − ln(1 − ui ) λ 一般分布 本報告において提案するネットワークエミュレータシステムにおいては、上記の 3 種類の 確率分布以外にも一般的な確率分布を用いることができる。確率分布の指定方法は次節に 示す。 3.3.4 一般分布指定機能 実ネットワークにより近い環境をエミュレートするためには、パケットロス発生機能の廃 棄確率、パケット伝送遅延発生機能の遅延時間等がしたがう確率分布として、前節で示した 一様分布、ポアソン分布、指数分布だけではなく、対数正規分布、パレート分布といった任 意の確率分布にしたがう値を用いる必要がある。しかし 、それらの複雑な確率分布を与える 式には cos 、sin 、exp 、ln 等の超越関数が含まれているため、それらの関数演算をマイクロ エンジンにおいて行うためには多大な処理工数が必要となる。したがって、これらの確率分 布にしたがう値をマイクロエンジンにおいて動的に発生させることは現実的ではない。近似 手法を用いて処理工数を減少させることはある程度可能であるが、近似によって得られる分 布は粒度が荒い離散的な分布になるため実用的ではない。この問題に対しては、以下の 2 つ の解決策が考えられる。 1. 複雑な確率分布の計算は StrongARM が行い、マイクロエンジンは適宜 StrongARM と 通信を行い、確率分布にしたがう値を取得する。 2. あらかじめ SRAM 領域に確率分布を示すテーブルを書き込んでおき、それを利用する ことで確率分布にしたがう値を取得する。 本報告で実現するネットワークエミュレータシステムにおいては、後者の方法を用いてい る。すなわち、あらかじめ計算した確率分布値のテーブル (確率分布テーブル) を作成し 、 SRAM 領域に保持する。マイクロエンジンは確率分布テーブル内のインデックス値を一様 分布乱数を用いて求め、インデックスで指定された確率分布テーブル内の分布値を利用する 28 ことにより、パケット廃棄確率、遅延時間等の設定に利用する。テーブルに格納される確率 分布値は、図 8 に示すように、確率分布関数のグラフを Y 軸方向に等間隔に分割して得ら れる座標値である。図 8 はテーブルサイズをそれぞれ 4 (図 8(a)) および 8 (図 8(b)) にした ときの、確率分布テーブルの様子を示した図である。図から、テーブルサイズによって表現 できる確率分布の粒度が変わることがわかる。本報告における提案方式では、テーブルサイ ズを任意に設定することができるため、用いる確率分布の柔軟な設定が可能である。 確率分布テーブルは複数作成することが可能であり、作成したテーブルは SRAM 領域に 図 9 のように格納される。まず SRAM 領域上に各テーブルへのポインタリストを用意する。 ポインタは各テーブルが格納される先頭アドレスを指し 、ポインタリストのインデックスが テーブル番号として各テーブルの指定に用いられる。これにより、テーブル番号とテーブル 内のインデックスの 2 つの値を用いて、指定した確率分布にしたがう値を取得することがで き、例えば 、テーブル番号が 1 、テーブル内のインデックスが 103 である場合は図中の斜線 部を参照する。 3.3.5 パケット ロス発生機能 提案するネットワークエミュレータシステムにおいては、3.3.3 節および 3.3.4 節において 示したさまざまな確率分布関数を用いて、システムに到着するパケットを廃棄することがで きる。以下に、確率分布を用いる場合と、固定値を用いる場合についてそれぞれマイクロエ ンジンにおいて実行される受信側処理の手順を示す。送信側に関しては、特別な処理は行わ ない。 確率分布を用いる場合 1. 出力ポート i ごとに用いる分布のテーブル番号 Ti を設定し 、Scratch Pad メモリに変数 として保持する。 2. R-FIFO にパケットが到着するまで待機し、到着すればパケットを R-FIFO から SDRAM 領域へ転送する。 3. SDRAM 領域への転送が完了すれば 、到着パケットが出力されるポート j を調べ、該当 するポートが用いる確率分布テーブル番号を取得する。 29 1 0.75 Distribution Table (Table Size = 4) 0.5 11 10 0.25 8.67 0 0 8.67 10 11 (a) テーブルサイズが 4 の場合 1 Distribution Table (Table Size = 8) 0.875 12 0.75 11 0.625 10.67 0.5 10 0.375 9.33 0.25 8.67 0.125 4 0 4 8.67 10 11 12 9.33 10.67 0 (b) テーブルサイズが 8 の場合 図 8: 確率分布テーブル 30 Table pointer list Table Base SRAM SRAM 0 1 2 3 Table 0 103 Table 1 Table 2 Table 3 図 9: 確率分布のテーブルのメモリマップ 4. テーブル内のインデックスとして用いる乱数 r を一様分布で発生させる。 5. 発生した乱数 r がテーブルサイズ St より大きい場合、r ←− r (mod St ) とする。 6. 確率分布テーブル番号およびテーブル内のインデックスを用いて、確率分布にしたがう 値を取得する。 7. 取得した値を用いてパケット廃棄判定を行う。廃棄しない場合は到着パケットを出力 ポートキューの末尾に追加する。 固定値を用いる場合 1. 出力ポート i ごとに用いるパケット廃棄確率 Di を設定し 、Scratch Pad メモリに変数 として保持する。 2. R-FIFO にパケットが到着するまで待機し、到着すればパケットを R-FIFO から SDRAM 領域へ転送する。 31 3. SDRAM 領域への転送が完了すれば 、到着パケットが出力されるポート j を調べ、該当 するポートが用いるパケット廃棄確率 Di を取得する。 4. 取得した値を用いてパケット廃棄判定を行う。廃棄しない場合は到着パケットを出力 ポートキューの末尾に追加する。 3.3.6 パケット 伝送遅延発生機能 パケット伝送遅延発生機能は、遅延を発生させるパケットを管理するための遅延パケット キュー、それぞれのパケットに対して発生させる遅延時間を管理する遅延時間キュー、遅延 時間キューの末尾の要素の遅延時間を格納する変数 D および遅延時間キューの最終更新時 刻を格納する変数 L を用いて実現する。遅延パケットキューおよび遅延時間キューは SRAM 領域に作成し 、変数 D および L は Scratch Pad メモリに格納する。 遅延を発生させる必要のあるパケットが到着すると、遅延パケットキューの末尾にパケッ トを追加し 、遅延パケットキューに対応する遅延時間キューに遅延させる時間を格納する。 パケットは遅延時間キューによって指定された時間、遅延パケットキュー内に待機する。遅 延時間キューは到着パケットがディスパッチされる際に更新され、その際に指定された時間 以上待機したパケットは、パケットヘッダ情報より出力ポートを選択し 、該当する出力ポー トキューの末尾に追加される。次に遅延時間キューの管理アルゴ リズムを以下に示す。 1. 新しく到着する遅延パケットの遅延時間を A 、遅延時間キュー内の i 番目の要素値は Ti 、 現在の時刻 (マイクロエンジンのクロックサイクル数) を C とする。 2. 遅延パケットが到着する。 (a) 遅延時間キューが空である場合は以下のようにする。 T0 ←− A (8) D ←− A (9) L ←− C (10) 32 (b) 遅延時間キューの要素数が n (n > 0) である場合は以下のようにする。 Tn+1 ←− A − D (11) D ←− A (12) L ←− C (13) 3. ある時間が経過し 、遅延時間キューの更新を行う場合は以下のようにする。 T0 ←− T0 − (C − L) (14) D ←− D − (C − L) (15) L ←− C (16) 4. 式 (14) の結果が 0 以下であれば 、遅延パケットキューから先頭のパケットを出力ポー トへ移動させ、遅延時間キューの先頭要素を取り出し 、次の要素を新しく先頭要素とす る。これを式 (14) の結果が 0 より大きくなるまで繰り返す。 以下に、マイクロエンジンにおいて実行される受信側処理の手順を示す。送信側に関して は、特別な処理は行わない。 1. 出力ポート i ごとに用いる確率分布テーブル番号を設定し 、Scratch Pad メモリに変数 として保持する。 2. SRAM 領域に遅延パケットキュー、遅延時間キューを用意する。 3. R-FIFO にパケットが到着するまで待機し 、到着すれば 到着パケットを R-FIFO から SDRAM 領域へ転送する。 4. SDRAM 領域への転送が完了すれば 、到着パケットを遅延パケットキューの末尾に追加 する。 5. 到着パケットの遅延時間を式 (8) および式 (11) 式を用いて計算し 、遅延時間キューに 追加し 、式 (12) 、式 (15) および式 (16) を用いて変数の更新を行う。 6. パケットが格納 (ディスパッチ) される際に、遅延時間キューの先頭の要素値を (14) 式 を用いて更新し 、遅延時間キューの先頭に格納されているパケットが送信可能であれ ば 、そのパケットを遅延パケットキューから出力ポートキューの末尾に移動させる。 33 パケットの種類 SoS EoS SoP EoP Fnc Prm フラグ 0000 0001 0010 0011 0100 0101 表 1: 制御パケットのフラグ 3.3.7 設定用シグナリングプロト コル 設定用シグナリングプロトコルとは、ネットワークエミュレータシステムを用いて実験を 行う際、ポートごとのさまざまな機能の指定およびパラメータ設定を、マイクロエンジンの ソースコード を書き換えることなく、外部のユーザ端末から行うためのプロトコルである。 この機能により、ユーザはマイクロエンジンプログラミングの知識の有無に関わらず、実験 用ネットワークの設定を容易に行うことが可能になる。本報告ではこのプロトコルを NESP (Network Emulator Setup Protocol) と呼ぶ。 NESP は IP (Internet Protocol) を用いてユーザホストと IXP1200 との間の通信を行う ため、あらかじめ IXP1200 に IP アド レスを割り当てておく。IXP1200 は自身の IP アド レス宛てのパケットを NESP パケットであると判断し 、パケットのペイロード を参照して IXP1200 自身の設定を行う。NESP パケットには、制御パケットとして、実験環境設定開始 パケット (SoS パケット ) 、実験環境設定終了パケット (EoS) 、パラメータ設定開始パケット (SoP) 、パラメータ設定終了パケット (EoP) 、受信確認パケット (ACK) 、機能指定パケッ ト (Fnc) があり、パラメータ設定パケットとしてパラメータ設定パケット (Prm) がある。パ ケットの種類はパケット中のフラグによって指定する。パケットは 32 ビットであり、うち 12 ビットのシーケンス番号を持ち、4 ビットで NESP パケットの種類を指定する。残りの 16 ビットの用途はパケットの種類、設定内容によって異なる。表 1 にパケットの種類を指定す るフラグを、図 10 に制御パケットフォーマットを示す。 図 12 は、IXP1200 側の NESP に 基づく状態遷移図と、それに伴う NESP パケットの種類を示す。なお、ここでは本報告で実 装を行った主な機能に関する状態遷移図を示している。IXP1200 は起動直後、Initial State と呼ばれる初期状態にあり、ユーザホストからの NESP パケットの到着を待つ。ユーザは環 境設定を行う場合、まず SoS パケットを IXP1200 に送信し 、ACK パケットの受信後、パ 34 11 12 0 SoS sequence number EoS sequence number SoP sequence number EoP sequence number Fnc 31 unused 15 16 23 24 option sequence number 27 28 src 31 dst 15 16 0011 11 12 0 15 16 0010 11 12 0 unused 0001 11 12 0 31 0000 11 12 0 15 16 31 unused 15 16 31 Fnc 0100 図 10: 制御パケットフォーマット 0 11 12 sequence number 0 31 buffer size higher 16bits 0101 11 12 sequence number 15 16 15 16 31 buffer size lower 16bits 0101 図 11: TD エミュレーションのための Prm パケットフォーマット 35 initial state EoS finish setup SoS EoS select port EoS SoP Fnc (Make table) select function table index Prm Fnc (RED) Fnc (Tail Drop) Fnc (Delay / Drop) Prm minth higher 16bit buffer size higher 16bit table size higher 16bit Prm Prm table size lower 16bit table index minth lower 16bit Prm Prm Prm value higher 16bit Prm maxp and weight maxth higher 16bit buffer size lower 16bit Prm Prm EoP value lower 16bit maxth lower 16bit EoP EoP to select port 図 12: NESP の状態遷移図 36 EoP 11 12 0 sequence number 0101 11 12 0 sequence number sequence number sequence number sequence number weight 31 min_th higher 16bits 31 min_th lower 16bits 15 16 0101 11 12 0 max_p 31 15 16 0101 11 12 0 23 24 15 16 0101 11 12 0 15 16 31 max_th higher 16bits 15 16 0101 31 max_th lower 16bits 図 13: RED エミュレーションのための Prm パケットフォーマット ラメータ設定を行う。パラメータ設定は、まず設定を行う入出力ポートを SoP パケットの src および dst フィールド で指定し 、SoP パケットに対する ACK を受信後、設定する機能 を Fnc パケットの Fnc フィールド で指定する。その後、機能に応じたパラメータの設定を Prm パケットを用いて行う。以下に、各機能に関する Prm パケットフォーマットを示す。 TD 設定するパラメータはバッファサイズのみであり、バッファサイズは 32 ビットであるため、 2 つの NESP パケットで設定できる (図 11)。 RED 設定するパラメータは制御パラメータである wq 、maxp 、minth 、maxth の 4 つで wq およ び maxp は 8 ビット、minth および maxth は 32 ビットであるため、5 つの NESP パケット を用いて設定する (図 13)。 遅延時間分布設定 37 11 12 0 sequence number 15 16 31 0101 table index 図 14: 遅延時間分布設定および廃棄確率分布設定のための Prm パケットフォーマット 11 12 0 sequence number sequence number sequence number sequence number sequence number 31 table size higher 16bits 15 16 31 table size lower 16bits 15 16 31 table index higher 16bits 0101 11 12 0 15 16 0101 11 12 0 table index 0101 11 12 0 31 0101 11 12 0 15 16 15 16 31 table index lower 16bits 0101 図 15: 確率分布テーブル作成のための Prm パケットフォーマット 設定するパラメータは確率分布テーブル番号、分布のテーブル番号は 16 ビットであり、32 ビットであり、2 つのパケットで設定できる (図 14)。 廃棄確率分布設定 設定するパラメータは確率分布テーブル番号のみであり、番号は 16 ビットであるため、1 つのパケットで設定可能である (図 14)。 38 確率分布テーブル作成 設定するパラメータは作成する確率分布テーブル番号、テーブルサイズ、テーブル要素値で あり、テーブル番号は 16 ビット、テーブルサイズは 32 ビット、テーブル要素値は 32 ビット であるため、3 パケットでテーブル番号およびテーブルサイズを設定し 、その後テーブルサ イズ分のテーブル要素値を設定する (図 15)。 パラメータの設定が終了すると、最後に EoP パケットを送信し 、指定機能に対する設定 の終了を IXP1200 に通知する。その後、ACK パケットを受信することにより、設定を終了 する。またその後、他の機能、および他の出力ポートに対する設定を続けて行うことも可能 である。すべての設定が完了し 、実験を開始する際には、EoS パケットを IXP1200 に対し て送信する。 39 4 性能評価 本章では、3 章で提案したネットワークエミュレータシステムを、IXP1200 のマイクロエ ンジンのプログラム開発環境であり、プログラムの動作検証を行うことができるソフトウェ アシミュレータ WorkBench を用いて実装し 、性能評価を行って得られた結果を示す。本報 告では、3 章で挙げた機能のうち、パケットバッファリング機能である TD 機構、RED 機 構、および固定確率のパケットロス発生機能、および固定時間のパケット伝送遅延発生機能 を実装した。まず、実装した機能の動作確認を行い、次に TD 機構、RED 機構のパケット 処理速度を、単純なパケット転送を行う SRD と比較することによって、提案した機能が持 つ処理オーバーヘッド の評価を行う。またパケットロス発生機能に関しては、処理オーバー ヘッド の評価およびその実現精度に関する評価を行い、パケット伝送遅延発生機能に関して は、実現精度に関する評価を行う。 WorkBench は IXP1200 の本体のみでなく、 2.1.3 節で説明した IX-Bus の動作をはじめ とするさまざまな機能をエミュレートする機能を持つため、シミュレーションにおいては実 環境に近いネットワークトラヒックを与えることが可能である。また、システムへの入力と して与えることのできるパケットの入力レート、到着間隔等を変更することが可能であるた め、さまざ まな状況を想定したシミュレーションを行うことができる。 本報告で用いる入力パケットサイズはシミュレーションの間、ポートごとに固定した。ま た本報告で実装したネットワークエミュレータシステムは 、6 つのマイクロエンジンの内 の 3 つを用い、そのうち 2 つをパケット受信側に、1 つをパケット送信用側に用いた。した がって、残りのマイクロエンジンを用いることによって、以下に示す結果を上回るスルー プットを得ることができると考えられる。文献 [11, 16] では、すべてのマイクロエンジンを 用いた単純なパケット転送プログラムを用いることにより、IXP1200EB が持つ 8 ポートの 10/100 Mbps イーサネットポート、および 2 ポートの 1 Gbps イーサネットポートの入出力 速度に対応したパケット処理を行うことができることが示されている。 40 Throughput [Mbps] 450 400 350 300 250 200 150 SRD 100 TD 50 RED 0 50 100 150 200 250 300 350 400 450 500 550 Packet Size [Bytes] 図 16: 入力パケットサイズとスループットの関係 4.1 パケット サイズとスループット の関係 まず、システムへの入力レートを 1 ポートあたり 100 Mbps とし 、8 ポート使用すること により、全体として 800 Mbps の入力トラヒックを与えた場合の、システムのスループット に関する検討を行う。図 16 は、SRD および本報告において実装した TD 機構、RED 機構 を用いた場合の、パケットサイズとスループット (パケット出力レート ) の関係を示してい る。図から、パケットサイズに関係なく、3 方式はほぼ同じスループットを示しており、本 報告において提案、実装した TD 機構および RED 機構が、小さいオーバヘッドで実現され ていることがわかる。しかし 、パケットサイズが大きくなると、TD 機構および RED 機構 のスループットが若干下がっており、これらの機構が 、SRD を比較して大きな処理時間を 必要としていることを示している。 また、パケットサイズが大きくなるにつれ、スループットの増加量が減少している。これ は、パケットサイズの増加に応じてマイクロエンジンにかかる負荷が大きくなり、マイクロ エンジンの処理能力の限界に近づいているためであると考えられる。 41 Throughput [Mbps] 450 400 350 300 250 200 150 100 50 0 SRD TD RED 1 2 3 4 5 6 Number of Used Ports 7 8 図 17: 使用ポート数とスループットの関係 4.2 使用ポート 数とスループット の関係 さらに、使用するポート数とスループットの関係について考察を行う。ここでは、入力パ ケットサイズを 256 Bytes とし 、1 ポートあたりのパケット入力レートは 100 Mbps として いる。そのため、使用ポート数が 1 増加すると、パケット入力レートが 100 Mbps 増加する。 図 17 は使用するポート数を変化させた際の 3 方式それぞれのスループットを示したもので ある。 使用するポート数が少なく、パケット入力レートが小さい場合、3 方式のスループットは ほぼ同じ値を示している。これは、パケットの入力レートに対して、マイクロエンジンのパ ケット処理速度が 3 方式とも十分にあるためと考えられる。しかし 、使用するポート数が増 加し 、パケット入力レートが大きくなるにつれ 、SRD に比べて、本報告において実装した RED 機構のスループットが若干低くなっている。また、使用ポート数が 8 に近づくにつれ 、 スループットはある一定の値 (SRD: 約 410 Mbps 、TD: 約 400 Mbps 、RED: 約 380 Mbps) に収束しており、使用するポート数を増やすことによってパケット入力レートを増加させた 場合における、各方式のパケット処理能力の上限値を示している。 42 Throughput [Mbps] 180 160 140 120 100 80 60 40 20 0 50 SRD TD RED 100 150 200 250 Packet Input Rate [Mbps] 300 図 18: パケット入力レートとスループットの関係 4.3 入力レート とスループット の関係 次に、パケットサイズを 128 Bytes 、使用ポート数を 1 ポートに固定し 、ポートへのパケッ ト入力レートを 50 Mbps から 300 Mbps まで変化させた場合の 3 方式のスループットを図 18 に示す。 パケット入力レートが 150 Mbps 以下の場合、3 方式のスループットはほぼ同じ値を示し ている。これは、パケット入力レートに対して、1 ポートを用いて行うことのできるパケッ ト処理速度が 3 方式とも十分にあるためと考えられる。しかし 、入力レートが 200 Mbps よ り大きくなると、3 方式ともスループットがある一定の値 (SRD: 約 170 Mbps 、TD/RED 機構: 約 130 Mbps) に収束していくことがわかる。これは、各方式が 1 ポートで処理可能 なパケットレートの上限値を示している。この結果から、より複雑な処理を行う RED 機構 が 、TD 機構とほぼ同じオーバヘッドで動作しているといえる。しかし 、単純なパケット転 送のみを行う SRD と比較すると、そのスループットは若干低下している。これは提案シス テムのパケット処理機構においては、受信処理を行うマイクロエンジンの 1 つのスレッドに 対して、1 つのポートが割り当てられていることが原因と考えられる。つまり、1つのポー トへの到着パケットがすべてマイクロエンジン内の1つのスレッドに割り当てられることに 43 Actual Packet Loss Ratio 1 0.1 0.01 0.001 Ideal Our mechanism Our mechanism (Average) 0.0001 0.0001 0.001 0.01 0.1 Chosen Packet Loss Ratio 1 図 19: パケットロス発生機能の精度 より、そのポートへの到着パケットは逐次的に処理されるため、スレッド 切り替えによるメ モリアクセス遅延の短縮効率が低下するためである。したがって、SRD に比べてメモリア クセス回数の多い TD および RED 機構においては 、ポートあたりのパケット到着レートが 上がるにつれてスループットが低下する。 4.4 パケット ロス発生機能 次に、本報告において実装したパケットロス発生機能の性能評価を行う。ここでは、入出 力ポートとして 1 ポートのみ使用し 、パケット入力レートは 100 Mbps としている。図 19 は、指定したパケットロス率に対する、入力パケットの廃棄率を示したグラフである。ここ では各試行において 1000 個のパケットを入力し 、パケットロス発生機能によって発生した パケット廃棄率を示している。 44 Throughput [Mbps] 450 400 350 300 250 200 150 TD 100 DROP 50 0 60 80 100 120 140 160 180 200 220 240 260 Packet Size [Bytes] 図 20: パケットロス発生機能のスループット 図より、実装したパケットロス発生機能は、指定した確率とほぼ同じ確率で IXP1200 内 でパケットを廃棄していることがわかる。このことから、提案システムによって正確なパ ケット廃棄率の設定が可能であるといえる。また、図 20 は、パケットロス発生機能を実装 した場合 (図中の DROP) としなかった場合 (TD) の、パケットサイズとスループットの関 係を示している。図から、パケットロス発生機能を追加することによる処理オーバーヘッド は TD 機構のそれとほぼ同等であるので、システムに大きな負荷を掛けることなくパケット ロス発生のエミュレーションが可能であるといえる。 4.5 パケット 伝送遅延発生機能 最後に、本報告において実装したパケット伝送遅延発生機能の性能評価を行う。ここでは、 入出力ポートとして 1 ポートのみ使用し 、パケットサイズを 64 Bytes に固定している。ま た、遅延時間キューの更新はパケットの到着ごとに行っている。図 21 はパケット入力レー ト R [Mbps] を変化させた際の、指定したパケット伝送遅延時間に対する、実際に計測され たパケット伝送遅延時間の変化を示している。図より、発生したパケット伝送遅延は指定し た時間に比べて大きくなっていることがわかる。これは遅延パケットは指定された時間を遅 45 Actual Packet Delay Time (ms) 0.1 0.05 0.04 0.03 0.02 Ideal Avg (R=50[Mbps]) Avg (R=100[Mbps]) Avg (R=200[Mbps]) Avg (R=300[Mbps]) 0.01 0.01 0.02 0.03 0.04 0.05 0.1 Chosen Packet Delay Time (ms) 図 21: パケット伝送遅延発生機能の精度 延パケットキュー内で待機し終えた後、次の遅延時間キューの更新時まで出力ポートキュー に転送されないためであると考えられる。また、パケット入力レートが大きくなると、発生 するパケット伝送遅延時間の精度が向上していることがわかる。これは、遅延時間キューの 更新をパケットの到着ごとにおこなっているので、パケット入力レートが大きくなると遅延 時間キューの更新が頻繁になるためである。さらに、精度が高い場合においても、設定した パケット伝送遅延時間と発生するパケット伝送遅延時間の間に、ほぼ一定の差があること から、この差を考慮して発生させるパケット伝送遅延時間を設定することにより、正確なパ ケット伝送遅延のエミュレーションが実現できると考えられる。 46 5 おわりに 本報告では、インテル IXP1200 ネットワークプロセッサを用いて実験用ネットワークエ ミュレータシステムを構築することを目的とし 、システムに必要なネットワークエミュレー ション機能を詳細に渡って検討し 、パケットバッファリング機能、パケット伝送遅延/ロス 発生機能等について、IXP1200 上に実装する際の指針について議論を行った。また、それら の機能の一部について IXP1200 のソフトウェアシミュレータである WorkBench 上に実装 し評価することで、実装した機能の処理オーバヘッド、機能の正確性等に関する検討を行っ た。その結果、TD 機構、RED 機構、パケットロス発生機能、およびパケット伝送遅延発生 機能について、処理オーバヘッドを小さく保ちながら機能の実現が可能であることが明らか となった。 今後は、WorkBench で評価した機能を IXP1200 に実装してデータ転送実験を行い、評価 をする予定である。また、他の機能についても実装を行い、データ転送実験を行うことによ りその有効性の検証を行いたい。さらに、より高速かつ複雑なネットワークをエミュレート するために、複数の IXP1200 を使用するシステムの検討を行う予定である。さらに、提案 した環境設定用シグナリングプロトコル NESP の拡張として、既に存在するネットワーク 制御プロトコルである SNMP (Simple Network Management Protocol) [23] との互換性を 持たせ、より容易にユーザが実験ネットワークを設定できる環境を構築したい。 47 謝辞 本報告を終えるにあたり、御指導、御教授を頂いた村田正幸教授に心より感謝致します。 また、本報告において日頃から熱心な御指導を頂いた長谷川剛助手に心からお礼を申し上げ ます。ならびに適切な助言を頂いた宮原秀夫教授、大阪府立看護大学医療技術短期大学の菅 野正嗣助教授、大阪大学サイバーメディアセンターの馬場健一助教授、大阪大学基礎工学研 究科の若宮直紀講師、大阪大学サイバーメディアセンターの大崎博之助手、大阪市立大学工 学部の阿多信吾助手、大阪大学大学院経済学研究科の荒川伸一助手に心から感謝致します。 そして、日頃から本報告に関する議論をし 、適切な助言を頂いた大阪大学大学院基礎工学研 究科情報数理系専攻計算機科学分野博士前期課程 2 年の牧一之進氏に心からお礼申し上げま す。最後に、御協力頂いた村田研究室と宮原研究室の皆様に心からお礼を申し上げます。 48 参考文献 [1] Kenjiro Cho, “Managing Traffic with ALTQ,” in USENIX 1999 Annual Technical Conference, FREENIX Track, (Monterey CA), June 1999. [2] NISTNet Home Page. available at http://www.itl.nist.gov/div892/itg/carson/ nistnet/. [3] Sally Floyd and Van Jacobson, “Link-sharing and Resource Management Models for Packet Networks,” IEEE/ACM Transactions on Networking, vol. 3, pp. 365–386, August 1995. [4] Sally Floyd and Van Jacobson, “Random Early Detection Gateways for Congestion Avoidance,” IEEE/ACM Transactions on Networking, vol. 1, pp. 397–413, August 1993. [5] D. Clark and W. Fang, “Explicit Allocation of Best Effort Packet Delivery Service,” IEEE/ACM Transactions on Networking, vol. 6, pp. 362–373, August 1998. [6] Ion Stoica, Hui Zhang, T.S. Eugene Ng, “A Hierarchical Fair Service Curve Algorithm for Link-Sharing, Real-Time and Priority Services,” in Proceedings of ACM SIGCOMM ’97, September 1997. [7] STORM. available at http://www.quality-net.co.jp/images/PDF/STORM_web. pdf. [8] MicroNET. available at http://www.adsystems.co.jp/products/micronet/ micro_1.html. [9] The Network Simulator ns 2. available at http://www.isi.edu/nsnam/ns/. [10] Intel IXP1200 Network Processor Family. available at http://www.intel.com/ design/network/products/npfamily/ixp1200.htm. 49 [11] Charles Preston, “IXP1200EB Simplified Reference Design,” January 2001. [12] Intel IXA Software Developers Kit 2.0 for IXP1200. available at http://www.intel. com/design/network/products/npfamily/sdk2.htm. [13] Intel StrongARM Processors. available at http://www.intel.com/design/strong/ collateral.htm?iid=strongarm+leftnav%&. [14] インテル株式会社プレスルーム. http://www.intel.com/jp/intel/pr/press2000/000531b.htm. [15] Intelligent I/O. available at http://www.bmc.com/technews/974/974tn1.html . [16] Tammo Spalink, Scott Karlin and Larry Peterson, “Evaluating Network Processors in IP Forwarding,” Tech. Rep. 626-00, Princeton University, November 2000. [17] Teunis J. Ott, T. V. Lakshman and Larry H. Wong, “SRED: Stabilized RED,” in Proceedings of IEEE INFOCOM ’99, March 1999. [18] Dong Lin and Robert Morris, “Dynamics of Random Early Detection,” in Proceedings of ACM SIGCOMM ’97, September 1997. [19] Steven Black, David Black, Mark Carlson, Elwyn Davies, Zheng Wang, and Walter Weiss, “An Architecture for Differentiated Services.” Internet Engineering Task Force RFC 2475, Request for Comments 2475, December 1998. [20] 線形合同法. available at http://www.ysr.net.it-chiba.ac.jp/data/rand/node5. html. [21] ポアソン乱数の発生. available at http://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/ p_rand.html. [22] 指数乱数の発生. available at http://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/exp_ rand.html. 50 [23] J. Case, M. Fedor, M. Schoffstall, J. Davin, “A Simple Network Management Protocol.” Internet Engineering Task Force RFC 1157, Request for Comments 1157, May 1990. [24] Intel Internet Exchange Architecture Software Developers Kit 2.0 for the IXP1200 Network Processor. available at http://www.intel.com/design/network/ prodbrf/27904101.pdf. [25] Intel IXP1200 Evaluation Kit. available at http://www.intel.com/design/ network/products/npfamily/eval_kit.htm. 51