2025/06/08 21:19 tcpulse: A TCP/UDP load generator that provides fine-grained, flow-level control

ロボ子、今日はtcpulseについて話すぞ。Go言語製の高性能ロードジェネレーターじゃ。

tcpulseですか、博士。初めて聞きました。どのようなことができるんですか?

tcpulseは、サーバーとクライアントの2つのモードで動くのじゃ。サーバーモードではTCP/UDP接続を受け入れてデータをエコーバック、クライアントモードではターゲットサーバーに負荷をかけてパフォーマンスを測るぞ。

なるほど。負荷テストツールなのですね。具体的にどのような利点があるんですか?

負荷テストでサーバーの容量を検証したり、接続確立や持続的な接続のパフォーマンスを測ったり、TCPとUDPのパフォーマンスを比較したりできるぞ。ネットワークインフラの検証にも使えるのじゃ。

色々なことができるんですね!パフォーマンスの回帰テストにも使えるというのは便利ですね。

そうじゃろ?それに、tcpulseは永続的な接続と一時的な接続の2つの方法で動作するぞ。永続的な接続は長期間接続を維持して複数リクエストを送信、一時的な接続はリクエストごとに新しい接続を作るのじゃ。

接続方法も選べるんですね。主な機能は何ですか?

リアルタイムメトリックとして、レイテンシのパーセンタイル、スループット、接続数がわかるぞ。接続確立レートの制御や、複数のエンドポイントの同時テストもサポートしておる。

レイテンシのパーセンタイルが見れるのは便利ですね。90、95、99パーセンタイルが見れるんですか。

その通り!それにTCPとUDPをサポートし、Linux固有の最適化も活用しておる。JSON Lines出力もできるから、監視ツールとの連携も簡単じゃ。

監視ツールとの連携がしやすいのは良いですね。インストール方法はどうなっていますか?

GitHub Releasesからバイナリをダウンロードするか、Go 1.22以降とGitがあればソースからビルドできるぞ。

簡単ですね!

使い方の例としては、サーバーとして`tcpulse -s 127.0.0.1:9100`、クライアントとして`tcpulse -c --flavor ephemeral --rate 1000 --duration 15s 127.0.0.1:9100`のように実行するのじゃ。

なるほど。UDPクライアントとして実行する場合はどうすれば良いですか?

`tcpulse -c --proto udp --rate 1000 --duration 15s 127.0.0.1:9100`じゃ。簡単じゃろ?

はい!JSON Lines形式で出力する場合はどうすれば良いですか?

`tcpulse -c --jsonlines --rate 1000 --duration 10s 127.0.0.1:9100`じゃ。監視ツールとの連携に便利じゃぞ。

ありがとうございます!レポート形式についても教えてください。

標準出力形式とJSON Lines形式をサポートしておる。JSON Lines形式には、ピア、カウント、レイテンシ、レート、タイムスタンプなどのフィールドが含まれるぞ。

詳細な情報が出力されるんですね。ライセンスは何ですか?

Apache License 2.0じゃ。

tcpulse、色々な機能があって便利そうですね!今度、実際に使ってみます。

そうじゃな。ところでロボ子、tcpulseを使って負荷テストをしたら、ロボ子の処理速度が遅くなったという報告が…って、冗談じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。