Linuxネットワーク最適化ツール「Tenyendama Linux Network Optimizer」を公開しました

Linux

Linux環境のTCP輻輳制御、qdisc、TCPソケットバッファ、実通信経路を測定し、安全に比較できる「Tenyendama Linux Network Optimizer v3.2.0」を公開しました。

本ツールは、BBRや定番のsysctl設定を無条件に適用するものではありません。現在の設定と複数の候補を実際に測定し、速度、遅延、安定性、通信プロトコル、IPv4・IPv6の通信経路を検証します。

探索テストと確認テストの両方で明確な改善を再現できた場合だけ、設定の永続化を提案します。十分な差がなければ、現在の設定を維持します。

v3.2.0では、GUI、X Window System、Wayland、Xvfbを必要としないヘッドレスLinux対応を正式機能として追加しました。SSHのみのLinuxサーバーやVPSでも利用できます。

GitHub - ultrasukiyaki/tenyendama-linux-network-optimizer: A safety-first Linux network benchmarking and auto-tuning toolkit that compares TCP congestion control, qdiscs, and NIC settings, recommends the best profile, and provides verified rollback.
A safety-first Linux network benchmarking and auto-tuning toolkit that compares TCP congestion control, qdiscs, and NIC ...

v3.2.0のリリースページはこちらです。

Release Tenyendama Linux Network Optimizer v3.2.0 ?? ultrasukiyaki/tenyendama-linux-network-optimizer
v3.2.0 makes GUI-free Linux operation a tested product feature. The benchmark,check, and smoke test share one Playwright...

Tenyendama Linux Network Optimizerとは

Tenyendama Linux Network Optimizerは、Linuxのネットワーク設定を実測比較するベンチマーク・自動最適化ツールです。

主に、CUBICやBBRなどのTCP輻輳制御と、fqやfq_codelなどのqdiscを組み合わせて比較します。オプションを指定すると、実測した帯域遅延積(BDP)から生成したTCPソケットバッファ候補も評価できます。

単純な最高速度だけではなく、速度の中央値、p05・p95、Loaded latency、変動係数、遅延スパイク、通信経路、使用プロトコルなどを総合的に確認します。

回線、ISP、ルーター、NIC、Linuxカーネル、RTT、接続先、時間帯によって最適な設定は変わります。そのため、本ツールは特定の設定を最初から正解とせず、利用中の環境で効果を測定します。

主な機能

TCP輻輳制御とqdiscを実測比較

現在の設定を保存したうえで、TCP輻輳制御とqdiscの候補を順番に一時適用し、Cloudflare Speed TestをPlaywright Chromiumから実行します。

  • CUBICとfq
  • BBRとfq
  • CUBICとfq_codel

候補を測定する順序による偏りを減らすため、ウォームアップと均衡化された実行順序を採用しています。

実測BDPからTCPソケットバッファ候補を生成

--tune-buffersを指定すると、選ばれたTCP輻輳制御とqdiscを固定し、受信方向と送信方向の実測値からTCPソケットバッファ上限の候補を生成します。

  • current:実行開始時の現在値
  • bdp-2x:実測BDPの2倍を基準にした候補
  • bdp-4x:実測BDPの4倍を基準にした候補

候補は搭載メモリに応じた安全上限内で生成されます。--buffer-cap-mibを使用すると、4~256MiBの範囲で上限を指定できます。

現在値より小さい候補を無理に適用したり、安全上限を超える巨大な値を自動設定したりはしません。

比較・管理する主な設定は、net.core.rmem_maxnet.core.wmem_maxnet.ipv4.tcp_rmemnet.ipv4.tcp_wmemnet.ipv4.tcp_moderate_rcvbufです。

システム全体のTCPメモリ制限であるnet.ipv4.tcp_memと、net.core.netdev_max_backlogは診断・レポート対象のみで、自動変更しません。

通信プロトコルと実際の経路を検証

Chromium DevTools Protocolを利用して、Cloudflareのダウンロード・アップロード通信で実際に接続したIPv4・IPv6アドレスと通信プロトコルを確認します。

各接続先へip route getを実行し、ルーティングインターフェースから実際の物理egressまでを追跡します。

bridge0 → enp1s0

bridge、bond、VLANなどを経由している場合も、最終的に使用された物理NICを検証します。

HTTP/3・QUICはTCP輻輳制御の比較に適さないため除外します。想定外のNIC、Wi-Fi、VPN、トンネル、物理egressを確認できない経路を使用した測定も、最適化判断には採用しません。

探索と確認の二段階で安全性を判定

一度の測定結果だけで設定を永続化することはありません。

最初に複数候補を比較する「探索」を行い、現在値とは異なる候補が首位になった場合は、首位候補と現在値を改めて比較する「確認」を実行します。

