From a40c12354257418e686892a7612d7e11a1a58235 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Fri, 23 Sep 2022 22:50:50 +0200 Subject: [PATCH] Add S3TTFB --- artifacts/2022-09-23-s3ttfb/garage-v0.7.csv | 61 +++++ artifacts/2022-09-23-s3ttfb/garage-v0.8.csv | 61 +++++ .../2022-09-23-s3ttfb/minio-20220917.csv | 61 +++++ artifacts/2022-09-23-s3ttfb/plot.R | 25 ++ artifacts/2022-09-23-s3ttfb/plot.png | Bin 0 -> 127717 bytes benchmarks/s3ttfb/.gitignore | 1 + benchmarks/s3ttfb/go.mod | 12 + benchmarks/s3ttfb/go.sum | 123 ++++++++++ benchmarks/s3ttfb/main.go | 214 ++++++++++++++++++ prepare.py | 5 +- scenarios/fragments/garage.py | 35 ++- scenarios/fragments/s3ttfb.py | 26 +++ scenarios/garage-s3ttfb | 18 ++ scenarios/minio-s3ttfb | 19 ++ scenarios/requirements.txt | 2 +- topo/5mbps.yml | 3 + 16 files changed, 656 insertions(+), 10 deletions(-) create mode 100644 artifacts/2022-09-23-s3ttfb/garage-v0.7.csv create mode 100644 artifacts/2022-09-23-s3ttfb/garage-v0.8.csv create mode 100644 artifacts/2022-09-23-s3ttfb/minio-20220917.csv create mode 100644 artifacts/2022-09-23-s3ttfb/plot.R create mode 100644 artifacts/2022-09-23-s3ttfb/plot.png create mode 100644 benchmarks/s3ttfb/.gitignore create mode 100644 benchmarks/s3ttfb/go.mod create mode 100644 benchmarks/s3ttfb/go.sum create mode 100644 benchmarks/s3ttfb/main.go create mode 100644 scenarios/fragments/s3ttfb.py create mode 100755 scenarios/garage-s3ttfb create mode 100755 scenarios/minio-s3ttfb diff --git a/artifacts/2022-09-23-s3ttfb/garage-v0.7.csv b/artifacts/2022-09-23-s3ttfb/garage-v0.7.csv new file mode 100644 index 0000000..3b1b2d5 --- /dev/null +++ b/artifacts/2022-09-23-s3ttfb/garage-v0.7.csv @@ -0,0 +1,61 @@ +nanoseconds +2043724295 +1819672397 +1856153241 +1814937942 +1818943177 +1814245475 +1828595614 +1817263829 +1857481054 +1816538404 +1816874169 +1856305403 +1857317361 +1814517488 +1817156893 +1815832311 +1857020274 +1822556545 +1816402439 +1815664395 +1818129711 +1855229810 +1817427508 +1817253968 +1855458740 +1818412087 +1816422102 +1814017661 +1821773596 +1814924392 +1819138108 +1814140079 +1814253338 +1814717178 +1823390172 +1856664915 +1817886566 +1815441938 +1815381667 +1864383216 +1815026715 +1816346397 +1814835227 +1855973303 +1814632968 +1823675273 +1817900846 +1816282804 +1817289580 +1817288129 +1860637032 +1855146585 +1816649086 +1822524427 +1814277922 +1901037764 +1818903030 +1815404774 +1815446844 +1815223628 diff --git a/artifacts/2022-09-23-s3ttfb/garage-v0.8.csv b/artifacts/2022-09-23-s3ttfb/garage-v0.8.csv new file mode 100644 index 0000000..142184b --- /dev/null +++ b/artifacts/2022-09-23-s3ttfb/garage-v0.8.csv @@ -0,0 +1,61 @@ +nanoseconds +376764319 +268350943 +310303481 +266580460 +267172958 +46771899 +271623330 +270463024 +47401936 +45384570 +129505789 +46244307 +270594700 +267908944 +310163759 +271096844 +268930686 +309894956 +273312715 +269766963 +267947351 +270443270 +266292594 +215426567 +383550730 +84593093 +380970185 +419898767 +381574216 +422289246 +380535266 +268204508 +46449693 +270408730 +268572254 +308981862 +266303861 +46092770 +308073958 +383696451 +381725197 +379008890 +379902614 +382568588 +45370580 +83526768 +381230253 +267980416 +269187238 +84449786 +267524276 +46169934 +43509278 +308776528 +270626080 +271203190 +216167767 +239794865 +46230173 +267821837 diff --git a/artifacts/2022-09-23-s3ttfb/minio-20220917.csv b/artifacts/2022-09-23-s3ttfb/minio-20220917.csv new file mode 100644 index 0000000..42e7e00 --- /dev/null +++ b/artifacts/2022-09-23-s3ttfb/minio-20220917.csv @@ -0,0 +1,61 @@ +nanoseconds +941737601 +970059899 +956848578 +981034132 +968456906 +986209313 +947371347 +961890275 +951011001 +947766957 +946381130 +1172968280 +944672409 +946216350 +960072933 +947966145 +947998544 +957730811 +960898554 +950611253 +953195848 +974654976 +982578891 +957419979 +947448876 +945953214 +936687543 +950116533 +979971727 +941427574 +931898843 +928494073 +927924296 +940995728 +927965457 +928098595 +933759012 +929902652 +953753466 +931448442 +934503899 +933297864 +934775226 +936615695 +950945991 +935054323 +1162136321 +940502403 +1158490674 +945337099 +948016443 +939863143 +938112935 +933271354 +946325434 +954355353 +948997521 +1124820589 +989829976 +938639125 diff --git a/artifacts/2022-09-23-s3ttfb/plot.R b/artifacts/2022-09-23-s3ttfb/plot.R new file mode 100644 index 0000000..84d4872 --- /dev/null +++ b/artifacts/2022-09-23-s3ttfb/plot.R @@ -0,0 +1,25 @@ +library(tidyverse) + + +read_csv("garage-v0.7.csv") %>% add_column(daemon="garage 0.7.3") -> a +read_csv("garage-v0.8.csv") %>% add_column(daemon="garage 0.8.0 beta") -> b +read_csv("minio-20220917.csv") %>% add_column(daemon="minio RELEASE.2022-09-17") -> c +bind_rows(a,b,c) %>% mutate(ms = nanoseconds / 1000 / 1000) -> d + +ggplot(d, aes(y = ms, group = daemon, fill=daemon)) + + #geom_violin(trim = TRUE, width=2) + + geom_histogram(binwidth=50) + + scale_y_continuous(expand=c(0,0))+ + scale_x_continuous(expand=c(0,0))+ + coord_flip() + + labs( + y="TTFB (ms)", + x="Count", + fill="Daemon", + caption="Get the code to reproduce this graph at https://git.deuxfleurs.fr/Deuxfleurs/mknet", + title="TTFB (Time To First Byte) on GetObject over a slow network (5 Mbps)", + subtitle="A 1MB file is uploaded and then fetched 60 times.\nExcept for Minio, the queried node does not store any data (gateway) to force net. communications.") + + theme_classic() + + theme(legend.position = c(.15, .8)) + +ggsave("./plot.png", width=200, height=110, units="mm") diff --git a/artifacts/2022-09-23-s3ttfb/plot.png b/artifacts/2022-09-23-s3ttfb/plot.png new file mode 100644 index 0000000000000000000000000000000000000000..774e0f8bb18b2898d5d42ceffd3e9e93887900fe GIT binary patch literal 127717 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

