evpp效能測試(1): 與muduo進行吞吐量測試
By zieckey
簡介
測試物件
測試環境
- Linux CentOS 6.2, 2.6.32-220.7.1.el6.x86_64
- Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz
- gcc version 4.8.2 20140120 (Red Hat 4.8.2-15) (GCC)
測試方法
簡單地說,ping pong 協議是客戶端和伺服器都實現 echo 協議。當 TCP 連線建立時,客戶端向伺服器傳送一些資料,伺服器會 echo 回這些資料,然後客戶端再 echo 回伺服器。這些資料就會像乒乓球一樣在客戶端和伺服器之間來回傳送,直到有一方斷開連線為止。這是用來測試吞吐量的常用辦法。
我們做了下面兩項測試:
- 單執行緒測試,測試併發連線數為 1/10/100/1000/10000 時,訊息大小分別為 4096 8192 81920 409600 時的吞吐量
- 多執行緒測試,併發連線數為 100 或 1000,伺服器和客戶端的執行緒數同時設為 2/3/4/6/8,ping pong 訊息的大小為 16k bytes。測試用的 shell 指令碼可從evpp的原始碼包中找到。
單執行緒測試結果資料
最終測試結論如下:
- 在吞吐量方面的效能總體來說,比較接近,各擅勝場
- 在單個訊息較大時(>81K),evpp比muduo整體上更快
- 在單個訊息不太大時,併發數小於1000時,evpp佔優
- 在單個訊息不太大時,併發數大於1000時,
測試中,單個訊息較大時,evpp比muduo整體上更快的結論,我們認為是與Buffer
類的設計實現有關。evpp的Buffer
類是自己人肉實現的記憶體管理,而muduo的Buffer
類的底層是用std::vector<char>
實現的,我們推測muduo的這個實現效能方面稍差。本次吞吐量測試中,主要的開銷是網路IO事件的觸發回撥和資料讀寫,當訊息size不太大時,網路IO的事件觸發耗費CPU更多;當訊息size較大時,資料的讀寫和拷貝佔用更多CPU。當然這只是一個推測,後面如果有時間或大家感興趣,可以自行驗證兩個庫的Buffer
類的操作效能。
這個測試結果進一步推斷,evbuffer
相關類和函式來讀寫網路資料,而是借鑑muduo和Golang實現了自己獨立的Buffer類來讀寫網路資料。
下面是具體的測試資料和圖表。
Name | Message Size | 1 connection | 10 connections | 100 connections | 1000 connections | 10000 connections |
---|---|---|---|---|---|---|
evpp | 4096 | 229.274 | 631.611 | 671.219 | 495.566 | 366.071 |
muduo | 4096 | 222.117 | 609.152 | 631.119 | 514.235 | 365.959 |
evpp | 8192 | 394.162 | 1079.67 | 1127.09 | 786.706 | 645.866 |
muduo | 8192 | 393.683 | 1064.43 | 1103.02 | 815.269 | 670.503 |
evpp | 81920 | 1565.22 | 2079.77 | 1464.16 | 1323.09 | 1297.18 |
muduo | 81920 | 1567.959 | 2180.467 | 1432.009 | 1267.181 | 1159.278 |
evpp | 409600 | 1950.79 | 2363.68 | 1528.97 | 1290.17 | 1039.96 |
muduo | 409600 | 1887.057 | 2213.813 | 1305.899 | 1131.383 | 1043.612 |
多執行緒測試結果
測試結論如下:
- 在多執行緒場景下,evpp和muduo兩個庫在吞吐量方面,的效能整體上來看沒有明顯區別,分階段分別領先
- 100併發連線比1000併發連線測試,兩個庫的吞吐量都明顯的高得多
- 在100併發連線測試下,隨著執行緒數的增長,吞吐量基本上是線性增長。muduo庫在中段領先於evpp,但在前期和後期又弱於evpp
- 在1000併發連線測試下,隨著執行緒數的增長,前期基本上是線性增長,後期增長乏力。muduo庫這方面表現尤其明顯
更多的效能測試報告
相關推薦
evpp效能測試(1): 與muduo進行吞吐量測試
By zieckey 簡介 測試物件 測試環境 Linux CentOS 6.2, 2.6.32-220.7.1.el6.x86_64 Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz gcc
evpp效能測試(2): 與Boost.Asio進行吞吐量對比測試
簡介 Boost.Asio是用於網路和低層IO程式設計的跨平臺C++庫,為開發者提供了C++環境下穩定的非同步程式設計模型。也是業內公認的優秀的C++網路庫代表。一般來講,其他的網路庫的效能如果不能與asio做一下全面的對比和評測,就不能令人信服。 本次測試
淺談JavaSE效能優化(1)——BufferedImage與畫素級渲染
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
jmeter介面效能測試(1)----簡單的介面測試入門
首先來看一下介面的資訊:host:http://api.jhled888.comuri: /cgi-bin/get.json 介面請求方式: GET 入參:appid: jhyjlhxa03q4f2qlmfappsecret:eb28066907b14310a9401c0586c840
Juint 單元測試(1)
cti path 語言 html size add 版本號 icon build Junit 是一個基於Java語言的回歸單元測試框架。是白盒測試的一種技術,記住這些就可以了。 為項目添加Junit 1 右鍵項目名稱選擇“Properties”,在彈
MongoDB---效能優化---(1)
MONGODB資料架構 升級解決.方案 問題發現 應用server突然湧入的使用者人數,造成server響應變慢 檢查server,發現每次響應速度極慢,為30ops 檢
C#效能優化(1)-- 使用泛型時避免裝箱
本想接著上一篇詳解泛型接著寫一篇使用泛型時需要注意的一個性能問題,但是後來想著不如將之前的詳解XX系列更正為現在的效能優化系列,記錄在工作時遇到的一些效能優化的經驗和技巧,如果有什麼不足,還請大家多多指出; 在使用集合時,通常為了防止裝箱操作而選擇List<T>、Dictionary&l
介面自動化測試(1)-認識requests
即使開始寫這篇部落格,我也沒完全明白介面自動化到底是何物,能自動化到什麼地步。買了一套相關課程,開始只是入門級,介面自動化測試後面應該會根據課程進度,把這系列部落格寫完。今天先寫入門。 環境:python3 環境準備好以後,安裝requests,cmd下輸入命令:pip
tomcat伺服器的效能優化(1)
由於公司的專案在高併發訪問的情況下出現了崩潰,而鑑於在做系統時對併發處理並沒有很完善,所以從tomcat伺服器的效能優化出發,進行了學習與研究,特總結如下: 一、概述 本文件主要介紹了Tomcat的效能調優的原理和方法。可作為公司技術人員為客戶Tomcat系統調優的技術指南,也可以提
快速乘—O(1)與O(log N)比較
如果兩個int相乘取模,相乘時可能會爆int,這時我們採用高一級的long long來計算。 如果兩個long long相乘取模,要用更高一級容納位數更多的手寫高精度來計算。為了簡便,人們發明了許多方法
mysql效能優化(1)慢查詢
1.查詢是否有開啟慢查詢 上面發現是OFF,說明沒有開啟。慢查詢日誌檔案儲存在/var/lib/mysql/master-slow.log(因為我主機名叫master),預設的慢查詢時間是10秒。 2.臨時開啟慢查詢 如果只是臨時開啟,下次重啟服務,就會失效,那麼執行下面兩條命
扒一扒資料驅動測試(DDT)與關鍵字驅動測試(KDT)
帶軟體功能測試專案的過程中,發現很多人對這兩個概念很困惑,並且試圖通過圈定KDT與DDT的各自邊界來分離它們,結果糾結成了一團麻線。我們從它們的名稱及說明來理一理。 KDT(Keyword-drive
六種白盒測試(1)
常用的軟體測試方法有兩大類:靜態測試方法和動態測試方法。其中軟體的靜態測試不要求在計算機上實際執行所測程式,主要以一些人工的模擬技術對軟體進行分析和測試;而軟體的動態測試是通過輸入一組預先按照一定的測試準則構造的例項資料來動態執行程式,而達到發現程式錯誤的過程。
自動駕駛模擬_CAT Vehicle測試(1)——虛擬機器上的ROS安裝
目前CAT Vehicle支援14.04 (Trusty Tahr) 和 ROS Indigo版本,並且在虛擬機器VMWare上執行。其他版本,會產生未知的錯誤,慎重選用! 一、Ubuntu 14.04 (Trusty Tahr) 1.1、安裝VMware
oracle裡面的count(1)與count(*)函式的執行效率比較。
count(1),其實就是計算一共有多少符合條件的行。 1並不是表示第一個欄位,而是表示一個固定值。 其實就可以想成表中有這麼一個欄位,這個欄位就是固定值1,count(1),就是計算一共有多少個1. 同理,count(2),也可以,得到的值完全一樣,count('x'),c
基於python語言的selenium自動化測試(1)-環境搭建
近期在寫爬蟲軟體時遇到的一些問題需要使用到selenium工具,在測試領域也同樣需要學習該工具,所以大概記錄下學習這款工具的使用以及一些問題及思考 selenium 是一個web的自動化測試工具,不少學習功能自動化的同學開始首選selenium ,相因為它相比
Python自動化測試(1)-自動化測試及基本技術手段概述
生產力概述 在如今以google為首的網際網路時代,軟體的開發和生產模式都已經發生了變化, 在《參與感》一書提到:某位從微軟出來的工程師很困惑,微軟在google還有facebook這些公司發展的時候,為何為感覺沒法有效還擊,核心問題就是軟體生產模式不一樣 [1] ,微軟當時的模式已經嚴重落伍了。 目
VS2010測試功能之旅:編碼的UI測試(1)
VS2010測試功能之旅 ——編碼的UI測試系列之一 RealZhao,2011年2月14日 前言 研究VS2010的自動化測試有一段時間了,在研究的過程中,發現網上的VS2010相關的測試資料十分稀少,這給學習帶來比較大的困難。幸運的是,自己因為常用QuickTest Professional做
開發者測試(3)-采用精準測試工具對springcloud微服務應用進行穿透測試
art windows 說明 出發 並且 rgs 依次 reg web目錄 1、微服務簡介 微服務英文名稱Microservice,Microservice架構模式就是將整個Web應用組織為一系列小的Web服務。這些小的Web服務可以獨立地編譯及部署,並通過各自暴露的A
用flask開發個人部落格(28)—— 利用unittest進行單元測試
下面分析下這個webapp的單元測試模組test,請先看下目前test下的檔案結構: 目前__init__.py檔案還是空,請檢視test_basic.py的程式碼: import unittest from flask impor