探索と確認の両方で同じ候補が勝ち、スコア差、Loaded latency、遅延スパイク、安定性、通信経路などの安全条件を満たした場合だけ、永続化候補として提示します。

わずかな差、再現性のない結果、欠損値、不正な測定値、安全基準を超える遅延が検出された場合は現在の設定を維持します。

バックアップ・完全復元・ロールバック

ベンチマーク中はTCP輻輳制御、qdisc、TCPソケットバッファを一時的に変更する場合がありますが、正常終了時だけでなく、例外や中断が発生した場合も開始前の設定へ復元します。

benchmarkコマンドは測定結果にかかわらず設定を永続化しません。optimizeでも、ユーザーの明示承認なしに永続化することはありません。

永続化前の設定は次のディレクトリへ保存されます。

/var/lib/tenyendama-netopt/backups/

問題が発生した場合は、rollbackコマンドで直前の管理設定へ戻せます。

v3.2.0で追加したヘッドレスLinux対応

v3.2.0では、Playwright Chromiumを明示的なheadlessモードで起動します。

  • デスクトップ環境不要
  • X Window System不要
  • Waylandセッション不要
  • DISPLAYWAYLAND_DISPLAY不要
  • Xvfb不要
  • ssh -Xssh -Y不要

SSH端末しかないLinuxサーバーやVPSでも、ベンチマークを実行できます。ただし、Chromiumが使用するLinux共有ライブラリは必要です。

checksetup.sh --check-onlyでは、Playwrightパッケージ、Chromium本体、実行権限、headless起動、ローカルページ表示、JavaScript実行、CDP接続などを診断します。

Chromium未導入、共有ライブラリ不足、実行権限、ブラウザキャッシュの所有権などに問題がある場合は、原因に応じた修復方法を表示します。

ヘッドレス動作は自動テストとCIでも検証されます。GUI環境が存在する場合も、通常のベンチマークはheadlessモードで動作します。

評価モードと測定プリセット

--modeは、測定結果のどの要素を重視するかを選択します。モードを変更しても、通信経路、通信プロトコル、遅延、安定性、確認測定などの安全条件は無効化されません。

モード 評価方針
balanced ダウンロード、アップロード、遅延、安定性を総合評価
download ダウンロード速度の中央値と持続速度を重視
upload アップロード速度の中央値と持続速度を重視
latency Loaded latencyと遅延スパイクの少なさを重視
streaming 持続アップロード、Loaded latency、安定性を重視
highperformance すべての安全条件を維持したまま帯域性能を強く重視

--presetは、反復回数、ウォームアップ、測定時間など、ベンチマークの実行量を選択します。

  • quick:短時間で傾向を確認
  • standard:通常利用向けの標準測定
  • deep:時間をかけて詳しく比較

簡単にいうと、--presetは測定の重さ、--modeは測定結果の評価方針です。

必要な環境

  • Linux
  • Node.js 20.19以上
  • npm・npx
  • ipコマンド
  • tcコマンド
  • sysctl
  • sudo
  • Playwright Chromiumと必要なLinux共有ライブラリ

GUI、Xorg、Wayland、Xvfbは必要ありません。Node.jsは、本ツールが対応する最新のactive LTS版を推奨します。

セットアップ方法

GitHubからリポジトリを取得します。

GitHub - ultrasukiyaki/tenyendama-linux-network-optimizer: A safety-first Linux network benchmarking and auto-tuning toolkit that compares TCP congestion control, qdiscs, and NIC settings, recommends the best profile, and provides verified rollback.
A safety-first Linux network benchmarking and auto-tuning toolkit that compares TCP congestion control, qdiscs, and NIC ...
git clone https://github.com/ultrasukiyaki/tenyendama-linux-network-optimizer.git
cd tenyendama-linux-network-optimizer
npm install
npx playwright install chromium
./setup.sh --check-only
./bin/tenyendama-netopt check

GUIのない最小構成LinuxでChromium用共有ライブラリも導入する場合は、次の方法を利用できます。

npm install
npx playwright install --with-deps chromium
./setup.sh --check-only
./bin/tenyendama-netopt check

v3.2.0では、セットアップ補助として次のオプションも利用できます。

./setup.sh --with-browser-deps

--check-onlycheckは診断のみを行い、OSパッケージの導入、Chromiumのダウンロード、sysctlやqdiscの変更を自動実行しません。

sudo npm installsudo npx playwright installは、ブラウザキャッシュの所有権問題につながる可能性があるため推奨しません。

Node.jsやnpmの導入方法はこちらです。

https://github.com/ultrasukiyaki/tenyendama-linux-network-optimizer/blob/v3.2.0/docs/ja/INSTALL-NODEJS.md

