From c279454502fffecaf31a538d383920f9843e7825 Mon Sep 17 00:00:00 2001 From: David Wilson Date: Sat, 2 Feb 2019 22:56:34 +0000 Subject: [PATCH] docs: update and re-record profile graphs in docs; closes #505 pcaps moved to 'pcaps' branch. --- docs/ansible.rst | 105 ++++++++++++++---- docs/images/ansible/ansible_mitogen.svg | 0 docs/images/ansible/costapp.png | Bin 61907 -> 0 bytes .../{ => images/ansible}/pcaps/.gitattributes | 2 +- .../images/ansible/pcaps/costapp-uk-india.svg | 1 + docs/images/ansible/pcaps/debops-uk-india.svg | 1 + .../ansible/pcaps/loop-100-items-local.svg | 1 + docs/images/ansible/pcaps/stroke-width.py | 16 +++ docs/{ => images/ansible/pcaps}/svg-boxify.py | 0 .../ansible/run_hostname_100_times_mito.svg | 1 - .../ansible/run_hostname_100_times_plain.svg | 1 - .../pcaps/run_hostname_100_times_mito.pcap.gz | 3 - .../run_hostname_100_times_vanilla.pcap.gz | 3 - 13 files changed, 103 insertions(+), 31 deletions(-) mode change 100755 => 100644 docs/images/ansible/ansible_mitogen.svg delete mode 100644 docs/images/ansible/costapp.png rename docs/{ => images/ansible}/pcaps/.gitattributes (76%) create mode 100644 docs/images/ansible/pcaps/costapp-uk-india.svg create mode 100644 docs/images/ansible/pcaps/debops-uk-india.svg create mode 100644 docs/images/ansible/pcaps/loop-100-items-local.svg create mode 100644 docs/images/ansible/pcaps/stroke-width.py rename docs/{ => images/ansible/pcaps}/svg-boxify.py (100%) delete mode 100644 docs/images/ansible/run_hostname_100_times_mito.svg delete mode 100644 docs/images/ansible/run_hostname_100_times_plain.svg delete mode 100644 docs/pcaps/run_hostname_100_times_mito.pcap.gz delete mode 100644 docs/pcaps/run_hostname_100_times_vanilla.pcap.gz diff --git a/docs/ansible.rst b/docs/ansible.rst index 86125d63..80b4cb06 100644 --- a/docs/ansible.rst +++ b/docs/ansible.rst @@ -1168,35 +1168,96 @@ FreeNode IRC network. Sample Profiles --------------- -Local VM connection -~~~~~~~~~~~~~~~~~~~ +The summaries below may be reproduced using data and scripts maintained in the +`pcaps branch `_. Traces were +recorded using Ansible 2.5.14. + + +Trivial Loop: Local Host +~~~~~~~~~~~~~~~~~~~~~~~~ + +This demonstrates Mitogen vs. SSH pipelining to the local machine running +`bench/loop-100-items.yml +`_, +executing a simple command 100 times. Most Ansible controller overhead is +isolated, characterizing just module executor and connection layer performance. +Mitogen requires **63x less bandwidth, 5.9x less time, and 1.5x less CPU**. + +.. image:: images/ansible/pcaps/loop-100-items-local.svg + +Unlike in SSH pipelining where payloads are sent as a single compressed block, +by default Mitogen enables SSH compression for its uncompressed RPC data. In +many-host scenarios it may be desirable to disable compression. This has +negligible impact on footprint, since program code is separately compressed and +sent only once. Compression also benefits SSH pipelining, but the presence of +large precompressed per-task payloads may present a more significant CPU burden +during many-host runs. + + +File Transfer: UK to France +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`This playbook +`_ +was used to compare file transfer performance over a ~26 ms link. It uses the +``with_filetree`` loop syntax to copy a directory of 1,000 0-byte files to the +target. -This demonstrates Mitogen vs. connection pipelining to a local VM executing -``bench/loop-100-items.yml``, which simply executes ``hostname`` 100 times. -Mitogen requires **43x less bandwidth and 6.5x less time**. +.. raw:: html + + + +.. csv-table:: + :header: , Secs, CPU Secs, Sent, Received, Roundtrips + :class: nojunk + :align: right + + Mitogen, 98.54, 43.04, "815 KiB", "447 KiB", 3.79 + SSH Pipelining, "1,483.54", 329.37, "99,539 KiB", "6,870 KiB", 57.01 + +*Roundtrips* represents the approximate number of network roundtrips required +to describe the runtime that was consumed. Due to Mitogen's built-in file +transfer support, continuous reinitialization of an external `scp`/`sftp` +client is avoided, permitting large ``with_filetree`` copies to become +practical without any special casing within the playbook or the Ansible +implementation. + + +DebOps: UK to India +~~~~~~~~~~~~~~~~~~~ -.. image:: images/ansible/run_hostname_100_times_mito.svg -.. image:: images/ansible/run_hostname_100_times_plain.svg +This is an all-green run of 246 tasks from the `DebOps +`_ 0.7.2 `common.yml +`_ +playbook over a ~370 ms link between the UK and India. The playbook touches a +wide variety of modules, many featuring unavoidable waits for slow computation +on the target. +More tasks of a wider variety are featured than previously, placing strain on +Mitogen's module loading and in-memory caching. By running over a long-distance +connection, it highlights behaviour of the connection layer in the presence of +high latency. -Kathmandu to Paris -~~~~~~~~~~~~~~~~~~ +Mitogen requires **14.5x less bandwidth, 4x less time, and 2.3x less CPU**. -This is a full Django application playbook over a ~180ms link between Kathmandu -and Paris. Aside from large pauses where the host performs useful work, the -high latency of this link means Mitogen only manages a 1.7x speedup. +.. image:: images/ansible/pcaps/debops-uk-india.svg -Many early roundtrips are due to inefficiencies in Mitogen's importer that will -be fixed over time, however the majority, comprising at least 10 seconds, are -due to idling while the host's previous result and next command are in-flight -on the network. -The initial extension lays groundwork for exciting structural changes to the -execution model: a future version will tackle latency head-on by delegating -some control flow to the target host, melding the performance and scalability -benefits of pull-based operation with the management simplicity of push-based -operation. +Django App: UK to India +~~~~~~~~~~~~~~~~~~~~~~~ -.. image:: images/ansible/costapp.png +This short playbook features only 23 steps executed over the same ~370 ms link +as previously, with many steps running unavoidably expensive tasks like +building C++ code, and compiling static web site assets. +Despite the small margin for optimization, Mitogen still manages **6.2x less +bandwidth, 1.8x less time, and 2x less CPU**. +.. image:: images/ansible/pcaps/costapp-uk-india.svg diff --git a/docs/images/ansible/ansible_mitogen.svg b/docs/images/ansible/ansible_mitogen.svg old mode 100755 new mode 100644 diff --git a/docs/images/ansible/costapp.png b/docs/images/ansible/costapp.png deleted file mode 100644 index 568270703a3792cf582e2a2158e9196af7760d91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61907 zcmZU*byyT_`#-#-AhjS$cQ;6PcT0nGcXtX%w{&+S4bmmuB@NOI(hcwI{e6Cay@SNg z9y2?0%@vtCoxiW)5M+P7ePbvt6<&fE`%m=&yZzL-z26}^h z<#v?(0QMj{NNG8PKu8}T-%z0ROl)B1I~Qqr@poI$V01F7wgI9HU>DffP{Hm0E(b~q zcn#TDctXeFflmWTiwUcGET3e#`{>Ls4d(DRhVFKlZ*e)EobU$-Aru7T+|n!MP6_9k zrZi1mHkmfUjZhkfWW{wz4XrzdWc{AFOtjVVUUQvz3QfSo5W(+nav8k4>ck``cyKSQ z*l*d-GzViFPyM$k(V67KS^T$=V~nF)LH;Vm{r~?_#4VD&@0qRG@E!%SE#k~8S zh*4<=NGN_$Qi`)c^o1I&)6&ukSD(gOv}qEPJwU2dx6Y@yMo&vi3s0Vs92)&Z;~-vY zw!FNI!H~xUhV9vPq5w_E#Njx8=r(2nKEh|Vtst`Es;($IQskVbAL&|BJoncjcUoYrK-t*K1aRo@;)#C{3U21R-(YGBfB`s-otz4 z6N7HoTZerU2U{y83f*hp=|1lD*v7__+hIt^Cd}pQ?XjiXXqv9<@}JUtVg%A@jE1z^ ze{A!tvtqJS#WW>pjC#%XvuBjef?w(ASk&u%_ zvFLSO4L#~cV~T&;=OJvjoSA~+#+2@Sej44YUgGtWG8Arlk=ywCO|V{)&~qnQ#}0UC zzyDr%%z+hXBJwxR73JmS8{+h+Fv39rOEwA(aqASg(WJq1H46j?uw!Pdqjlk*W{$5b z8Mfdox6cM1$r$ySM=pAATmLZH|28o=Z}-{xzWo>v3kBK^{S-~4jk)neH-%n~!|ovr zGQgHV(F3dgg*Hx=D+YQ189u5cqzCX@M_Qq|@!g((C(sqvO9UZ+kcASlied@B3f=xD ztfc*PcqFVRUFldrF-M2Ykf-N)oyZ`9O=RK3|9TELeku^`SlpMHWHm9_kg~%)fv1)J zW1SVJbU8vvd5A8Y-L4_n>w6w>Xzaa>a^iy)3lBajEluv7^-@v&;?GvedpEk62w!`+e;VwcPV#bsyzOhAsfx0%i>{<-Hy#1w`N z0~V7F&B>FB6y~fUzdH10qNbBOE}B&M7UOWX+LEVquY>=*(@R3OtN#CF!6MzStuRfyCq8by+S`SO+rXYi&k5Yb^Qq5h#B8 zO~$uQSV(L21o-gE2V$a}E_#+yAiRtqjXKklLxD;=%{Dp}Y75&P3_3r8m@$r<&Up`n zcatby>f}Jgh^yHIH_?9BUvEd2h=G5<=*=0wzAG>JJs{<@c_6)DZ|I?1gF0_>#(rfsum|31TXkE`6V* z5uSpSBS>A@vWylql1*yq<$svCweBt>Rm6Js2m~Ia5g^jEURN~QGg{M*%o16}tiH6- z74P(Q2|nBPGy1#2>n@DEyw>87IlH*hslQmRfBTw|H{H*FF*iPcIM?(bo2@ggZIHi` zf4%LW%EFxV_2!WCZEb7Vv|C(<@NN9skH%$u`P}cVKkxm!X-xJt|CNXRg7-NQ+yM@L7rw6u?xKjaax@A^4JKIbN+4fth8pyH(B$7@L0++19qDnq!m{sf4pDLv=C8Qa7J*KGC&sJhe$HC?; zu<#_GZKIW$s|SlvE1e_q{RK zsO2H_XUB0m9W655EARf2qSgAZfs2Lys;>LfMl8%(eZIF{S?Am57m=4MYacXzpVLC0 zty4k&+kvf@NxdI;!;&{CYaY`b+fJW+?;kRYyhC=>e4Y z(AZ}qI+`ZJ_V&yed_|;x&ro6J$YUeJt0f3bFD;eLT_fr-)EPU)jm(B{R&2 z)z{biUngN3=;)57(783Y1quZSj&WCpTqlZ!$lOGc70S~r=(~0t+16j>^dNOs+I~C$c2m6}TB7!93Cti&Vb+*yT zs$}sJ>_Gv_A7(k{T|C-S$-Md)lC;Q$EKOPHFFdjs2sl>mFWDkUM`$COPTxzyRdV-Y zTm1_Jb=OtmwiB0j!wo1&CnJEU*-zh*v>S}C>!R4QiOUhJbhY}&yijF8#}H=vA5VtZ zuP#}zA6Jalv*IImg1iRMF)*{Xm}Q|k?T6D*#P;+hOwh%`iVE5BjvnZZ^t}^>u|FWd z;62$`5XgdhHG8`U?4m9BVZc3_q<;^Dp{fd?YB1l2B97!!L3MXy&vcW)2H}h2X<>kL zG=1L(D=w~}g!buGbKaht)u$C(27^Jw!A2Pv*v1Lu=pt0lSNE@D!-~VECwZcw5s{I* zMcgs9e3S03uDd%sLsHH@#>N_TYj!E|dt3v+WF`#$qM~A2$lY0+m6i1=vfqM@GRQ0{ zuXDPwqKDg5HEk_F#Ym9^eZtTG0RIRs8s< z>D>0_9d~-3-7gC%_41aM7H%e{bJg@4p2yo!2|dR%;*OZ(vo2MUD~f(V-XRSgC1hZA}OI^_4MuALg47G5D|N`mPg! zzl@%-vGT{u8T>)bKw_hpa1%%?kxM6#(=d%YMm1_zC6Eux0`1Al%DQIf{@LR8(Z^Z+ ztmXFZT=048c~I}Qc>d#}ntM&vY}dKLRo>o&=y=u>Do3;Hqx(F8jWe9pEn7niwD&EM zrBf>!z9S*mmW@;E-HG7L-utmPw-x8}pZ9LFQ1--DQ`60QJbb+K2RB|A&epq44eBsieIl()oO! zUd9R!p6qPr^6!P~>g3wqP;5W1CiH!SYdP;~$gQfm9L{*h_x9u-y`Swp_-jt%wKf1> z;4-fQ{xBBKu#8W0;LxQ!521t@f!4AQ6B%9@?z@IaUYyJ_bIaP9iA5h~_(imMWmRk%dsF6$p{l~GL7yTiP?4dXG&Syh2D@=H4XUyMLZImauL}+&WcGrrC z>|IO?(`dTOv|#jnbB%h;D+Ed}Kv4PX&uwib^3-e%=M_(Vk$5i>fet&bPt7V$a=+uV z*kfPKb>`&Kon&7<&x7U2PPCdI(zF^gp=O@YeD<2+58=zp-0mXJs{~0|;CZ$$Hso>Q z@~ju@cJ=Gs8)RG}D9+>cjg5n4=Ujg5Jvp!2bsS^+ z7MIk1%#yWkYzT&q_yTL#co5CQv8S|a8tG*r?(zO!iabI(D8@9#R$m61Xe(ZMa%OH? zR(PkSCO{sZKzu+i2rfGo!GNP~5KkVl9XtA;S4BMc-i3$4U#@8b_RN2?$}MEqPcIQn zQ^=qMa`6IXcGaCNE>w_-iPBckzGrY8E{3RRUYtV7FdyR~1Z!!q90T z_eQ0!iwpuu+WNV*o@Q4_j;Cr@nR~xxf6;3yb?-v^W58vI6kw!zj3(%uKCk8fk2KKG zbqp<(g?_w7FmB`sTfO8Nt|tux3F!+AZCaVk`&h#$0J(QQJA2~%acQH$+#QXaxvW2R ztLVWB1MZ#UXaI$#-AZP@aI=4Kft)|G-7jxsBU0(3l_r2kq!Vb%%F9DeHx}8{wh(T- ze2Hva-ifTnb5s+{w1-u<sT7P)pP4=w}}Vf z=l9WF9yN@L1hDw@{#9Atqy!f}{Kvv2aZ+GbGimtoiBlkF(x~>@ss?#5@_c;l`Eehw zAd}iq4kU-G$7kjMC63YG60_BrUIv^F`Z%}i^%1!FXNP<>a(EnFPji?)X2?=vP^*b~ z4hPk3^0}-B30la?%E~@8N(RCGfz(hzsJ31R`kG!e!B^KwOs`4m8(l9BtJzoomm3Hk z#KprydjB4yDt}?qbN$q9l$wjz&PRZ#G`BNq<2;3&hJu0uf;Vq(-7?1is2B>j6SKSD z)F^`MG<}lBRF&Fu_bPcCy)c}YqQshDwdGK@FkZ_PFh;oilAVYw1Dp1 z#z0H`e*~h`gc||GuZasLY4n(7eYgK8VAw+>HEqKbZJ^20)T zqc%0S_@Kx$DiV(&az54?CgyUpt7f7bLi1$j=^elgR;Rg|r^I z6&pMIjSVzA%Rmov^};l{G>`7LGUKN<-%Xl=Cltofn2uw6`%JDH@`6#kGmW_H?p@-c z@lTd9O3L>>0-=2X73hc|m(Ej?LRkr!w!j2o=Fs&z;)_V3@D~O30Ebp^RKU`sR(KE;AUyfi&(1X89Fdq)rx2jG@&9l`d|`n8 zC|#rC$FmmY`%y1UF<7*se03i<1uk`K)rssY658OS=#5l06FW3ZU+oMzTqk zQk%H!W}*D=NMjF}`0v)Y?5-ZM4IZ5gG zyLpN}#r)zpwTrqG5q2Bdc2~gpnoL1z!+GplnVA6YjD^fK1e?y2{LMZOmual#0DXd1 z8qQ*uPKdZeVVR2~g?5td6u^U=6-Od*Y6j)T-_tjZ6Z@l>bRrm(D&LyHM95<(6(5t- zVG3!GmqFjpv3!?dRAF~;?;@mi0>8xh&y*Q-VTVcd=+)b2;0Zuh0(@5Qi6u9b_2hdWM zJ+ABzEEUEs$ga;G8W`f}P@^-olE0`2BU9&Vc_?pvjTw6{Fb=NiWq*JISoZQWiNCEo zoY*q&aSPBItz9S&z9zpeQb%LcTB_&TM$;mT+eI5iY1nb!UrJi@y@nCXBm{r!28ji4 z!;oZ?hi4)mlQri!_oO;?JadXDN&xFxXeWrCaLL=@HZy%7EG|34|7yNK2A>B6Ce7PL zTBx#ReZAc;An;nAb=j#}vc~J+sxLgqJ{~N_35$VwxBl#7+(z`C?rFoXA0dE#|<2=Xp;Scz^x9JtTw29Hz|Nkpp_>5soBvh;NQ>JxL<}-(;Dq=cNp@pTjS+ zrW7Ct6OHiamCQhwHYOxmV6iYdvP?n`1cfSOwB8 zT{#(d-3WVv^_+|FXkB>$_YQjlOm+2V*tTzb1+I;I&rd%mzA~GiQkl)dqRH<)YXORFZ z$U}b=PoFT|X&2kAG2{1NYr7>UPlv%uW zbB3%5L)efcjd zhxgIsAh4&xOh&y6CTMf0kwgG@H{YPfq>daEpKhE4%ZM8tC*h4N3mq4OA4%s;}A~hDRpcsa6gvfEh&e~`?Gts!TRnbdfMABaIe!SF5Q0l zY9x+>5XjZSBkE3g_!=brxv8;n-mD&AaQMb>!UrcOe4ROzNaGj$*iYj*HL5aB0LMdt z5Ay5UFkl{%x*Cp!D5uz|vj^8p4DirlJuh{VswS~`+RrZ`$m6g?HwH@CBVZrfYIHJ-o28~&`P>xWn=8J*eu{y$Xz?L?DR zj!macrn4h~6eh?jD=I2VOAo%KQF7)}my_Ti8ApK=H1;R&!zeydcUo4-m4vh4TREO{ z|8;2LZeHBT65K;@r^y=++3ZAXQJ^SYU&U{B{0cFx> zvk30PyQAdu0)O|(fGB7queTSbXYY%HFGk{RH?`g}Hw_n;;g;taRr)<^ml;N^1_f?NS;Ix8?2DS0wRxOzAp!V@EAF%jBfugTR?FXe2oJ*+j&kNuop<3^~WQ zF&h}^^hzwnpXrMm3K())o@TAtg=4pe`)bjQwHP2R@fL25EZCFZW%K(eqbAa%)oe_& zV@5N~yIUk5;EPx{+F~oq%Af)OE%C#3%U4GB-#8KZr6FVWnx;77lsQ=e-qO&Xn}jM;6PWl@now zKjXQU(G=%M#qE3QQN$<#tLmh`0jzNLS^N(&9R$+bH$e{+3%q=)&8r6!my3RRdM7!Q zH7c$cm?GX@G%Oqci=g=e_>ATstuIVnY}}Fo zPwnR6j|CH}^`A0#zQ&c48R|2OD=gz^L6=mGN9p$o)G{Co9a6e&XSjb*)|&2q2Z_Ec9mie;c1 z2^!!;p|61XQtPbWPX-|M?vHut@e8_|s}^*TPUa z250+ve-~EVa9awK8$>%ItX%Z?hsHG7hmD6kCcZuD@4wOlPe2eZ_RAtzUDzaU;g~&5 zZqQnY78@9x
  • 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 diff --git a/docs/pcaps/.gitattributes b/docs/images/ansible/pcaps/.gitattributes similarity index 76% rename from docs/pcaps/.gitattributes rename to docs/images/ansible/pcaps/.gitattributes index 8c9e9af7..ae890c41 100644 --- a/docs/pcaps/.gitattributes +++ b/docs/images/ansible/pcaps/.gitattributes @@ -1,3 +1,3 @@ -*.pcapng filter=lfs diff=lfs merge=lfs -text +**pcap** filter=lfs diff=lfs merge=lfs -text run_hostname_100_times_mito.pcap.gz filter=lfs diff=lfs merge=lfs -text run_hostname_100_times_vanilla.pcap.gz filter=lfs diff=lfs merge=lfs -text diff --git a/docs/images/ansible/pcaps/costapp-uk-india.svg b/docs/images/ansible/pcaps/costapp-uk-india.svg new file mode 100644 index 00000000..7a549ba0 --- /dev/null +++ b/docs/images/ansible/pcaps/costapp-uk-india.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/ansible/pcaps/debops-uk-india.svg b/docs/images/ansible/pcaps/debops-uk-india.svg new file mode 100644 index 00000000..ddf8d1f5 --- /dev/null +++ b/docs/images/ansible/pcaps/debops-uk-india.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/ansible/pcaps/loop-100-items-local.svg b/docs/images/ansible/pcaps/loop-100-items-local.svg new file mode 100644 index 00000000..8f74fbef --- /dev/null +++ b/docs/images/ansible/pcaps/loop-100-items-local.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/ansible/pcaps/stroke-width.py b/docs/images/ansible/pcaps/stroke-width.py new file mode 100644 index 00000000..7a0ba435 --- /dev/null +++ b/docs/images/ansible/pcaps/stroke-width.py @@ -0,0 +1,16 @@ + +import sys +# Add viewBox attr to SVGs lacking it, so IE scales properly. + +import lxml.etree +import glob + + +for name in sys.argv[1:]: # glob.glob('*/*.svg'): #+ glob.glob('images/ansible/*.svg'): + doc = lxml.etree.parse(open(name)) + svg = doc.getroot() + for elem in svg.cssselect('[stroke-width]'): + if elem.attrib['stroke-width'] < '2': + elem.attrib['stroke-width'] = '2' + + open(name, 'w').write(lxml.etree.tostring(svg, xml_declaration=True, encoding='UTF-8')) diff --git a/docs/svg-boxify.py b/docs/images/ansible/pcaps/svg-boxify.py similarity index 100% rename from docs/svg-boxify.py rename to docs/images/ansible/pcaps/svg-boxify.py diff --git a/docs/images/ansible/run_hostname_100_times_mito.svg b/docs/images/ansible/run_hostname_100_times_mito.svg deleted file mode 100644 index 53837ec9..00000000 --- a/docs/images/ansible/run_hostname_100_times_mito.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/images/ansible/run_hostname_100_times_plain.svg b/docs/images/ansible/run_hostname_100_times_plain.svg deleted file mode 100644 index 68cf8af3..00000000 --- a/docs/images/ansible/run_hostname_100_times_plain.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/pcaps/run_hostname_100_times_mito.pcap.gz b/docs/pcaps/run_hostname_100_times_mito.pcap.gz deleted file mode 100644 index 8e541dcd..00000000 --- a/docs/pcaps/run_hostname_100_times_mito.pcap.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6d9b4d4ff263003bd16e44c265783e7c1deff19950e453e3adeb8a6ab5052081 -size 175120 diff --git a/docs/pcaps/run_hostname_100_times_vanilla.pcap.gz b/docs/pcaps/run_hostname_100_times_vanilla.pcap.gz deleted file mode 100644 index 668c7f4e..00000000 --- a/docs/pcaps/run_hostname_100_times_vanilla.pcap.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7a993832501b7948a38c2e8ced3467d1cb04279a57ddd6afc735ed96ec509c08 -size 7623337