異數OS TCP協議棧測試(二)--短連線篇
異數OS TCP協議棧測試(二)--短連線篇
本文來自異數OS社群
github: https://github.com/yds086/HereticOS
異數OS社群QQ群: 652455784
異數OS-織夢師(訊息中介軟體)群: 476260389
測試目標
TCP 短連結IO效能測試,Client Server都採用單執行緒半雙工模式,Client發起連線,連線後傳送請求,接收Server迴應,收到Server迴應後,關閉連線,迴圈此ECHO流程。
基本測試環境
VMware 12
異數OS宿主作業系統
CPU : NUC i3 2.6G 雙核
記憶體:2GB
TCP重要引數如下:
1. bPassiveForceClose,該引數等於1表示被動強制關閉連線,被關閉方收到Fin時,不在繼續完成預設的Fin執行流程,而是傳送RST重置連結,快速關閉連線。
2. nMSLTimeOut,MSL一般為30秒,在測試ECHO類應用效能時會導致Client 資源出現洩露(一般設計正常的Server端不會),為了方便測試預設設定為0,表示主動發起關閉連結的一方不進入TIME WAIT狀態,直接進入CLOSED狀態,
3. 帶包頭
測試方案一 (單核快速關閉)
在同一個CPU核上建立一個Server,1個Client, bPassiveForceClose=1,以太層使用異數OS軟體交換機本地核定向轉發。
總計ECHO IOPS 為1.8M ,軟體交換機包交換能力26Mpps,由於Client佔用50%的負載,軟體交換機佔用20%負載,所以預計真實環境中最大可達到4.0M左右的ECHO能力。
測試方案二 (單核正常關閉)
在同一個CPU核上建立一個Server,1個Client, bPassiveForceClose
總計ECHO IOPS 為1.4M ,軟體交換機包交換能力25Mpps,由於Client佔用60%的負載,軟體交換機佔用10%負載,所以預計真實環境中最大可達到3.0M左右的ECHO能力。
測試方案三 (多核分載快速關閉)
雙核CPU,CPU1 僅建立Server, CPU3上建立1個Client,bPassiveForceClose=1,以太層使用異數OS軟體交換機定向跨核轉發。
總計ECHO IOPS 為1.9M ,軟體交換機包交換能力26Mpps,由於多核模式下軟體交換機會佔用50%以上負載,所以分載後效能甚至不如單核模式。
測試方案四 (多核分載正常關閉)
雙核CPU,CPU1 僅建立Server, CPU3上建立1個Client,bPassiveForceClose=0,以太層使用異數OS軟體交換機定向跨核轉發。
總計ECHO IOPS 為1.5M ,軟體交換機包交換能力26Mpps,相對快速關閉連線模式,在同樣包轉發能力下,效能下降25%左右。
總結
由於時間有限,簡單看了下1400位元組包的IO能力,效能大概降低有10%左右,由於軟體交換機在單核環境中大概有20%的負載佔用,多核更是達到50%,因此在真實硬體環境中預計每核有望達到4.0M的短連結能力,大概是主流作業系統IO能力的100倍左右,且主流作業系統一般IO能力不易多核擴充,下面是幾種主流系統的單核ECHO對比,資料來自官網以及第三方測試,可比性可能不高,但也可做參考估算。
異數OS TCP單核短連結 |
Seastar-Httpd短連結 |
F-Stack nginx 短連結 |
F-Stack nginx 長連結 |
Asio epoll長連線 |
Asio epoll短連結 |
400W |
32W |
9W |
20W |
14W(不可多核擴充) |
4W(不可多核擴充) |