2007-11-21

PSPacer は,Linux 上で動作するソフトウェアによる精密なペーシング機構です. 本ソフトウェアは,産業技術総合研究所により開発されました.なお,本ソフト ウェアの開発の一部は,文部科学省「経済活性化のための重点技術開発プロジェ クト」の一環として実施している超高速コンピュータ網形成プロジェクト(NAREGI: National Research Grid Initiative)により行われました. PSPacer は,GNU GPLライセンスのもとで公開されています.

より詳細な情報はプロジェクトページ http://www.gridmpi.org/ を参照してください.

Note
PSPacer バージョン2.xは,Linuxカーネル2.4をサポートしていません.

PSPacer とは何か?

PSPacer は,従来専用ハードウェアが必要だった精密なネットワーク帯域制御, トラフィック平滑化をソフトウェアのみで実現します.これにより効率のよい遠距離 広帯域通信,高品質なストリーム配信が可能になります. 本ソフトウェアは,Linux ローダブルカーネルモジュールとして実装されています. また,tc(8) コマンドから制御可能なクラスフル qdisc モジュールであり,クラスごと に精密なペーシングを実現します.PSPacer の詳細については,パッケージに含まれて いる論文「Design and Evaluation of Precise Software Pacing Mechanisms for Fast Long-Distance Networks」を参照してください.

配布物に含まれるファイル

LICENSE         - GPL ライセンス
Makefile        - Makefile
README          - 本ファイルの英語版
README.jp       - 本ファイル
ChangeLog       - ChangeLog
doc/            - ドキュメント(利用ガイド,論文)
kernel/         - カーネルモジュール
man/            - man ページ
scripts/        - サンプルテストスクリプト
tc/             - tc(8) 用の共有ライブラリ
pspd/           - PSPacer コントロールデーモン
patch/          - libnl 用のパッチ

制限事項

(1) PSPacer は,システムの最大送信帯域に占める目標帯域の割合にしたがって,帯域 制御とバーストの平滑化を行います.

したがって,精密なペーシングを実現するためには,システム(コンピュータ,ネット ワークインタフェース,オペレーティングシステム)は最大転送レート(つまり 1000BASE であればギガビット/秒,100BASE であれば 100 メガビット/秒)でパケットを送信 できる必要があります.

例えば,ギガビットイーサネットワークインタフェースを 33MHz/32bit PCI バスに よって接続している場合,ボトルネックは PCI バスになり,システムはギガビット /秒のレートでパケットを送信することはできません.この場合,qdisc の設定時に, 次のように "rate" パラメータを使って,最大送信帯域を明示的に指定することが できます.

# /sbin/tc qdisc add ... psp ... rate 700mbit
                                 ^^^^^^^^^^^^

しかし,この場合,PCI バスの振る舞いが十分安定しないので,出力される トラフィックは精密にはならないでしょう.

したがって,ギガビットイーサネットのトラフィックを制御したいのであれば,ネット ワークインタフェースの接続に PCI-X,66MHz/64bit PCI や CSA を使うことを お薦めします.また,出力トラフィックの合計帯域が 100Mbps よりも少ない場合は, ネットワークインタフェースを 100BASE として使うことで,精密なペーシングを 得ることができます.

同様な理由から,PC と PSPacer を接続するエッヂスイッチとして,共有スイッチ (ダムハブ)を使うことは避けてください.

(2) PSPacer はパケット間のギャップとして IEEE 802.3x PAUSE フレームを使います. したがって,スイッチ/ルータから接続されたシステムへの送信を停止するために, PAUSE フレームを使うことはできません. 予期しない振る舞いを避けるためにも,スイッチ(から PCPacer が動作している PC へ) の IEEE 802.3 x フロー制御を無効に設定することをお薦めします.

コンパイル&インストール方法

ソースコードからインストール

コンパイルには,次のソースコードが必要になります.

Note
iproute2 は,カーネルバージョンに強く依存しているため,適切な組合せを 使う必要があります.我々がチェックした組合せを「テスト環境」に記述したので, 参照してください.
  1. iproute2 tarball の展開:

    $ cd /opt
    $ wget http://developer.osdl.org/dev/iproute2/download/ \
      iproute2-<version>.tar.gz
    $ tar zxvf iproute2-<version>.tar.gz
    $ ln -s iproute2-<version> iproute2
  2. PSPacer tarball の展開:

    $ tar zxvf pspacer-<version>.tar.gz
  3. make & install:

    $ cd pspacer-<version>
    $ ./configure
    $ make
    $ su
    # make install

バイナリインストール

RedHat RPMまたはDebian debパッケージをサポートしています.作成方法は, 利用ガイド(doc/usage.en.txt)を参照してください.

簡単な使用例

  1. qdisc の設定

    (PSPacer qdisc をルート qdisc として追加します)
    # /sbin/tc qdisc add dev eth0 root handle 1: psp default 1
    (ターゲットレートが 500 Mbps のクラスを追加します)
    # /sbin/tc class add dev eth0 parent 1: classid 1:1 psp rate 500mbit
    (PFIFO qdisc をサブ qdisc として追加します)
    # /sbin/tc qdisc add dev eth0 parent 1:1 handle 10: pfifo
  2. iperf の実行

    $ iperf -c <サーバホスト> -i 10 -t 60
    ------------------------------------------------------------
    Client connecting to XXXX, TCP port 5122
    TCP window size: 16.0 KByte (default)
    ------------------------------------------------------------
    [  3] local 192.168.1.1 port 46457 connected with 192.168.1.2 port 5122
    [  3]  0.0-10.0 sec    567 MBytes    476 Mbits/sec
    [  3] 10.0-20.0 sec    567 MBytes    476 Mbits/sec
            :
  3. qdisc の削除

    (PFIFO サブ qdisc の削除)
    # /sbin/tc qdisc del dev eth0 parent 1:1 handle 10:
    (PSPacer クラスの削除)
    # /sbin/tc class del dev eth0 parent 1: classid 1:1
    (PSPacer qdisc の削除)
    # /sbin/tc qdisc del dev eth0 root handle 1:
    (PSPacer モジュールの削除)
    # /sbin/rmmod sch_psp

より詳細な情報は,利用ガイド(doc/usage.en.txt),または man ページを参照して ください.

テスト環境

本ソフトウェアは次に示す環境で動作確認を行いました.