ルーターは高速なWi-Fiを宣伝しながら、三台分の通信を同時に暗号化するのに苦労します。ノートPCは処理の限界に達しているのに、アクセス回線にはまだ余裕があります。たいてい最初にサーバーが疑われますが、多くの場合サーバーは無実です。限界はトンネル処理を行う機械の側にあり、それを見つけるには速度テストではなくその機械を観察する必要があります。

症状が指すのは一台の機械であり、インターネットではない

トンネルがどこで動くかで、どのプロセッサが代償を払うかが決まります。ルーターが終端するなら、対象のクライアントはすべてそのルーターの予算を分け合います。ノートPCがクライアントを動かすなら、支払うのはノートPCでルーターではありません。両端でトンネルを動かすと二つの作業負荷が生まれ、それぞれが別の日に限界になり得ます。機械を特定するのが最初の一歩であり、プロバイダーにチケットを切るときに飛ばされがちな一歩です。

アプリケーションと遠端の間にある機器を数え、暗号化している機器に印を付けます。それ以外は、読めないバイトを運ぶだけの存在です。

転送中にコアごとの負荷を見る

CPU全体の使用率は適切な指標ではありません。暗号化処理はしばしば一つのコアを占有し、残りは遊んでいるからです。制御された転送中にコアごとの数値を見て、飽和に近いコアがないか注目します。一本のスレッドが忙しい中程度の平均は強い兆候であり、忙しいスレッドがない高い平均は通常、無関係なプログラムを意味しますが、数字よりもパターンが重要です。

mpstat -P ALL 1 5
top -H -b -n 1 | head -20
lscpu | grep -i -E "model name|aes"

三番目のコマンドは、プロセッサがAES命令を公開しているかを示し、同じ暗号のコストを大きく変えます。VPN実装がそれを使っているかは示しませんが、この二つの事実の間の隙間こそが、多くの最適化の主張の出どころです。

暗号化とパケット処理を切り分ける

暗号化はいくつもあるコストの一つです。カーネルとユーザー空間の間のパケットコピー、ルーティング検索、ファイアウォール規則、インターフェース処理がすべて寄与し、実装によっては暗号処理よりコピーのほうが高くつきます。各サイクルを説明するためにプロセス名を信じるのではなく、転送とともにどのカウンターが増えるかに注目します。ユーザー空間のトンネルとカーネル内のトンネルは、同じ通信でもまったく異なるプロファイルを示すことがあります。

カーネル内で一つのコアが忙しい場合、対処はユーザー空間の忙しいスレッドとは異なり、プロファイルがどちらかを教えてくれます。この区別は、ハードウェアを買う前に一時間をかける価値があります。

結論を出す前に同条件どうしを比べる

比較が役立つのは、作業、アクセス回線、端点が同じままのときだけです。サーバーを変えれば結果にはそのサーバーの経路と容量が含まれ、回線を変えれば事業者が含まれます。同じファイル、同じ宛先、同じ時間帯を使い、自分のバックグラウンド処理も止めます。機器を変える必要があるなら、機器だけを変えます。

電力と熱は持続性能を変えるため、冷えた機械での短い実行は温まった機械での長い転送と同じ測定ではありません。グラフ上では熱の限界が処理の限界とまったく同じに見えるので、似た電力条件で比べて書き留めてください。

対応しているオフロードを使い、実際に有効になったか確認する

実装によってはデータ経路の一部をカーネルやハードウェアへ移せますが、可用性はクライアント、OS、サーバー、設定によって変わります。使っているバージョンの文書を読み、その独自の状態出力やログで機能が有効か確認します。インストール済みのパッケージやチェックしただけの項目は証拠になりません。OpenVPNのマニュアルは各リリースのデータチャネルのオプションを記しており、それらはバージョン間で異なります。

対応する変更で上限が動いたら、アプリケーションの作業と一括転送の両方を再実行し、戻せるように前のプロファイルを残します。アプリケーションが遅いまま一括の速度が倍になったなら、ボトルネックは取り除かれたのではなく移動したのです。

プロセッサの観測が症状と一致しないなら、ネットワーク側に戻ってください。Wi-Fiの再試行、キューイング、出口の経路は、CPUがまったく関与しなくても同じ結果を生みます。

関連記事