CXCommunicationFramework 網絡通信框架實現(第三章)— 性能測試

源碼地址

      GitHub:https://github.com/KonsanAlide/CXCommunicationFramework

性能測試

      昨天有空,對性能做了一些測試,今天整理下,把一些參數和截圖發上來。

Windows服務端測試

      在Windows上運行服務端,服務端的電腦參數如下:

      系統:Windows 10
      內存:16GB
      CPU:i7 6700k (4核心)

      網絡:1000M

Windows服務端接收連接測試

      先測試接收連接併發數,如下面表格:

測試項

客戶端

服務端處理性能

測試每秒能處理的連接數

系統:Centos7 x64(虛擬機)

內存:2GB

CPUi7 7200k (2核心)

網絡:1000M

連接數:6

連接數:6397/每秒

CPU7%左右

內存:325MB

 

測試每秒能處理的連接數

系統:Windows 10 x64

內存:8GB

CPUi5 7200k (2核心)

網絡:1000M

連接數:6

連接數:10892/每秒

CPU7%左右

內存: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來接收

CPU29%左右

內存:132MB

IOPS161859

512bytes的包大小發送測試。

線程數目:1000

每連接連續發送10萬個包

 

512字節的Buffer來接收

CPU5.7%左右

內存:51MB

IOPS27000

1024bytes的包大小發送測試。

線程數目:1000

每連接連續發送10萬個包

 

1024字節的Buffer來接收

CPU4.3%左右

內存:51MB

IOPS22000

4096bytes的包大小發送測試。

線程數目:1000

每連接連續發送10萬個包

 

4096字節的Buffer來接收

CPU0.8%左右

內存:51MB

IOPS5500

        

                                                      100字節IO併發測試圖


                                                          4096字節IO併發測試圖

在IOCP機制裏面,WSARecv提交的Buffer的大小嚴重的影響IOPS,大家有空可以自己測試下,不過我的臺式電腦測試的結果可能有些問題,容易出現卡頓。

Linux服務端測試

      在Linux上運行服務端,服務端的電腦參數如下:

     系統:Centos7 x64(虛擬機)
     內存:6GB
     CPU:i7 6700k (4核心)
     網絡:1000M


Linux服務端接收連接測試

      先測試接收連接併發數,如下面表格:

測試項

客戶端

服務端處理性能

測試每秒能處理的連接數

系統:Windows 10 x64

內存:8GB

CPUi5 7200k (2核心)

網絡:1000M

連接數:11000/每秒

CPU20%左右

內存:40MB

 只測試了Windows客戶端發起的連接,截圖如下:


                                                Linux服務端Windows客戶端連接測試圖


Linux服務端IOPS測試

      客戶端的電腦參數如下:

      系統:Windows 10 x64
      內存:8GB
      CPU:i5 7200k (2核心)
      網絡:1000M
      線程數:1000

      兩種情況下測試結果如下表格:

      

測試項

服務端處理性能

100bytes的包大小發送測試。

線程數目:1000

每連接連續發送10萬個包

 

100字節的Buffer來接收

CPU92%左右

內存:40MB

IOPS240000-430000

4096bytes的包大小發送測試。

線程數目:1000

每連接連續發送10萬個包

 

4096字節的Buffer來接收

CPU20%左右

內存:40MB

IOPS24000-26000


                                                            100字節包併發測試圖


                                                                 4096字節包併發測試圖

       

總結

        從以上的數據中,在連接接收方面IOCP和epoll差別不大,但是在數據接收處理方面,差距有點大,Linux的epoll的明顯比IOCP的性能好很多,不過CPU用的有點高,IOPS的測試都是接收到包後直接扔掉,不放入後面的消息處理邏輯的。

        不過因爲我的Windows系統是win10,和Server版系統有不少差別,這也可能是出現卡頓、性能低的原因之一。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章