From 6a6c22352ba8e1b24d34e5bd0916fc447c8efbde Mon Sep 17 00:00:00 2001 From: Josh Baker Date: Fri, 3 Nov 2017 17:14:09 -0700 Subject: [PATCH] ec2 benchmarks --- benchmarks/.gitignore | 3 +- benchmarks/README.md | 7 +++- benchmarks/out/echo.png | Bin 0 -> 13161 bytes benchmarks/out/echo.txt | 38 ++++++++++---------- benchmarks/out/http.png | Bin 0 -> 18354 bytes benchmarks/out/http.txt | 50 +++++++++++++-------------- benchmarks/out/redis1.txt | 41 ++++++++-------------- benchmarks/out/redis16.txt | 41 ++++++++-------------- benchmarks/out/redis8.txt | 41 ++++++++-------------- benchmarks/out/redis_pipeline_1.png | Bin 0 -> 15066 bytes benchmarks/out/redis_pipeline_16.png | Bin 0 -> 16634 bytes benchmarks/out/redis_pipeline_8.png | Bin 0 -> 16091 bytes 12 files changed, 92 insertions(+), 129 deletions(-) create mode 100644 benchmarks/out/echo.png create mode 100644 benchmarks/out/http.png create mode 100644 benchmarks/out/redis_pipeline_1.png create mode 100644 benchmarks/out/redis_pipeline_16.png create mode 100644 benchmarks/out/redis_pipeline_8.png diff --git a/benchmarks/.gitignore b/benchmarks/.gitignore index be7617f..ee98469 100644 --- a/benchmarks/.gitignore +++ b/benchmarks/.gitignore @@ -1,3 +1,2 @@ bin/ -socket -*.png \ No newline at end of file +socket \ No newline at end of file diff --git a/benchmarks/README.md b/benchmarks/README.md index be1b60b..c047dbb 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -6,16 +6,21 @@ Required tools: - [tcpkali](https://github.com/machinezone/tcpkali) for Echo - [Redis](http://redis.io) for Redis - Required Go packages: ``` go get gonum.org/v1/plot/... go get -u github.com/valyala/fasthttp go get -u github.com/kataras/iris +go get -u github.com/tidwall/redcon ``` And of course [Go](https://golang.org) is required. Run `bench.sh` for all benchmarks. +## Notes + +- The current results were run on an Ec2 c4.xlarge instance. +- The servers started in single-threaded mode (GOMAXPROC=1). +- Network clients connected over Ipv4 localhost. diff --git a/benchmarks/out/echo.png b/benchmarks/out/echo.png new file mode 100644 index 0000000000000000000000000000000000000000..4b00ff268897d42bbe32f7fca509c8d5096097d4 GIT binary patch literal 13161 zcmd6Oc{G-9+wP-DB{V1^p^PaNMF^E735g7uB{G-UV{AYu6d584Nybc>hfKllCI&wX9jc^>C+9Os$$4S8wmos2sP1Om0p z)yp>tgiUV=1Pa#eoA8^yZ7R(Kg1{-6%NLa$BE~u$HI;AmN=%84ZA$O;JVH@%F!h_Yhob9Flrzcu)2FFIr}@gNs`0V0vGH+JQ&S!v z6Jz7Fj0}M@XO5pdnHnE|&)8VK*j3C$`NoZ(HQ_?M$By~2NVqOc=~-P>R}YJci3tl+ zH#RnY@L>9rUTH)`govmpGz2muhQkt3u@Y#kqFNy9NeNJUm>Sojs|U>{gd- zt(I&1t%_GjvNAFBxCNC)L{4W_2#2rA5sr`pA(Zv9Ym5 zxOvBp9b30O!d}0o z87tf5p1qlZcB;t4!s5XG{r%LsN=iz&=o8Jz$T(y(c}-0%$5c;J@^M7OAxrPrSOZDP z()N_Igk8J0oG)3ftgW@EixlJI<16)|9dxSt@xySD)Q^K=uiE&U%1TbT*JRHOmzC)< ziB#X!cq6>81Kvo~ zZtR@xNKjGH+H)qMreD7#mWGb{L|=KvFx_e2ovfZQQ1WndO-;?+yLVMnG#zJJIprf5 zcJJ;%@agJK^;HDM#l?-cXZt>Vx~u5}g?sihkA8iMF8c=$9xN^{Ub%9GNF)}lj*gFy z>*?w3-Md#%P%u_@tv*KD+uM6)peDv%)Ow)0>7$aw%9Lb!>+jzO4jd3PYdOWs%S$X_ zCKUK1&!+jESEQAcGCqF%*v^b_F*7%p_B%8@Fkm+`Aa`>CXQCjns*E5~Qkn_TSzET(8?1fP z`{Oy&Y5i|sJ*e`<{&?@>%FN2@@9$?mbSNPq;i{gDjCXQ!@}ozOQc@=H3Nmb7rHf0W zskd(3dKDBDd_v$*OI%nu zteV(2F(F^6rK!oMm3LWDSy?%#uu#mabokGX4T$*j=Zj%RRb}P1e23}3TMLcwg9AWt zXAkn6JUMBX9D}bydLT(GBxLRE1a)pzRaGsHOy%(wosd{t=v`Y~&UZ=7%KG)|*I5yf zJRRN(%O5CoG&D@j%rtM`CeBZ235IvtdOdoy2^etJ^f%ps16bnH!a@KEE3-Zq(bs2y zB+N2xHZ(MR>2?r-+&EAZen(&b*s){3lhjM?KZgrhrfB8Q&D2RKC@2`EsmTT(XX}@j zmq(}{Ja{lNGIC;Kf|f-*mV2Zn?GE;KdH6$=>-y?EfJiP}aJ7_{iZCUfXFu7+;Z_#hmQwXoc;@)L8g3t@^KtiHVUuEF)zL1m3SL4o11U zx*8-u0g8EfdLq7Fzkc0S(eX)1$0;ej{3X`ZZr*%3*@q)9vK>`1 zGfN5%{{2qU3xObT=f|^;N*`|0^-oTA|NMDFP3@fBSPK@(#q}ZAdhoV}M)v2=pR=;w zoO|$SKBJh=rQ2tDeljE|NKHed*uv{qqUt(Qh)K|_N2?$$YNb)sVgLSD!;K$`^(X}d zG8ShB1Dl73hjDPgRTKv7QjD}eXFo6>@nJw|Zf>6UDJN$EHx?N6c0N3$t)>uxO^Pt`1}-f5h63X;0$8oq|^h1acIaOukzcY~Godm7Y$T`cqoGw#2)tg2MdS zyj^^GOn@|>tO2YHIjN(aW%4RJdp_+>SwdnWkB3ye&*mDRbia5|(QD6VpGMFfKRyNsHc-;m*8a0zURh~@ zI}k2DK0bYGCcq5j+VKOjs;c(&(NbIrk?h6WaA|I$(`l^bbkTQOodSmk!wv8It3pOc zM`;i88vqJ>%lx^-s8Ifa$oY2THbg3eLgLxQ?k}og;0bxTxy<6uInmKyTU!?aA>@!#t}6?Q zF;`v`^-6ltoX{?4>F!={crV+xc_$SWi--;4=<9pN zB;@A`#2UrsYVrvQ38|u<(p{60d45QkUqHb6$FqavNMT`NDtf+HA-ul;KmW+c$WTmq zE9zTQQt%SD{=Y)l&P?4OR5M8z5LaFcG z={3a4_#QYB%{`J)Cobwp>RVZy`PI|}!UASt(N)koE8kRCcM{(`{rCH(O`A{*gq`Nh z5X+AqT>^IsV3WM!fB3|aBiKR#&<3k)W_o)2)umYr-hFg*vH##nGKzG*-(O3(iF=iv z78IPDnQ8x|C#kI+`Q*u#ZnowWEwG5jrlv9CXT&HrXnASrrJPlUywloBZcq?D8qMu9 zfAV~4M@PrNfZ-8YG|vFZK! z>ajdG9xh-+Bc*s$+Ak?N`F(eCN{Y(OoBC;LN3T44Th(f2r=|7g<;%U3j(K7?KuS&D zJ$dpZGt&m>47jgYC2D9eb+>{=?*UvEudg{>z4{cSvm$&e)q#NXrY0sLKqdSxCg!M= zVxmg&%iv(Y=g(1P6ddbr;IoGg9b#l0>FK$k81&)8;ESWuSTPd$@uNou1_mpus}(ms zNc$gtv0XF6@Og3Z`Y3k}ozkKoH7hsm%WY_9|2m>QyWqJ9xvN9$HhJcp|3CFA`>jukT9Nl2GD>HQ!pG1A4 z=f>MZA|uy&zHGL(o7iJuJ(Hx(825aIgzR)e+7L>4PS3W|qVc!TKR;9z26A}wH-Abyf? z!Sa1vTzae7Qn1BDN3Ov$CMm_!r%$6G$Iicwjt7oHS7_$jJ)hhK90u^Ah9daPA&CM5 zHHuve!6LdX!1BQ$$c0JX-ZBaaMiv(G+NfE0TLhSG=b$ZxLge!!ZheaeckkAOo-Y0M z>(!ILOxTy|NU`O?C^woNJ3b~RirNhQ1m|F6VsaGKmQngL@+(mx;@m~Xy<4_y*|lpI zFk>GRlZLV~Vj$CIxS^R^zxn4+)?s-?We10xhY!D0g`BJ?ae8?fl(dg3;*9ZLW6QVP zl`Soy;*z&-qZWmGcx*Kmv@kKboojXX+O?ftrD>l&^)TOxi;0;zOzCWHe!}t4-#?{Z z78VvDBc}xfV!B_weA&>@kVl+7w&?LHAm9R}vyIJ};e9)4X@yRoX4BD!zB4uDZDnI) zdw5=)e$SqFF);!*LpS#C-wy%-U}!iP7#w^hY8)qTkkP8iH;-yMG#5pWD$RQIs3e%F zl$3`V^8BTrRC?DsBF}MB0oCbmZ|`C)D>pX-J^hE2lp=>|ef~3VR&I?E*}9lMfSS(5 z5|@^i$fiiRXU}#OF+;f=Pc3t@6#UUG< zbUW*sy80rxE&%g2P~p?3Q;s2}fAD*g&OF;cfBqQ63g%AMRabYQ>V=-ZgFCbDl+lQZ z6*fO-=^M{1e9(Kv&hB&V`sq`rbko%OMBPg19mdqL#L{I^xCXq)w=(e`{?O=H>N`=BA?Z1>W4C%L23%O>X zr}uz7R9}b6&*G*eZ)D zpXTQ5czF|3W*na#6c~WuCmTXBDI`d%dPc{W`LnoT&z(iD0_vVVouc;ToF6h1Z2$h< zBQ@d~sXg10rPFCOn{NMpA@eq66%`fK{aVtP<~zpEwb|-VDjnwX(H=dFoq7uC>z5nBdal#F1)@K_)Mr2M@#DvlCC)A`6-Pt+F6HLt z3R!gAGd0afPd}o?Lm*7DHYmG}{yx$0JM`5nsclac>F%QBj*f;021?H9WweHcg^_h_ zZ^Os{TI18GC545BIH{y0Geg6;loUSi3rm+m__RjG#@Jm-Eg1sqcu$;oex|s&xmkip zjyHWA9}o}#65DJz2sw)o0q^VjilR$P>z`p%SNldZ+pC*4q)NyM?&o&k&?2uZniv^nLx_F;EZCsy3ngzd*@hI2i@dy}Ki^3jWaQ+8))<-^8$UlRwgfT~_~M0nx`7P10j|o} zZ(Ce%NL@27@ppP}>iFQn=`at^Y`18xGSHr&^SQO7fFGOYpwQ6JajOT71sW((q zf+rRz2@XbpNPmXYU+d~7+bxTk`3>b^}+=XaFFaupO%Gc2LRuU)$aCTL=A-k<;A zh-8^j&Fd_^(rsK^TzmGs2ng7X=;SxB9BWC#5tUa}F$owxgNJ2mn&{Ar45C~jj-Qra`Jv$4Pxqr`| zT<1l8Eekz8HeTNFpdjcYNzPK9$Uul zhzMttNT@GR%bfgtsLSHfAz}VMEf7`6bjkz1ca4o52dWQ}o`i;ksG680D#xgEG#TKIy%r#D=RA& zl*bibpW)%>e_3NV^Z7i$D5zRW($vC&vrY`I%yjVjbQud2H|UzIoE%5CQCjK^y8SFH zCwX`dGBD&A)-ZyTBj6Eyn<;4m7!T0VfwOD6c!-B*W|EWCGeC~9=YEI9M#jhG6q^9t z)>c*v6C`iFQqPKtiu&-IH*a!qaKOj&4G-5)QVK+QcW_uhQQ-D@Eo2!P6x4)>0hiXd zuvqK$mw5S*3{M4Go7|IsvS=YXFOLY`g_H(Z0^i6TN#KLDhtL0PY#g1IcrLDA_{Xcg z_@EEN2Wawz z_yq_>jab@`{`p9By$W~>4pzBvp(No}BGI<3YeceUxtE&+#`-cWtQD>n&TGrot@&NP zR_6{CeIP*qYbNH435c7>%IGi&F3CQlFrZ;3k(yW&_} zmggYQr{9Z8DcWv2;olxL_wHrtI=HYP7Pj(NEdK;ZW;cjYDMghx<&BzF>>L-cYNW%(lhvXwXi{jdF<|YFk zdfQ!+ldI|Md}H7F>u_7ngF6lm4)XFe-f4b*esFIqDl0{Vg^_ZN85QZRW8c1gi;w5V z_c}Q_k&+mb;X1fhPThN^2Y zvW%~{v$G==&B7V76Rl0Lgtcj6VDL>t-_kNQHMQ8h{d0<_b#4a)G@iR{%a(%Vodpz| z4ikEGMi!=fo$Ef$UWSy`)z!UzeV5EU;#kV}K>xr%E%;?cg?ASui^bO`J5X;Sw9cRJ zC@nq8&ixx5q%dW8FaBx1gw<_g*7aCf%l&+uIk45a(VfYc)8L~*xaZoy`42>WnPz;;Svwu?EulY8*h7`oV@yl zlEry-wwb(X(Ajl)JR9EL8&Uh0a(a4yK+4?R-BU(0Y9fSZ{(ko*pZfyldk!9Uk|IAU zEC_1KOfyNw;cl59vq45tQDo|iVhu{#!`OYU@fr3WC#xV}CrsK*vsQjEK3uv%cS}WO zu12Vvo0pe~k@2vo-Ls|$l;~4u&w{3>XJ`9+d+VjCk++Bfg9Zi$V$FL|6AXMJAN2k> zp_P}Jn;SMZQ%WoG?fdr^Jf2JY5lZemYNI3ot7K5>u6%pTFORlDJacrGz-ypCshyOV zcr^d4kWiGcwPyzj048|mOhEp1Ev?S@_;^rNpf(E71zA~Ndwu8IL}DI@B0#0}&{-3@ z&feOxwzk*yoQ*J3K_)i}FGp>+xO7>+70Q&5W!LrF&EQ`ew{Jtw96s-G|L?aQUGG&L ze>FE-wx-`*Ut1;HY+~;LKDaIR)APHhX&{B+;W)wBR8wmKwT6y{)J1a&Y5}IB)7+SP zURLi0h!0ew$CK|gKLN|2{N{0T?>9%Oy2F%cP?ZP5w&GXfC+eg>lCGW}QTnu>}K zhJL<77y@6!T$ax0D9oWr29td_%%(yS+YKWHOl^94dU2uG9|c?5)o5xjs0OGf#G0{S z@%=xKpoa0R@#IN>7-Sn9 z#xL0m;1#iuzs$kt4nl!xg+xqhluWi~*EKc@oIBT2S()JFmHGLzMMqA3b90F6Z~4oY z4Nw#|+G4P>Z{KbM24c6qW&f3zk*UBk3SiUbU6zu%i@PAi;C;gNMC3q@vY7_j-Mx43 zs=bewmltT@-!c|Ab{#`-46r)&tKvL7-uB*VU2Np$R2|iuHyeKcj^j3&8-wOlm6qmW zWo6~ykWx{xgB4DW-0nai481^2Mh5}eyt3Zd(C~L);K~6(TWf2`qeQgUl9QkN_>AO5 zw87Y1Y^w$v&re~mGR%k)ce$22vzUGEP%W6hpn03k?8vR62L#Ild-f=*t5-NZ1u0mX z9j!>3q?7uXkie&&-iKm@Qb86spuU+taQGbrt?Me0n9L970%mHF#iAp+C`+@e%kwZf zFS>Di?OIZ{wi zFsO62`>i($M4^yL6E|`W9x^nHy-SF;oz#sRH!fX@HZ9Hf@c8~-Hbg{3WN26&Scf)S zO?LR(w{LxXDo1~G+h&=yrb9zD#C0b62S!FB{$%FK`^bB~+8et+}cH`$R}>ZC||RMoFt?7Hg3;`+9m@vKSEIxmVmA|1=ZQe$7d zg{3q4ddZS`0`(!Zq_%bfrytu)i_LG(FrsaRCbYG)^TUf!QNefDZdU(^9xi-ukmK?V zi3uK+JsJl2i{8y#toR3oC>k0XKX32h(r@Nq5AZt*I1G#r#C`FE|i>q z*cKRpP(#qBFCw%}n^PQ##5MD+fNt!?(8Y~|Kqu09!yw!SkNWTZbA8Q{`uay&2VsMu z%Mdf!X-S#KnPeb;t`8YJd&wRk>{?iShAMwLfM=P&ZK2 zk<6eL$ZGg_Hxw1w0(Xg=J9kKosH~yk)K%b!RYjiC+a%0>?3l^lZ{Fm~PXNLKMzz)D z@Df@xjG%F3X+NLj<{oPEBmLgs0ihRkbk;%n>g(%)5R z=Rfq*qGMtp^I-#nBBRAOwB{fVTfXnjQH9Hw*#UcR-}WG|Hv&V@?Ed}xteq5S6(gKM zU<$!+(HMlAE)#jr4b95Qvb4<1Xa4>QP&M-Mhaobt6T_{R&|Dj~9#<*bHxKq$sr9uN ztC6L|sZRVyD10>Avo0pS*tbtGyhccLtXKuF3p)kJ+g$q5C|5HDDLYgj^Z4=O<$Q~w z$CLzj?Q{2gE}(xldRXwWkSI70C`XaY^0uDa|A4lw7@8<4DM7iJ5|5rs1xCch#x|95 z*rV9e96q0e4%k!y8}>jid)uXrcJ-;VE&9J$_^H|Cev{|M^GuGLG#m;2jwqg?JvW!T1BJ z^2Ovm1j5Du%K8x=o?$f7EydBNBK222zI_yjP$XHhE`?)6hr(Xz#*O{_tzR$Xzs>D9TR7T3Zp(rWGvBh9>o3zHbb3H4Xf>UUtH#s z<=MT2pS<^?|J|F|vP>Z$*4EbgX3?GmV!|Rgdh{seXA2zVPwCG2F96A1EaDN-@u)El zPEMeV=yYS4COaYFnx>|63GWWvS=cC70ynHX*P4ri!y`H#p6=GI9vDMHBMQHH9~%oB zhW3gW!uKtGo^kYsLx8e`DI+Px;`OzB-p2G1ONW3fpa?dQ0-0VFXx zA~M&n+gMp0=?9U7JZ6|;M1)>QwQan7^7wHKSR{Y^$aCaKbV33~jARs>;3k1O-qqDT z#qbIz;NCUt8qjH3ylRII97r;J4sal!Xbcnq-qHG^Eb!b|vgtbY0(!({KYp~ev^--L z-H`Q*`1@B+)KP!Et(M_CzA z90MVOdW4#f8KAJxP_wp79_&$#A+5JMZZ3qKS~+*s|&0y{n;`Y1d~aU049+!mz#gZvxRcubSjm#AP2jIb0Pu1H1$1(#s; zV7kfX-6F3+q$r8|&66kJN>uja9%4ecdtGfU#%Nq;^f0Sc0b;zItb!|3{xDi=MQNX7sxFkcUvHsyZ8ua59pS* zsw!-*Y7I4vwM0ZDB_xRa+vPZKltfo36Qm$YBy2#`M_4-`sn}ky^?!?+iKxfjaN3KD zC8QK7X$~!5It*nOde|DaW06)b3P0+P(3vyna}>BN3-UN4B3_?0ty{`=YCgQ8Aben>Rmx#jE-`Gc({TNI9G`Nl8fzDa6LI69*CQw=uMa zBks(5Rr-gVyoT+Zd^52bFD?!SeExg^!UlpLme#3L_t7$T$@eTQT-|UY#@lSs!ltJW z`TbkPCmLi@|IQsq9}(1I{BmW**(Vw*OYHo4_@JMmF|dMEjcmV3W!O7lUSMX}@gm2W zxcq!k9(408w6(iXz>wSEZD{^;`ydlF3W-^dAD6aenZi*=y_zff#X6XUbxpBpcC;DYW;`6O0!AZ12GHk7 z(J7wj?ahGOOFCLwRpmQr2A+t4GT6cBi$jFt$Taz~F=@oc_6J}CDhZhjV+;Hh90Iyw z9pekCm}^iBLc?2Ew+EunQ9=v0&}hQy!t|Z%#fa|7)QQb&FvKu@1K<7-%^+qPfXjFQ zM!wjIP8>Wu6(uD-SUcKq7->Lk7#O#q<4r7&jEgh8efu^13P_(vTd9V=Vv^>JpdiKq z>WxtL8h`)hOa-gxgaCt{{fFoh#xzk^Ms8kS-23<7we=qOQZvEui%Oj9%{{AuC32AAH^74M)^{LS$;2X5c z1-(Oer@&}*?gEWhV-`B_%CNfmHhe%!%Rx~lguRljK=}kX z3`|UTX*xQ(pUVLmaH!4~5|dn+sc#e***BFqd7F58Fg!y9eP`YdRe zn2bP9ai2UXVbO68`kh43#;&QT9B>g_dXWp0y#}($mwUw@R!->k%ghjAT4`@C96Pdel(_^i8^3m;qvB1P&To zSctnU*({mCJb-V@g!xc33Wp!ggIyM5=uAVS9UTCNldIX~tfItcY$Z;~M}=qmA0AyL z?(hqpvhWvQa~TpAGG{p<+__e?lORBTui?_u+TK11M}U<+U9x0zASlk7M_yD#3Qo~f z526nK-%|0l&X!^~iQtc0!6Ag#-2MIhFaq`}I2i6(!Tmp*v|tEVAbAG+`>7qMc^W7s zxSMgSgTksp31)#X5HpGrf!E!=Z{G}wlmKXnkH>)D%+yqV~Q8x+2$b6$eN4U+Lo z;s$FgIQ!qnO8?V};mNlAO_M$&BPJ-W#0(4=%E%c1i$iZ;D8{rs(7quYgbgf>rHK*C zB{Of>hW`~^^dI>2fBMb;ck1iE?OS$G+imUI4^+k+2-y%b8DIyLSyynvE?(~Iz7Wu$ zp~D-#I9MsI$#Yy-qM=w1!EjAWTiZW2GuyKJ@V_>5>Axs4|J#=N|5P>o^OQG&ZIzdU zqrW;#0FVq1Wn)@HS9L=nxu0635kGtO7hLqxKMV{E&ePxNF D6yovl literal 0 HcmV?d00001 diff --git a/benchmarks/out/echo.txt b/benchmarks/out/echo.txt index af3a6b3..8d9c473 100644 --- a/benchmarks/out/echo.txt +++ b/benchmarks/out/echo.txt @@ -2,35 +2,33 @@ --- BENCH ECHO START --- --- GO STDLIB --- -2017/11/03 16:37:10 echo server started on port 5001 +2017/11/04 00:06:31 echo server started on port 5001 *** 50 connections, 10 seconds, 6 byte packets Destination: [127.0.0.1]:5001 -Interface lo0 address [127.0.0.1]:0 -Interface lo0 address [127.94.0.1]:0 -Using interface lo0 to connect to [127.0.0.1]:5001 +Interface lo address [127.0.0.1]:0 +Using interface lo to connect to [127.0.0.1]:5001 Ramped up to 50 connections. -Total data sent: 6131.1 MiB (6428962876 bytes) -Total data received: 6132.4 MiB (6430294582 bytes) -Bandwidth per channel: 205.668⇅ Mbps (25708.5 kBps) -Aggregate bandwidth: 5142.242↓, 5141.177↑ Mbps -Packet rate estimate: 472952.1↓, 446187.4↑ (6↓, 12↑ TCP MSS/op) -Test duration: 10.0039 s. +Total data sent: 9409.8 MiB (9866903552 bytes) +Total data received: 9165.8 MiB (9611005954 bytes) +Bandwidth per channel: 311.589⇅ Mbps (38948.6 kBps) +Aggregate bandwidth: 7687.378↓, 7892.059↑ Mbps +Packet rate estimate: 721925.3↓, 677380.8↑ (6↓, 45↑ TCP MSS/op) +Test duration: 10.0019 s. --- DONE --- --- EVIO --- -2017/11/03 16:37:21 echo server started on port 5002 +2017/11/04 00:06:43 echo server started on port 5002 *** 50 connections, 10 seconds, 6 byte packets Destination: [127.0.0.1]:5002 -Interface lo0 address [127.0.0.1]:0 -Interface lo0 address [127.94.0.1]:0 -Using interface lo0 to connect to [127.0.0.1]:5002 +Interface lo address [127.0.0.1]:0 +Using interface lo to connect to [127.0.0.1]:5002 Ramped up to 50 connections. -Total data sent: 17129.1 MiB (17961204524 bytes) -Total data received: 17117.6 MiB (17949094958 bytes) -Bandwidth per channel: 574.050⇅ Mbps (71756.2 kBps) -Aggregate bandwidth: 14346.408↓, 14356.087↑ Mbps -Packet rate estimate: 1333916.3↓, 1238381.2↑ (12↓, 24↑ TCP MSS/op) -Test duration: 10.009 s. +Total data sent: 15867.3 MiB (16638083072 bytes) +Total data received: 15855.5 MiB (16625705220 bytes) +Bandwidth per channel: 532.133⇅ Mbps (66516.6 kBps) +Aggregate bandwidth: 13298.362↓, 13308.263↑ Mbps +Packet rate estimate: 1217575.2↓, 1142257.4↑ (12↓, 45↑ TCP MSS/op) +Test duration: 10.0017 s. --- DONE --- --- BENCH ECHO DONE --- diff --git a/benchmarks/out/http.png b/benchmarks/out/http.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd7ae3e3a28a853d990a6c7346680355dff0bed GIT binary patch literal 18354 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 literal 0 HcmV?d00001 diff --git a/benchmarks/out/http.txt b/benchmarks/out/http.txt index 7605ce1..8ab91c7 100644 --- a/benchmarks/out/http.txt +++ b/benchmarks/out/http.txt @@ -2,57 +2,57 @@ --- BENCH HTTP START --- --- GO STDLIB --- -2017/11/03 16:36:23 http server started on port 8081 +2017/11/04 00:05:45 http server started on port 8081 *** 50 connections, 10 seconds Running 10s test @ http://127.0.0.1:8081 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev - Latency 702.61us 289.11us 4.36ms 65.96% - Req/Sec 71.71k 4.47k 75.96k 91.09% - 719868 requests in 10.10s, 89.93MB read -Requests/sec: 71263.20 -Transfer/sec: 8.90MB + Latency 1.20ms 676.37us 4.51ms 59.55% + Req/Sec 42.00k 2.95k 43.23k 96.04% + 422031 requests in 10.10s, 52.72MB read +Requests/sec: 41786.07 +Transfer/sec: 5.22MB --- DONE --- --- IRIS --- Now listening on: http://localhost:8082 -Application started. Press CMD+C to shut down. -2017/11/03 16:36:35 http server started on port 8082 +Application started. Press CTRL+C to shut down. +2017/11/04 00:05:57 http server started on port 8082 *** 50 connections, 10 seconds Running 10s test @ http://127.0.0.1:8082 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev - Latency 0.86ms 556.33us 5.49ms 89.37% - Req/Sec 62.49k 2.32k 67.04k 67.33% - 627701 requests in 10.10s, 78.42MB read -Requests/sec: 62138.33 -Transfer/sec: 7.76MB + Latency 1.22ms 751.36us 4.69ms 65.91% + Req/Sec 42.23k 553.92 43.22k 68.00% + 420122 requests in 10.00s, 52.49MB read +Requests/sec: 42009.70 +Transfer/sec: 5.25MB --- DONE --- --- FASTHTTP --- -2017/11/03 16:36:47 http server started on port 8083 +2017/11/04 00:06:09 http server started on port 8083 *** 50 connections, 10 seconds Running 10s test @ http://127.0.0.1:8083 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev - Latency 442.36us 128.03us 4.22ms 81.00% - Req/Sec 110.18k 12.49k 135.57k 63.00% - 1095146 requests in 10.00s, 155.62MB read -Requests/sec: 109505.28 -Transfer/sec: 15.56MB + Latency 303.56us 174.00us 2.04ms 64.86% + Req/Sec 167.97k 29.11k 186.31k 77.00% + 1670611 requests in 10.00s, 237.39MB read +Requests/sec: 167050.74 +Transfer/sec: 23.74MB --- DONE --- --- EVIO --- -2017/11/03 16:36:58 http server started on port 8084 +2017/11/04 00:06:20 http server started on port 8084 *** 50 connections, 10 seconds Running 10s test @ http://127.0.0.1:8084 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev - Latency 429.45us 239.79us 9.92ms 95.43% - Req/Sec 113.16k 16.86k 128.84k 85.15% - 1136765 requests in 10.10s, 112.75MB read -Requests/sec: 112542.41 -Transfer/sec: 11.16MB + Latency 119.48us 36.20us 613.00us 87.72% + Req/Sec 227.28k 1.21k 229.55k 51.00% + 2260225 requests in 10.00s, 224.17MB read +Requests/sec: 226013.08 +Transfer/sec: 22.42MB --- DONE --- --- BENCH HTTP DONE --- diff --git a/benchmarks/out/redis1.txt b/benchmarks/out/redis1.txt index 03ffbbf..947aa38 100644 --- a/benchmarks/out/redis1.txt +++ b/benchmarks/out/redis1.txt @@ -2,39 +2,26 @@ --- BENCH REDIS PIPELINE 1 START --- --- REAL REDIS --- -6747:M 03 Nov 16:37:33.512 # You requested maxclients of 10000 requiring at least 10032 max file descriptors. -6747:M 03 Nov 16:37:33.513 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted. -6747:M 03 Nov 16:37:33.513 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'. - _._ - _.-``__ ''-._ - _.-`` `. `_. ''-._ Redis 3.2.8 (db8a945c/0) 64 bit - .-`` .-```. ```\/ _.,_ ''-._ - ( ' , .-` | `, ) Running in standalone mode - |`-._`-...-` __...-.``-._|'` _.-'| Port: 6392 - | `-._ `._ / _.-' | PID: 6747 - `-._ `-._ `-./ _.-' _.-' - |`-._`-._ `-.__.-' _.-'_.-'| - | `-._`-._ _.-'_.-' | http://redis.io - `-._ `-._`-.__.-'_.-' _.-' - |`-._`-._ `-.__.-' _.-'_.-'| - | `-._`-._ _.-'_.-' | - `-._ `-._`-.__.-'_.-' _.-' - `-._ `-.__.-' _.-' - `-._ _.-' - `-.__.-' - -6747:M 03 Nov 16:37:33.517 # Server started, Redis version 3.2.8 -6747:M 03 Nov 16:37:33.517 * The server is now ready to accept connections on port 6392 +15719:C 04 Nov 00:09:50.971 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo +15719:C 04 Nov 00:09:50.971 # Redis version=4.0.2, bits=64, commit=00000000, modified=0, pid=15719, just started +15719:C 04 Nov 00:09:50.971 # Configuration loaded +15719:M 04 Nov 00:09:50.972 * Increased maximum number of open files to 10032 (it was originally set to 1024). +15719:M 04 Nov 00:09:50.973 * Running mode=standalone, port=6392. +15719:M 04 Nov 00:09:50.973 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. +15719:M 04 Nov 00:09:50.973 # Server initialized +15719:M 04 Nov 00:09:50.973 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. +15719:M 04 Nov 00:09:50.973 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. +15719:M 04 Nov 00:09:50.973 * Ready to accept connections *** 50 connections, 1000000 commands, 1 commands pipeline -PING_INLINE: nan PING_INLINE: 116748.00 PING_INLINE: 115610.00 PING_INLINE: 117642.66 PING_INLINE: 116757.00 PING_INLINE: 116677.60 PING_INLINE: 113024.00 PING_INLINE: 108711.43 PING_INLINE: 108675.50 PING_INLINE: 108400.00 PING_INLINE: 108595.60 PING_INLINE: 107780.00 PING_INLINE: 106948.00 PING_INLINE: 106824.00 PING_INLINE: 107366.86 PING_INLINE: 107696.80 PING_INLINE: 108491.25 PING_INLINE: 108696.70 PING_INLINE: 108963.34 PING_INLINE: 108477.48 PING_INLINE: 108640.60 PING_INLINE: 108876.38 PING_INLINE: 108609.45 PING_INLINE: 108716.87 PING_INLINE: 108792.66 PING_INLINE: 109248.96 PING_INLINE: 108861.84 PING_INLINE: 108772.00 PING_INLINE: 108676.86 PING_INLINE: 108918.62 PING_INLINE: 108609.73 PING_INLINE: 108516.77 PING_INLINE: 108829.38 PING_INLINE: 108837.09 PING_INLINE: 108793.41 PING_INLINE: 108612.57 PING_INLINE: 108665.45 PING_INLINE: 108896.88 requests per second +PING_INLINE: 0.00 PING_INLINE: 127231.09 PING_INLINE: 128309.38 PING_INLINE: 128535.29 PING_INLINE: 138613.38 PING_INLINE: 146055.95 PING_INLINE: 151113.92 PING_INLINE: 154639.62 PING_INLINE: 157245.88 PING_INLINE: 159290.55 PING_INLINE: 160986.81 PING_INLINE: 162353.69 PING_INLINE: 163625.12 PING_INLINE: 164611.81 PING_INLINE: 165530.70 PING_INLINE: 166273.53 PING_INLINE: 166944.02 PING_INLINE: 167518.00 PING_INLINE: 168095.98 PING_INLINE: 168532.52 PING_INLINE: 169000.80 PING_INLINE: 169338.98 PING_INLINE: 169724.23 PING_INLINE: 170033.73 PING_INLINE: 170241.73 requests per second --- DONE --- --- EVIO REDIS CLONE --- -2017/11/03 16:37:44 redis server started on port 6393 -2017/11/03 16:37:44 redis server started at socket +2017/11/04 00:09:58 redis server started on port 6393 +2017/11/04 00:09:58 redis server started at socket *** 50 connections, 1000000 commands, 1 commands pipeline -PING_INLINE: nan PING_INLINE: 117884.00 PING_INLINE: 124196.00 PING_INLINE: 119600.00 PING_INLINE: 118939.00 PING_INLINE: 119103.20 PING_INLINE: 119974.00 PING_INLINE: 120057.14 PING_INLINE: 118809.00 PING_INLINE: 119033.78 PING_INLINE: 119271.20 PING_INLINE: 119127.63 PING_INLINE: 118825.34 PING_INLINE: 119002.46 PING_INLINE: 116569.71 PING_INLINE: 116007.73 PING_INLINE: 115611.50 PING_INLINE: 116035.30 PING_INLINE: 116481.78 PING_INLINE: 116205.90 PING_INLINE: 116413.40 PING_INLINE: 116566.29 PING_INLINE: 116745.82 PING_INLINE: 116752.35 PING_INLINE: 116467.66 PING_INLINE: 116484.80 PING_INLINE: 116683.38 PING_INLINE: 116669.93 PING_INLINE: 116619.29 PING_INLINE: 116578.90 PING_INLINE: 116875.60 PING_INLINE: 116605.42 PING_INLINE: 116377.88 PING_INLINE: 115540.48 PING_INLINE: 114599.41 PING_INLINE: 114117.14 PING_INLINE: 114090.12 requests per second +PING_INLINE: 0.00 PING_INLINE: 166804.80 PING_INLINE: 171942.12 PING_INLINE: 173320.91 PING_INLINE: 174023.97 PING_INLINE: 174624.30 PING_INLINE: 175023.98 PING_INLINE: 175253.56 PING_INLINE: 175374.31 PING_INLINE: 175518.89 PING_INLINE: 175424.64 PING_INLINE: 175532.53 PING_INLINE: 175496.17 PING_INLINE: 175522.61 PING_INLINE: 175594.97 PING_INLINE: 175592.38 PING_INLINE: 175558.36 PING_INLINE: 175556.11 PING_INLINE: 175517.89 PING_INLINE: 175528.52 PING_INLINE: 175507.70 PING_INLINE: 175480.30 PING_INLINE: 175471.00 PING_INLINE: 175438.61 requests per second --- DONE --- diff --git a/benchmarks/out/redis16.txt b/benchmarks/out/redis16.txt index 51fbb29..7ccd34e 100644 --- a/benchmarks/out/redis16.txt +++ b/benchmarks/out/redis16.txt @@ -2,39 +2,26 @@ --- BENCH REDIS PIPELINE 16 START --- --- REAL REDIS --- -6857:M 03 Nov 16:37:59.270 # You requested maxclients of 10000 requiring at least 10032 max file descriptors. -6857:M 03 Nov 16:37:59.270 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted. -6857:M 03 Nov 16:37:59.270 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'. - _._ - _.-``__ ''-._ - _.-`` `. `_. ''-._ Redis 3.2.8 (db8a945c/0) 64 bit - .-`` .-```. ```\/ _.,_ ''-._ - ( ' , .-` | `, ) Running in standalone mode - |`-._`-...-` __...-.``-._|'` _.-'| Port: 6392 - | `-._ `._ / _.-' | PID: 6857 - `-._ `-._ `-./ _.-' _.-' - |`-._`-._ `-.__.-' _.-'_.-'| - | `-._`-._ _.-'_.-' | http://redis.io - `-._ `-._`-.__.-'_.-' _.-' - |`-._`-._ `-.__.-' _.-'_.-'| - | `-._`-._ _.-'_.-' | - `-._ `-._`-.__.-'_.-' _.-' - `-._ `-.__.-' _.-' - `-._ _.-' - `-.__.-' - -6857:M 03 Nov 16:37:59.271 # Server started, Redis version 3.2.8 -6857:M 03 Nov 16:37:59.271 * The server is now ready to accept connections on port 6392 +15833:C 04 Nov 00:10:09.722 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo +15833:C 04 Nov 00:10:09.722 # Redis version=4.0.2, bits=64, commit=00000000, modified=0, pid=15833, just started +15833:C 04 Nov 00:10:09.722 # Configuration loaded +15833:M 04 Nov 00:10:09.723 * Increased maximum number of open files to 10032 (it was originally set to 1024). +15833:M 04 Nov 00:10:09.723 * Running mode=standalone, port=6392. +15833:M 04 Nov 00:10:09.723 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. +15833:M 04 Nov 00:10:09.723 # Server initialized +15833:M 04 Nov 00:10:09.723 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. +15833:M 04 Nov 00:10:09.723 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. +15833:M 04 Nov 00:10:09.723 * Ready to accept connections *** 50 connections, 1000000 commands, 16 commands pipeline -PING_INLINE: nan PING_INLINE: 773376.00 PING_INLINE: 788832.00 PING_INLINE: 687808.00 PING_INLINE: 688784.00 PING_INLINE: 696985.62 PING_INLINE: 689655.12 requests per second +PING_INLINE: 0.00 PING_INLINE: 1023617.56 PING_INLINE: 1029014.00 PING_INLINE: 1030647.12 PING_INLINE: 1031991.75 requests per second --- DONE --- --- EVIO REDIS CLONE --- -2017/11/03 16:38:02 redis server started on port 6393 -2017/11/03 16:38:02 redis server started at socket +2017/11/04 00:10:12 redis server started on port 6393 +2017/11/04 00:10:12 redis server started at socket *** 50 connections, 1000000 commands, 16 commands pipeline -PING_INLINE: 0.00 PING_INLINE: 1550024.00 PING_INLINE: 1538682.62 PING_INLINE: 1536098.25 requests per second +PING_INLINE: -nan PING_INLINE: 2138688.00 PING_INLINE: 2150537.50 requests per second --- DONE --- diff --git a/benchmarks/out/redis8.txt b/benchmarks/out/redis8.txt index d18e7a1..7f581f3 100644 --- a/benchmarks/out/redis8.txt +++ b/benchmarks/out/redis8.txt @@ -2,39 +2,26 @@ --- BENCH REDIS PIPELINE 8 START --- --- REAL REDIS --- -6815:M 03 Nov 16:37:54.009 # You requested maxclients of 10000 requiring at least 10032 max file descriptors. -6815:M 03 Nov 16:37:54.009 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted. -6815:M 03 Nov 16:37:54.009 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'. - _._ - _.-``__ ''-._ - _.-`` `. `_. ''-._ Redis 3.2.8 (db8a945c/0) 64 bit - .-`` .-```. ```\/ _.,_ ''-._ - ( ' , .-` | `, ) Running in standalone mode - |`-._`-...-` __...-.``-._|'` _.-'| Port: 6392 - | `-._ `._ / _.-' | PID: 6815 - `-._ `-._ `-./ _.-' _.-' - |`-._`-._ `-.__.-' _.-'_.-'| - | `-._`-._ _.-'_.-' | http://redis.io - `-._ `-._`-.__.-'_.-' _.-' - |`-._`-._ `-.__.-' _.-'_.-'| - | `-._`-._ _.-'_.-' | - `-._ `-._`-.__.-'_.-' _.-' - `-._ `-.__.-' _.-' - `-._ _.-' - `-.__.-' - -6815:M 03 Nov 16:37:54.010 # Server started, Redis version 3.2.8 -6815:M 03 Nov 16:37:54.010 * The server is now ready to accept connections on port 6392 +15775:C 04 Nov 00:10:04.957 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo +15775:C 04 Nov 00:10:04.957 # Redis version=4.0.2, bits=64, commit=00000000, modified=0, pid=15775, just started +15775:C 04 Nov 00:10:04.957 # Configuration loaded +15775:M 04 Nov 00:10:04.958 * Increased maximum number of open files to 10032 (it was originally set to 1024). +15775:M 04 Nov 00:10:04.959 * Running mode=standalone, port=6392. +15775:M 04 Nov 00:10:04.959 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. +15775:M 04 Nov 00:10:04.959 # Server initialized +15775:M 04 Nov 00:10:04.959 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. +15775:M 04 Nov 00:10:04.959 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. +15775:M 04 Nov 00:10:04.959 * Ready to accept connections *** 50 connections, 1000000 commands, 8 commands pipeline -PING_INLINE: nan PING_INLINE: 611616.00 PING_INLINE: 595296.00 PING_INLINE: 589664.00 PING_INLINE: 594752.00 PING_INLINE: 581139.19 PING_INLINE: 584784.00 PING_INLINE: 583090.38 requests per second +PING_INLINE: -nan PING_INLINE: 646432.00 PING_INLINE: 648144.00 PING_INLINE: 648789.31 PING_INLINE: 648896.00 PING_INLINE: 649043.19 PING_INLINE: 649210.69 PING_INLINE: 649350.69 requests per second --- DONE --- --- EVIO REDIS CLONE --- -2017/11/03 16:37:57 redis server started on port 6393 -2017/11/03 16:37:57 redis server started at socket +2017/11/04 00:10:07 redis server started on port 6393 +2017/11/04 00:10:07 redis server started at socket *** 50 connections, 1000000 commands, 8 commands pipeline -PING_INLINE: nan PING_INLINE: 886112.00 PING_INLINE: 893152.00 PING_INLINE: 874496.00 PING_INLINE: 865888.00 PING_INLINE: 864304.25 requests per second +PING_INLINE: 0.00 PING_INLINE: 1234804.88 PING_INLINE: 1235928.12 PING_INLINE: 1250045.25 PING_INLINE: 1253132.88 requests per second --- DONE --- diff --git a/benchmarks/out/redis_pipeline_1.png b/benchmarks/out/redis_pipeline_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ab92f926a6712a4889dca58f02cbe4b03a7bcf32 GIT binary patch literal 15066 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 literal 0 HcmV?d00001 diff --git a/benchmarks/out/redis_pipeline_16.png b/benchmarks/out/redis_pipeline_16.png new file mode 100644 index 0000000000000000000000000000000000000000..5853ea1d50fa60bbdc59d7e19066d6b8d99c15c7 GIT binary patch literal 16634 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