From eb565a7e2bf358210fa6aab1c8f684e19fcd6de2 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 15 Nov 2019 12:27:24 +0100 Subject: [PATCH] Add a benchmark for snapshot::account::to_fat_rlps() (#11185) * Add a benchmark for snapshot::account::to_fat_rlps() `to_fat_rlps()` is a hot call during snapshots. I don't think it has a perf problem per se, but better to have benchmark for it. The data used is a piece of Ropsten data sized to the ~95% percentile of account size on that network. * Benchmark with more chunks, including mainnet data * whitespace * Move `used_code` inside the benchmark iteration * Revert "Move `used_code` inside the benchmark iteration" This reverts commit cff33ab30acbd1c009e745f646f1cc655ee01d8c. --- Cargo.lock | 1 + ethcore/snapshot/Cargo.toml | 5 + ...8767d2232568a1a7bf1c91ea416988000f8275.rlp | Bin 0 -> 5282 bytes ...7092982134eb116292c0eec725c32a815ef0ea.rlp | Bin 0 -> 5908 bytes ...fd103a0beef3bb19389f5e77113c3ea355f803.rlp | Bin 0 -> 6344 bytes ...d09219a7223614656722a1a05a930baf2b0dd7.rlp | Bin 0 -> 6723 bytes ...6edce282eb21bfa00aa1c3543c79cb3402cf2d.rlp | Bin 0 -> 6936 bytes ethcore/snapshot/benches/to_fat_rlps.rs | 94 ++++++++++++++++++ 8 files changed, 100 insertions(+) create mode 100644 ethcore/snapshot/benches/state-chunk-5279-0x2032dfb6ad93f1928dac70627a8767d2232568a1a7bf1c91ea416988000f8275.rlp create mode 100644 ethcore/snapshot/benches/state-chunk-5905-0x104ff12a3fda9e0cb1aeef41fe7092982134eb116292c0eec725c32a815ef0ea.rlp create mode 100644 ethcore/snapshot/benches/state-chunk-6341-0x3042ea62f982fd0cea02847ff0fd103a0beef3bb19389f5e77113c3ea355f803.rlp create mode 100644 ethcore/snapshot/benches/state-chunk-6720-0x2075481dccdc2c4419112bfea2d09219a7223614656722a1a05a930baf2b0dd7.rlp create mode 100644 ethcore/snapshot/benches/state-chunk-6933-0x104102770901b53230e78cfc8f6edce282eb21bfa00aa1c3543c79cb3402cf2d.rlp create mode 100644 ethcore/snapshot/benches/to_fat_rlps.rs diff --git a/Cargo.lock b/Cargo.lock index 541e0f418..10af9c6d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4259,6 +4259,7 @@ dependencies = [ "account-state 0.1.0", "client-traits 0.1.0", "common-types 0.1.0", + "criterion 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "engine 0.1.0", "env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/ethcore/snapshot/Cargo.toml b/ethcore/snapshot/Cargo.toml index 00b9ab6ea..4dccb3bd5 100644 --- a/ethcore/snapshot/Cargo.toml +++ b/ethcore/snapshot/Cargo.toml @@ -6,6 +6,10 @@ authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" +[[bench]] +name = "to_fat_rlps" +harness = false + [dependencies] account-db = { path = "../account-db" } account-state = { path = "../account-state" } @@ -41,6 +45,7 @@ triehash = { package = "triehash-ethereum", version = "0.2", path = "../../util [dev-dependencies] accounts = { package = "ethcore-accounts", path = "../../accounts" } +criterion = "0.3.0" engine = { path = "../engine", features = ["test-helpers"] } env_logger = "0.5" ethabi = "9.0.1" diff --git a/ethcore/snapshot/benches/state-chunk-5279-0x2032dfb6ad93f1928dac70627a8767d2232568a1a7bf1c91ea416988000f8275.rlp b/ethcore/snapshot/benches/state-chunk-5279-0x2032dfb6ad93f1928dac70627a8767d2232568a1a7bf1c91ea416988000f8275.rlp new file mode 100644 index 0000000000000000000000000000000000000000..aa39e4dc0397e77cd2e3b1deac3f7fdaf63824ca GIT binary patch literal 5282 zcmb_geNYr-7~j3!JMlQ~xMS}uG`Tbk`V@lHF$_gV%*mGP!%}vzfP`PLfFKodzghJPwq-V zu<|{KzBd_@89qehzCaQ&mPD6cgXQ8&O;>)V7);*j<4cFmYuyfTH$Z##cegOu-~@Ps zE2$melK@A5SS!OOfLZsQE@v=h0XVt#5DzdH;LP_Hb^@FS(0k=U7T^MabF8VS7)+A@ zOFl080iX+D)pPDE0PhD_9TKwuRsdW+E8h?BeSpCoc_{!-0&G6EdNPBJi2yf_n0OrE zs{r3JuGtOn9Kan@YD*bxDg?N9!ViA}^Z-0kxM4cL=K;2toSg)4y^li#e}&6&Vsbo~ z2_Po(@sQ+V4&@i|JaUtwK#3l|AQTB6*aca>NP^!I@Ao5u^9#vvllSo=StJBVUJ6gjE-vuvGC8k_~QEvLOQ}OjODG;`L8;g+8qbt;Y#i6{<^I zs}U~@=3V+4=sY{2e1K^JH~?Qk)+ zj0@i$Toh3U`bQD9`T8iLI{!@+(H2!3n!%RuR2Au)wZlwo{UpW%=?65T2V1|6MO>f} z*A47ch*9g2Si<&d!rHJcO(jMPX8No~?!vb07*dTcm1rD^ZR5kl!TH4q)hjZ)jRn{H z#rVp<@r!Z2rp*>?t5Ma~k9GZ1z0@-Hs6tJ54eW)!CBwEVmX)!I#dboC9n+)QH_EWX z9mC$H#Ts!1cH9w*_>M;WYcN{to8zDI=ZG2vC?6`fKtfmKkxj8*LqSDl`TjkXwPkK^ z)%>!ji2h6PumY$~2*`kld-Ol8f2zorl%I%jBVv(0P5(6VvLMZ7MSWrvl^T|DCr)d+idu@MoHSCV^_ zMC*TAv5Qx=4vC1x`ZWF1$On3pozNbK=J;5}&T&YJ%SoUHC+m^#V-X?RIVUzB^$7^x z7KigdlISI&xyxQugvIqd5JvS1gP4p_D^A=Y|*W3rYMsNQ;dT?U%PjWU&EY~EDOMo2^fS5WXhoKQMy&;RP zxtusLAzWAxJzy~FYZ}Eqj1y!(uF7^Gvl$!S09Qcx;Kb+E<00MxyBySst00&Zj`1g% z!#E+V5?fRjDJv}}ncx-BHN%ZA$?tR;hC!tKXPt4v<+1v&$&v)8L4w3bgq;0;N?5dH z$@wOEN`(hma>F`-At~OANC;IhAxRi07cxjRkJ3ow=7Y2WMqjwD*3rhGBq+Ho>fHgU z2Yqle8CzcWfh^wdr44>hP@baUPsN-_1|>wm%nT(`;=l+V36U@^yGh<}$ChnAQKDdW z2AVQVhifr^y{9b~`kLK|lML!U!aH!Ds-6#A-t=u4H6n15I{(V$A__}iWWQ1vlxq(I zs(zuWO2jEqt~=Q3g4pw8$1XX2loRTVD1h6onZBzWEwNElZrHiEV`IvSq4hN<+p|u* z=6Is8!T9j`>JP@)u2$^%WLzuEIk&Y8QreAd z5Wl`L^-uemSYm@xxW`2l3|aONrJ?ni6DZ|wLqXy6{-Z&}UY!#LE;Pymlr|8>MuU2R z(l2didizvzSGZ5bAv2<&|F2CiN_U8&YdqZ{`7b%Vp*yHU453ph>^G@-W%3q4!M5L_ zZk2+K?Gv@E%YhuU&j|0ZeRd8s8SFS(%mrZ)5##azruEZ-ZOvb4JJ1wNc)@%lMp zc8F%LDOW?CYd68m={=cUhieCjxN zUTWUHr@px<`{3bcr(eqWaT$@>L)tEesQIOV_d8mH2X4jAJ1x)cHqra&H!oGq+E#sk zmUnmFw&s=NdTJhVrdPjk$UElTuGzKt-R;+ob%ZjLI==V5QnK*~HSMh>~actevMzm%cna^_L?je`g7zBgBuLRXC}`c5K4&Z)fEW|1!gxHY{aCc6rO$ zz~#iR8w)?^L%tYVn!DxFzQ?*#C%j#s^U%?u7gj7Lc5GT!c3|hss|}~-A70(OvUXJW zx(p^)l SYPz|WP}W^zBdT7%jp=WlDrZap literal 0 HcmV?d00001 diff --git a/ethcore/snapshot/benches/state-chunk-5905-0x104ff12a3fda9e0cb1aeef41fe7092982134eb116292c0eec725c32a815ef0ea.rlp b/ethcore/snapshot/benches/state-chunk-5905-0x104ff12a3fda9e0cb1aeef41fe7092982134eb116292c0eec725c32a815ef0ea.rlp new file mode 100644 index 0000000000000000000000000000000000000000..1bca9bcaead3457b9d927591170a5f558b906afa GIT binary patch literal 5908 zcmdTIX>e0T_`STBghB~Tngl9BgA8(wgUBTmun0IR0%?hjG#tCF3}VG{j5vZ!-w_aL zk(bsgTC71p4gm{P0m}~#K}2D|Q9+~*7V8X9ixkmT4*mAMB(`PKG(>;6(@DN;zy0oO zx1poCp`*#4F!4&Cht8D7Z{K!#)U7#%tGW%mWX>wwSNmCygMGwlzg}#xUt|S#kF695 zC^a4NgA*|GjTfH*c@)O3<;umXIWvAhssS%=%44WLs| zb=DxNPSm7BL^@sHXrzlq`nVyHq}Oc-iByK$RRz$|Uv~JT>u@@Ffa|R3;81nA+gP7kIWT`J~6q)>?J7F2fpr_SRCz@?o zAFq*-ND@md+3Bk7XsA9fq_@t?nzbXcxg%htY8a4^0!n6)L-6rBC?SyUP#vJC3Pq5t zqUumt79{Tw#Hh6-ISD08tX**mGE3?MS-wJFp#tAHAtjO}^t&~_PORULEzAF{7&CMT zk~K_eY1FtvTA^x_8Z1$B%V-P=VSHQ@LM<1@ zfd5;gH}RXbgwz1U2`7ZlMqazd?677r)8>`%KG65TRxq+4-yLg?P z?jyYl{*~d8Sf7Fz=uC)lC?3%zrYnerrsQA+*^G^c+>*jUhXORUWjRGK0wW?LVg}Gn zM&DI!rl_C52r*0OX!PBthehQ{r$k2#BT`<0=f~HHYZ3J7LZ8z~G{$icAOlPQbiVZ6reeF0-i2+$6rYk!y0SgP1MOcU zoi7pEuh6N`cbm~}N|;bvNxl354Jp1Cn(#pdF^8?I!3y2jq?TITp`-FIFN zp9Dpuy+Ek)h*4Y$nN1a*j7=nZi5@bYBYn4Nthp4YPa(9~MzrY%>APW4-fFYq__wu^ ze8;pQ-$VM+xzl&^^3NGpPqI(8CXP9ld}3XlH|epwH}6?{=EL*lopN)YcAtZCLn;nT z^H5|WDh^^0n?r4;vePBml`tOAb%ay~9|4b8C=fqKvIGeR9jyc1S=TbH(z=#u_HA9u zv?@~9GA*KZEo}NtP2w;iLp82;HwZPZ=4A@2lKYp!p(WaI(DLhv4r(aR3emR@uUdS= zh|z+bTX#pabZUM_G~c}aj%XR%(jBoFIt?tSSx_HkPJ{_WNU_2Dh-GGAzRtX&{#@i9 z0Yzyfe88g&IRV33uunxUscP#IB353yNx}pLX*r4QH7Uc)r|N@Lr15WMVF-oM_Yf_R2O3Ht?KPUlFaa8fo zGb3x^!g=>U<#2T=^@z)B*A%_DBj?qml^fq4QhR>>*1efo`s(qg-ndY}^lo5B*ZR4f zZ0|=k8+?a*V%vT3FI5=${rvjtxf9CfJk;M+F`}#>KYiC%XOF~x^%KJ|fB1X1uldfE zpSAH@ZtSLI59S^j_x|4EM^oGUKDb|z-E_4&yZH4s$EOt+9Ue8xcd2`q6=%yQy>oY5 zef?;Es{55cEgQR^tJ{@*_otmxHcI&ex*ZkG=09IJHf(K0=J7TDvF=BJMc8Gi@-H8> z<@)~V^>+>3ws_#gQ*m{#EoI6#7tA>P@wi)g=W|Y$Sb)y~cc!Uy@^GeMa{cH1EZ_H< zb#Q2Aie7hOS`Yh}+`080m5;-fn=|8iIx9=9zh+(4@MRND&scw`^zZ}K?T)`#vCv;$ SbMaKSAEp~Kj=6g_vB}@0?w`s4 literal 0 HcmV?d00001 diff --git a/ethcore/snapshot/benches/state-chunk-6341-0x3042ea62f982fd0cea02847ff0fd103a0beef3bb19389f5e77113c3ea355f803.rlp b/ethcore/snapshot/benches/state-chunk-6341-0x3042ea62f982fd0cea02847ff0fd103a0beef3bb19389f5e77113c3ea355f803.rlp new file mode 100644 index 0000000000000000000000000000000000000000..81465ba346522100b2db654dd81c5a6b67c0aa2b GIT binary patch literal 6344 zcmc&&4RBP|6@EXv+0AB?-Oc_ape-pDnYN4|2^B21h()V3_9bq1sVjO92}zVz7$H)S zf%o422ZY@aeymdnMJ64@jufG#>Qo$Mgeug6Ka4`Hh_pIb`I#x91$yp%?`413Ea`+! z-|Xyu@4R!*z4zR6zH{F8RlnX>{c6v+sh`d2Q!m;-6C%sLyy(2O?2EH64x6~~!G*5L z-`(7FUhJ#hz{~vZ>UD&WDUHPRZ71*#1qnA{3C|U|Ql{q1c=_b!l8eVg5AaG*Zm#x~ zAN7FXKsda;{Ct0-gmp7cPDZ!{;l$_Gj6k>r;iSu-EKaYo53%fN&>;?>~Jz!u<$)kM4NT1LheBw;ykuijeMNSNYTg!nFu@pS7Mr*n{xp zEw4!k-$VFr{f#3%P*R2P_(#WZZzU}VPc-e>jPOZ>UwpXs5rn@)cZ z@&exx1b!Y^z8?qyzl?q@tp&@%Kq$n8>hSRjbiI5L#ob{2P9Q|4G{`ck;Z;Rc8^emy zpfuuLT9O-5_?wc$VZw#NiW5g34$3OuphS4oQ23Mt{O&+V!Yd`E@ScqD$zBk6)Dq5OSHb(XG17_P5I7zx$|+GJ z0qZG!G`Z}Nc|-AcU_D<<@rbS{nu$r4C(Nf2n}7M3Bhx8KV#mNv zL98?e4u?`f-;Oxi5RQe?_lis_N`_)9n>I6n%~Nccv43&LpjK;}U(DEHeGMjVaK@Gw zF=qOjVXS^o#>&PNGxn%q>~Sb77E`8mhT=vjE4sW_48=E~EUllG=^aCO6e>_S_(U>) zB|nkO7y|i;WWMLWNhEW#z8do!sMue`J7y#Q&D~J(C%P9fZ(wY}0@M7gVP{WXXjOb% z%<9Mbuo6Cdm^>j9nvNeA8DBEe7=Q1e0>JTNF=KNLV++A?sF>n(!}W75dCm|X z8PrmowZ&$*pc}IY;GC{27G{aU(kpnZlEPAAT>Taxog zDQpa^|5j6qS4d&z5RRr#SX82k#Oc*E6}(=s-l92AlBnabASpaH5HfC*mZ)WS&7IpK z%?8x!Bq@T@^8e#eK

h7!@in;aXV03~>He zJ)BaV|LNIqGJc@+RIB*p(r5O{98j+4lA!cLn6!YqDiBIbV6&*i4({{zx9a+dUr1%HevzWeQ~hWgZrm}5D)InfsmkJpx9;xFNMrJc<8Ro zezv=mgcTQWc~XNR!!?pAEMn8xtY}A)30Rs2k-|q`Sely#e%yStuwr3p{&0(55a~9` zzK+{484IUQ4Hq_0Sej?H-wu?;`VWTo2U;LnH80SUGd@uED=jqFXJvEpf5Z}KHX+Jw2CbcMWNH~K&Oy-8wYF||$tdnif9vzxVeGbf(pJH<|* zm1a%W7Emm7OPGXan)~JDL1G~`k=PQQ{BkjYQa%$4ohw%ItHf1c{|yT=kr!Bm+5bR~ zh8~iAA4Qn~qW1hRRJvLUCxk9Zjfyy(*&k;5ee_9MQgG62z6?S6Fw}`_+-+vuUEYRA zF+f5N>dbX(Loz~F5{t$OjY<(y^;#AQIq%G4M7VYpC`QB_566fp=N>9z?A3u*7j_{# zWK|VWuPRb-fO?{d^{OJ$^nr@^S>FH^AF(c;Q6W^EVxf~_A>i?X1K)^{{~Y(>0EeW2 zV>*q$tMVNYg6D0581STZx3V;q;3LORQF;Mf6j9pj zQO7gXd_IkKrCI$I2IA2n9$|l7bdIV8+SlWIrE{DDK7uVVb!g#v3zlzIYGpNo@22#P z6|>d35VwThm-Jm^$d0m}-b*3nIJf0cP93Ej=Ps@NsC^1o^je+HI_vS~?K+)x)=BYX zohTytIFDmtLUPUKon#j4xEA%Z&J~OUt`S;A)40a?diLDu z?D|n$8`nX{wM~4vOeg znRM&ct=oL@MOI#4&s$X5&a)Qv7u%jT#Gf$b?T=Oc^X-F+wnd0oCQt`S21zs5PH8g~ z+Q;ntUg?()>>d3^oTrZUvi*x)Qolx6pshq^uTgCW-g-JwwxhD0Fi;V|)qe8$>tkQo zs~hQ}Mp{ixYv#Opv_$uUx0ebBws7~kjmws_j@7;6eTQxMo9Ldc{LJTdH+Vm%(#)cX zARr+}6fq-;g?Z*)pO31p#@;Mki4O2h4yqAM;!1?$@JWgYHes~{z9tNM!imPSAL`Fi z$bzBp6&|J}555Hn_8NlR>{H@8d9T5nm2sWCyQN4hA!2NTZ!@MuQhO=VIx*krA$DTA zwIO$68J|Uj1kGA}-&U_hONL>_-rH5ZB{S}gHo3Yfn3+2!q-i&!(kQLkkKRX;f~q69 z9#!jKEtJV4Lu>_d=o_;q?>?`atM)U7W&fMe9HYHL9lqQmt)>FprrEO=FMe#?jGDyB o*-O`-t6efOxxebq!mhye;q)Z;b+ZnPIp4i=`}We)+&5nN4}8ngu>b%7 literal 0 HcmV?d00001 diff --git a/ethcore/snapshot/benches/state-chunk-6720-0x2075481dccdc2c4419112bfea2d09219a7223614656722a1a05a930baf2b0dd7.rlp b/ethcore/snapshot/benches/state-chunk-6720-0x2075481dccdc2c4419112bfea2d09219a7223614656722a1a05a930baf2b0dd7.rlp new file mode 100644 index 0000000000000000000000000000000000000000..5265728cb85d12fcacaccacdabcbf4ad00ac0660 GIT binary patch literal 6723 zcmdT{3s6+o8NPQPEbK0imEGkLl`V`FqnJ_zCrOP2Ns3ir*=}}`YvmjfH6fiC9i8|J zckix9CC0le*i=lqhzXI_>KNl=NSgQNJRSI2YP|Kn+4K# za>tQ>&;9TJf9LyO=X57#cPCEsTUO+aIsMtB+yukKdppkg5*m}UjAe_H>;1)BbbBU7 zwsa>ZkTiKX{t%*3wrvV+!bFS{5p)k_MXIbAOxodB=30^n@~|qpbk*s_tN{}joOJ1H zWr`Ib{zepySbY`5oz9~zAbttrF7@_iBMx(d*ff4@B8cyU*t+2Q6Gp5_0I{>@N;QaH zC%AV|f^j2OErM5@-uyEK;(ib}|M)^3i1$FO{cGKmVB7-YYmcWnKy2vy_EGDWLIWm8 z!z)fSVx<?6?$AT9+lXY2DzK)eXzQa_Up7F8g=XpMgh#Cd&Y!g~IuG-7ftyo#9L z_zsAlff#R&Y&Bv<4u~m-mT@8iG5seUi$VOSlj4cQB*vNx4hm%#(loM=j7!Pb+%8w4 z%Lc!^R=SXdzbx%`BZ6|fVoaELK}$&& zBGQd4N=y=3WrA6>Nm+fM&3W`H*)9qzQjvP3oGJKjMN6jnVg(N-l&wS&ii z%MR@n5y@aiRSU6pt>9swWY?;-p?m0`i8`xb?LDlUFM5>+D8D)wp*jrfs)919PQ|)5 zK_j#>RxcS?#_BnP%UE3-dKs%bB;ipX4xKzMJo=Y;%G5Wp{taFVnxJAlNyM4Dk<5DKLkDPUToBobL@FSG^=2{Qsl3e0{Qy1k1B!N`4M z!r|pk_%a5EXTwk=Xt!OZaNE4x2!mG+iXpu$B4A)4!opH6yUWHR5@wZ!q}>J_p6_H> zB@8Z5<0qNb1^Xs&IGy3~;HXsi0dvmhwL)DZ0x9e;=>&y(4=6-eJ189Sm?r~AWUfaf zA~wp`wfri-E0+Hsz#$?-UQK?r|HpQ0aI#*ul$)7mz|@C)3pZ~8um%yVo#loxtKw!0 zzlVsf3=fXD!2=(GZ$$h`9-{o}AmFRyfcH_3wc#0jA(%{98!O}*){b$zv0)o*;(lJ3BoIGb?_b+;C~nmHqKAlrMC)K_!R>rUuABaKl9r@>tfKBEifC*tjB& zeTLhUu9#u4F^B8;98)0x7jr%YO<7Fl0J&up?5gF;dU&lszfx!g`dNcofqvz;wF3QI znO1=H8}6r{-Y2G?zRrb>pYxf9^^FVc$+T*DwGHoYz>MzIPYN1(HL z4u*?jIvBoi!D(s$e+oVSf>&Q9n zXLiJ?KE$1lfKzOo4JRJ%Xo!s+Oa?Z#dAOckCC{|{YX4UBogdY?qZl^!xL^XurAa0* zEsv(+xy#GkFE{Auqz}$~60@=X!Uvo0tjH~BQ8@PJmv{aB*zE^r#vPnxlasgH8iM7| zb64%UbGdfX$<1lyO$T1uedOS>PqR)GO}m-*hHdtNMZW%)q2tLT4AuiomxO#}5CLHb zFsJ0r4h)0zPV?ZJ7T{a?Wqz2O#ruDN-3x`X1{eO!gGipcLEOyZ3N_43yflZn5I2-lCH=qa z^}Ktn(R*S%Hl^uTHHWE=sNVeMh5Wrsr>EPSr|qrx=gi0}%A8FEdh}QQ+0G4Lk9s?$ zt@B{%=;IGP{x(yc@q<6P42G{)oO!IFx%ljQkNVbS;*Nh~=I_5bQu0;eqkmX8rJyCE z^VLdXf72^vCl1WIS8=8Mec6-Fm6p*Slc84yBCUag=$rXXSAf36$Kn zC8xx;d*<3U`E+H5dFBrbp18|2T|c#^z>% literal 0 HcmV?d00001 diff --git a/ethcore/snapshot/benches/state-chunk-6933-0x104102770901b53230e78cfc8f6edce282eb21bfa00aa1c3543c79cb3402cf2d.rlp b/ethcore/snapshot/benches/state-chunk-6933-0x104102770901b53230e78cfc8f6edce282eb21bfa00aa1c3543c79cb3402cf2d.rlp new file mode 100644 index 0000000000000000000000000000000000000000..53f5aad5b71eddd5a72f9a7b8c2accab6b65ada3 GIT binary patch literal 6936 zcmdT|32+oe6rI_b-5dmR?7=2jWED{qIYI~)7%l}1L|_w_tYHwk2|=kS1dLilVrFL- zv3yTa|~CGaVE^R1u<&miVs07 z2hnP2US-0%BoNzdoJ7R_Af}|Bc^bsMAokfBn+ReZh-0mu924dci20>b3Wz&EoM^W$ zH(~w`5R1la-T-1Mh%=W}f?<9%h;zP~-xtIR5LfCKY%*c}KoF1iJkkclwIEiF{-u`* z8;l@UUpZX@;&i8g81ahGRWxH(2O9?2j@f3|urEtMeKJJJ438@l*;udLP6oW3e9<>O zB{01QHk|NH7h$60;-pNs%a!3@CT7SmDvNG6Vg$D<4lETqMTyODd00^FVr8&6Doe1# zBim*8jgl<{&kC5ui5ZA>BO8ZVCYnpM_;m{QSui^o&(?Z8ItKA#Hx3kuV%qcMfEqs* z1<@?8ET+{RU9@qGL!S2kMRRhOmv0D2UtQS50*g-!7mw z1;U0G!Y~6gYl-VERiq;jn)?{p{(ZbZ|QYYQMw@bw0J><)pqviXszAa}21Ou9mjX+otuf<>7oD&&4o3`ff-ceR;C1dyFR2yqDoc=9uZ$R=c*NLb z!R2se%7_Jax3Qu-9!F$5C7A=NhiMA;+X*_xg>;BXrTdLOsvwk=|6m9)Q|Z&_qrr<^ z@-VwZpQr+T%qX@{7|ACekcsxr*8VNiEJZE_N~QH zCnfOAtMsY#(cnXMVCz!ZEBiV%#m&>`%jl!Q%1DIZ=mG*sgBF1FX)q)WC#67Y)?XqA zuE9;(4!n_%0g49qXo7N+9QM#pxVWl1b4{yLyXTMFw(gnB56)aQr~QfxIbW1n+Wj$n z@E>hH{7pTF-z04)#FPOsjd_*<@@*KTTc(eyPz|I7j#=){s7Az2GA3r5KVxE!O28?N zLX1_yqZbAP zVij#jg@81id_8-M|7N{{!Xdij;Ot}jz}ag?q9J9K=!!j*CE(a6+|rF~pc2#c1PG>F zO;kc~2`Y6)1yjh9uG!D8(YH+>4R(fu7WU9iKrhh{k&McQ!!jV-y)vP++rVD&V*>1T zYs^?&b3DZ~ctNMwyzC?MOXjXV+<#$2b-@FJYi;X?uT9-Kzy{tS4uX#qiyI>y+pr^I@ zw{|r!dVN;|8cNs_kyz1E#_d^5S?=h< z!bzQ#o9YBFabPCk<(qd&qNP?3$kvm!=jm_tl)Kd8Cxf%kh+- zU*X+(FE)3GnY_usZ{?TOO&GE+zjumbQ_po}rG5JiW^VErK*{v9_v*Hes!8g;wy5jS zqfynbPh&Q$nvuKnqd`}TPv;$&4@$;7H*OMs_K^wW#?y3JE|qR`4sY>Jb~;m=U9+cC z!uRdQZSOw(A-!(@$hMY#6DHOOb7n6tnOAzYDy_PJd1_j(x{vRvo4P#xROz3YceOE| i@?>YuoYgEheuQPq&|a6NRln?c`OKo;4^C;`JK=AWN6!)f literal 0 HcmV?d00001 diff --git a/ethcore/snapshot/benches/to_fat_rlps.rs b/ethcore/snapshot/benches/to_fat_rlps.rs new file mode 100644 index 000000000..9d32ad296 --- /dev/null +++ b/ethcore/snapshot/benches/to_fat_rlps.rs @@ -0,0 +1,94 @@ +// Copyright 2015-2019 Parity Technologies (UK) Ltd. +// This file is part of Parity Ethereum. + +// Parity Ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity Ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity Ethereum. If not, see . + +//! Benchmark snapshot::account::to_fat_rlps() which is a hot call during snapshots. + +use std::collections::HashSet; + +use account_db::AccountDB; +use common_types::{ + basic_account::BasicAccount, + snapshot::Progress +}; +use criterion::{Criterion, criterion_group, criterion_main, black_box}; +use ethcore::test_helpers::new_temp_db; +use ethereum_types::H256; +use parking_lot::RwLock; +use snapshot::test_helpers::to_fat_rlps; +use tempdir::TempDir; +use ethtrie::TrieDB; +use trie_db::Trie; + +fn fat_rlps(c: &mut Criterion) { + let tempdir = TempDir::new("").unwrap(); + let blockchain_db = new_temp_db(tempdir.path()); + + let mut state_rebuilder = snapshot::StateRebuilder::new(blockchain_db.key_value().clone(), journaldb::Algorithm::OverlayRecent); + + // Chunk data collected from mainnet/ropsten around blocks 8.7M/6.8M (end of Oct '19). The data + // sizes represent roughly the 99-percentile of account sizes. It takes some effort to find + // accounts of representative size that are self-contained (i.e. do not have code in other + // chunks). + let chunks = vec![ + // Ropsten + include_bytes!("./state-chunk-5279-0x2032dfb6ad93f1928dac70627a8767d2232568a1a7bf1c91ea416988000f8275.rlp").to_vec(), + // Ropsten + include_bytes!("./state-chunk-5905-0x104ff12a3fda9e0cb1aeef41fe7092982134eb116292c0eec725c32a815ef0ea.rlp").to_vec(), + // Ropsten + include_bytes!("./state-chunk-6341-0x3042ea62f982fd0cea02847ff0fd103a0beef3bb19389f5e77113c3ea355f803.rlp").to_vec(), + // Ropsten + include_bytes!("./state-chunk-6720-0x2075481dccdc2c4419112bfea2d09219a7223614656722a1a05a930baf2b0dd7.rlp").to_vec(), + // Mainnet + include_bytes!("./state-chunk-6933-0x104102770901b53230e78cfc8f6edce282eb21bfa00aa1c3543c79cb3402cf2d.rlp").to_vec(), + ]; + + let flag = std::sync::atomic::AtomicBool::new(true); + for chunk in &chunks { + state_rebuilder.feed(&chunk, &flag).expect("feed fail"); + } + let state_root = state_rebuilder.state_root(); + let journal_db = state_rebuilder.finalize(123, H256::random()).expect("finalize fail"); + let hashdb = journal_db.as_hash_db(); + let account_trie = TrieDB::new(&hashdb, &state_root).expect("triedb has our root"); + let account_iter = account_trie.iter().expect("there's a root in our trie"); + + for (idx, item) in account_iter.enumerate() { + let (account_key, account_data) = item.expect("data is the db is ok"); + let account_hash = H256::from_slice(&account_key); + let basic_account: BasicAccount = rlp::decode(&*account_data).expect("rlp from disk is ok"); + let account_db = AccountDB::from_hash(hashdb, account_hash); + let progress = RwLock::new(Progress::new()); + let mut used_code = HashSet::new(); + + let bench_name = format!("to_fat_rlps, {} bytes, ({})", chunks[idx].len(), account_hash); + c.bench_function(&bench_name, |b| { + b.iter(|| { + let _ = to_fat_rlps( + black_box(&account_hash), + black_box(&basic_account), + black_box(&account_db), + black_box(&mut used_code), + black_box(4194304), + black_box(4194304), + &progress + ); + }) + }); + } +} + +criterion_group!(benches, fat_rlps); +criterion_main!(benches);