源碼地址
GitHub:https://github.com/KonsanAlide/CXCommunicationFramework
性能測試
昨天有空,對性能做了一些測試,今天整理下,把一些參數和截圖發上來。
Windows服務端測試
在Windows上運行服務端,服務端的電腦參數如下:
系統:Windows 10
內存:16GB
CPU:i7 6700k (4核心)
網絡:1000M
Windows服務端接收連接測試
先測試接收連接併發數,如下面表格:
測試項 | 客戶端 | 服務端處理性能 |
測試每秒能處理的連接數 | 系統:Centos7 x64(虛擬機) 內存:2GB CPU:i7 7200k (2核心) 網絡:1000M 連接數:6萬 | 連接數:6397個/每秒 CPU:7%左右 內存:325MB
|
測試每秒能處理的連接數 | 系統:Windows 10 x64 內存:8GB CPU:i5 7200k (2核心) 網絡:1000M 連接數:6萬 | 連接數:10892個/每秒 CPU:7%左右 內存:49MB |
網上有朋友說Windows客戶端發起連接測試,速度比較慢,一般在3000到4000的併發左右,而用Linux客戶端發起的連接測試速度比較快,能達到15000左右,所以我都做了下測試,數據有些不同,大家大概知道下,自己回頭有需要可以測試下,截圖如下:
Windows客戶端發起的連接測試(運行Windows服務器)圖
windows服務端Linux客戶端連接測試圖
Windows服務端IOPS測試
客戶端的電腦參數如下:
系統:Windows 10 x64
內存:8GB
CPU:i5 7200k (2核心)
網絡:1000M
線程數:1000
幾種情況下測試結果如下表格:
測試項 | 服務端處理性能 |
以100bytes的包大小發送測試。 線程數目:1000 每連接連續發送10萬個包
| 以100字節的Buffer來接收 CPU:29%左右 內存:132MB IOPS:161859 |
以512bytes的包大小發送測試。 線程數目:1000 每連接連續發送10萬個包
| 以512字節的Buffer來接收 CPU:5.7%左右 內存:51MB IOPS:27000 |
以1024bytes的包大小發送測試。 線程數目:1000 每連接連續發送10萬個包
| 以1024字節的Buffer來接收 CPU:4.3%左右 內存:51MB IOPS:22000 |
以4096bytes的包大小發送測試。 線程數目:1000 每連接連續發送10萬個包
| 以4096字節的Buffer來接收 CPU:0.8%左右 內存:51MB IOPS:5500 |
100字節IO併發測試圖
4096字節IO併發測試圖
在IOCP機制裏面,WSARecv提交的Buffer的大小嚴重的影響IOPS,大家有空可以自己測試下,不過我的臺式電腦測試的結果可能有些問題,容易出現卡頓。
Linux服務端測試
在Linux上運行服務端,服務端的電腦參數如下:
系統:Centos7 x64(虛擬機)內存:6GB
CPU:i7 6700k (4核心)
網絡:1000M
Linux服務端接收連接測試
先測試接收連接併發數,如下面表格:
測試項 | 客戶端 | 服務端處理性能 |
測試每秒能處理的連接數 | 系統:Windows 10 x64 內存:8GB CPU:i5 7200k (2核心) 網絡:1000M | 連接數:11000個/每秒 CPU:20%左右 內存:40MB |
只測試了Windows客戶端發起的連接,截圖如下:
Linux服務端Windows客戶端連接測試圖
Linux服務端IOPS測試
客戶端的電腦參數如下:
系統:Windows 10 x64
內存:8GB
CPU:i5 7200k (2核心)
網絡:1000M
線程數:1000
兩種情況下測試結果如下表格:
測試項 | 服務端處理性能 |
以100bytes的包大小發送測試。 線程數目:1000 每連接連續發送10萬個包
| 以100字節的Buffer來接收 CPU:92%左右 內存:40MB IOPS:240000-430000 |
以4096bytes的包大小發送測試。 線程數目:1000 每連接連續發送10萬個包
| 以4096字節的Buffer來接收 CPU:20%左右 內存:40MB IOPS:24000-26000 |
100字節包併發測試圖
4096字節包併發測試圖
總結
從以上的數據中,在連接接收方面IOCP和epoll差別不大,但是在數據接收處理方面,差距有點大,Linux的epoll的明顯比IOCP的性能好很多,不過CPU用的有點高,IOPS的測試都是接收到包後直接扔掉,不放入後面的消息處理邏輯的。
不過因爲我的Windows系統是win10,和Server版系統有不少差別,這也可能是出現卡頓、性能低的原因之一。