【发布时间】:2019-06-01 02:11:33
【问题描述】:
我一直在研究一个用 go 编写的 vpn,我开始尝试优化数据流。粗略一看,实现代码似乎是合理的,因为没有内存泄漏问题,而且 CPU 似乎不是一个限制。
所以我转向 pprof,我看到的问题是大部分执行时间都花在了 syscall.Syscall 中。我对正在运行的 iperf 吞吐量测试进行了 6 秒的配置文件,这就是我所看到的:
此测试在 docker 容器内的客户端和服务器上运行,客户端获取到服务器的 --link。在基础网桥网络上运行 iperf 会产生大约 40Gbit 的吞吐量,iperf 在这个 vpn impl 上运行在相同的顶部,净吞吐量约为 500Mbit。
一个简单的 htop 显示 3/4 的时间都花在了系统上。
我尝试了几种方法来尝试加速单客户端情况,但我似乎找不到减轻在 vpn 服务器中写入数据包的方法...注意:iperf 使用完整的 MTU 大小的数据包在测试期间限制了一些明显的优化。
列出系统调用:
不知道为什么这表明 CMPQ 一直在占用,我认为这应该归因于 SYSCALL。
【问题讨论】:
标签: sockets go optimization system-calls