[yuuki/connperf](https://github.com/yuuki/connperf)は [:contents] ## 概要 L2-L4のネットワークパケット転送やOSカーネル内のL4の終端処理の性能を計測する必要がある。 プロダクション環境ではなくより安全な隔離環境にて、性能を計測するためには、擬似的なネットワーク通信の負荷を生成しなければならない。 特に、最近では短命のコネクションがあるため、TCP/UDPのフロー数を厳密に指定する必要がある。 そこで、本記事では、TCP/UDPのフロー数とフロー生成レートを指定可能な負荷生成ツール [yuuki/connperf](https://github.com/yuuki/connperf)とそれらのフロー管理をGo言語で実現するテクニックを紹介する。 connperfはCLIのバイナリとして提供され、サーバまたはクライアントとして独立して動作する。 ## 使い方 ## 動作確認方法 ## 動機 ネットワーク通信負荷生成ツールとして定番のiPerfやNetPerfはこれに - iperf3 - netperf ### 著者の開発動機 ## 実装 ### 制御アルゴリズム - リーキーバケットアルゴリズム - [ratelimit package - go.uber.org/ratelimit - Go Packages](https://pkg.go.dev/go.uber.org/ratelimit#section-readme) - トークンバケットアルゴリズム - [rate package - golang.org/x/time/rate - Go Packages](https://pkg.go.dev/golang.org/x/time/rate) - うまくいかなかった。指定のレートに到達しない。 フロー数や新規作成レートが高くなると発生する問題とその解決。 - too many open files対策 - QuickAck - Linger - FastOpen ## まとめ ## あとがき