ヘッドレス環境の詳しい説明はこちらです。

https://github.com/ultrasukiyaki/tenyendama-linux-network-optimizer/blob/v3.2.0/docs/ja/HEADLESS.md

基本的な使い方

動作環境を診断する

./bin/tenyendama-netopt check

必要なコマンド、カーネル機能、NIC、Playwright Chromium、headless起動、ローカルページ表示、CDP接続などを確認します。

設定を保存せずベンチマークする

./bin/tenyendama-netopt benchmark   --preset standard   --mode balanced

benchmarkは候補を一時適用して比較しますが、結果を永続化しません。

標準的な自動最適化を実行する

./bin/tenyendama-netopt optimize   --mode balanced

速度、遅延、安定性を総合評価し、安全条件を満たす候補だけを永続化候補として提示します。

帯域性能とTCPソケットバッファを比較する

./bin/tenyendama-netopt optimize   --mode highperformance   --tune-buffers

highperformanceは帯域性能を重視する評価モードです。安全制限を解除するモードではありません。

--tune-buffersは明示的なオプトインです。指定しない限り、TCPソケットバッファ探索は実行されません。

現在の状態を確認する

./bin/tenyendama-netopt status

直前の管理設定へ戻す

./bin/tenyendama-netopt rollback

利用時の注意点

ネットワークの測定結果は、Cloudflareエッジ、ISPの経路、ルーター、バックグラウンド通信、接続先の混雑、時間帯などによって変動します。

重要な環境では、一度の測定だけで判断せず、異なる時間帯にもbenchmarkを実行して複数のレポートを比較してください。

GUIなしで実行できることと、完全な無人実行は別の意味です。optimizeで設定を永続化する場合は、従来どおり確認入力が必要です。

本番サーバーや、ローカルコンソールへアクセスできないリモートサーバーで利用する場合は、事前にバックアップと復旧手段を確認してください。

よくある質問

GUIやX Window Systemは必要ですか?

必要ありません。Playwright Chromiumはheadlessモードで動作するため、Xorg、Wayland、Xvfb、GUI転送は不要です。

ただし、Chromiumが利用するLinux共有ライブラリは必要です。checkまたはsetup.sh --check-onlyで実行環境を診断できます。

実行すれば必ず通信速度が上がりますか?

必ず速くなるわけではありません。候補間に明確で再現可能な差がなければ、現在の設定を維持します。

highperformanceモードは安全性を下げますか?

下げません。帯域性能のスコア比重を高めますが、通信経路、プロトコル、遅延、安定性、二段階確認などの安全条件は維持されます。

highperformanceを指定するとTCPバッファも変更されますか?

変更されません。TCPソケットバッファを比較するには、--tune-buffersを明示的に指定する必要があります。

tcp_memも自動変更されますか?

変更されません。net.ipv4.tcp_memnet.core.netdev_max_backlogは診断・レポート対象のみです。

VPN接続中でも測定できますか?

VPNやトンネルを経由した測定は、物理NICの最適化判断には採用されません。最適化対象の物理NICから直接通信できる状態で実行してください。

設定を元に戻せますか?

rollbackコマンドで直前の管理設定へ戻せます。異常終了時には、開始前のTCP輻輳制御、qdisc、TCPソケットバッファを復元する設計です。

まとめ

Tenyendama Linux Network Optimizerは、LinuxのTCP輻輳制御、qdisc、TCPソケットバッファ、実通信経路を測定し、安全条件を満たした設定だけを永続化候補として提示するネットワーク最適化ツールです。

BBRやCUBIC、fqやfq_codel、TCPバッファの値を一律に適用するのではなく、現在の環境で本当に効果があるかを探索と確認の二段階で検証します。

v3.2.0では、GUI、X Window System、Wayland、Xvfbを必要としないheadless動作を正式にサポートしました。デスクトップLinuxだけでなく、SSHのみのLinuxサーバーやVPSでも利用できます。

推測ではなく実測でLinuxのネットワーク設定を見直したい方は、ぜひ試してみてください。

GitHub - ultrasukiyaki/tenyendama-linux-network-optimizer: A safety-first Linux network benchmarking and auto-tuning toolkit that compares TCP congestion control, qdiscs, and NIC settings, recommends the best profile, and provides verified rollback.
A safety-first Linux network benchmarking and auto-tuning toolkit that compares TCP congestion control, qdiscs, and NIC ...
Release Tenyendama Linux Network Optimizer v3.2.0 ?? ultrasukiyaki/tenyendama-linux-network-optimizer
v3.2.0 makes GUI-free Linux operation a tested product feature. The benchmark,check, and smoke test share one Playwright...

コメント

タイトルとURLをコピーしました
~