[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
## まとめ
## あとがき