Product SiteDocumentation Site

10.4. Quality of Service

10.4.1. 原理とメカニズム

Quality of Service (サービスの品質) (略して QoS) はアプリケーションに提供されるサービスの品質を向上させる技術群を指します。最もよく使われる技術はネットワークトラフィックをカテゴリ分けして、トラフィックの所属するカテゴリごとにその取り扱いに違いを付ける技術です。サービスを差別化するという概念の主な用途がトラフィックシェーピングです。これは一部のサービスおよびホストに関連する接続のデータの転送率を制限します。これを使うことで、利用できる帯域幅が飽和することを避け、重要な他のサービスに支障が出ないようにします。トラフィックシェーピングは TCP トラフィックに対して特に有効です。なぜなら、TCP は利用できる帯域幅に自動的に適応するからです。
トラフィックの優先度を変更し、対話型サービス (sshtelnet など) や小さなブロックのデータだけを取り扱うサービスに関連するパケットに高い優先度を付けることも可能です。
Debian カーネルには、QoS 関連モジュールと一緒に QoS に必要な機能が含まれています。多くのモジュールが存在し、各モジュールが異なるサービスを提供します。中でも注目すべきは IP パケットの待ち行列用の特別なスケジューラです。このスケジューラはさまざまな用途に利用できるため、考え得るさまざまな要求に対応できます。

10.4.2. 設定と実践

QoS パラメータは tc コマンド (iproute パッケージに含まれます) を使って設定します。tc コマンドはインターフェースがかなり複雑なので、高レベルツールを使うことを推奨します。

10.4.2.1. 待ち時間の低減、wondershaper

wondershaper (同名のパッケージに含まれます) の主目的はネットワーク負荷とは無関係に待ち時間を最小化することです。全トラフィックをある値に制限することにより、これは実現されます。この値には帯域を飽和させるよりほんの少しだけ小さな値を設定します。
ネットワークインターフェースを設定した後、wondershaper interface download_rate upload_rate を実行することでトラフィックが制限されます。ここで interface はたとえば eth0 または ppp0 などのインターフェース名で、download_rate および upload_rate はキロビット毎秒単位の値です。特定のインターフェースで実施されているトラフィック制限を無効化するには wondershaper remove interface コマンドを使います。
イーサネット接続の場合、wondershaper をインターフェースが設定された直後に呼び出すのが最良です。これを行うには、/etc/network/interfaces ファイルに updown 指示文を追加して、それぞれインターフェースが開始された後と停止される前に実行するコマンドを宣言します。以下にその例を示します。

例 10.9 /etc/network/interfaces ファイルの修正

iface eth0 inet dhcp
    up /sbin/wondershaper eth0 500 100
    down /sbin/wondershaper remove eth0
PPP の場合、/etc/ppp/ip-up.d/ 内に wondershaper を呼び出すスクリプトを作成することで、接続が開始された後の可能な限り早い時期にトラフィック制御を行うように設定できます。

10.4.2.2. 標準的な設定

Barring a specific QoS configuration, the Linux kernel uses the pfifo_fast queue scheduler, which provides a few interesting features by itself. The priority of each processed IP packet is based on the DSCP field (Differentiated of Services Code Point) of this packet; modifying this 6-bit field is enough to take advantage of the scheduling features. Refer to https://en.wikipedia.org/wiki/Differentiated_services#Class_Selector for more information.
The DSCP field can be set by applications that generate IP packets, or modified on the fly by netfilter. The following rules are sufficient to increase responsiveness for a server's SSH service, note that the DSCP field must be set in hexadecimal:
nft add table ip mangle
nft add rule ip mangle PREROUTING tcp sport 22 counter ip dscp set 0x04
nft add rule ip mangle PREROUTING tcp dport 22 counter ip dscp set 0x04