代码之家  ›  专栏  ›  技术社区  ›  joshperry

加速Go中的syscall

  •  -1
  • joshperry  · 技术社区  · 6 年前

    我一直在研究一个用go编写的vpn,我开始尝试优化数据流。粗略地看一下,实现代码看起来很好,因为内存泄漏没有问题,CPU似乎也不是一个约束。

    所以我转到了pprof,我看到的问题是大部分执行时间都花在syscall.syscall上。我对正在运行的iperf吞吐量测试进行了6秒的分析,这是我看到的:

    enter image description here

    这个测试在docker容器内的客户端和服务器上运行,客户端得到一个到服务器的--link。在基桥网络上运行iperf会产生大约40Gbit的吞吐量,在这个vpn上运行iperf也会产生同样的吞吐量,网络容量大约为500Mbit。

    一个简单的htop显示系统中花费了3/4的时间。

    我尝试了几种方法来加速单客户端的情况,但我似乎找不到减轻在vpn服务器中写入数据包的方法。。。注意:iperf在测试期间使用了完整的MTU大小的包,这限制了一些明显的优化。

    列出系统调用:

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  4
  •   peterSO    6 年前

    pprof 是进程采样探查器。它发现程序计数器(PC)经常在等待 CMPQ 在操作系统执行时执行。

    你可以做 SYSCALL 很少。你可以改进操作系统 机制。你可以改进你要求的操作系统代码 系统调用 执行。你可以用更好的硬件。等等。