簡體   English   中英

在Go中加快syscall

[英]Speeding up syscall in Go

我一直在研究用go編寫的vpn,並且我開始嘗試優化數據流。 粗略地看,實現代碼聽起來不錯,因為內存泄漏沒有問題,CPU似乎也不是約束。

所以我轉到了pprof,我看到的問題是大部分執行時間都花在了syscall.Syscall上。 我對正在運行的iperf吞吐量測試做了6秒的配置文件,這就是我看到的內容:

在此處輸入圖片說明

正在使用docker容器內的客戶端和服務器同時在docker容器內運行客戶端和服務器的測試。 在基礎網橋網絡上運行iperf可以產生大約40Gbit的吞吐量,而在該vpn隱喻之上的iperf可以達到大約500Mbit。

一個簡單的htop顯示系統中有3/4的時間被花費了。

我已經嘗試了幾種方法來加快單客戶端的速度,但是我似乎找不到一種減輕在vpn服務器中寫入數據包的方法...注意:iperf在測試過程中使用了完整MTU大小的數據包這限制了一些明顯的優化。

列出Syscall:

在此處輸入圖片說明

不知道為什么這表明CMPQ一直在花時間,我認為應該歸因於SYSCALL。

pprof是一個過程采樣分析器。 它發現在OS執行期間,程序計數器(PC)經常等待CMPQ執行。

在Go中加快syscall

您可以減少SYSCALL頻率。 您可以改善OS SYSCALL機制。 您可以改進要求SYSCALL執行的OS代碼。 您可以使用更好的硬件。 等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM