CPUスケジューリング(パケット振り分け)機能

$Date: 2023/07/06 20:22:18 $

  1. 概要
  2. 注意事項
  3. 対応機種とファームウェアリビジョン
  4. 詳細
  5. コマンド
  6. CPUスケジューリングフィルターを使用する場合の設定例
  7. 関連文書

1. 概要

CPUスケジューリング(パケット振り分け)機能は、マルチコアCPUを搭載するヤマハルーターがパケットを受信したときに、受信パケットの転送処理をどのCPUコアで実行するかを決定するための機能です。

本機能はCPUスケジューリング方式によるCPUコア振り分けとCPUスケジューリングフィルターによるCPUコア振り分けに分類されます。

ノーマルパスの処理対象となるパケットは、本機能によって決定されたCPUコアでは受信処理のみが実行され、転送処理は常にCPU1で実行されます。

機種によって利用できるCPUスケジューリング方式、および、CPUスケジューリングフィルターに対応しているか否かが異なります。詳しくは「3. 対応機種とファームウェアリビジョン」を参照してください。


2. 注意事項


3. 対応機種とファームウェアリビジョン

以下のファームウェアで、CPUスケジューリング(パケット振り分け)機能をサポートしています。

機種 ファームウェア CPUスケジューリング方式 CPUスケジューリングフィルター
ハッシュ方式 ロードバランス方式 LANインターフェース方式
RTX3500 Rev.14.00.13以降(※)
RTX3510 すべてのリビジョン × ×
RTX5000 Rev.14.00.13以降(※)
RTX1300 すべてのリビジョン × ×

(※) 本機能がサポートされていないファームウェアでは、ハッシュ方式で受信パケットの転送処理をどのCPUコアで実行するかが決定され、他の方式に変更することはできません。また、同じヘッダ情報を持つ受信パケットであっても、本機能がサポートされているファームウェアとそうでないファームウェアではパケットの転送処理を実行するCPUコアが異なる可能性があります。


4. 詳細

4.1. CPUスケジューリング方式によるCPUコア振り分け

ルーターは system packet-scheduling コマンドで設定したCPUスケジューリング方式ごとに定められた観点から受信パケットの転送処理をどのCPUコアで実行するかを決定します。CPUスケジューリング方式は以下の中から選択することができます。

ロードバランス方式では、複数のCPUコアで扱われる同一フローに対する排他制御処理等のオーバーヘッドが発生するため、ハッシュ方式の方がスケーラビリティに優れています。負荷分散が目的であっても、多数のフローが発生してハッシュ方式でも均等にパケットが振り分けられることが期待できる場合は、ハッシュ方式を使用することを推奨します。

4.1.1. ハッシュ方式

ハッシュ方式では、受信パケットのヘッダ情報から算出されたハッシュ値を基にしてパケットの転送処理をどのCPUコアで実行するかが決定されます。同じフローのパケットであれば、常に同じCPUコアで転送処理が行われます。

IPsecではESPシーケンス番号の順序通りにESPパケットが送信されないことがあるため、対向側ルーターの受信処理でESPシーケンスエラーが発生し、ESPパケットが破棄される可能性があります。ESPシーケンスエラーは、対向側ルーターの ipsec sa policy コマンドで anti-replay-check を off にして、ESPシーケンス番号のチェックを行わないようにすることで回避できます。

4.1.2. ロードバランス方式

ロードバランス方式では、ファストパスで使用するCPUコアの負荷が均等になるようにパケットの転送処理をどのCPUコアで実行するかが決定されます。転送処理を実行するCPUコアがパケット単位で変化するため、同じフローのパケットであっても、毎回同じCPUコアになるとは限りません。

受信パケットのヘッダ情報を意識しなくとも、パケットの転送処理をすべてのCPUコアで実行することができるようになるため、ハッシュ方式ではCPU負荷に偏りが生じてしまう場合などに、全体のCPU負荷を分散させることができます。

同じフローのパケットの転送処理をすべてのCPUコアで実行するため、パケットの順番が入れ替わる可能性があります。パケットの順番が入れ替わるとUDPを用いるアプリケーションで問題が発生する可能性があります。CPUスケジューリングフィルターに対応している機種の場合は、CPUスケジューリングフィルターでパケットの転送処理を実行するCPUコアを固定することでパケットの順番の入れ替わりを抑制することができます。なお、TCPではパケットの順番が入れ替わっても通常は問題は発生しません。

IPsecではESPシーケンス番号の順序通りにESPパケットが送受信されないことがあるため、両側のルーターでESPシーケンスエラーが発生し、ESPパケットが破棄される可能性があります。ESPシーケンスエラーは、両側のルーターの ipsec sa policy コマンドで anti-replay-check を off にして、ESPシーケンス番号のチェックを行わないようにすることで回避できます。

4.1.3. LANインターフェース方式

LANインターフェース方式では、パケットを受信したLANインターフェースによってパケットの転送処理をどのCPUコアで実行するかが決定されます。

受信パケットのヘッダ情報を意識しなくとも、パケットの転送処理を意図したCPUコアで実行することができますが、ネットワーク構成によってはCPU負荷に偏りが生じる可能性があります。

IPsecではESPシーケンス番号の順序通りにESPパケットが送信されないことがあるため、対向側ルーターの受信処理でESPシーケンスエラーが発生し、ESPパケットが破棄される可能性があります。ESPシーケンスエラーは、対向側ルーターの ipsec sa policy コマンドで anti-replay-check を off にして、ESPシーケンス番号のチェックを行わないようにすることで回避できます。

4.2. CPUスケジューリングフィルターによるCPUコア振り分け

CPUスケジューリングフィルターは特定の受信パケットの転送処理を任意のCPUコアで実行できるようにするための機能で、パケットごとに転送処理を実行するCPUコアを固定することができます。

CPUスケジューリングフィルターの設定については「6. CPUスケジューリングフィルターを使用する場合の設定例」を参照してください。

CPUスケジューリングフィルターの仕組み

CPUスケジューリングフィルターは、転送処理を実行するCPUコアを固定する受信パケットの情報を示したフィルターを適用することで有効となります。フィルターは複数適用することができます。フィルターに合致した受信パケットはフィルターで指定したCPUコアで転送処理が実行され、すべてのフィルターに合致しなかったパケットはCPUスケジューリング方式に従って決定されたCPUコアで転送処理が実行されます。

CPUスケジューリングフィルターに登録する受信パケットのヘッダ情報は、以下を組み合わせて指定します。

ヘッダ情報 備考
IPv4/IPv6送信元アドレス ネットマスク/プレフィックス指定が可能
IPv4/IPv6送信先アドレス ネットマスク/プレフィックス指定が可能
プロトコル -
TCP/UDP送信元ポート -
TCP/UDP送信先ポート -

図8は表8-1のパケットを受信した場合のパケット転送処理の流れで、表8-2のCPUスケジューリングフィルターが適用されています。パケット①、②はUDPのパケット、パケット③、④はTCPのパケットです。フィルター1はUDPのパケットの転送処理を実行するCPUコアを固定、フィルター2はICMPのパケットの転送処理を実行するCPUコアを固定、フィルター3は特定のアドレスからアドレスへ転送されるFTPのパケットの転送処理を実行するCPUコアを固定します。なお、ここではCPUスケジューリング方式としてロードバランス方式を採用しています。

LANインターフェース方式によるパケット転送処理の流れ

図8. CPUスケジューリングフィルターによるパケット転送処理の流れ

表8-1. 受信パケット一覧

受信パケット一覧

表8-2. CPUスケジューリングフィルター一覧

CPUスケジューリングフィルター一覧

パケット①、②はフィルター1、④はフィルター3と合致するため、各フィルターで指定したCPUコアで受信パケットの転送処理が実行されます。パケット③は合致するフィルターがないため、CPUスケジューリング方式に従って転送処理を実行するCPUコアが決定されます。ここではロードバランス方式を採用しているので、各CPUコアの負荷が均等になるようにCPUコアが決定されます。


5. コマンド


6. CPUスケジューリングフィルターを使用する場合の設定例


7. 関連文書