GV;ULy zU*AN?cCRPxzD~P^9`cRVBqd>J17=`t&u~vHXvY@TP@>0DS0DyAq!K|MLZU^pZFMcs z|K$r2BAJCx-!&SZkleR^yis~Twn8`LD))lo&f}_Ba)WGXn&87&O#+Ehi%NaoWSAH^&Zq8o!V{riHZjK zpRxM>HPb`};`?AQetM>L(T@X93&Jwa?}N&MF2x1-0wagQF4=sw)kR^M+4?5Z@6m0k zHwQk0?Wouu={1S1IqLC2xu4Ykj$OEL*_&=H{9TLWc{84E9FPXHyGD;zxDc7CyXlv$ zhpcsmSSpk3nUi)at0cW2JT3hJMqet|U#)kJvOMUNS(w{8t`t~xi}p*!AQPV-0XKdU z#kOtl!{dT;x}9IoDzk$>TH#k_eemMy#8fMwn~b<>3TSog@WG5kjH&@`qc_N zv#x2k0_z}nd;8sTp0|VXRLXp}F{}BUQh0QPh5k)PFXRZXnT-wPaWoe=nXvWNyA!_H zcoJu>=g$VerWT|31nqkuX$+)93r+LgmYKfqTubL4uEHmy8ZkEJ_aHwJJ6RiI0j&pC zRhbc_r|a>#pK{MS>^|5eg*TUJPoYDb@W)$3TB22~0Un*A`Q3{BB&n;Eu2W;*c@Mj{ z!w=9^lf2Jtr-GMKHS}wI9h5sz-(PuJ2^J@!J!?*CD_7N3+26;76?udyPCD~xD$Y-q zl5T!G)y!JiIIN#u?37Iy%KJSC2sXEL;IKFRYO1UAI62(n4tQx%^>^^VGk8cRfGgy? zf7|=Pj*g3|zOmamI?7VfccZ8q=Iy{l<& zKCm|c8&4wapQ3J{XQXBHd;fp{AHS*2exV$ooc89}h56Zl|I1f9<;uBGYqFUbmvmhy z{Z>peXzUDTBpaBv#2N8@i_%C&$kY;05{ACFH8lGzGO-O7o{`)?o?JtY{-aaB8rkMM zu{Wq>^*UW!s+{7=9&b=i+fCmS<6vyHlVZIN%AI`Pb< zt}9hH6~1$P|5T7jbU1__Jf{_PQYUP6!OF}7{tJV5ZvaWXN8u@`8=|bW?xvyXWdq(E zqzc$w_u}Ac;Ife{gCT*Q!>@mBR5OzTA6(=*o>0_VG)l|*8VCG!s_EOdTBf+$-TI*7 zj^M@dw^R2__IlO0*r5uyC6D4f`j*F);)!uUC+(2y;sQDzXYxv1nlPdvdx1VdDwa5j z1)e89=&5^%1TO*AW|EDs(W%BUi*quHVlG~kH}$pb-IXoLw^>yR+Em`+DbiocYC8}c z`Q7Msdlv(h-$C^}Uuvd^(gX7Ca!XjgBPWLSkf_{Z%IfH@#cP#%qc+-jIp*~R2=M=?{2>E=IRI8Yn2oCtH} z?UE;I3)8S~LQG*2)hH!4T-*p|k_2SlXMxV&q@SRY^IpqveYi|;$jT5?0tMbK%@f!j z>r&kcE6e?qAAJfZ4fd=~+-YiEfpr_bguYryZ4tsP2{ds7x_Z9$RkVx)XIH0&%%W%# zh7&0yeuSBZ{^(E^S*YpH+NPrF9@Hq<$c!jSqmHL5cKYIN1oHk3O}9OGD>eJF-fStf zwyt(5DX$~Z*MAyKbd@$J=Vc#s*pu_J93-E(+K-O_Kf4sKz3DnX5PJT4+KFgzYChzu zssMJ`U63XT_%<-9J|9Y|4zMUVh|--kpXb%hk?6Eq~q^9yX~haj~x)sPABbh zi#x3slB}ryj{C+g70>acSJQ1l%ZEd60HxVcWj!szYTKr=fYdRY_Y|!~%2eC!T7pVq zgaxV>_MxDymg<~W)8w!&&t$vbgN5YlU@&S0xE%nf!J!c(9O0Q*h z^(+oZCnofgG}bHeIxb%uvn!PH)#s9OD=@5}KHzTsDAHCl2XWX|Iyt4czC$uRx2xmO z9hF4kM-B>O%j1W$x1H!QHX1PzlK0KTpYeDYDt357(W^J51!_g;T3tOriEfs71za{I zo_+ZUt@(`4vhQ65lWg9@orakFYHNuRw!9Axva}inEF~ugv&9hs>$S1&X+cnyyIjM%rUK_qB)uTEnc)H|jcyri>QD`};`+1kM<E2_lzFSUU~Vrl8}Y|*^_M6ag&O97TS+LwZdF<;?N_=4Ia}A?S zzk!=YLF|KXh%Mli&Ld51uT}SNajo-{gCieNd10ZX3ejj(I1S+$cp};`1oOa$6*_fjS0ubkA$XJdHN2TvoQHJNgIrH~^feTPt+)oTQVC&!9} zR$KhiD7jDKMAgG5)qA8DO6@iR$e(z! z$t6S4HHIDfG_U-e%AQK_>xBBG>W^e_Vi&@zYj`KT+&4@_Pcg$mz?SCU8*aT*Wfrr= zk(<~9uY^1S{-$)ATSeH*=Ee(5=Gi%aPX5ZOmdp= zD0?4pvn6&Q+3)`Q1Zd5bo9*OnH$U0_bKk%znL`Z~D<3ltv4LJliPGzjmZUQMBJKmm z#6bMLKv2lc%d9%`c|K6Vk8ldsIfR8p8m@BK*GmTD(F|GE)joX*LQ84Vqt(Y|J#3D$-`F36#DL3 zB!?ZM6NhQmIk>a_U(OZUJKIi$6RSA10%Pv(lW^j{Gkc1w#gbPIxGhfxAIRyG(t*Q5 z-6KO*u^hT)T665j|M8ouVH6p$Q6MrubHC=Lv=c|E$yLRv@5i#{pI&w(Bc?&6(pvuI z>aZG3mhN~sii(_?g60V(rM27@upNoXSAETKK)RgH-fw1k18ka`<{n%zLa}uGnyrkV z$Qpww!{j_T!29a|^S)=ob5O?T?7H{>GqzjR_i>>!-qQYL#o&EbXbl~!fuc3rUZcnt zCB%;gD&}NkczqgzWf&Zg>rO|0^^|m92#d+df}(`_s|D*msWNyX!j@FXKv!t1(#^-O z?tZ53aGyZH#5^zVZr)+C{v|s`nk~^}>fW_7bONCl+}&dTGJV&4|CC|(2O43l2hiyC z_R|@G?EA=r2YY}FskFCBldM%OJf;-#;hw!+DY%A##rJtTz<%}+be%|+4 zDID%>Ml3cb+#AU$o&qiyO|qOjuhZ!ZfyPkRJt>XZ)=*n|Mcqz$Im;L|>7>U}VY_4eo!Rcn!ki)mI!oTRR^EEY?!O-=3~cdy)4Js$ zp{gas>#TGA7wT^ z>ESxU1qA1L@zaHzPnGccP|DTRA_Or0&?`#MT@!hi-4O)v=zMXjKy>@6?v#Vt>HKbp zT;BYn?Z(WF#_Q1CzcE@3*-GWxnU$HAH4!ZFk(v?mirV zw26OO3iOT&b#3pr76rN$i7Fj_CBypumrBYh{oJ`IP>D0NGP0sLeT8%8m9jS6J79a9 zy1>7XoQ=7ac~RZfGBgi8FM;U^VRU_^8P@>?1u{DSDHYoTHT38O(U%kQlFcONy@kn3 zPO_D6NEWu1Fk?$Xxkl;J$J9I}mClb}qt=WDfMfKuJ)I~Rn8!nM&k73VpioT>^557J zDtd)1Q@%ee?m<3{nzYpTrJObSel&;6O~v@KH*(%SJW;UYG?Cj%F*cv^2;)Py%gSzB zd9ji6=rEHUH&3J?(XS;#Q}AlN?Sgd1K|PjbmDS0Xre34Rood zpxb}Uw8;vU`%9tk%=up|)st_&8>Z`WKw6E4&Qe-FzK5ZM$L$mkm7F^>E+Zd`f-yNm z$FWrS313tHao2P=rNeS6>u746{u|@#qO3$xh+sVTi}WVb72!m-``nU!EI%M+irSXd zJLgXUD4@I>lx$GcL6S6`St44hcW$ikHlyVjUue|01 zY~Wgfu7?MDxg~)mFMEZ;HowXlp{A_M+#@&?dgnv4wTLR$kyHQE;-Hn=13lwM__;II zyL~&wStijOWTL;*ic54U&Cu` zi`-X}^nQxZRR@g|iBFgQ?o-`o^-Auv_wy3Q(fyHbuDkeyiDd}^-Mg~j?EtH=@m1skz3)J z=zP62>_(K(5e3|%%pf^7g%|O@Wip2W+i!f~gg%OPr?QWNHzVvxl3oWczD$o+;FmYc zX=YIgG^n|H;;&Bov4r?6OQe*z{giOQw8(k%dV0K_+yVtEs7ZOPGlm-QGp3druYz{2 zA3Joj6Ez{UexV*QjeNpmKNIvaHZ`Kys%G$WezD^|mh#|XyM~vhDu=ez=;RsukLfOQ z{CV1=8b)S;Q*vVd>bOEK`g)pp^#{){o2i2uYEw%h+et4;BtzZ!r#!&(kh95%d>lhj zrgZg(vD9}D-XG`L^}cKcFLN#RM`ZY%`%OO>5%+ShM<~;zgo>%W$`$BCOgSJ=I;h(#igH5 z+MPoB`iUwkEEMQ1-@b-49=31xbQW5+hre6iJFC4RfCvM1mIW_X_g4&m!=7kILYC4U z@=?ud@Aw(AJINK2`!XMX#vXHgqZ)38R6Qk}lVy8zJeS$R`g`+s$wqYF#ztSfjY0Mj z1Qr8j1+E

