tcp proxy 实验性零拷贝TCP代理的实现与优化
tcp代理实验性零拷贝tcp代理的用法:
- 执行以下命令编译和运行代理程序:
```
$ make
$ ./bin/tcp-proxy
```
- 示例运行命令:
```
$ ./bin/tcp-proxy 本地主机:8080 本地主机:8000
```
实现提示:
-
默认启动 nproc 个线程,每个线程运行独立的事件循环(使用 libev 实现)。
-
每个事件循环可通过 SO_REUSEPORT 选项创建套接字并独立接受连接。
-
接受连接的过程 malloc-free,仅在必要时进行少量重新分配。
-
通过 splice() 函数实现上游和下游之间的高效通信。
进一步的优化方向:
-
退避策略:优化从套接字读取时的等待时间,以提高资源利用率。
-
线程亲和性:利用 pthread 实现线程的 CPU/内存亲和性,提升性能。
-
IRQ 和接口亲和性:队列处理与 CPU 的亲和性设置优化中断处理效率。
-
SO_LINGER 支持:减少上游断开后的 TIME_WAIT 状态连接数量。
用户评论