From 816a29d462a81c7ec858c48f551b0fc394468bf8 Mon Sep 17 00:00:00 2001 From: rubberhead Date: Fri, 1 Mar 2024 22:10:34 +0000 Subject: [PATCH] ... --- tex/misc/background_draft.bib | 60 ++++++++++++++++++++++++++++++++ tex/misc/background_draft.pdf | Bin 166213 -> 170404 bytes tex/misc/background_draft.tex | 63 +++++++++++++++++++++++++++++++--- 3 files changed, 118 insertions(+), 5 deletions(-) diff --git a/tex/misc/background_draft.bib b/tex/misc/background_draft.bib index af0c4aa..2c548de 100644 --- a/tex/misc/background_draft.bib +++ b/tex/misc/background_draft.bib @@ -451,3 +451,63 @@ organization={IEEE} } +@inproceedings {Wang_etal.Concordia.2021, + author = {Qing Wang and Youyou Lu and Erci Xu and Junru Li and Youmin Chen and Jiwu Shu}, + title = {Concordia: Distributed Shared Memory with {In-Network} Cache Coherence}, + booktitle = {19th USENIX Conference on File and Storage Technologies (FAST 21)}, + year = {2021}, + isbn = {978-1-939133-20-5}, + pages = {277--292}, + url = {https://www.usenix.org/conference/fast21/presentation/wang}, + publisher = {USENIX Association}, + month = feb +} + +@INPROCEEDINGS{Kim_etal.DeX-upon-Linux.2020, + author={Kim, Sang-Hoon and Chuang, Ho-Ren and Lyerly, Robert and Olivier, Pierre and Min, Changwoo and Ravindran, Binoy}, + booktitle={2020 IEEE 40th International Conference on Distributed Computing Systems (ICDCS)}, + title={DeX: Scaling Applications Beyond Machine Boundaries}, + year={2020}, + volume={}, + number={}, + pages={864-876}, + keywords={Protocols;Instruction sets;Linux;Prototypes;Distributed databases;Programming;Kernel;Thread migration;distributed execution;distributed memory;RDMA}, + doi={10.1109/ICDCS47774.2020.00021} +} + +@inproceedings{Chaiken_Kubiatowicz_Agarwal.LimitLESS-with-Alewife.1991, + author = {Chaiken, David and Kubiatowicz, John and Agarwal, Anant}, + title = {LimitLESS directories: A scalable cache coherence scheme}, + year = {1991}, + isbn = {0897913809}, + publisher = {Association for Computing Machinery}, + address = {New York, NY, USA}, + url = {https://doi.org/10.1145/106972.106995}, + doi = {10.1145/106972.106995}, + booktitle = {Proceedings of the Fourth International Conference on Architectural Support for Programming Languages and Operating Systems}, + pages = {224–234}, + numpages = {11}, + location = {Santa Clara, California, USA}, + series = {ASPLOS IV} +} + +@INPROCEEDINGS{Ding.vDSM.2018, + author={Ding, Zhuocheng}, + booktitle={2018 IEEE 9th International Conference on Software Engineering and Service Science (ICSESS)}, + title={vDSM: Distributed Shared Memory in Virtualized Environments}, + year={2018}, + volume={}, + number={}, + pages={1112-1115}, + keywords={Virtual machine monitors;Optimization;Protocols;Virtualization;Operating systems;Stress;Analytical models;component;distributed shared memory;virtuali-zation;low-latency network}, + doi={10.1109/ICSESS.2018.8663720} +} + +@misc{ARM.ARMv8-A.v1.0.2015, + title={ARM® Cortex®-A Series Programmer's Guide for ARMv8-A}, + url={https://developer.arm.com/documentation/den0024/a}, + journal={Documentation - arm developer}, + publisher={ARM}, + author={ARM}, + year={2015} +} diff --git a/tex/misc/background_draft.pdf b/tex/misc/background_draft.pdf index 17782b7f3b654d73708cf132d6ab3e5994504367..4dcc3dc70810288f0bea20ad554f24a093ea90e2 100644 GIT binary patch delta 31248 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 delta 27096 zcmV(`K-0gZvkJwM3Xmm}!3!yWomowj+qeS(eslMD6Q$**h~k?(D>iYG-Q3kT_rcx18+ZHFIxfnfF@9&)ePtSdD~hTa`@wo? z^e-eIR_iF}Md9tixK`w0udmeI!L_Dc#iY~sx@H_)rvo25KfV2*(e}gY%iXUx>nPo9 z)0CdkW}E5COk1zkX`TeN8O*w|Pngp-qB|OIn#MM+KR}TN_fh`k4T;+fYw=cw?G0X{ zH;X_u5A=1K#*x^9*@n-nim{iF4eWW)jG+G;Fpg- ziZEChs=_S$)?ufj{~Tta-Rw5B)TGFRpFZ7^CXzlj4TM97^+U3s!ziyXm0Lvt&pDYE z-Fr)?)6u$ZH|htf?r9ZSf*jrkmqhrTZ)~~B>JT|s}Mn`!)DaN)PTdlU* zK6P+?jJL8a^q7h_U>oa=`oUHBrWQ zx214{Gz-tmCHcwOXOT?hyS^7$jRS|`7Z?n#UzI2(p|($dj>GF}z^CVGt+tXr!Z3sa&L9C(eS=m}OPd9qYemVjg5nF@>COYaG_OGRyeDD5|i`A%Jj-uw}}`AFOPU52oM zAt*X{cccxOOJ~#|*A8 z*qcElT5;1kZLsOMzmq3pZvpJJOIEa=z>tiL7@)J7IV}_^Z}4-yI6gwt8l`JtC4;|0{R;nOhL z^K8Ixj@LAPljf29VMa6H*-)R?B<=1z{mcUvmbh!W2Rd!a$mBS6?I(u^&?Q9?^hX2a z;_e6XPBUQ&h)*YD-hcdE6ekxY`48zc(qejl#bH<=rM864vMx_))WG0N=cy*c$T%RD z;yc0@NxNmFbOspweR_(*WK(3PwBg$I!0E}#&-ZyIi8d+C5YG4)K1x1xgiRb9WiXIm zq^p{|Nt*Xj^aklY4x%sc3i8w6+`+LgVYNKLY(vo{L6h8+WSgkmURq(s+LDBFiNH30 zNu6q3TXkNK88ic+#U39i`0yBZmrmbQ&?50^l@a0aPW`FZ0gv(|{vz-P{?cLdy-e)d z%h!?V7Z79O&4{6a2?!<4rrS{(*zouz@_R{Z7;F-d(WX%+S1OgnnJhHUgE{>Y4VFGF zn-#=!yU|xn9;oSb1|!WA-RDMkSieqx&WU46xDvXbY3Y+AaGL-`I`!meHqLsK18T>l zc5DV|Kku20PZ$|FwdqVPU6pBxZ%XgO znIh7|^p5d`I%@Dcf*q?bQGmSdy!1J$ayW#gN55>AR`)qd(te;E{3rTQmh$p{@SHJs z#7>s*{Lo2 zW#r*4d91P&xHxo8$B9KJ+$=5mR!|aYEQy1EcMl@;QtR4!Y?N!nlnRx9oq@x0rLNd1 z_1S8I(3k;;9+Sii7-GT-JGQlM&udbrx|cM$k0U`p6Ej0iUhpuk^Ku!aKsY(&_lQ z2!;7xLArTiorLu(#= zqM2WLkRq30qz>^7NKShua>gGc7wkAzs9~QJ!GL92?8( z97n@dj?xva%V^j?f4cpf=;r2-zDLt5ooNy9dUuG_$lXqkh!$|-s2woIE_9biIP)RJ`lP-yLy=B>E(Ga--wg^7lrJ1bUdGK z$r(e_7*W@Mi;PR?$rq*XVRTKc<3m z4VR^R9!d?UtYb{1l;)~bf#M=J;8UGE&*&v>1$j(=!38S`NN1chl{(3V=;dGmhnQ`{ zaI<)MffKWj~OszIy+dNFgEM+;S#0g3lzfGopy-09F{Pn4g|6*+_-zp_!rEvcX-Z=e}MKE~z zHx@a32Ku(yMx}yb9EDf!T%aOL6DZzsnHi-LZ5B|17S|pTZiyu#bIAC zG*alvRw&sD+?@GnCKm^%QN$8{(%L4)UlVlHze*#$DAP2)jPGyKe26ATpgN7VM znZpz)EYDerD0esodhJw}QpR#YG1<%N-Kbm0-il{8c+Bf}yyGBvDHAf45@)c}hS{Ri!twy}e-YY(@#yw2q-{+<9PNoo7B2#DMk6LB zwms`5g0NarAkL(SRP5EZrQ)C@CxHZEFj4;n+SIm$kqFh{A|xSuthJ?cD(+=RDMTic zKr=X<$+ny1C~^8KF1(Bchv+5SpeR59&JduRq|iR7h|46F$RduHAN}oU5pgGB;?0+r ze`TIC5=92gu_TNyk_K0(F5waw8wx9k@dp7kpja*y9nUoLgOLOi47!$;lf>Mbl%Tkt zV;~oFm9I1ybPq0|sL1#u7!FGfH>+pZ+RHAsZ{~5Sf`CRFBQNH<@elshS}H-e$>YLB z_4QVzUgPpd)|Sdps!77Z=TqKOk3`Zde|ZzbSE9K&Kd3KQOs){nW-E;%&J;RiV7y6| zfd8_dpk+`cLk0xA69YzEt#x~t>~M6;Zr5JV_>HnPi{=~>p%$vuo$KH=+I50L2Om_b zI76g7m%`a&f|3+Stn{dN2-xe|Kv<|K5IHHKKw*^xmx<=~ezSU!G^x8xL5>~_e|&Yo zi@nd6y|(}>pKOJwK7tBU+s5)40}~kV zYkgNbbCinnXo6`rOiF$ACY#Nct?9U%AQ`+mzcq}<YS4+C;P#-oyVB0`1w1fJzr5M=uG@9zd49W~t}<%)%re@CiS2F$hM zp5Z7h5m5lwU;MvNTo#XR&}-XL-#jpZ+JTEj)E0?@{SJt);>nBZ=f_lbzJCx1W;nH0 zJ0m|Sa#z{zw;7z-&c%}#7x@f*??c@^trW>92k!a0h2>xu#ew(f<2#JRI6P~QKz3IR z>z)_tXXZM;urh1gwYw!Me~d$CD*4)j3J5W$sdoppq}IKtz%ng71K#GoN2vc3cpvzk$3$Ouawug_U@PWym$xB_{zfvm44xoMvuzwyW6)n zwl@Tui76(*v($UnwX2CfnBON!Nw5)|h;=xpK*nyPK<8NtiWsDve`$eJ%?XC8_XqCM zNXAm>(iodGKXkrieJb6J(msRk#s~!&sA3U^y9pun2d_JeN1Ery*>fX)t!2gw%NwRjqsU+0 zOz7$5-kqc;NnR0l31E*5T0?o~2h_*9(s20zh)jf?Uz-c8?x*1lhxWQ248853dtaL^ ziGh1I8+sX^X&FajKjfeQ0jkN!xg8Vag&%NtZJ2Tiz|S9l89>*-&+!pI3VeEr!1L6C z=l%Vg{{R~ts@#)(6=oPTv1c-siYqSrrE;)+fJjJUhKoXwwqN{{`xPJojguS}8WZPz z8k?!<&j&w=GjAI3Klke9eUnKRDjV^TW}a@FT2IZ;+h;gdc#Y*Xb{dEN+&&#XJd=(V zR0>yf50~?kDEG`~lk66He`i_Sbj;DDkM3;N%pQYIS+N4m91lL&&p%8xF+o@3U@f;t zqiZvwNyS<0fdMeteAXRYk;uT9?wNdKL*b6qC)3Iq)o^Wq6Ka2IrpqwXSqkq|nX%vS zm@$uZ80w-LF6cUy;jSDq;cY)1zzK{ILjlpk7%VWzK1gvy6I4m*fBjWvuya9UfR=23 z(S1!W6Vfnn^8D8%S^0UKCP9(qz~AEG#z)y6z<>?@)VyjF9nvhwlFTh)i)CYhQ^Oz) zlY5&XD@bCr_qM6P(9k-P1h_(P!4b`WPJ1{=+Dk=yNFcX|Nyz48WXmH8OIC>CIva&i zmRmt`1DVNsQPYm~64aR zGRVvAm9N@a4knP;d#92Q*owSQm&U~f>7C3x@kZN`z2r&aLkBWdWdJAUQ({@L?Sr+7f;DI9C-*in{ zM?|9X#CxT$Z^%x_6y}?;+)1;H0u@JYmvv^?vrC1h<{&XoQo{Z#>@Z@)DW4LUBEJ2JeeF612Rhk8kgpLX@%$lz%wrK z+QAh+?UTQcB4$8xHRsu?ogt_4xl4w%f%snbzzbt^pAelOP=G^en<$9E4kBRS@lYxP z{vG(8{Rtv^7(%K9#OVM1P(n=r0Ui0yQ|~nwGYJ+adl4I1Eq{WfDEW*>bnqK&mJ{~C zGjJ1^i)*JJ@H(Yn+meJ1MrVi9O`D)H9(?)s6*s5`c;X5X499d#t|bn%P9?Q$-t&J{ zmf15dpg7jEN@3(=^fZrdzGmz3h1V@?;y5u9jNc1j|qBY(cHESW?}mOwRh*cWs1#TdlbF&LIY04cqzf~_nc_@7SU+vYKGzC|~K z!;+l$ur03_(301S=vGn?8GyZ0&4TZ#TFW7rxJ}4>dGTpjhmwebE7F$|Ir97kQ1dg( zP6%BJUkKbCgKfYySgaH=g1^YaJ1iMK&LDW2f6fh|aewS_K?AEPZXpHZ77|RuK^AG^ zv}8P(f^qzPn1-=AJ=7Ss5iaxb^i`X^`f{0#QXe|7{~+ zE|TkvQl!R35a(M(AN2@GnkvM+qzmoeCe4GqSS};0zQsel5Y&+qW}pIj{N)zdGOt8?vTJ*Hp`C=2;$6lJ!Rf|93{2jGXWT=Q;RKJor| zdp#pO8fLO@zfH!8u_t+$tL*Y}@S>GsGXTf14h{qF0C>cS+0u~+Ee&xOR)rIv<5Z1S z_vo^?y5!aIVs#{bVjMb1UIqHy!hg&o1qQ44U{}1Fq8qGTus5EC!wC`Y2FHzg zY&ratMWDNG;Lt{7iYG}%kxQ7RDm(aW4_X_%+Ams198V!W zfjE1M{|*0xG|Wj$MUa0u)>*>I0VnkjvO`&fDpP(>h!|NF1@HJy8}{-9$|m7Vca$(F z;ygRA1r=sct6gdV{E#d-rV7T5410;Cx{A3XfbUsrlz{hKlSvZbg*#)<6r?De7BURc z9EN(zm4NEcBK&m67_R;NCteqEN+Pj(9px}agJkA+2%9b1A5Xv$H)QeaIbH4CInA8Mc zZzKq#ks$ktSSNqt_7pfcap1U>W7{1c1IOP|rQ9{-g}D&Kku$YKLQEOoAuUjPhkMc8 z(C-~r2r$>RXx|8t@8L$1UDOIVf#Hg+6Nf#QwPaK=dR<;t=j*}>+j>jsjCMCIK<+QC zV&7_D6;I@rN0;Jurk3d1KK7r)f(PY zCaLBxN*~wdq#KTw&yJQ<+0xOltb%v~In5cK9O-tclxD=>>nd1)tsO=K#8W&Y0Ch_M zS2H~uNN0bVJ@HhjV9Nr0Wja(UVy!Rc{Misyj16z8`A_b6;6~)MNObbGN1o;by^}g2 zva-zINWnJ(n4KMt3@vN|hfABl@m4ZA!hGEb$Ft$z;kfdt`h;4G$w_LbXZy=CB9_!A{p$zj5M(+1hG%U=XZ_J1Mr;XI`LX8&)t@ zuit;gS9)idgn}r{NN?(d@I^C!%Uk8Za()=%dK|53L;V5zqZHmW`N!)&L$2gM9@ocia{qk=v;o+Y^){P?a^}`5;#mrqE2>EcKIoehf(RMEVDea0ND1SjIvem^y!L zJE3?wn4Z^hLdxT7#u3#U(>Pv0Q-H#5!7@lOsdC9{ z#Z}-g<_?EOY|02pXr-lG%kbdHhRL#5*b!o-E)SHr5T8FyxDQdoP=k@WHxnCKLvaJC z9$omu*T4-w2k;9=*W#i(|HKQ2jm$MLT&iFJ6XILz-@d|C{uNHiE8P9B@BaGm3%{_v z;m>=6C5$}h4)XZ+;r_>OY<^eT>r<@0vjQvD0R(lEf*q6GEGPjslQDNGvo0+*0s-=q zWiP9LF)qIa)`c?+NFvE%^gOs-#NhbW#9~lS6sI;2i9GdWS2J+OBI3pUPJldFRxjNd zh=M~Gal}ObZG9sztTO>{aJC?g-s=WdXxcfxJkE1=zPxy8tB9m0BQRSCE?kH!D8wPA z#Rb@?KD+DN*~*psRd-=*LmQnM=k(RP^z|Ko9YA;|$}uH7G6s{5mn}W3wyJ}J^1Svo zFdof%giTIRfQ!l^#AuR)g?EM@4WcyGwqzxO_~1 zLX0y>;*vg@y)=Dit(t-WXWE&aL*LYYLuzwj0@);p@|K$|ip7-W@_Y9d{S0jffddZn1Jg}OJ zwG`GmO~aCI!|y_ajJPNeS8D~*4^fJL2)s}rBCWW~JOXiROGLM4QtO6#T1ju5WOG~f z_PKr2P)!7pwx%R4d4a`J&4Cnx@tQNl%oQA4d<2ySW^K-`^pgXBIiT7a4r9?qUW7C3 z>K#g-NhBE?{RmcQUNeGd!grC#QBz4txz2)+$gPFaS?k-K!XQ5~&J|ja3qU4+)n?$3 zoot?sc7{tq6ih;OP}wS|(XhN-8Kmz_0m5i(iNu>m`<`X5hV!5?8OLRUuGQGb8^%2C zQV8D7WDks|p`VVYGZrBjMoSynac{zKGir)5_Bh4g65S6niDuO`&x|AS{nC6{uCn3N z892sVnRdof!kwJUr(1NZX{acFk^u5C%D$l{pzvR40tpT3f0G{EIS32S453#@NFlB? z+E50*CW)}}(W>_0-TpXC=%tCsDOGmWv%k$K{%k2+tb;&yUtF@qeJVYpOJN1l+^pX& zDIm9Hj>xl15<_g;n-L|48}`AxP(S-oS8uF$ow;Tz`s^e8W1y@$ zQXc7;%q3#rYCBng7@A%ao3VFn`aQL00L!|b^O7MF@IA|l5X4%vav%5!IRJbQQ&-Em zFKPIRF%@(8?dd&rZBJ7}1z)i7)}pupxn^}xlUeG1?Q9^JRQ=S~`&O>?q8=iWR1f(v zv_T;zk31-f!uesetczZMc0$Nj5s1=OlyVrU=2X}SAu|x*K7t@!Uxe$ov{zHFq)3{8 z{Bouv6(P6!q$CZ}B5{2ZHiXC#wt*-?mUj$lk-Ws1+E5EdD>R7y=*k#L4&QRI$|qVE zmhCU7D!1Js-@Gm>;Qq*7E-o!-Z^%nQ1ClqK5g`mlG|+o--&#+9Y*Q-jHx2Jy)oP1g zn~w3Jmz4?LiZ7}eMi%20i;ecTObPQgY9WE=YXc>GOuu~C%CJA%J$r- z4O5L05rjqLOz2O4vN+Y<-GAD!w*+n%xjXx2gB)5#eogGd4nmpSLou|~?56^fMtmVk zoZHlXJz+?KG%eiGfBo^F4RToJB};0BEff)$43;N^;+h673xh(Wzi3!F=wrC#DHRO> zNXH?y=UB(+TCFAnq3xCsBA2q!jGU;5t_y3xKyJ=}N8L|2hJQw8oG;B7klN+>12~Df zJwu|xio5N(dj*4&?g>6X@4NnvpzKh0e=#zC*i`G zo(+x`J&jNw{6!W6dy+p;cwUg5T7G zXB)=Q6$m`(VVp>vh-Gz>!hhlT3%bo^;BSSoAfGJAlRgko(v3xNh4yTq-d4Y=bOim9GE@Z6_q!>h_WEU>T~txi#gz9axU_U`A~T|J&%V)gm+cN zz%85mM@#Nn1jcb%%Uu>*le1;UqEY|NUTOu-xd8jJ{bbo1)Da3NHSk<>F^@q0p&g#$L1mjU)@suW@sB9Zn@3BXB6u)^Q29`zw8ruJd6W_JAOqHPN+^?6 z!||-JQPvalH2OH0>AGFe*yDd5v(_+It!_rXd0YiOk;>q#ECilq5d_{{o1q!?C*nmd z5>H6t*!0z}X}VTqR)!fUk(0+Ej{^f0-~+ATx5ZXU7H%vcOTr2U;MTqU?WcFbkvU;; z9{fkOqYzkS_`)(A|DOFauv2>g`%lsvpPG^HeT?fUOrv;v{f1Vv8q{^b>R5Vo5nef(ft6Q@<D3jmYzRwrLX&)&8sp@ z)8c!(S7Bbwb})M|cD{f0VC$|hxVx=<7(Mo3d`V``2C}e>Gbgb^_TM;mQsyG~iUnWh zH%E#$msv0x85Vt@VH>}GbA2o>1uA&iS;J9NH8}Kg3y5abXr|mVq z;(=^IJKER%Svj0R%Om7b?qjSX)5@#hlOD#2WJ;apd4qvUFmHxaG?3)1ufIF9u2ML_WzS_t2+` z!^L>6y6+it&O2s?fD_lVnSXUBJh`L5EdXnaFCcHQfLLjpzBdkJk~j~evfkd^^9r4o z5Yo|KpS4^$ODcaEM9|%_khQ|fS$u3;HTb1@la;aSpgxiG)W%#(Z>H7kO+5KF9_}d4 z*#Hg_-(tY3JPg$$pb{W|j04`cT62pD;1+Tuv%n0u`e87gjGlP4;^n3TCvos7BXb00 z=9*ra$+D$kOgR2@fF7EQK9h1nWk7Z89cw6>GOs~Sc4nSrE`rnq6>JVJA`V_;mS^Q8x&460*e8r2?`Gn}ydl!a%lh+&jK@Mqe} z41W?o#VtRW#Oo<79Gc!D@GZ<>uyx2KQUpP6%hP`k)UyxFB?uhO3-XKZ1y23V({h73 zRwzx|ItZcO$=M3EXT&0~Emr_a_?{!Gyk~%8tT2zbbI10KzIJ=tQC}|7RG(cmX-9t+ z>~DwLCtQ_M?yQQ~?p}>g1MG(gFwK>gI<_<~HJT2!GJ;7Uq502G6sTzIndAv|utb@_ zk(7TX*{6n6Cf-71wZqryWIC5_3QOwMNF=XpB1%M0*~~rzG5%80gGcH?CR_!p24qg) zxm7~#)HvwY%4||AeO<@~irX=CL8`bD#u5rWU^6KZr)ps{2@|jvCwcG&YK4`Ptn=XQ zA%)q9TYekq=&Dti`aPDFMHakWui6B?vJ8KtIr)P5HE?yT$zm7zknkgjoC%B@uO=F0 zYauIU_v%<9G`aKkb&)YF>)5lUr^3m*Z?uI z7&P@WHVN%kHS%duu}o6np(hB#1xp!pY->Kj<26>kdURj6?{w10XSPYUhiOCcHbs9V zvZdd&foxwO~693*rc^ z^I_7_ce5`#EQ?t@S)8rJLqrh|z@fl~@2;zWOqocAYqc_w9E85@WwLIy-%I>+-ptCF zwr(LA77;p^1;9*qi_}WA-*rQ* zh1i>Z97`6z%bDLl0}zw048w$2oKoV5A~j2wroQ4rg*Aj4HQJ! zi*6ZvK(|U>TG*H{>eAzp=uIxcGRMOX6HDiL+22rrrZ$#`yeg z>`Rg;jN{VBu}-7PkO!t`r21$myZ35AFAvqa;LE&ou@sN4imQ_lg1mnbpOYLVjqCJY zC|~6>*K+zmB`3ET5E%DHf(?C|Mk)R174KnDEk9xq_3T51xvr93?DPTav*;rwz} zFlI1(>=p}4Z=gy>WdyVn>h8^x8h_;aE{HD4A|Q&hPGfelO=kj zRQvV2?2W=kl&l5d-b{bl!zeM-oMcAdB;cGnM(c##p&lSzA#7@vGwd-7?&X;S8MK+^ zD%lf-1r!6#bQxcW{TI|g2qCm2V-GBsgd$6#V5!2W_hbY)xzqG=&U~@Pg-(pkfS*K5 z^+%me5kdrHm1Y`R<>&S8EFx4H+7bO%Vr)vKiQNT#dHzQ7syk$R%zH`7ac=^Je{7@l)>UoU z7NuxT=bx`H_wwQaqnRI4v7j@St%cfyl2*>qn~FK>RLRucR~X!aJj{r!H=MW{fUt0##a{)CgyR=4$1 zw`960sl}?s3F>GD?W~xuiD7;^-~i^6P3nAzvwInj%X@zz)$W_bA72htZ*B#WWc3Si zH-S3(6%jcSN|U~K)iDpRQoDrp>7Q{h`0}G=lILMm$38NR&*o^!-CuaP%+fF`=iq0C zy=TxkO!N6|69RX!4V6t;l{bHbeDACT8&&gJWLQ=0-VkslQZ?6E6yeud9ufFyEvwvf z-Rc2b$i9ELr~kk_ND`ef2VbjtZ+w-*sEl5jTZN3z)5&#w*cMJVH}hpcwd8jt=XXRA z>qMhprML1P0OHr1NyLs{se9Z7{_D1;jHxOlCOxR(HGzD*tQ3}gW=WLRT(vANxpyP;`w!uH3GKh4eTiwH8hIkQN`M zH4AdR=bW7M9IEm;`ILFi9L=(72gAO>NeU&ayzdpIoEPOYw;!#{*gmI9+J-cxRj=i5 z*!d_O{#KAQao)1zWDs1=xI3*Dw>Buy$OSPu*zkssvm0C9h&o|h=cphHrb~^<9^=YJR&}` zmqb7Wf3H!da1`wofWpKNa$PEw5QUEnL*IRjGeA+CWD)9r5;Tqo22`Ih#Z(xj1WetC zP+_Q!^ECL(!K}qzo~pz&cuy`u3sSaXBS9!f2w!&7YtUU$xGSR2gWuwgsJtyGF~2k+ zoJa6%Pz`=Kov~*ORCUM#+>sf4^f1EILevWHf5_SD#r1=p2H)em!8|vJ54ZKnby4@h zCM$+rMAts@?!QNYcpw~9GFKJ!Yh=xL1R!|?!uV^ve+2v_W$*)X9%%iO$~)^>^lVZ_ z>Z%D@o6^KDN2m4OS`6Q)IExo59))0BD+36LUve*MpV+tW0kb(ZV66Hq;rF4cVE&C5 ze;xD-q@e=rmEq|M($~V?T3tOYblVTB^-^c9{YF$o3teNz4v0a^$k|M8dwV9JH7aAc zgD|qGi;x5%k&XaDJe?9QIzyI|i(0UDR(oncF_8bPIjJs#kbSq5`LtPYE?&(I}c;3!gH0BI9gZ%Z(sPDk*olGq{(Gf1p0q zY86#ds_G6iWr9(5d}SPsq9D@^QK5u5ev};s?z4*eDD7%@V2{oA!Pk@nDiLtTpnQ}S zZ$6r(g??USM;+0iF zzxjMZb8b2wOSv{sG6C2e}PW!4tP&B zacab>T4p0C4vKtY(qgUutuy!wp`PJOJN|sOVpJ-OX7ryaS!XGJnfPxE7|KVu^qNvY z9M7G=%+MnO-G2qaWzkz5<5v>$s=l&Je9oqk&)F-H%mU<8y$u9tTdxMXZWOwv?t*gR zzmATtA!;Ma%8^u2WnRl!f1%2$iIy7dwm6jgqk}AYIFb#uMOS^lp6Rd7Lj8-pc|@rj zr#{qV(i-jB=vU$?L@8Sy(fkAo%!Xnpb%O4)Sz%~OsLoVh~9!xk@j-ge~f{O1hmak{mMXO zQKO8xC`dR;F|GQ6nuyhJ3R=(*T64bSPcIs>*D9A_>?}llef5VBGP>#V znIgT);l_o{U{?yGH28PFik^g$lYXRl)}G?pIuRAElJlK~m^AVIN4&HxK2fv3&WB?^ zPeM8pvMC@_FoeDxDM_^niIZ>olStZ;%YP>B!mQlISxQpxvt1SyB6fbm^yh~+{{z%9 zyKj?qO(z2|Ff^BeegY_ey;yB;+eQ-po?jsxP#lFuD{}enZ;sQZHtMSpyXc1`5GZOT z^2|4oloh9c{+`)cDxyL+cQ~M5#NFB1*_mfvc2@RmH?wE&UfJgR=Hb=yXE&HRj);9< z&K|Zi$8|**M6?Pd!)Erua)mQrIF9tKtGX=fYQAto8dqI^-u0?VpP6u5vesA#LGCa*!gAQeNE2^V}Tq_WqV6Eq|8YEEaJf1JV(4od|McmitGR7izxn zLI{A=Hec_1wIPCSbvV(==8l!LiiU<{ysZGE(TJI#Bg z;S=}?0{(=<3>=7wzzHmX5m{N%CTXwQ{0mtWJ7j6zvap(e7!DQF8EszZYo^teGMrnp zkQpgkbzsVYWT>K8Ji;#kAL1r#ID+H4C*W`}I-ZC<&+rG#|F61F)_^Q>t=GJ3Y^31e z8)wL3kR(G9MbQx3?lHDA)f&$tg74b8=ipB3Vmd24v-9okCGSb9jma=X8g^!CNVq}t zq#S?H;H6!Eqtv>5fBO`DKe;Fpt`X)D!dx9wC}QV%kz=(gF%)30n1(X|J#&yZ^A3PU zQHVV6dM1*qiB-Fr2x-lmbo%C0V`w?8OA107Zjl9TUGn7W?)Rwx(5Z=NR2}&<_N_v7 z6w;BjI`RS>O=9Yn$CL`Z$TdLdsMeTx_6a7AkD};*hB!^1^5J0~2Ub!%LKn}rk~M@# ztKO4oZfxCLU)~T<*Oxrk?j%ONjqoay_VJ$_mWx65*p3sQLC?knk)$9JpC-IE72V@1 zi{R$C!T_k2gwwvt(}ck$vN?uoU0rlc`&!#r#7En4Roe56^HdA$3~8&e#XuQX7%NZp zGe&NIlYOBJwNBS#>Uvg^rtG$}gbas-96M)1^r?qj|I9-ku89^l(0Sl`P0k4scuCbI zCLPUKOY6nUh8y3Kyuh^%S?LYH(E!VN1o-6S&HxsWz?zLMCM2t1V-r zljGQ@oCP}|Mb%qKM?}&w4tGAC?eLtF9VnDu7!CQmZ;PoELc=5df# z*9p(zjS1a|V2SAmB`Y~3ZJ%$^ZRllxK|kxFUeltUr1}~%lS5u@>O*&&SJVv+qMD+n zyDPR9^MxN-TeOiKuMWt%@fot01?t4=Hu=1Iubx(y&g$*`>d9F-{z}@?wIe%Tt;2Ma zD$k46%9Gy4k#Xe3qSd1RnI)Tlx^6_$ zBx$BZ-R_oCvR$Z(=HUg4oG=zpZ)A}7eS_lv!XWQ|HmGZG4}aGlTZH~!*y9Pr#>gIj zY|re&!m(}Jx@vJ5=g3QBukBfvpjd-X@`EHyWoX;wA#Az zV|;wZ*mUER4H_r?Cc%St_En` zQ-mP-E4Ei!4b@IS>A_2}J21+ao`WQoT1+R718TlrvnEYrj&!0wW%Lc`Q6vI1<0I6A zY1Ds7=sHAZS~vW8!yS&wN}h95gu$A#MU75mN%LrVjLH^fwP7>PJ^&KwVS``?si_fP4a#Q<)@7?9zKF8siRKr~|c>EYFX z05F6iI0|KMWOH2BFeE7iw@j8+`UY$6t@X z-oD*_HTXPaK@fPqXT>}{=8=E5NXp|O=iEC_GVBP?G(<>pp9o)=kmD}_3)9RL_>EgI z%j%}e?$(W&5n*YTW%cCx$3x~N#WDQM4fdC+vKV-*9wLdCdRu5x2#tGy;^ zvSVa7h`S(}y8CxU%0uPRmZrKdt7TH8hNvhEY$xj?D^S!t3=fE!iP#60I{u#>^Uyn= zzz4DNrg()bxXYW5*Ha{g-p3V+-B^WydlqxI@~LjjvZld}RgZs%%slqUd+5%i*MxK` zJW!DgQRpm=83`Roa!13h(ADN1B?Z$N#zhcyp|^cWW;>zCHT;h`}+zfDL2_tcb-x zY3*wv2kG+Y^Vff1FoVgrg8=Rm4Ib^%Lc7Ta)1%)B$XfT8VdRH0vRf(PSTp@| z^6KM-eN|AMLANaIjZ1I~?(XjH?rbc0Ah5*i_a2kR`fwj-cn54pRr491$|nz=adH5aJTAaP zj~9}a?N^j;W1R4$hSbdNaZLIg!z9Qd=dF`|U-^foykXaefhfbWT}@RlokwbfDwA#` z6mBpPRjfNVXLc|=j7WPjrSpX_d3n|-0YSWK;u#@1db6BM#<8NPEE3U`-jR!=kc1@# zzHI3*RpJuMGHEuE({*=(bQrjxh?*(nHQ;$-KcO6t8);i1L@w~oEh6$!&YXQg-_~mJ zh(+a)t=pYa4dw|ntf>;6or*jgTv$7Hh$m){*bFta!t2l6OQT%&Z8xrFZMYpJumIED z;m&W*&ijbmAy;15(aWs$e?huwG%Kt`XTdc)nzRG2l!XZty;Du4g#jp}hFu)HKEXKA zVQ=cY6&6~U+2esrH92b(TT~+^rTTVad`;IO!+nKTe3dGvd^P%tf9`&yTJ#{`R#sb? z*L-LYWdgCu_#RM9D?$sr1WfcX_RC9PE&3mC=B8kcVF)jIJxIS7-|hWSg~2T|<-eT# zAOoWkHW%GtDs^|AwFE5F%)jSDOGE!~kwkG*66@gfbzy^xUnOfQ&U3WwDVOopJ|3^U z)vMAo{eed=S!I~KH=7HF;wdRBQ_;j$pY~DmdLn3v0jn?~o_9blzFA6H-?SS>*~`8~ z4Eb>XnTehIpx*o)czDAY&P{je_(p*MQ~3lY9y~oWS*-gwLkH;P|D0rXG`Z*XYj-n& zFfYQ&63EuKj1vs6lUv_bo2D^mHR~b&x=bNC&GA5BSVV>=5tNHCby__bbbq+AKy_?$ zkZZ)}T98eJRocP}^O~$jhiG8f(I2Wb{GKGeii&ibKH<6j^R#Vqg`*p;jUgFUH+fv~ z3GH%HSr`7}=njxjQ4wakP2BIbX+o!)J|F0+0td^7xjH0K5MdnIV9` zFgW|DZUT#nKQLu2-@B!Loh)#*uI(O8ByS=<6EzESXiSqK)GKZ4BZpo9fY%$?V#U@r zC3j;_Rgug49wI;#ISyF*R3t#M89|lUtesj2nq= zs@al{#$l86xhQKveBe;RtJK`GrMbBkW*C>ddfsO?Bh(vrQ<4R4aqO1?*$+wi4QO{`~BkO}I zFI~6=N|DOfD&9%JES{BAX__C@%C=0RoG9PyV(Sih$NFF0 z5dX6aCbHE|i~mfy^jo@GOR$5ZVlFMvk^+7bjBwsM#MM`sG>9pGp_ln?(pKyuZ}xt$ zwQ*TBxB6!nvr&`l%H>D8)2h`KKO@AQQz1fk&$_SKf5f)& z6O$d+feSX|;C&oL}r0>}3<}gk~UBj)ytz4WXxn zerY?o8T8`P(@PX6DXb#ARVD zoNp0Qjm-YN2Qj!xWTL34ZUH<-Jx7XHY=+}yENZ&huU5q3TZh3B=7#jQ>~Hik5k)pj zDSZ-=%Eb5KYvXv~I%l8XRkgX{&sX6xIZHa$mbP#&eiqQHZvV&(2u>vd5kF#Oh@!dgv!RX0tUvU^JV^U^OL+#d;O71m->TZ9R1F5sl~t(~RK3&3t9qE9 z+~x@9gR--hb1g|Z%Ry0tx<8EyB1m-3DJ=DDy6u{3`}63!XA{3w^EJTy{7`|l+sX+o za5lobahwE`WA}d{6z0AM7la!9F}M~tREXq%w&o@O`_$}9vDv+?LFf3UJO;x~Sr9Qe zR}*byKin$+2If!ka7o=TqX+YI^Zg$!tr(*G9|GNTpkKD%pp&kM1(Vm~`=TI%Gg7nk zJGa{E9S^)>oUGP>e3z;Isq;oqa1%o+ME_J4E(-?916cdZyZd8-+xzY{*Z<<>_H1oi z%CB)L8cZ~KrpH~7hJ!G}av?3x1bDUP1UC05Js!MFcWylSHrBSdm@EqY-t_|nTSW`1 zHu&AmY5&PviS9&_6L;Wa;jzPRr-w`jQl|i%@y<0GJhZWxTP#%PiiR1x)bwyH8u)7V z>N&0rT2-$+$3_J4i@|e!>!EY;<91dS;#R@bo*j5@BP9B}DXiIshkX?1HNCOF_z~j_ z4Q%_#A8GG(zqq||+Vcqjt_8qqV0v2t4m>AGj-KIVQpkb`eS#JLCJlS#+WwQ56(hTs zF=a={adi3Kj}`pw4I{9jQl^ZNE}+#3R?4u=p5@14H2Yx66@N*KF2N9WgG))9Zr zp*CG{Og*i@M*mdYQ8NMjA!z*7=9!LK>feXb|J|{dqt+Ag6D-X`E-m5Y!NRY84S3$guj=t(uW3Zc>Zdtd6s%wMKX?b2n`h zjnNrEE{SaWF`+=w$!?QHr+Aj zXMj_kr%8tM@9{*ID>@%jR~9_I}nXE+imxdehUVf-voejgdVOK3nE-p6tfFh02S3s(Inev2O{o* zZjy}C>~fa%k-f2_yy3YeGu7*J^X?XJ5tid}_gaCY)S8%3oHuS($|!Yc#USntOkR@M z3U*%F;P{_{{a`(9hP%=nU4|_QhtsBjm9uco23lWsl5=OE9*Cpt&6D|Zm=qpn%fBi9 znFTkP{24)TKNY;2Gg<7M+wWR~4?Q?Ih(kjlVHHPVS*|8oIVJo`W!t$9`}M-IBw9EC zz8W*>mT4R&UuTmPhM5p?fgGZxCD4lmRv*L@W1OW}%U7V@saF8k9-C;1x}>IvG*b`; zm#DQ3h=73i_nDbtGf_s*=Kd*Wy{$hR%pG#+=kJi|+rGRmzO&9>LG!33lBLLt5#_{; z7rP5i^^4jWN5J>R6TB?SVOLZQ~GyCy5>$ ztZ^Y_%fS#6x|zv$OUNbz<1m=lA1+@iXknKa`#=QPkPZ{83nU+q_fnBW4mm?os95;Y zLOCiv(2^W6Zc5~V)ka|tK5uA#_FGO?^}MC7oVgRQ8A7)P#r#c?7CGMD|BKw}mH$z} zxQw0WQ08+cNBsd@!Q0)*b`}f<-R=n}v{N4GRsBx3B{ZIgbUK(IatuKx_k1F7V?-7; z2s;K?y5xrp+?~4g8JiFxg{7CH3&d#^g1+{E;(ryO=6Kl-S7~FkA`WUpYZ_?)h zOhgi47ZdLt7PE)$cjX(*KDIMK{W>2^!F~0C1Qpmr@w!*gM!Tz->XCXJKmQWpx{y#{ zz}rsBLobRRDc}o~*GDPY9O2fOL)xT8S5Z__6Sf!^PeVe}9GR{>5#j>LNAFAQb>y)6 zXTSVA(K;(wygEVo>xO`WzBVs@^R_8AhhSlnFYy$G;NDcOv11Qd=O^rN zKTJsIz^FxkWKg-X*lNyKm9)<&XlJtPF!Bbji1v!}UH#_+0nG6Gc%CmUI1v?>Dj{k!%) zcbW2^P422gUO-gwNz5U8>rphtaImS`F=N?1qcCrvYP31+ym!M4WHe^3Nn_6D--bH4 z&r0FUeScYdJyv`Q){u(A-_egI{MLDTg$eEbUe5ua zODZ{UFGz;6(O9c;r^J9G%N6{7rFksKJw;tY>JrRq|3;Y6V5W`kUXdXfENhyZD0Vy<%zIR{0( zA8|KWU2ZMBC`JmbnD!Vv%DI5AID!-CVesYm(#L>*#Ch75I0tA2*o_qg$ea*@!d)ys zu^bXiTdcb!+)EieH7iTH+~WnSC7jSDsS)~U%b+3gXiXMCNsWtodJ6BJjFRp9`?T~` z4noqc;Kc<8I8_o7k4vdU#niG=m?Cf^H;2UHU*f7jn8GFFFdjsw2dpnfFe!5k#d;_e z*%xnnzd~@jbpZFl@&hlz0S)1}pKL!(HT)qZzue38w~*^rE;-9d_Q+-avZl$YL8=Mt zAV=^_){;Vs1Rb{S2OSowYW1IrrlcNItCkTRhhAZ;^>7xuO0!X}2=Lgnl#Yi#7o~Kj zl@~wSBN7J)s%^0?_8Rp_(v%+F`%Hq>e6~%8(UL7zl!16)7T3>r5NsPiBKvoAZWdc^ zGYdYvoj5p=W!=X$NDEJI_}BxQ2{`3xJQPRxDgv?3aaaf1T-=E%H2c(j}`HIQ%>r@`jP7l*aD#b+*cjfTW z^Jp&|hTEq=>3lX;`XQye6A^%%afr2VhWK@CJrUU5ZY9DHP;xGBVV^iOkJ7yzO0 zLr;C6tJTTG5pKf7s2mjxK|;SJv1oA2m)rL$HMnHh`cK3o_ zoo^nxdFQEP}(5gd2Zcl$K0i9`X8!v;O`vk^SoF>EQVH%aff} zRo*&Om)k0Z!Gd$~!~eI;#qoT-?2J1#~Z^&9|dGg^m?9OBvO|+4~}{3(r*_ zV#HrkVdoTm;9HbQ!n2oIRA=bYeym_ZOGuN1dEaJhf3gF1G%dNanQG$l1X6XT)X`+A z&s*9^(1^zhyN#9~P<1xDSyn1~I}r{wF$Qy5)7Tx2t1n6?y&Y4fN{BAJ@i zm;T}~xmSc=U;2H$7z{SAQ%@QPGE!&fU@^Y`k+{?j^Zq2L!aP&gyixR_#X1&0LfIj8 z8>EPCWvH?qM}3sZs>=3<2JlSXj2`q)728Hx;6*$O8wforN&PK@- z`z=fgmM*T_*Vi*#XZJ6>R?&{82OlzeZ9|a~o5CT}m{ysRY?krtZdHwPOhr?y045lV zextK2y+?VqZw->bA~}1pQGnz>rcB6-{aV=7#D(ojCxx1$uyj zOk<{@;gbT{CXa-s(K=Gp5RxZ^X^cxd!1}(c3nv`J54{v+10M1!YSyX^S|*oDUIb(n z1RU+PDZQ=x*1y*ZA)jFnz8H9pi|dCL2oc5UQ+5Gny|hjo&MG6NENFvO2KxIrv$NSa z_929vj2zw(>s)r%l*SA)gD-8Zs?a*(Y${jhQP*2)tIYsRHwC&I%H5GgZ^TlC=*^1K zq2nEapLcv(K*brK?M|L*2cJQpi-Z9IoGFpQ7#_@>XW+~u2;;l{nUKe~hq_N6=bi6P z^JxT>Ha)|d3rgo(7!h2XFsdca8K+a`Bhm4o_^gz=3h9!vriR!(KT_A=rwpL#dPd-* zyU@>m3n4P?v~cDz^OoO>b!}(}N%j@e^Qc9U*bH`$0cWbw#MkdwxVdr~ca+l(cajz{ zh#3{-QKd}pmHt)M#um37wvnmvnOw0&EtUrF4JuRcF|%e1?$zyoqO1zY-b*c*Xa!Ql zz$i4TBGYyF5G!8K{7!ret*)F*M;8(D>vNF8dseV#4^ka1*&PWalx1EjlIo2=DO;W0H zjZK-+>tgLzb7I%*%bF%=5MoxVOwQRNn+XX79A^7!_~6=F5}gS6TNf7>O2I? z5I32AebA**>&AO;^1S42@Ma$GJ!f>cxKEp>(df`#SGDP%qj?ssV zgwL04jId{o2bc_2T>&Q=#Gg#F{@@jT3Yv`uJ?`jbGSSztdxob*h?UlENv z>A3wf={WpfP|IJ_rk3~yDraZT?20z~df<-@pWzxx@XBM6{s@|I!EmyWdfEG}e$SYi zrcJ3Rp0`U-Ktw?^S6Ug2>}#hp1tf(>fUf97=}+61r&&H`GJKUVBkA=uI$Os26@!xH z4cTozp6B8nNNKfnL#j`!AiRB9J+{t5x-iTu)*sd7C=0yEGb1-efF>rHX|#q_%0UaB z{G;&1hir#34P+utQp61kks7u#t=qk5U~ePfeGKJKsxHD`ooD2rABmr9NC?zlVema( zz5ZtnotLjMEIeKS#4FH<-E$!V%h3parl*4CYGo#cMIZt3@w9Ra!opdA`1o1{vth+Z zL3{$OzHPAZ5Lk{@01L#Z@Na231O$f%;^%3tbpmmNq26tetr%~S*x9$7-}hrF|4l1((m=#;Kz3?o_#jtsf`MZ^w&8Kp0reF0`t99w8O zM5zm0<{4Zu$Wu)VDsVPDtG+hrHd>sexTz_=<=#cslwqn7;S?Dlr%Y58Drv;~ItbH5 zuqne)CUDiO{ZT~_vw&ufVtzcX4?Ags6n7sMMF}<2;(b2Fhtmw)wzJFk837l&*;fgfNbq{l6w71# zI1upe^;>w57!!j3ob!n?0;-I2uSnq3pb}2oXyFj`!EKr0ZLvkZjMz2 zBL`4cf<#zam;OClHFD%JG!Rw?F)}W1cLV>VYP$oUZPRvViVWN~+=$gF+bV)ke@d|+ z-aE*vl7WbpP+H$QDRlT3qs}{~M-%18zxEcX+LgoNm*f_JL1i(-?kgFcLh@@l1@lY@ z$r(IktdmpxeU4q2_8-m7*$0(izDs2H5Iews3bu;mLc>H#p5WdpLM>t0@Bw46N?6hG zqk4p3IjuNK5Pd+?6FKK2!A|`trs$zS(V3l1+_A5%j>@#uwB)hWZNBrE6~=q2!up$E zKRf1H4wSOoas>w4<2$LQHQa^4?Oex@HbW>@^Le-%+Az3QfC)?DD;FqP@@?_eCl;8F zm-s=~Ms~;8OR!9Aa)wF70DGE4G2UkCI)#+SZcXW#Q>nbJM4ML7dXDg z8-rb~R|X&NO8e;`d?dXLN?=C$@n_3V*t@#0xnMMZ<7yTNtak(&s|~pP>kPbNmu}k{ zwRw)T(Gqv@mZ+8wdXr`y=GQOODDMH%-^^64V_nthoay}EoX6WeIGnqP^tH*Q7maFV zKBNiT|4}F){ZoS;zngty*QA>>r*IkJ`0ytFR{YN>qOD@)W4HHbMx&Q^T1PZios9bn z$xa#VR{{}NrOn^PSm)jEE>^=~W{#urF<^Um{bF3ksa((~FxrAI!_T2)@8U`Ul|3|> z^ih@wH<}B>o$>}U$joY`1Tx;Bk7A@e4k=263eAKaNwqicr?gZ<>iJRIn2$~DBsv|# zlW0T(={IeLN9vWZBW>8DuT8Zj@zc$cB=5Z*W|gNJZ3_fSu|z8SynIS>zIDB`U2c4i zqXN5W2c3OCB~!68_-;66uZO)2?5_`3$?h0xDHg*svd)XY51fSZScvk|El5{uQt(V;r`42VbxGR+hrgGDPvE->8Ep_V`vHYS&}dk3{^HzN z3Fhdc$j{2j!4iqDM}9|-r1LHiSC)3o0^3V#QOSt}C)KXH+@ob=_9-I)V6AXgz{cm* z$6G-2Wt3I7glus53H*E@C)_M^NyO2?m32^!>X&y!drgI7pb?}};s`~lin1A)Gn`Ts zn>j=yB^nv!46GvmX^FR4sY2UWGB0`KPv`9VtzieE z{ zsve~y@6W-!ic~ne|DIYN>J%ByDVAcbH05pElwIj*Y@g#`$A9VFK+LGF@Sk~;6sQC* zbO=tO(n{*Myfdai?v!elk(hM$Fq)S}qk~e+HU93)s^xdXyN1CH8TS~Kg>BXJIAYnA z#zDBjsv9{j^)C5JX0dei#92I>bRjKKL%=(i|nQNrV8IFsuZNlW+ z{)Olg?c!~|nFLUMm*dlS@|+JRnZ1#<_+hS`tGUJr?g%G|1dq4!W^n3i6RN=kKE~)a z4}}lxJrf@;7hgVOJP3;Cp+^9_v93Y&W&7N#1Cap&-92O%0M_&){P(s^=u6Cp!0+wj z^j(|41?TsD9I-wA7rH#WIjlE#L6cqA^SJ59Q1(atSAw_K^Rh#8*o!#T4}RwjE3s=E zi64LjuTADv#I_=gx@P&_EWz$Mx zMCkkaoIA$GxH+#E7jcU@d2heyZMAw~D-y9@Bjc^+Sd?lSaCgfCdKh59v{f^Y84Q)# z3ajJR!1YTLsVC{+_66W zv9b&T>2JMN;dQygW&0>a;i+#qo-#7-?KI%{AqW2QVW=Jsd#q!?AM#0~|Dm*cbKu6Y zZk%s~Y}3#shS)Q-r!*!fD)h?eKDo9IQIqR+6Ug0bEy8Hk)ja`xt~-FIxyvn0^0&l# zU>(vgji8BbNRMs;(WtpxRC*mftGTtIb+uxSwnRSitS=nTDtwr*5+KD(RmRjcHr~a& zd5|3^C~z3ttf~}3`tX(g5TAfjVaExjXqhPiIaYQra)ztr2;5`lz{cwV%fUN*h2$0u=@zbG3vDhV5QPApkNZQAs( zfYdC}Nq!Tu?Z2~K#_J3(!5Now;!1EDxcq(RvMg(dmvAi8z{Tw1fFoD{mKT9h1L!YX zU_31$zj2d4VP;<151j2%rKtXtb0KW+eySAO5HH82_3cEgq5hn#V1?N9Z%h}n3LV)L= z)m00HUD3(LnL>c~zXviDMj}#@vOLn#9I|}UlDu4eGJI0pyfS=(Je=IJJhHMJk^*8B z|ND}Er=a{_cFZdP4Gsb^0<;sN>|hPTp-XqC87;@=c|W`KFD**lIOM(k5-faJcv#U9 zMXET8rx9M5scTeNmz)7O$gyK|TVF@6Cf)@3|22M*Viv-L5bB^>D6+)hb!3-_R>cIn z$UOXR5u9Q6i~5!8I6=km6!jA6h&RJ7C38E`Qb$O^M}Arr6GceV0+9VvV>z*Cy@Xq) zV%rF*-kCZo$G~Y${LaK4koo(j5{t#jG(6arfk%{#heIXb^y6fO=JLvsS2m!>Xm3p6 zSA~S$tlpdzy*;nA7^xxNk&lIL;mVO=`ccA}q`v=k&a2Ol)UUB|2X51I3_gY)H4Ym-T}>*M`YepFmViQ2$I287eP72M-D@t*p8n%6|b4$maY2 diff --git a/tex/misc/background_draft.tex b/tex/misc/background_draft.tex index 892e6bd..73e1204 100644 --- a/tex/misc/background_draft.tex +++ b/tex/misc/background_draft.tex @@ -506,20 +506,73 @@ is a major part of many studies in DSM systems throughout history % and really just serves as a means to increase word count \subsection{Consistency Model in DSM} -While distributed shared memory systems with node-local caching naturally -implies the existence of a corresponding memory model, only a subset of DSM -studies (cites\dots) characterize their own system to one of the few well-known memory -models +Distributed shared memory systems with node-local caching naturally implies the +existence of the consistency problem with regards to contending read/write +accesses. Indeed, a significant subset of DSM studies explicitly characterize +themselves as adhering to one of the well-known consistency models to better +understand system behavior and to provide optimizations in coherence protocols +\cites{Amza_etal.Treadmarks.1996}{Hu_Shi_Tang.JIAJIA.1999} +{Carter_Bennett_Zwaenepoel.Munin.1991}{Endo_Sato_Taura.MENPS_DSM.2020} +{Wang_etal.Concordia.2021}{Cai_etal.Distributed_Memory_RDMA_Cached.2018} +{Kim_etal.DeX-upon-Linux.2020}, each adhering to a different consistency model +to balance between communication costs and ease of programming. -Notably, \dots % about Munin to Spark to access-pattern vs. consistency +In particular, we note that DSM studies tend to conform to either release +consistency \cites{Amza_etal.Treadmarks.1996}{Endo_Sato_Taura.MENPS_DSM.2020} +{Carter_Bennett_Zwaenepoel.Munin.1991} or weaker \cite{Hu_Shi_Tang.JIAJIA.1999}, +or sequential consistency +\cites{Chaiken_Kubiatowicz_Agarwal.LimitLESS-with-Alewife.1991} +{Wang_etal.Concordia.2021}{Kim_etal.DeX-upon-Linux.2020}{Ding.vDSM.2018}, with +few works \cite{Cai_etal.Distributed_Memory_RDMA_Cached.2018} pertaining to +moderately constrained consistency models in-between. While older works, as +well as works which center performance of their proposed DSM systems over +existing approaches \cites{Endo_Sato_Taura.MENPS_DSM.2020} +{Cai_etal.Distributed_Memory_RDMA_Cached.2018}, favor release consistency due +to its performance benefits (e.g., in terms of coherence costs +\cite{Endo_Sato_Taura.MENPS_DSM.2020}), newer works tend to adopt stricter +consistency models, sometimes due to improved productivity offered to +programmers \cite{Kim_etal.DeX-upon-Linux.2020}. + +We especially note the role of balancing productivity and performance in terms +of selecting the ideal consistency model for a system. It is common knowledge +that weaker consistency models are harder to program with, at the benefit of +less (implied) coherence communications resulting in better throughput overall +-- provided that the programmer could guarantee correctness, a weaker +consistency model allows for less invalidation of node-local cache entries, +thereby allowing multiple nodes to compute in parallel on (likely) outdated +local copy of data such that the result of the computation remains semantically +correct with regards to the program. This point was made explicit in \textit{Munin} +\cite{Carter_Bennett_Zwaenepoel.Munin.1991}, where (to reiterate) it introduces +the concept of consistency ``protocol parameters'' to annotate shared memory +access pattern, in order to reduce the amount of coherence communications +necessary between nodes computing in distributed shared memory. For example, a +DSM object (memory object accounted for by the DSM system) can be annotated +with ``delayed operations'' to delay coherence operations beyond any +write-access, or shared without ``write'' annotation to disable write-access +over shared nodes, thereby disabling all coherence operations with regards to +this DSM object. Via programmer annotation of DSM objects, the Munin DSM system +explicates the effect of weaker consistency in relation to the amount of +synchronization overhead necessary among shared memory nodes. To our knowledge, +no other more recent DSM works have explored this interaction between +consistency and coherence costs on DSM objects, though relatedly +\textit{Resilient Distributed Dataset (RDD)} \cite{Zaharia_etal.RDD.2012} also +highlights its performance and flexibility benefits in opting for an immutable +data representation over disaggregated memory over network when compared to +contemporary DSM approaches. \subsection{Coherence Protocol} +Coherence protocols, then, becomes the means over which DSM systems implement +their consistency model guarantees. \subsection{DMA and Cache Coherence} +% Because this thesis specifically studies cache coherence in ARMv8, we \subsection{Cache Coherence in ARMv8} +% Experiment: ... +% Discussion: (1) Linux and DMA and RDMA (2) replacement and other ideas... + (I need to read more into this. Most of the contribution comes from CPU caches,