4ztp5d)_hWT=Yf=2T~fgT&g}l!Vf=X=eZ0dJJe#Oz$kNEvWn{`6F#H zFw3=@XH6KDg7sNkw`m8p%hu?2v!t23r3roIb4Uhk9%J&PNAk3X0*b_NSnKZbib{@S zbkT-<>*MjBP@pR{EGXNf#-MNii`p#GpRR}Me7N@KOxXIrUyR)SKFbQQ9fK#LZ$BmN zlq|Y3l3*v!$if?FR6bvMM?Q;7B>!eQmeYe=`oLPUBceDptwOfx|H=h`N^vK`lvgMk zmC5oFJ2LIIx9$FjgC9cuQOgxpLqdthkRc*N2{Db$XxhXRUE{vKa4<+E=TOX${g1-J z7KzgvYs{8G4mmO3`5sG%1hTX$Qi-oMiiNIkRi}}N@mOiAJCQ05o1unp%1 z-^#Cg+RU1waV@g4V;SXUyms!!jF!)$7gx-FQy|s8)_(0eMImrPh0{%`!hbQx0QrHr zaGcy4GyYh^IwN$h7azgeR%#C0>b`uvyY;MX%9B&AsF5EweRg?lAl?0xjpxcicOpxo z7vo&4`_%h~q4n)`E=z20vE?9C$E!@@;)ImDKb;tP#xAFUyMSd~hq5p(ei8|AK<5HD zm~a!6<0e}E?K3tOK~B9JXm}qjGAmuP+UU1_~>duTc3p_D%6+n-s-#X)gOk}p( zc9>gCTK(e)cvwu!Q@K;0HO-H~^5#WO_ccCqEV<>_Q1g&4tRTM&fA6@#FmN=1k9%}t zq5*4ME_Fw{Zk*69f04H$+0>N~a_*L&k_ue}+cK=-&|ccZx3+b~UZgNLs`8xz_U_}0 zZDMJjMStKkZ0jOU1*Y>&(O0lKoYX#iN$UuB`B2K}vEdbE%CDtn_>ynTPpM(i-WLC} z_>z*b0gJ<#5Ax4yuP8%i zGyKSBiN#4#4_18ZBH%S%aLWmmp~ZW7O{@zq{yly|NSrlCKfi+wY+1;x#pzLH| zeMwwilRr>KgY7s>I~ir4-CRsXW`PYfz#+$S5VK6vky$9<^VgzD zl|2_Xx~n7Azv^d8ilo7B|AbWjB*psQuf5gCG7F9PdfshHCdHZvg=Fio^^DDae60%M*8uQ9vZ#M{{A%4nH;1#9G$MCL6E zp>Rbu3MV2WuTVXe%)F-2kXh~Y-&Jnd8eL^jQ86fQY#gBtoH%>#`WciIVyeowr%vr| zGUrxYR55WQ9v_ejoAv-E4mq)yd*^t+ZLAkJ*~JTyj&g4cKKuMCh(p_P!5Ce)aczsM zf9kt_yCd5_UiGq+%gCm(l7aR>^DIkg&H`B3<`k*X4MwBJqvO={R_z;?ZfeR0lJ<)& zn>T?7agCE+b2ay^vPNg~X1Azo50xg!bXin{o|st1CNSmPQnFq;b+~oLI%NRdn~%>@ zkvS%J@6wC|%al;zx?$Oct|NFXJc7E6Je8aWX=#e?kkH6un<5u#fk(<12&psLby!+| zN93w+Tv)1`Q;myl>SaR1PnUu+OOG9DSi1EGWTVA#c2=PmBZ052<;LNPAE^& zisX>p;*Z;5!FX!7u^T@f|Lb4*({`c5K?p&^bvzuV{MsqQT%VtQ+1!pm1$iR}ejChb zUvB(nVt$W+a7O)#<2be)XYU6xq#k~P8J%C3nx|UaW7|rT&=v*pO&Fn@iqrK6dAyut zeM_v34*b#T7cajTT~YG%_wksj?_Rtyf>DPfVcKGr4-#jLgxnS8GJc^5(=Oe*KIXxUrUT)@8$5phqVa+veVg>j%pca6_8J;uZZ{r7oc``wWER zeK7ixof<-sV~3z>sHvEsS5R3it@-6g@T(9XP~cm*Iz{G$j^gB9Y`f^j_f*VZrui^Z z;kywSnx@@LP+IN7dGVm)Nu*iV?IX!zAZxF``<`zX5)UHp>PxKg#mN%j(OCXd`cHq)_|45+@{$n%G4^AJ52xgA9zT&j-2q4P&R2&v zon(XG!Qu|Qsqqt{$6SuK->&CbBIMh8D%ohIqZMnND@H@V*+-gq-Q!X51xh8a#k4MH zoNH}Fb{j9Swl5MHN<+mF(rfs>ykxnsc*k~&Vy(vjs9&^`XEvOYv8yRW_sN0qqfwb3 zZ1xuRGc$;`{rb9vO?UuN8gZ`yaXoNvk#V0Ix11sVGcg~_u}A76T7LTBckp}X`|eY( z2S}=|fqh}Yw9Z4ZiU`mG9Z>hUSe-^!mWE80hbeJUC|{XMIBMZ}`t<_g4mY=UrxOWP z-sY>54AV#)LN`OYdwN)4LRrw)?r~ss@DYk}*K~;3GiwB%-9B#;u~CNemQ?wov_{d9 zjn{weFlodIG>Gr?q!(8UX#wwk68G!9`a1{*pppk&n+!3E42zX{B`r(2kX}Yuq$ARz zS703TVHafTTu(32-cz{5(V1a919teG&gr1S7n#SCv;yhxWwd|$S-h`ybL2kzUG)Hd zCP>_sMubB(6#+qYo|x3g*mLVc!jx-%)W7NMrhc6aD!DEs-O|nWOb27>?UxWP`;_SD zVRdkd==yVxEX=J(@}yDd693pnq+v<>VcOqWrf^oSVXZZ%7L(Y>B>a&l!dqQqOJ>3Q z7=Nf#((iF=eyHq2dSq)mJl$tGLx_+TX=x2$)@CFh{Y#rto{FR|A1!&dx@>DxprRGg zlhBI=2%hsly7^RyCp}9=vz`W^zzBg9#iCmECdc@s^kGf#sn^H2KfyBP^682=3t#h9 zFsZ@(HP4&lq+OJB4+wi^{CXtm=8FK1=EK&en*FmZZmD!CcE*8?h|;*HBZTy<_0Y9YGRpV@P;Sus1&F&V<@h#R;DSCIVQS&i8n5iy!L95{l45{T4%7PY3b_m zLyXv0)6$pN28#6>eZ|c5J$X(PRL9?)_T~)m`C40^?g-`=YwySCUrwFpG^a6qm)%D0q2v|p zGm?M7&zr=`eDqnQuSZ1b<#pijw2Xnb>7-tr3~5J@*%A(F z1COh}qqC%ze%$XX88P4vhBv|}A{XGOI5qWFq?(TPt!u$b9+{ze>sm^Y#nA?!D9(vR z;oXuj?ihTf$k$soEy=RAv(?Bto=0=2En?7GEpG}B`h#Cv6Q_J;z~n&3BpD0aep|YV zS#?Jt?O{pCGi_?hD|lD1>49$#QKLvKcf;hiM@QQZlKiIwiT zN=Y>7sam;f4UK+JC^p8ou??UN-x;(o6~2yvKv8kd$*`z;G7xSH9dYD3#?i>~#)~Bm zic^b+?>)dMVjozT+3kr8r-VEAuwT{ha00l#kv`8?pM)Drd%(7$P7cPb3Gjiok38U1 z(+IP4>b!rVA95f6G;>Oc{3$UZB!pFxekDKE3}^eNzA!FGrSY&Z)Us#v{GG4&{dv*U zRY+~cWV7ck#>f5&aNzAyT_E56b}JZMe>&vwY*ijz^({#Byd=VFgP2uNBmH2{itzpU zD!yh13EQzv;YKicNQX#BWU1Y`TJuCVeh$X8+sI@XR z%EfptGlx^b(BgHpz-i}YJdTrY@1d(|3_WI(ba9^CG=i`3VOrXo4AYEF4$cFq_Ej4i z_B{F;8XHprO^lYK7YZGM7^U}7t{xoI%X!QF1TWd%{h5NTHQM6xa&no*T1bHb@#_<= z*7lw>X=iQLw&Ipyo0gpue<`SMD*QBmR4cHyGv^@FaeQhd=3aSkKeh^G7B)(~0vD1M z=&wSSg(+OzNP^e^?T^62HJpW2(?6tL4C>d)g{bD#fOif;8+wfn@i8WT)CPv`2(A?D^Nw7Uo7g;Oi;IO;!WPhmrZL>x^t z0h8rbXG9v!S9uYAuf$@PBjl#9DBIB=FjDtY&wqdH5GwRIc>(#7ePSR)uH6>b8`Ohn z+(nL^W9oIdq#45b6;uyC`od$=v&`R&U!S%*gq~Qd?QuG7UVOogUJ%*WfMvPO@7B?{ zXs=qgsbUzH5v+apS9baqNYVbz^9l^L#4aJm3|^v=+E`mqeBbyJ{totcr+Dk1zWZA! z&P0-gL5x_6+Mf2Tf{E4J=F_4J%H6#{hZ6k}RowFIk<=mK7W_^xw3Wk(Jm7k9r+N0^ zuWoGs#c8H1`eFQp9x3Af=73c7415mt+4#*tFD;`%>8R)X&Ge@5PC=towMTr2Z;UsU zL;B3P?}XaH;O==zvl;qX<6?U>@ltc=#YU(=K?*GB9dldodTaH`=MdfGo*Nl|dN!&T z^x^0ivFHy~Rrl4OudV!SBLbhzgC%kOsTO_yfaOMaDagSxniaWP|CM;L*7XcX5Vn$| zwmmV`xc*Xs!j9YXE64@1!S~eehxHKglQvBw85-X3bjy+W_;?Mw_BolPBiC0W62yco z7M+NI&OX%sXvAoj0hJ_1i}>1> z9QHuX3*{_jO2#;952zq*^FiVzEPy%Y2$${g*MafzwSUb)gvJdYW5iY>;C7DISUc&9 z3t8aSXZ<>(9yf9&YB-i@v0K41C5`D;jS#FNn8EPAWJJ}gy3m9tmqVbQOdVIL!)!q@ zt2}``k`MJm5^!Rai5g9x{%bJ)O-7sVxX58+{Y6K*e*|W9mOlV_>MlKYk*G>S@oYtm zu%LOCK=|B&xSSfp@|(k&Uoz&L<1uX-Tj5-RIzQJ{!IlV|(NmX77aV&MWYGTp&!bio zhvjDOIdiJ9suQy~OmUdNv@Z(@Q9Gp)QYF5o^B(P_0a(;sbyeVToGX6EZg%G{O$(Tip@eD4W|xMGJN?6HJlweei!QE__l zk?yBH4bjur2mWB_ygA3kU!GrrN%dX@Bk<06HM^a+AGvq(t~(5%rl16b$@A#$i;3TppVR78A#C0vis3JE~IcY77y3M zGf4kE0Hc0gl5UHPepGV7HowicEt4>1S_Pj(Oy$ZZ1zQu}l5Pikm%1Q)@XA3E`~9=3 zkye4pxiluQD=4|2#?+aQi3eR11Eb~6mblr)3az95WOsCFI4%BMLPcSt27ECUU=~uU zguhgx7~QF@CUmQ5jCy_bJKWFkcKibI@p^wH0jyyWk%y79D-!Ep8moC{U4mcyWo{1p zP`|LELoMT(T!X0?7>AOhJ*^4@vOdmd0WOD-!oAOdv;_uIr(3_izJUS`Sa#Su+E>}7 zOG=M9#8!%=99A;F{a`I00NkEnqq^jC5*t1q@s>;B^|@M~Pj$ccE=>q8YDN6||-k2F1G|p3C82^)t&ggAYBI?d&%(R)KMq%EY2) z*P1n3+CO(}TZ52}-|a$7_XVSI=`E_p(YVu|0=WtQE*U@HH2SLNzs+;tK8K6=Nt&Mc zZ^aBKbi9N|rJ$BVKH-QW>uRAvslNUXjy5&1HG^raJqWo={I~1ug0T>cyzf?=iu~e~ z@(rL8>FIALRo%Q;a3>!1gFn)Jbjw-j6Fxb7d66}2-mGhay_+Q&+qIGmUw`xgX0_mj zSV`uzDv!)V(`8hf&1;D+IVkLol$#Eg4i+cXb&OouekM~^Ndfxm<^0Q2%;zkWm6nAN zp)hI8Y1_J9F9ra-%L@wPEsQFehzje2caaYMbf6MhBdF@@OBa=mSKFB;RpK$H$tSGZ z2-;9hQGUn&lE6GleX)$s?C&r`s)7=%t1L;shu90o~%`{dc| zh2Ofnxppr%(*Ben?O&kv7IfApE2Xg!^Mjdm6iQg|WR^%3;?G!MW?n{plsvLp%+b#q zrXYs2vUl^)d>P?XVg><<%&`K>xKqTD5ieJVkT2Lt_ETW9nfhi*@9P zBHUn^F255=qSDU(!0#>$oab@*j+FUHXAQvjp>J#9?@jIm>xLKD|GrGuiCw(5J=aAR zwmaOey{@J(o0j6<+;ET@_o3H0G3&boo9__U8G?Ld!h*&~)p1rM$7rR@_dq zMRfUBOGXRy2Bu|!o!6zTbS8QDdzG(16#b41QGpQPC`yatsv)RW2K}5QRefkqj?{A< z23yM9yqfB2hb#2In*WhNfJs6?YJ@yqwBshc;`?R5@}Aany9OPuR?= zwiDOm=1-(L`T}uhrEQHbPLQ^x;k*CauNj&y;mZv^mdezYUP+W&&Ai%nN*-fvY?6S> z*K9CU-flO7U<%{Nyl!mPUxzC9<5`N|+k4x|E(yYT9}~R0W3!;OVa#2`miU_A*i6SV z3%^r1&t0>G^&+g}nue;LZoSNhIxr;6z2j>KcWVz6jCq-jj^>V?WL4>uYDN7$vfg=A zHFfDWVk*)2VS;Q&eN@7xg1*)LnaLZPn_cw~j2RWOW#=+~xT>7Gg_Lqm>IYjgKkK;% z(!E>g9EghsL+rIEWUZGCyJ#z-6H<}M{cM6#)WKDs^ov4~Y(#S4_dH$iFFEfq$?baU zckMde^x71}+)_@-M2k^o*TN+^zat>#Jm6Rd5nMiQcr^E;LD4Bk1=1#ndV1X#^sVtS zTA_LYv|KIwt8F6dg7s&-!8;hCR`IGi1p!9X_?BAH1-jD(%R$z%rHB=$0y}?FAj#qg zp)y`qP=|KX1`!;`cPxkv+H96PPir!>aZ;fzEltA7`owQdt)9P#ec(jrxiipwA+Hud zfSuVe=idS(q|e2}QyQ6ngl(nsPb2=&+VKqg;Xjs_`L6Qpn+CjTuPbte{zu#VE50-D zcRe~bjiExUX`_Bq*#btAVoZU9;J4|KPf1#DMk!f8(J zJ6;F~2IHk`4PQ<2gF>ZkcwB)jvm?TP#Lv|@=!~^_0G|GG;d%JJPj##T6ZLsKb4lS4 zk@&^wz;YbuQWb^PZHK(L1l!wtSI%WGyDj;XB~6u{;AcMSi69{s!#@`xy?jo|MS1aQnr*zbJf^p%nec4w&XJ ztzio;LRw7=41=m_WzL=` zk0G|WKCXN+{4BBdnx3`yj>smJ&<15GFFGws(7?A>eei#al&Qr(Xb{#I)&!V!_(!{9cu|502K$k~ zL?c+F1UOq$2gzmo2wZGA!Q82<9>!`WSxw`sjoo?KM|aGYb5}%(G7cS_`P58bXX)y1 zzMlSmmW&&&2dk$yg{U8rB<@s)bF?f%vWQPl;xUKG_%&mhJlb@mpi70JTLe{AaBO7p zB3cqzo2De2?^YqX+KxnEE+vlNW|s8#b}z0Wq`yTIlfRgl?Jn2%3R>R)R>j)|E+qfA=v?5cqG4W6NI!PmDQ)%u?%Uc{KBWUv&$z;U@i24&^h z;?6PhaUKGG0$vt<6K7IZ#Cp~(62x`xa^(_Ppvax7+k1j)A7bE-HUPR+7?rh;vbcC2 z0?6aZ2oy|2PNVAEqx_wb7_2%W1jdRX&M>@fCnR$Er^AqyQ6p zZ`aK{Jt#Yc2wMywGuhJA=bP?hCGIp2_lBE`=kYg}Ro@B|ZI^nZlsJ;rwi4|n*z0`H zhe!BaG5280nt(wbVaaIuf5(|AdwF~aj!>z4>!P+cIW4HZ<@6?WxxB%1@&y&0Q@$q5 zjPs7Fg^Wx?etDyR%Vv=VgHdJiMx*FQTV;X@WQq)0D|aZFS@4r+Ixr~y{-rD{t`E~m ztIhXu{yP@(ZT2BRSs{1IR;s_pyQ;>(ly2`X=4~~$AW}H)M-AYw&!l~4gkLR4Z)2;b zRXVXSu_^td@v<6JD+1=qD2jm@?;2N)Y!c(A8_mWnWn06mLo`YP32Y~sMW?p{R!ZcY zVVk8dk8bAZL<~H+KHk@f_G(D7fS$2K!4g~`K^JW^9< zQXS7YhejFEX{&f+oBA%zu#=+FuB48YA6Fh;6cd~h0zUEL{kez%sO*;mmt(8ihGE@Oq6oCdX{kuPaT*Yo=B?c`;}c839(k7UXfCo~H^ExCjA<|4mNrAV{Q zN6q<0Ty|}=(=W=4u|Mp6{HknOY(X^~=Eq-}G+WA1^G530Bl3LSMGJtV*y-I3|1V+b zGlB9^Qt9n@bRAzDtIzoCc{kEZ%@~1l8tOvVA;6;CMUD;;ObWL$ToQ560Q)9%_*Y&L z^WI~*--YXu3H2tq92LsgpW%>MIc{T4-w|6@j_pP@?95G8Q9%>9-*Dm@ z_=$0>L$L9i-2%EJGD?5pd{*W?2JWqrL0guFd@1Lt^~=bT0yV5yEr7);(P+zRwOyGL zc_i?5=*#}y=j>O{&U_a46+-$%|5x4~ODB+ze3$^Ga!L--Tside(N?W_)`2`F7HU+p81$Hy=RDbC2P4B}x7u}bN6_+Cu^#%##g|Hy*uSUHAi1mSLOUfp{5jFAiM_lEdg)vtmGh)NjD z3prV>#Q>rt+mHKVI~5;vauM^#*`z7XLLR)t7iyv(M%$kCkX(O)agJ#!%SB_k+F4e# z9q@hofBPl>(G=JY| z=q>pULCKw0%|(6$!SXqa2~%SVHG?kJZk6lONTmPZ#dy-$gp9OMfcoWX=x88mOSd>n zr8L~VWV~9V5o<@1*Qakf$cNeZOs?ys?C$ao+|{jGD4~%}EAW0= z!HQrJ^8p)BJBty4sW_k2ANh^uZ?fiHUs0<8tzPT(GHSy4dV<{s{KImk1-;b# z24QT^gyNZ3ss_Ar0yxFdB(96a!yx~GWp>u-dY*KejHBaV^+*$amOXCzqwr+`e{+w% z%^!v32THfBi=q@-sCVFwUeq6np(+?u^{G0I>QACO{BYME(EH+M4Cqkc9~e2+W=l{| zQ)+j_q8~)!T?@|clCH~T$n`n0uCn$J@qlSVMysZ;P`~Bi|4-2i1C$mFM8YRk43LMF z!0@@%lFxG+ZM$9a-oY*{qeSq2SCD(o=X|YoGZ=V7hr+Y1jle75I~gYvvzY{vZm?3S`YvBhF;1-io*4QiXu;Qpg9f8l@j}3OwFf8ZboI57g#GPnz zKoiqKK$Yw%gpBe*=l7-S=Y7!JDiRWQBEZBwmDO4E>a&^x8o`H+#H2X;yRK1&F=~#0 zB(I|#FyAi_|6?GM}Z7-c0b-8=sh&aiaYEy&%Sg!|4=OL4A_u zZGCs>uBsGL2+c}QEjl7IKjE`y4)&h4447fE6qV|-?Ex9Uw<~u|gz?AG^XhPMN)IoS zGC?C$&)0sCmap>pGjwPGP@JmV@I2Bju@xmNj%wl2;eT@dLt$Zy-U`PR0URw)EuN$) zaK9?vX*q|`+R5jdw?837Fm0GIW$riB@%vNy*CVBF($JdqObFKbIDZR1KHFT9nvZ4t z(O)J7_enLuj~u0__^gg4?||ZNsAAXK6dSx*@Op7mQJ53?Gr1Y^$&XDfh=~K6fe&ul z6S3{y$y7K0*kSW5voO|8+IZfrr0LraK@1hBeiC}{(Ob&rFbGA+#VlGsw+gU3JpM2z z%cA_sdK0-}#*CgMc#<&64=@%j5wcw~fH+f99p8UQN{Ym*B}wf5$is4fw#^xR_wa}? zH$#b+e^QNnb@zO1CyP8DPi{xVW^HAP)rYkHF6=ViS4E(Z$VWt0HjAL}gE!!^z$50P zGFGk89F5k%#k2WW zd^sX~*4cF>yDIq;tUk%xZUhf;1>^e^_$e!kzX5eGVyhVWNHl`xDOS#TvdY!qK8))R zLfexiAYx}Le%(SvbWw_#U%NZoWM$$JNxBbqnanFghuebUqJ+?NpvCi!9|`_Nt+h{F zM#BUg=jW~qNe{-U{?HY41e?>B#+ckQN+|S+3TU}y@ltEsqkxc0h3+ZfGHd;O%tGqz zPaXN{Xvdzg`uXk#G~(y2Nu}MMUO09!8+VJOy?Kq4O5KKr%=8Pn{g#_F{cleQWG&`_ zP-Mi<{c;7#k<~$^qOIL?Xnlcy+O9}{hH^2kzNSP~;N)MR_0du}M(WL1n)>FC-q=X) zdZ;lyRCcHJ$of!aYbLa~26uyvHL=kyEt9}D2>0bL-#}bv3QY-*l4_xCTJ`z8O|i~q z*rm6Sf`MbRxS>X_c00B&kEoa!Vn0A`&lSC||7Up68BCHmw)BPDxw}OtysmeIiv(98 zxGmpA@P@98M*#MQOzolv1YB*SQtNL<+S-m}XhjoGW7e{RLyqt8OWl~8!Y5TFFq_4; z-o%z3UQpZHML6pai=`HDKhIWTwOML=-zct;II5u^$NR3wAC7G;s(khqmLg`x>qe#mG}R%GKy znjNchY?b}$s-Ls?Pw%p^gG%gM_0d=(r!OvRozKQuQAK5o0}&%)fZtx$)sI7G2DZ&~ z^fbXvEpQ)(TG%5vCCc%Z7OvoNE$9v$a(GV*DESGb}$VVH>ftFLd z`3BAOblHCeEmxO8?_-0%*-bf z*?+t$z>8RDrm*Q9a4Y2+^5|6`Huq_&&g_Hop>UnYOz>{o_x&RguN+3(h?gL+U1&Yb3Cqp_tbWW;eg8qt zr|SZM##M7P&-4Fh>P3edzv2B0Y!r=ME> z5$-=+AO7laZ|l&k$K@$gu*2pjPpo{9UNPGYJ5iQcr*4-F{AX4d`^(LE?&%+l+U4hc z8@Eb>+1|mrGn;eW3V%)Pshi|aeN2GdMsJFirq4hMRWoXo@+@3Dl(=FWtZkx~pDGUj zoU{2kV|rqw2k7VzTk{Lq6yhJ^i#4<-&and?ql|JK{>gKDz<+K-4=}!)&7ucy(kTkQ zQXg(VN7D>o-8lrt2(7ufsgj&HSJH$>A?sssjOf$jg&w&hEMuh&*gY<_q}vEZf{W-l z9kh^ZbHgpYgfPPx5)P$y*%VgvU5s-y<=@UZX0!<9*QHcm3grG~9W_bQXAu(|9? ztwL3w zTu2_FShN=S#iOzT8O^uc^Q9Q4jVrr0J#BB{YlGHVmYR1CF}A9ly{X;Q)gn56Axagw zMe|p?!s1W|Vgjc0??qkl=XgIs7T+_d$p_VxUauR?IAYjGi)umpI#K$5`m3r&sL-(6 z-l|Zm`^l)$Ew4iB)KS3;^UE6q9+C9&*8C8j14M4=s=V*eB$> zJ6~Zs13fV?-UV*wXZ^^Lw_DZN(HM{qb!ax2UsY0VLx7C8mIsXrwa(N8$?oEH$A47* zTNR1}Yt0HyCtoWJw^Da?%m}*rl04TIF*oLud;4hoR4{`!=LSlUD1{82lNLFSgdf3* zqAMiLW=bcWSb4rA(7o8Gxp%sg$nlqOnU0_jMWpc$o@HOvqC~NvXG&s;B|SgY9j3~o zzK8T|tAIQs%Jtx_cdE(M9um>tE4w>u!A%tzn`cTaa6W0-U*4^e+dCN5zmQ7S5K2O0 zALw}UHDZeb3xc-1W;pd~*4>5Dm&#uoA_u}JlQ0zoqmu*$Z~F`p9i5TbkhrfKWcZSy zDRqG0&;MeQdcr`{jhO(*?PUcq6Wz0Gycx%3Qkbs@Cp%E4uS`#%rOJf(3hI}5FrAVo zq3J2;3<6XY-qohGc~9g&kqp%0m*}8AKQG#;JQ6)m(HWLSduK*9VD&FQ4{xPwMBD2j zM>oB01r{N|{&3k(t*{$xS_iQ5lC+{QKlS^GK zE4l2Y^E8oeBz*gKu0jMVI~{SJ@vB=qM9a4vw>WSdY3Dbqiu-PD7;YwGU_b2Z&KB?M zUPpbHR`)tKuG!r$t_j3fY?(sxEpDeiKH47-b@94uke1F9@={Ic69*Y6ODa#6JsKt& z*MXzlZQ(iYyDcZSkq3u9b0ti(-AtBEufbQCTi%8&5iBacJ4@0E_0Fo4ef213@Mo14 zOHD2A1%2?3J3;ZgsC5v8s0UxSd!9pm@t_S%A%v%0KO-HXh5F;wLU*oxWaPwt*kw&u z86zVjk?~SEcjA5Z^S(U{>y4Uw&=ntyEy(Blrucenbue(qGbii|_*Rp^P4BMOzprp` ze;dB-*z7tJBnfFwHJQ$KKO0BpoS&ahv|F6(`|$8^cFCG4;E}5FlWR>ss%A8_f)}^L zF^EEqEO3U3JIrr$XPXw97G5(Dx_5`N!piSa1Nk#Ut6(BsJkDM&oN>4)BVoFD7 zjZs!Sk{MmK=;^0x>QEOu-iE$E1tIF53SH(B1EP>rRm_ANQ>_P}j5;d~pS@1s4-j9gTap{S5xh7bZ9ooX_ZaD|ydkjGwo3p#x?SS-?e*Gyhw4{38T*w|%CkEdmz?hK8p z2iDtM9qL3dA%-iXK6m%(&FCUS4tN+1dw=T_mML8S9!3d%NTK1X)N4tNSC&;rp&qgC zK7;ryC4?*sTy~ve;w-WL*( zgjKvg-8XeG8~nEhs;?^S{+iVhj9!b^YH~MPK$?T6Hu38pDx5mjSs>H%_+scCM>7B_E?6GITaT)1MtkS~g_W^!w9eHV^vEFE{-#YKOSo+ZXg1s%w z3eDT-552X`vdwRTu?g&*I-<-v&%<>uNe%Xkgu|QNWq237?Ad|S6Tg33?;N&xop0rx zm=LCApyobb@}Br`4R8?1ZLDLBC+z)gq-&O6S@idV#LrH}gRIi{x*Xf9F1hY$YIqvY zftLC6wL_*?A`=QJTY@=o$Gs@v%2_(^e7h`#4^dMQR zgO*;0)S%42#TrQ}4is$LebP@gBA)|bsKjZpd zgjs0pygSzfpXpIsEKjS%<8(bH68nwY9S4e~AXQGd#Mih)OiYxZkQ7Fzj0!UNcMw#8 ziI_4%mRf(mb!wXn>aFZ6L`J3)hQrCEvhli$my-a37G2oObm)Iib6piiq-vLaap}eg zV(wfBPa47(4|x-Ny8WW$&x$CdCUQey)CYVmPY-_;d0psROyd6K0n$cdu!7*fDS}ZQ zaa;TWsuWOoW~+i33+`KLf05#2PoBLGO>>McUUP?Gm#Dm(9=s=W_Qq9Kv!WjHncRo; zr|V8C1nA9|NHy+bZ(d044_yE>(>fqeOoA@TT&WI3mP1)~Z4E#n-o{p+arTm#afg{; zx=s(-b*+(80VCZ3%3vyv4}Eh`I~Si_m)~H}8k>7ekI^%x(m6TFn4eEjuvTQun38Ou zX`1FGGvjwoL12^~Dd(HmJ9Nx*{G@cSxJ;RtNj6lRj5o@;2zO1mV=w0+${E3(bX z^F+3~eNQV_M#6focO5i!C$+Au$m5H4+u@JYU+ZmlXvHq?^?f#5)hrO=TQgNZqY&0! zzutW7#beSrT0#8Uuv=wj)JU3m8zYu9gU~8vXqY<`SVhqP0l9!@r>m&E+cDke{8Fg4 zMR|Ix$V~^rki_KR=5QNg*sms#`>!Wt{g-Tx{hb8QKm*eH8zwSJN+8qARVEg7Nxp;i+IX`R2uf4qvzBg}Jk|m%Jn4*cG8(xC zU`-QJs8*IgwSg*xI-2z3)^e zvNG>fS6a^Q^IMtn3qXSReavzaVyl*EA|u^rphcGA2%{@mBxteT?SqhehOYL$O!F+| z2OJDd#g%HlEtLw}Gz!3s(F_%sw`mM=a`ZAH6jk#gmBFOKSg7%xM3EvA6s#Yf2v&mMWj0^AIGN$osl}}+4P_Kpn04UT=0?U_F7_eZ z*1SF5&bC$Ns_-^AL-5XYJcfI4Q-Asa2%kMBDH4drtj7*gch$2FsKIY{yZN5x^tN^9 zw}hOM=^TxrMk|*~)XSf<3I3+G8^4z{wW}NCJ{B7er^Alc3C36cniNX5xD~h2WH-zs zgaryid8OMp)ky*yFQ@p*cCB;kZ!6O6;ra-#|1g`6+UM@z+rZc;Q?R`|G^>W&2s zlR@X%zS=7XYJTZ=_`s*j>FO|*7>yiaesA2&_*ceCY3Zv^3S;#2WrTVwZr8`FW8RB{ zU4*u3BSW!V7Let8i@_8y%J%f7EH`X{x%w?*1+c(wk*77cVxEJN&gI9-{mU8o)Aw`! zL{LY2cP^HOO6h2EXlt^}3QPA*?)1w&H}VXrG327Oav}vZlU7H50}V~@lQQXdKHX~_ zm-hZjfBs?2GBLT>+g(vz>J3KL7kej(bZ2i>T(n`SJ<1$}8ouSEN>FIjoKfXW#wHbSf=< zx;55hYjt=|n|GXY*yp>g!};b+lKlX`UtFS|xV$X^5Rb!pd3*)R!jvp>VyBARhAE^y zS3gtJ8XG|VBI4Hzd=yVun>xCvrjz!=a6SHhKXuh;0-`L;D=X6&)Yy7|XLfLDu4jeIa3}07 zAz?{BQ{Nd;h9H*bzLjxyhZ@_wlb?=!!m+=9p2|e$Z4#oGraPx(!j> z=jU@jKTj#;a##c0v+}UPKi-zRpso{vgMe^V!A*W(IR;7IW6ll6(Q-+}Wz zBT!n`BKS4rH<4QnDc2&=)0ls7Hc!MhE3Fg?p+uZfh)a%)29G=_`5<58-}V#FW~@p? zzv6XKD{t~pyf$xepig^K(v8nsg~9|y=Cf#nz;DI*{cw&TB9Noi^SNG$w9)9g-3TV4huii?MPbXg94?XTV* zVsH%`W>Eek>-U?yZ|n>wU8kbs^qPWD3pS<;B9jm}fM4Et7+|D7d-XP@WHM>B9D_Yo ze6_uOP|=uT8G?#I7jYA?N7ry!IZ}QVh!c4qNeIBumH3RZ@Y0r5h zEEUE^1pN5(cOwN{pF6~KZU4lzx$uuEvBBNb8d?bIaMOO04P}nr2kOe5KkuJVl)e%e z0razrx*J>xLbH2XFF6tzq3bBJ2cLJAP#?PPvkK0O-b|tq?9+gg?rJwsyLZyHueO7I z6sX|etlJRO5`j+j*FdT>hee28fd-u@GT9%qKM7#lr>|)zkww3`3HY3}vv0bu9zORu zsvI<231{p?_~uR9!g&a?>%TL_0-dQk*vj2wI~!OnNBGa3%dfkYETaE3poB3{x0~!r z7417Sr#T~2jQBVfMbWuRV-9b&dXjcx;L0-V^5c!mTeD+9x9y(-#GGAn&?VJ&_V?-j z|BM$jBn)HuxdJ@kS8-Rni&}6$|5)ipVJK$vrpO_r-P}jOPFP2Z&9@_4ZM$I&E>h=w zKYyRa$l$te_7I4f>@Jn$=f{~w5?{O!-ihrxy8vyi4%I*@TI{nZb-2UPY(Wxa^z1d# z%SXt?-a-Y~@d90hnm@Q)iYWf>8sYM;A=jF_J>g4my-B=P?U zl4#Tai*jAqqzZ@fKfnF+;otv77w-T5B8vrn;jiugKe7DO{r4#OKY|zd9XiJUNB;ju z{C~zG3-BXvWCbe{yfWW6EN(FIXLjE8801)2fDS$O%0&2}Tm4_*@c*s{^99gU6GxF@ zK2FWRWZzk%SE7p(b3beAMhK|}K{u@#c{>2j*XsMprKLIec-?F;{(}%Swp}LE88YsT+q~U+*wfCh!&T45#@^uMWVcWbS!@PF z3C2p;<|C;1{_T;!519RKLXk_D_c-7XX`yB=uV}?dm^pKr-Ka=2mxSS?+Af->UJ-8EMXRrqj^Zxv% z4vny}I=aI}boyY!N1;#(TwD*7I<&-y!>z1*qOw72n%M09 zl$Y1t$d4QXTAn#l3l6)9Q7g*N^9BU%&nil}Edu~C!SC`*#}VXw@+6ZMf6aUCZmV`-=jv67JE%jHa>#5ylet0 zu}Z7vJp(R%IE-(Edw#gRw*N6rPu=IUT8T5Z3X9xI||y~+#Jxbm5hX5V9yXSr%Vvn5A=4opBvOoe&yZkpBu3HF})o&!$gmm zy6a}PzbKguH5&er$u}grg)5iiA3~|*LO#&c8kPE0Yq9KBil?G>!{^?G3S{1ymGbr` zs;b<(>{D&4gBUArWMc^AY_8Hr=~Gc1SFw-YCYN@Hh7Nrz)Vl@eff0jR%hB#@$Y2G^pW~ z=3b{oYF6*=FNx`z)!rVaOJ#$`(%TQUDHY(2!i_n{^zc1=&9DQ9rO?)Op1Qb{wPFjY z2g+usI?psYx_V?E517J*Iz7kh@};(eKau=8P&lWmg}W1EpQ{!GV`d!xJ5X=%0=@$o zO=^@*1X4)|x2tc{_}$_kfRYef1yppX;n@B{5{>P<(vguPu+`ScvM^4B^yKh#is%r2 zR8xxI_z)IjdKa}K8WOgR5~{BQUQ_Dx&>O0+I-hP1j@Q470r0fC)nHf9_1U0Zj~q>^ z#G%BGC!h`h`7gdJOeo%XfX-XSS1@(`LM`ws!8zxM5$wRf*R!}9IVo1&U;6Ku(8zY4 z9G_pMg)FKiU-Yv$@SX0fDExx^bWhUqni zbvsp_fspgDq&%Ln(IOvnRt&o!l@AV@lR@vLOfVN$6#nW+Zc1da#I~YX0mBnriG4M% zDEwwiB+*I=)XomOxAPd>HO7Qg+*@n*u1s430nycOBf%8RGD{Cpx16z2z@OX328iHo zc4)g>!;?! zK~JiTRu0xOnBo-;bBrsf3E-AY1}0RB1)6Rh@5i(Pp6RRnk{T)^%Oa6JjoGHJ@}UrL zdGAIICVA2;NvJ9&UwrYoS|E9X?Dz@!aC&+Wqi9g+$f3h@WMro#w9Ab!3g!xFw~<_XiDsA7 zYyNhF91zPDKHOTK%?~awPWJXMwTm%z;(|`NiPKcB^vIS$5E64kIM7!s-<$fl0N5(`ecpSz1KJ7^4Kxh{%4+ zm$MzSdE28%lqx#mMLrpSQ<32c9q0AtrmeKc?&`>C)VOtDl|M?E{+c%e6zw!LgtWUmxXr|`IRk0RHipm>}scu=J!kI>t z1O~!BR|A*!OB9U4o9Q<5>AG+IA|xf`6{MRd4$IVfLUACo8B@|C|Dm?Ngl&sWJLnt{o@wODgPfYcv?LBoqDhZ(!3 zTKprJp20os0A)Q}*%pn(U!=-MG^l8^@B1&^B42Bd56n&cul^V%l zQcHX1_?UoXvWl^GAD=Pu8`B~-UXM)W&RPY9r&2m{`Ju(Ya7LW8hf64&b1vll8fGWe~|EMa%d-E0a|D62!0+X$p_iaRyL9= zNh=TcxtgqEUX#+inCEhW5_Rr|jS9Pq3U#2q-(UGE20gB5FG>v_airn!JWdkVV~}X# zb+tCsu_|r&pM3OSOG>lYOdRwpkB?rJbmZV-tg$Q5e{KU#=$eV5dg^i?=7_QnM(MTc z?EfUbudeFoc6I6Zd##~H06FjWq@wJU2DGoXZ9? zc22c82uNR!!H(A1TGiI*%8?MxdRn!iTku@=RY`Ex%11~@(6ppf-}NriaX=zQD?B_c z(z?fOoKE@byB?6SigT0K=(#J!E?$B<&(CJo?Y4TBmM04+G0ObQO9yr;jzceBYNNhn zdFd-5@b&Dw){boD{v-ArKO|hq@0i;6>vuhD-Qtc?HN}@;aIA`w@4Eg_BV`b3RQ*{d zlSIyamDOBb0mg!vanTmw4IieY?-~@!_$&T+-*_9|FUt|&*PKcIH2pvU82E^8mQ9

