外部記憶装置

脳みそ小さすぎるからメモしとく

R86S レビュー(Ubuntu 22.10 編 その2 NAPT他)

R86S レビューシリーズ

前回のあらすじと今回の内容

謎の小型PC、R86S を手に入れ、いろいろ遊んでいる。 前回は iperf3 で L2ブリッジとL3フォワーディングの環境において、iperf3 を用いて性能を計測した。

前回の iperf3 の計測では片方向(クライアント→サーバー)でトラフィックを流して計測していた。 今回はより負荷をかけるために、双方向の全二重でトラフィックを流し、その時の性能を計測した。

L3フォワーディング (双方向)

iperf3 に --bidir オプションを追加し、前回と同様の計測を行った。

forward が クライアント→サーバー、reverse がサーバー→クライアントにあたる。 片方向の場合に比べて、両方向共におおむね8割程度のスループットが出ている。

CPUの使用率はソフトウェア割り込みが2割程度増加している。

各コアへの割り当てについては、張られる2つのTCPセッションをうまくコアごとに分散している場合と、 分散されずに一つのコアに割り込みがかかっている場合がある。 このあたりのコアの割り当てやスケジューラについてはよく知らないが、 ソフトウェア割り込みということはコンテキストスイッチ等が関係しているのだろうか?

NAPT

前回と同様のネットワークで、VLAN B → VLAN A の接続について iptables で NAPT を行う場合について計測した。

iptables -t nat -A POSTROUTING -s [VLAN B のサブネット] -o [VLAN A の IF] -j MASQUERADE

スループットについては、L2ブリッジやL3フォワーディングとほぼ同様の傾向であった。

双方向な場合についても計測したが、L3フォワーディングの場合に比べて、forward と reverse で若干不均衡な結果が得られた。 合計したスループットとしてはほぼ同様であった。

双方向で計測している時のCPU使用率は、L3フォワーディングの時と比べて若干高い結果となった。

ソフトウェア割り込みについてもL3フォワーディングに比べて若干高めの結果が得られた。

まとめ

TCPで通信を行う場合、CPUコアへの割り当て次第ではあるが、9Gbps を超える速度でNAPTが出来ることが分かった。 軽い使い方をする環境(一般家庭等)ならば、10Gbps の環境におけるソフトウェアルーターやNAPTサーバーとして十分に活用できそうである。

ショートパケットが大量に流れる環境や、アプリケーションを動かす場合については今回の計測結果からは何とも言えないため、 TRexのような専用のトラフィックジェネレータを用いて計測する必要がある。(TRexを動かせる物理マシン環境がないため、今回は計測していない)

次回以降は pfSense や OpenBSD を動かしてみることにする。