マルチスレッド、マルチコアについて

SoftEther VPN に関するご質問はこのフォーラムにお気軽にご投稿ください。
Post Reply
takker
Posts: 11
Joined: Mon Jun 08, 2020 1:27 pm

マルチスレッド、マルチコアについて

Post by takker » Tue Nov 17, 2020 8:22 am

お世話になります。

SoftEther VPN サーバのマルチスレッド、マルチコアの動作について、どなたかご存知の方がいらっしゃいましたらご教示願えないでしょうか。

現在、SoftEther VPN クライアント2台以上と、SoftEther VPN サーバ1台で、TLS(暗号スイート:TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384)でVPN接続しています。UDPアクセラレータモードは使用していません。サーバ側ではVPN接続用のNICとローカルブリッジ接続用のNICを分けて、復号したパケットをローカルブリッジ接続用のNICから目的のサーバに送信しています。

この状態で、フリーソフトですが、接続するクライアント数を増やしながら、Iperfを使用して性能(Mbps)を測定したところ、ある通信帯域をクライアント数で割っていくような結果となりました。例えば、クライアント1台だと500Mbps出るが、クライアント2台だと250Mbps、クライアント10台だと50Mbps、、、となりました。Iperfのサーバ側は負荷が高くならないように、クライアント数を増やす毎に増設しています。

◾️質問①
 開発者様が記載している文書などでは、VPNセッション毎にスレッドを生成してスレッド毎に暗号処理を行なっている、と述べられていたのですが、上記のVPN接続条件ではマルチスレッド処理になってはいないのでしょうか。
(暗号/復号処理は一つのプロセス/スレッドだけしか動作しておらず、処理がキューなどに溜まっている・・・など?があるのでしょうか)

◾️質問②
 暗号/復号の処理はマルチコアで処理されているのでしょうか。

◾️質問③
 試しにクライアントを複数台接続しながらパフォーマンスモニタを観察しましたが、スレッド数は増加しませんでした。開発者様によると、スレッドはあらかじめプールしてある、と言うような記述が見受けられるのですが、その仕組みが動作しているためでしょうか。

どなたかご教示いただけると幸いです。

cedar
Site Admin
Posts: 2070
Joined: Sat Mar 09, 2013 5:37 am

Re: マルチスレッド、マルチコアについて

Post by cedar » Wed Nov 18, 2020 10:01 am

1.状況的にはマルチスレッドで処理されているのではないかと思います。
2.動作環境の OpenSSL の実装によりますが、おそらく複数のコアで処理されていると思います。
3.一度開始されたスレッドは、ある程度までは終了せずにプールされます。一時的に作成されたスレッドが待機状態になっていれば、接続ごとにOSから見えるスレッド数が増えない可能性はあります。

挙動から推測すると、ローカルブリッジがボトルネックになっているようにも思われます。
ローカルブリッジの通信は、ドライバの仕様によっては意外と低い性能で頭打ちになる可能性があります。
(または、実験環境の他の部分にボトルネックがある可能性も考えられます。)

スレッドに関する詳細な動作は OS によって異なる部分が多々あります。
VPN Server では、何の OS 使用されているでしょうか。

takker
Posts: 11
Joined: Mon Jun 08, 2020 1:27 pm

Re: マルチスレッド、マルチコアについて

Post by takker » Wed Nov 18, 2020 12:36 pm

Cedar様

お世話になります。
早速のご回答ありがとうございます。

本当にマルチ処理かどうかを確認するのであれば、
暗号・復号処理でログを仕込んで観察するしかなさそうですね。

VPN ServerはWindows2016です。
ハイパーバイザー型の仮想マシンで1台の物理サーバ上で動かしており、
ローカルブリッジ用のNICは、仮想サーバ(iperfのサーバ側が動作)も接続している仮想スイッチに接続されています。
また仮想スイッチにはVLAN設定をしています(タグVLANかポートVLAN設定かは不明)。
なお、クライアントとサーバはほぼ有線で直結状態です。

CPUはそこそこの性能を2コアで動作させ、ローカルブリッジ用のNICはTCP/IP プロトコルや他のプロトコルスタックなどを「無効」にしており
SoftEther Lightweight Network Protocolのみを有効化しています。

cedar
Site Admin
Posts: 2070
Joined: Sat Mar 09, 2013 5:37 am

Re: マルチスレッド、マルチコアについて

Post by cedar » Wed Nov 18, 2020 12:54 pm

特に仮想環境ではローカルブリッジの動作は信頼できないので、パフォーマンスを測定する目的であればクライアント同士の通信のモデルで行ってみると良いかもしれません。

OS についてですが、スケジューラの違いだと思うのですが、Windows の方が Linux よりも負荷の分散が上手くいくケースが多いように感じています。
また、AES-NI に対応した CPU であれば、AES の処理を(物理コアごとに)加速することができます。
また、ローカルブリッジも Windows の方がパフォーマンスは出やすいように感じます。

takker
Posts: 11
Joined: Mon Jun 08, 2020 1:27 pm

Re: マルチスレッド、マルチコアについて

Post by takker » Wed Nov 18, 2020 1:16 pm

Cedar様

ご回答ありがとうございます。

>特に仮想環境ではローカルブリッジの動作は信頼できない
 →そうなのですか。使い方には注意したほうが良さそうですね。
  (ただ、ローカルブリッジ接続しないと復号したパケットを流せない?ので選択肢がなさそうですが。。)
  パフォーマンス測定が目的ではありませんが、
  クライアント同士で接続してどの程度の差が出るか比較してみたいと思います。

OSでの違いとAES-NIの情報ありがとうございます。
(AES-NIはある事情があって使えないので残念です。。。)

Cedar様、お忙しい中、迅速なご回答誠にありがとうございました。

cedar
Site Admin
Posts: 2070
Joined: Sat Mar 09, 2013 5:37 am

Re: マルチスレッド、マルチコアについて

Post by cedar » Wed Nov 18, 2020 1:50 pm

すみません。信頼できないという言い方は語弊がありました。訂正します。
ローカルブリッジ機能は、パケットをOSの加工を介さずに直接送信するため、ハードウェアオフローディングと組み合わせるとパケットが破損するケースがあります。
また、特にエンタープライズ向けの仮想環境ではMACアドレスの偽装やプロミスキャスモードでのパケット受信が制限されている場合があり、そういったケースではローカルブリッジ機能はうまく動作しません。
こういった点に気を付けていれば、ローカルブリッジ機能の動作自体が信頼できないわけではありません。

takker
Posts: 11
Joined: Mon Jun 08, 2020 1:27 pm

Re: マルチスレッド、マルチコアについて

Post by takker » Wed Nov 18, 2020 2:00 pm

Cedar様

補足情報ありがとうございます。
上記の点について注意して今後もSoftEtherを使用させていただきたいと思います。

ありがとうございました。

Post Reply