;C8iRY|6Lc0%?Gsc?h^%t9JQ_#|lKlT~pe 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

ur~2Q^$BCdugudOi!P<&=K2Ro&s( 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 V6LDNi;?XQU)O-XizxVjn{{S{am1+P0 literal 0 HcmV?d00001 diff --git a/benchmarks/s3ttfb/.gitignore b/benchmarks/s3ttfb/.gitignore new file mode 100644 index 0000000..a645be8 --- /dev/null +++ b/benchmarks/s3ttfb/.gitignore @@ -0,0 +1 @@ +s3ttfb diff --git a/benchmarks/s3ttfb/go.mod b/benchmarks/s3ttfb/go.mod new file mode 100644 index 0000000..71669c7 --- /dev/null +++ b/benchmarks/s3ttfb/go.mod @@ -0,0 +1,12 @@ +module git.deuxfleurs.fr/Deuxfleurs/mknet/benchmarks/s3ttfb + +go 1.16 + +require ( + github.com/aws/aws-sdk-go-v2 v1.16.16 + github.com/aws/aws-sdk-go-v2/config v1.17.7 + github.com/aws/aws-sdk-go-v2/service/s3 v1.27.11 + github.com/google/uuid v1.1.1 + github.com/minio/minio-go/v7 v7.0.16 + golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect +) diff --git a/benchmarks/s3ttfb/go.sum b/benchmarks/s3ttfb/go.sum new file mode 100644 index 0000000..e52b7eb --- /dev/null +++ b/benchmarks/s3ttfb/go.sum @@ -0,0 +1,123 @@ +github.com/aws/aws-sdk-go-v2 v1.16.16 h1:M1fj4FE2lB4NzRb9Y0xdWsn2P0+2UHVxwKyOa4YJNjk= +github.com/aws/aws-sdk-go-v2 v1.16.16/go.mod h1:SwiyXi/1zTUZ6KIAmLK5V5ll8SiURNUYOqTerZPaF9k= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.8 h1:tcFliCWne+zOuUfKNRn8JdFBuWPDuISDH08wD2ULkhk= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.8/go.mod h1:JTnlBSot91steJeti4ryyu/tLd4Sk84O5W22L7O2EQU= +github.com/aws/aws-sdk-go-v2/config v1.17.7 h1:odVM52tFHhpqZBKNjVW5h+Zt1tKHbhdTQRb+0WHrNtw= +github.com/aws/aws-sdk-go-v2/config v1.17.7/go.mod h1:dN2gja/QXxFF15hQreyrqYhLBaQo1d9ZKe/v/uplQoI= +github.com/aws/aws-sdk-go-v2/credentials v1.12.20 h1:9+ZhlDY7N9dPnUmf7CDfW9In4sW5Ff3bh7oy4DzS1IE= +github.com/aws/aws-sdk-go-v2/credentials v1.12.20/go.mod h1:UKY5HyIux08bbNA7Blv4PcXQ8cTkGh7ghHMFklaviR4= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.17 h1:r08j4sbZu/RVi+BNxkBJwPMUYY3P8mgSDuKkZ/ZN1lE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.17/go.mod h1:yIkQcCDYNsZfXpd5UX2Cy+sWA1jPgIhGTw9cOBzfVnQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.23 h1:s4g/wnzMf+qepSNgTvaQQHNxyMLKSawNhKCPNy++2xY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.23/go.mod h1:2DFxAQ9pfIRy0imBCJv+vZ2X6RKxves6fbnEuSry6b4= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.17 h1:/K482T5A3623WJgWT8w1yRAFK4RzGzEl7y39yhtn9eA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.17/go.mod h1:pRwaTYCJemADaqCbUAxltMoHKata7hmB5PjEXeu0kfg= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.24 h1:wj5Rwc05hvUSvKuOF29IYb9QrCLjU+rHAy/x/o0DK2c= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.24/go.mod h1:jULHjqqjDlbyTa7pfM7WICATnOv+iOhjletM3N0Xbu8= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.14 h1:ZSIPAkAsCCjYrhqfw2+lNzWDzxzHXEckFkTePL5RSWQ= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.14/go.mod h1:AyGgqiKv9ECM6IZeNQtdT8NnMvUb3/2wokeq2Fgryto= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.9 h1:Lh1AShsuIJTwMkoxVCAYPJgNG5H+eN6SmoUn8nOZ5wE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.9/go.mod h1:a9j48l6yL5XINLHLcOKInjdvknN+vWqPBxqeIDw7ktw= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.18 h1:BBYoNQt2kUZUUK4bIPsKrCcjVPUMNsgQpNAwhznK/zo= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.18/go.mod h1:NS55eQ4YixUJPTC+INxi2/jCqe1y2Uw3rnh9wEOVJxY= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.17 h1:Jrd/oMh0PKQc6+BowB+pLEwLIgaQF29eYbe7E1Av9Ug= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.17/go.mod h1:4nYOrY41Lrbk2170/BGkcJKBhws9Pfn8MG3aGqjjeFI= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.17 h1:HfVVR1vItaG6le+Bpw6P4midjBDMKnjMyZnw9MXYUcE= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.17/go.mod h1:YqMdV+gEKCQ59NrB7rzrJdALeBIsYiVi8Inj3+KcqHI= +github.com/aws/aws-sdk-go-v2/service/s3 v1.27.11 h1:3/gm/JTX9bX8CpzTgIlrtYpB3EVBDxyg/GY/QdcIEZw= +github.com/aws/aws-sdk-go-v2/service/s3 v1.27.11/go.mod h1:fmgDANqTUCxciViKl9hb/zD5LFbvPINFRgWhDbR+vZo= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.23 h1:pwvCchFUEnlceKIgPUouBJwK81aCkQ8UDMORfeFtW10= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.23/go.mod h1:/w0eg9IhFGjGyyncHIQrXtU8wvNsTJOP0R6PPj0wf80= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.5 h1:GUnZ62TevLqIoDyHeiWj2P7EqaosgakBKVvWriIdLQY= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.5/go.mod h1:csZuQY65DAdFBt1oIjO5hhBR49kQqop4+lcuCjf2arA= +github.com/aws/aws-sdk-go-v2/service/sts v1.16.19 h1:9pPi0PsFNAGILFfPCk8Y0iyEBGc6lu6OQ97U7hmdesg= +github.com/aws/aws-sdk-go-v2/service/sts v1.16.19/go.mod h1:h4J3oPZQbxLhzGnk+j9dfYHi5qIOVJ5kczZd658/ydM= +github.com/aws/smithy-go v1.13.3 h1:l7LYxGuzK6/K+NzJ2mC+VvLUbae0sL3bXU//04MkmnA= +github.com/aws/smithy-go v1.13.3/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/klauspost/compress v1.13.5 h1:9O69jUPDcsT9fEm74W92rZL9FQY7rCdaXVneq+yyzl4= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= +github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= +github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= +github.com/minio/minio-go/v7 v7.0.16 h1:GspaSBS8lOuEUCAqMe0W3UxSoyOA4b4F8PTspRVI+k4= +github.com/minio/minio-go/v7 v7.0.16/go.mod h1:pUV0Pc+hPd1nccgmzQF/EXh48l/Z/yps6QPF1aaie4g= +github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= +github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f h1:aZp0e2vLN4MToVqnjNEYEtrEA8RH8U8FN1CU7JgqsPU= +golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww= +gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/benchmarks/s3ttfb/main.go b/benchmarks/s3ttfb/main.go new file mode 100644 index 0000000..b5cf033 --- /dev/null +++ b/benchmarks/s3ttfb/main.go @@ -0,0 +1,214 @@ +package main + +import ( + "context" + "crypto/tls" + "fmt" + "io" + "io/ioutil" + "log" + "math/rand" + "net/http" + "net/http/httptrace" + "os" + "strconv" + "time" + + "github.com/google/uuid" + "github.com/minio/minio-go/v7" + "github.com/minio/minio-go/v7/pkg/credentials" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/s3" +) + +type PRNG struct { + rem int64 +} + +func (r *PRNG) Read(p []byte) (n int, err error) { + //log.Printf("rem=%d, buf=%d\n", r.rem, len(p)) + if int64(len(p)) > r.rem { + p = p[:r.rem] + } + + if int64(len(p)) > r.rem { + log.Fatal("LOGIC ERROR") + } + + n, err = rand.Read(p) + if err != nil { + return + } + r.rem -= int64(n) + if r.rem <= 0 { + err = io.EOF + //log.Printf("PRNG file has been fully read. rem=%d,n=%d,err=%s\n", r.rem, n, err) + } + return +} + +func main() { + var err error + fmt.Printf("nanoseconds\n") + + // Initial setup + _, isSSL := os.LookupEnv("SSL") + opts := minio.Options{ + Creds: credentials.NewStaticV4(os.Getenv("AWS_ACCESS_KEY_ID"), os.Getenv("AWS_SECRET_ACCESS_KEY"), ""), + Secure: isSSL, + } + + if region, ok := os.LookupEnv("AWS_REGION"); ok { + opts.Region = region + } + + if _, ok := os.LookupEnv("SSL_INSECURE"); ok { + opts.Transport = &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}} + } + + size := 1 * 1024 * 1024 // 1 MB + if env_size, ok := os.LookupEnv("SIZE"); ok { + size, err = strconv.Atoi(env_size) + if err != nil { + log.Fatal(err) + return + } + } + + repeat := 60 + if env_repeat, ok := os.LookupEnv("REPEAT"); ok { + repeat, err = strconv.Atoi(env_repeat) + if err != nil { + log.Fatal(err) + return + } + } + + mc, err := minio.New(os.Getenv("ENDPOINT"), &opts) + if err != nil { + log.Fatal("failed connect", err) + return + } + + // AWS SDK stuff + customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) { + return aws.Endpoint{ + PartitionID: "aws", + URL: "http://"+os.Getenv("ENDPOINT"), + SigningRegion: region, + }, nil + }) + + + cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithEndpointResolverWithOptions(customResolver)) + if err != nil { + log.Fatalf("failed to load configuration, %v", err) + } + + // Create an Amazon S3 service client + client := s3.NewFromConfig(cfg, func(opts *s3.Options) { + opts.UsePathStyle = true + }) + + + // Create Bucket + buck := uuid.New().String() + err = mc.MakeBucket(context.Background(), buck, minio.MakeBucketOptions{}) + if err != nil { + log.Fatal(err) + return + } + + // Send an object + prng := new(PRNG) + prng.rem = int64(size) + + + key := uuid.New().String() + _, err = mc.PutObject( + context.Background(), + buck, + key, + prng, + int64(size), + minio.PutObjectOptions{ContentType: "application/octet-stream"}, + ) + if err != nil { + log.Fatal("unable to upload our test object") + return + } + + for i := 0; i < repeat; i++ { + // Now, try to fetch it *repeat* times (assume no caching) + var elapsed time.Duration + + var start time.Time + trace := &httptrace.ClientTrace{ + GotFirstResponseByte: func() { elapsed = time.Since(start) }, + } + + start = time.Now() + /*object, err := mc.GetObject(httptrace.WithClientTrace(context.Background(), trace), buck, key, minio.GetObjectOptions{}) + if err != nil { + log.Fatal(err) + return + }*/ + + out, err := client.GetObject(httptrace.WithClientTrace(context.Background(), trace), &s3.GetObjectInput { + Bucket: aws.String(buck), + Key: aws.String(key), + }) + if err != nil { + log.Fatal(err) + return + } + object := out.Body + + + if _, err = io.Copy(ioutil.Discard, object) ; err != nil { + log.Fatal("failed getobject: ", err) + return + } + + fmt.Printf("%v\n", elapsed.Nanoseconds()) + //time.Sleep(10 * time.Second) + } +} + +/* +func timeGet(url string) { + req, _ := http.NewRequest("GET", url, nil) + + var start, connect, dns, tlsHandshake time.Time + + trace := &httptrace.ClientTrace{ + DNSStart: func(dsi httptrace.DNSStartInfo) { dns = time.Now() }, + DNSDone: func(ddi httptrace.DNSDoneInfo) { + fmt.Printf("DNS Done: %v\n", time.Since(dns)) + }, + + TLSHandshakeStart: func() { tlsHandshake = time.Now() }, + TLSHandshakeDone: func(cs tls.ConnectionState, err error) { + fmt.Printf("TLS Handshake: %v\n", time.Since(tlsHandshake)) + }, + + ConnectStart: func(network, addr string) { connect = time.Now() }, + ConnectDone: func(network, addr string, err error) { + fmt.Printf("Connect time: %v\n", time.Since(connect)) + }, + + GotFirstResponseByte: func() { + fmt.Printf("Time from start to first byte: %v\n", time.Since(start)) + }, + } + + req = req.WithContext(httptrace.WithClientTrace(req.Context(), trace)) + start = time.Now() + if _, err := http.DefaultTransport.RoundTrip(req); err != nil { + log.Fatal(err) + } + fmt.Printf("Total time: %v\n", time.Since(start)) +} +*/ diff --git a/prepare.py b/prepare.py index 60d58c1..d6e2ab9 100755 --- a/prepare.py +++ b/prepare.py @@ -14,6 +14,8 @@ os.chdir(me / "benchmarks" / "s3concurrent") shared.exec("go build") os.chdir(me / "benchmarks" / "s3lat") shared.exec("go build") +os.chdir(me / "benchmarks" / "s3ttfb") +shared.exec("go build") os.chdir(me) print("--- install python dependencies ---") @@ -29,8 +31,9 @@ print("--- download artifacts ---") from scenarios.fragments import flavor flavor.download() -print("""done! now, run: +print(f"""done! now, run: > sudo -i +> cd {os.getcwd()} > source ./.venv/bin/activate > ./mknet scenario ./topo/with-vdsl.yml ./scenarios/garage-s3lat garage-v0.8 """) diff --git a/scenarios/fragments/garage.py b/scenarios/fragments/garage.py index 84ca90a..b291321 100644 --- a/scenarios/fragments/garage.py +++ b/scenarios/fragments/garage.py @@ -38,7 +38,7 @@ if 'HOST' in env: config = storage_path / "garage.toml" env['GARAGE_CONFIG_FILE'] = str(config) -def deploy_coord(): +def deploy_coord(gw=None): destroy() shared.log("start daemon") shared.exec(f"{version['path']} --version") @@ -46,7 +46,7 @@ def deploy_coord(): shared.log("discover nodes") connect() shared.log("build layout") - create_layout() + create_layout(gw=gw) shared.log("create key") create_key() shared.log("ready") @@ -136,26 +136,45 @@ def cluster_info(): def connect(): cinf = cluster_info() shared.log("start connections...") - ret = nodes.add_node([n['node_addr'] for n in cinf]) - for st in ret: - if not st.success: - raise Exception("Node connect failed", ret) + while True: + try: + ret = nodes.add_node([n['node_addr'] for n in cinf], _request_timeout=3) + except: + shared.log("not ready, retry in 1sec") + time.sleep(1) + continue + + for st in ret: + if not st.success: + continue + #raise Exception("Node connect failed", ret) + break + shared.log("all nodes connected") -def create_layout(): +def create_layout(gw=None): + if gw is None: + gw = [] + v = layout.get_layout().version cinf = cluster_info() nlay = dict() for n in cinf: + capa = 1 + if n['host'] in gw: + capa = None + nlay[n['node_id']] = NodeClusterInfo( zone = n['zone'], - capacity = 1, + capacity = capa, tags = [ n['host'] ], ) layout.add_layout(nlay) layout.apply_layout(LayoutVersion(version=v+1)) + shared.log(layout.get_layout()) + def create_key(): global key kinfo = shared.fn_retry(lambda: keys.add_key(AddKeyRequest(name="mknet"))) diff --git a/scenarios/fragments/s3ttfb.py b/scenarios/fragments/s3ttfb.py new file mode 100644 index 0000000..66fdcc6 --- /dev/null +++ b/scenarios/fragments/s3ttfb.py @@ -0,0 +1,26 @@ +import os +from os.path import exists +from pathlib import Path +from fragments import shared, minio, garage + +s3bin = Path(os.path.dirname(__file__)) / "../../benchmarks/s3ttfb/s3ttfb" + +def common(): + out = Path(shared.storage_path) / "s3ttfb.csv" + shared.log(f"launching s3ttfb ({s3bin})") + shared.exec(f"{s3bin} > {out}") + shared.log(f"execution done, output written to {out}") + +def on_garage(): + os.environ['AWS_ACCESS_KEY_ID'] = garage.key.access_key_id + os.environ['AWS_SECRET_ACCESS_KEY'] = garage.key.secret_access_key + os.environ['ENDPOINT'] = "localhost:3900" + os.environ['AWS_REGION'] = "garage" + common() + +def on_minio(): + os.environ['AWS_ACCESS_KEY_ID'] = minio.access_key + os.environ['AWS_SECRET_ACCESS_KEY'] = minio.secret_key + os.environ['ENDPOINT'] = "localhost:9000" + os.environ['AWS_REGION'] = "us-east-1" + common() diff --git a/scenarios/garage-s3ttfb b/scenarios/garage-s3ttfb new file mode 100755 index 0000000..20bb6d0 --- /dev/null +++ b/scenarios/garage-s3ttfb @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +from fragments import garage, s3ttfb, shared, flavor +import sys + +for fl in sys.argv[1:]: + if fl in flavor.garage: + garage.version = flavor.garage[fl] + +if shared.id() == 1: + garage.deploy_coord(gw = [ 'node1' ]) + s3ttfb.on_garage() + garage.delete_key() + garage.destroy() +else: + garage.deploy_follow() + garage.sync_on_key_down() + garage.destroy() +shared.log("bye") diff --git a/scenarios/minio-s3ttfb b/scenarios/minio-s3ttfb new file mode 100755 index 0000000..ed78aea --- /dev/null +++ b/scenarios/minio-s3ttfb @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +from fragments import minio, s3ttfb, shared, flavor +import sys + + +for fl in sys.argv[1:]: + if fl in flavor.minio: + minio.version = flavor.minio[fl] + +if shared.id() == 1: + minio.deploy_coord() + s3ttfb.on_minio() + minio.delete_sync_bucket() + minio.destroy() +else: + minio.deploy_follow() + minio.sync_on_bucket_down() + minio.destroy() +shared.log("bye") diff --git a/scenarios/requirements.txt b/scenarios/requirements.txt index b85592f..1d9ce28 100644 --- a/scenarios/requirements.txt +++ b/scenarios/requirements.txt @@ -1,2 +1,2 @@ -git+https://git.deuxfleurs.fr/quentin/garage-admin-sdk@7b1c1faf7a#egg=garage-admin-sdk&subdirectory=python +git+https://git.deuxfleurs.fr/quentin/garage-admin-sdk@2b685b90be9aa848a9450dd582d1d322b25b5568#egg=garage-admin-sdk&subdirectory=python minio diff --git a/topo/5mbps.yml b/topo/5mbps.yml index 1e20d7c..7af1637 100644 --- a/topo/5mbps.yml +++ b/topo/5mbps.yml @@ -2,6 +2,7 @@ links: - &slow bandwidth: 5M latency: 500us + limit: 5 - &1000 bandwidth: 1000M latency: 100us @@ -13,6 +14,8 @@ servers: <<: *slow - name: node3 <<: *slow + - name: node4 + <<: *slow global: subnet: