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

$Date: 2022/09/05 07:58:16 $

  1. 概要
  2. 注意事項
  3. 対応機種とファームウェアリビジョン
  4. 詳細
  5. コマンド
  6. 関連文書

1. 概要

vRX シリーズはマルチコアCPUに対応しています。CPUスケジューリング(パケット振り分け)機能は、ルーターがパケットを受信したときに、受信パケットの転送処理をどのCPUコアで実行するかを決定するための機能です。本機能により、以下のような受信パケットの転送処理を実行するCPUコアの割り当てを行うことができます。

CPUスケジューリング方式は、受信パケットの転送処理をどのCPUコアで実行するかを決定するための機能で、方式ごとに定められた観点から、パケットの転送処理をどのCPUコアで実行するかが決定されます。CPUスケジューリング方式には、以下の方式があります。

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

以下に vRX Amazon EC2版で、c5.xlargeインスタンス(CPUコア数が4つ)を使用した場合の、本機能によるパケット転送処理の流れの例を示します。
図1は表1のパケットを受信した場合のパケット転送処理の流れです。

パケット転送処理の流れ

図1. パケット転送処理の流れ

表1. 受信パケット一覧

受信パケット一覧

受信パケットはCPUスケジューリング方式に従って決定されたCPUコアで転送処理が実行されます。ノーマルパス対象パケットは本機能により決定されたCPUコアでは受信処理のみが実行され、転送処理は常にCPU0で実行されます。


2. 注意事項


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

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

機種 ファームウェア
vRX VMware ESXi版 すべてのリビジョン
vRX Amazon EC2版

4. 詳細

4.1. CPUスケジューリング方式によるCPUコア割り当て

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

ロードバランス方式では受信パケットの振り分けをソフトウェアで行うため、NIC側で受信パケットの振り分けを行う他の方式の方が、スケーラビリティに優れています。他の方式を優先的に使用することを推奨します。

4.1.1. ハッシュ方式

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

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

ハッシュ値の算出に使用されるヘッダ情報は以下のとおりです。

ヘッダー情報 vRX Amazon EC2版 vRX VMware ESXi版
プロトコル パラメーター
IPv4/IPv6 送信元アドレス
IPv4/IPv6 送信先アドレス
IPv4/IPv6 プロトコル番号 ×
TCP over IPv4/IPv6 送信元ポート番号
TCP over IPv4/IPv6 送信先ポート番号
UDP over IPv4/IPv6 送信元ポート番号 ○ ※1
UDP over IPv4/IPv6 送信先ポート番号 ○ ※1
ESP over IPv4 SPI × ○ ※1
※1 : 仮想マシン バージョン 15 以降かつ VMware ESXi 6.7 Update 3以降
vRX VMware ESXi版のデプロイ時の仮想マシンバージョンは11です。仮想マシン バージョン 15以降で使用するためには、互換性のアップグレードが必要です。互換性のアップグレードの方法については「ヤマハ仮想ルーターvRX for VMware ESXi版 ユーザーガイド」を参照してください。

IPv4/IPv6ヘッダを持たない受信パケットの転送処理はCPU0で実行されます。

以下に vRX Amazon EC2版で、c5.xlargeインスタンス(CPUコア数が4つ)を使用した場合の、ハッシュ方式によるCPUコア割り当ての例を示します。
図2は表2のパケットを受信した場合のCPUコア割り当ての流れです。
パケット①、②はUDPのパケット、パケット③、④はTCPのパケットです。パケット⑤はパケット①と同じヘッダ情報を持つパケットです。

ハッシュ方式によるパケット転送処理の流れ

図2. ハッシュ方式によるパケット転送処理の流れ

表2. 受信パケット一覧

受信パケット一覧

パケット①〜⑤の転送処理は、パケットのヘッダ情報から算出されたハッシュ値を基にして決定されたCPUコアで実行されます。パケット①とパケット⑤はヘッダ情報が同じであるため、転送処理を実行するCPUコアも同じになります。

4.1.2 ロードバランス方式

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

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

同じフローのパケットの転送処理をすべてのCPUコアで実行するため、パケットの順番が入れ替わる可能性があります。パケットの順番が入れ替わるとUDPを用いるアプリケーションで問題が発生する可能性があります。なお、TCPではパケットの順番が入れ替わっても通常は問題は発生しません。

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

ロードバランス方式を指定した場合には、トラフィックが存在しない状況でも新たなパケットの到着確認にコア1以降を使用します。パケットの到着を確認できなかった場合に使用したCPU時間は、show environment コマンド、および、show environment detail コマンドで表示されるCPU使用率に計上されませんのでご注意ください。

以下に vRX Amazon EC2版で、c5.xlargeインスタンス(CPUコア数が4つ)を使用した場合の、ロードバランス方式によるCPUコア割り当ての例を示します。
図3は表3のパケットを受信した場合のCPUコア割り当ての流れです。
パケット①、②はUDPのパケット、パケット③、④はTCPのパケットです。パケット⑤はパケット①と同じヘッダ情報を持つパケットです。

ロードバランス方式によるパケット転送処理の流れ

図3. ロードバランス方式によるパケット転送処理の流れ

表3. 受信パケット一覧

受信パケット一覧

パケット①〜⑤の転送処理は、各CPUコアの負荷が均等になるように決定されたCPUコアで実行されます。ここではパケット①の転送処理はCPU1で実行されていますが、パケット①と同じヘッダ情報を持つパケット⑤の転送処理はCPU2で実行されています。

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

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

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

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

受信LANインターフェースごとの転送処理を実行するCPUコアは以下のようになっています。

受信LANインターフェース CPUコア
LAN1 CPU1
LAN2 CPU2
LAN3 CPU3
LAN4 CPU1

ただし、CPUコア数が2、LANインターフェース数が3のときには、以下のようになります。

受信LANインターフェース CPUコア
LAN1 CPU1
LAN2 CPU1
LAN3 CPU1

以下に vRX Amazon EC2版で、c5.xlargeインスタンス(CPUコア数が4つ)を使用し、LANインターフェース数が4つの場合の、LANインターフェース方式によるCPUコア割り当ての例を示します。
図4は表4のパケットを受信した場合のCPUコア割り当ての流れです。
パケット①、⑤はLAN2、パケット②はLAN3、パケット③はLAN4、パケット④はLAN1で受信したパケットです。

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

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

表4. 受信パケット一覧

受信パケット一覧

パケット①〜⑤の転送処理は、それぞれのパケットを受信したLANインターフェースに対応したCPUコアで実行されます。

4.1.4. 固定方式

固定方式では、すべてのパケットの転送処理がCPU1で実行されます。

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

以下に vRX Amazon EC2版で、c5.xlargeインスタンス(CPUコア数が4つ)を使用した場合の、固定方式によるCPUコア割り当ての例を示します。
図5は表5のパケットを受信した場合のCPUコア割り当ての流れです。

固定方式によるパケット転送処理の流れ

図5. 固定方式によるパケット転送処理の流れ

表5. 受信パケット一覧

受信パケット一覧

パケット①〜③の転送処理は、すべてCPU1で実行されます。


5. コマンド


6. 関連文書