From 936eae68b6909f9656983c9e233d998d22965895 Mon Sep 17 00:00:00 2001 From: Vanessasaurus <814322+vsoch@users.noreply.github.com> Date: Sun, 6 Aug 2023 23:09:24 -0600 Subject: [PATCH] adding network osu metric python parser (#20) * adding network osu metric python parser this will parse the data into a structured format, and next I need to add plotting functions for it. Signed-off-by: vsoch --- Makefile | 5 + README.md | 9 +- docs/_static/data/metrics.json | 14 +- docs/getting_started/metrics.md | 4 +- examples/python/io-host-volume/run-metric.py | 6 +- .../python/network-osu-benchmark/README.md | 18 + .../OSU-MPI_Accumulate-latency-Test-v5.8.csv | 24 + .../OSU-MPI_Accumulate-latency-Test-v5.8.png | Bin 0 -> 43489 bytes ...OSU-MPI_Fetch_and_op-latency-Test-v5.8.csv | 2 + ...OSU-MPI_Fetch_and_op-latency-Test-v5.8.png | Bin 0 -> 26195 bytes .../img/OSU-MPI_Get-latency-Test-v5.8.csv | 24 + .../img/OSU-MPI_Get-latency-Test-v5.8.png | Bin 0 -> 42162 bytes ...U-MPI_Get_accumulate-latency-Test-v5.8.csv | 24 + ...U-MPI_Get_accumulate-latency-Test-v5.8.png | Bin 0 -> 41427 bytes .../img/OSU-MPI_Put-Latency-Test-v5.8.csv | 24 + .../img/OSU-MPI_Put-Latency-Test-v5.8.png | Bin 0 -> 40190 bytes .../python/network-osu-benchmark/metrics.json | 485 ++++++++++++++++++ .../network-osu-benchmark/requirements.txt | 3 + .../network-osu-benchmark/run-metric.py | 92 ++++ pkg/metrics/network/osu-benchmark.go | 23 +- sdk/python/v1alpha1/CHANGELOG.md | 1 + .../metricsoperator/metrics/__init__.py | 8 +- .../metricsoperator/metrics/network.py | 79 +++ sdk/python/v1alpha1/metricsoperator/utils.py | 15 + sdk/python/v1alpha1/setup.py | 2 +- 25 files changed, 838 insertions(+), 24 deletions(-) create mode 100644 examples/python/network-osu-benchmark/README.md create mode 100644 examples/python/network-osu-benchmark/img/OSU-MPI_Accumulate-latency-Test-v5.8.csv create mode 100644 examples/python/network-osu-benchmark/img/OSU-MPI_Accumulate-latency-Test-v5.8.png create mode 100644 examples/python/network-osu-benchmark/img/OSU-MPI_Fetch_and_op-latency-Test-v5.8.csv create mode 100644 examples/python/network-osu-benchmark/img/OSU-MPI_Fetch_and_op-latency-Test-v5.8.png create mode 100644 examples/python/network-osu-benchmark/img/OSU-MPI_Get-latency-Test-v5.8.csv create mode 100644 examples/python/network-osu-benchmark/img/OSU-MPI_Get-latency-Test-v5.8.png create mode 100644 examples/python/network-osu-benchmark/img/OSU-MPI_Get_accumulate-latency-Test-v5.8.csv create mode 100644 examples/python/network-osu-benchmark/img/OSU-MPI_Get_accumulate-latency-Test-v5.8.png create mode 100644 examples/python/network-osu-benchmark/img/OSU-MPI_Put-Latency-Test-v5.8.csv create mode 100644 examples/python/network-osu-benchmark/img/OSU-MPI_Put-Latency-Test-v5.8.png create mode 100644 examples/python/network-osu-benchmark/metrics.json create mode 100644 examples/python/network-osu-benchmark/requirements.txt create mode 100644 examples/python/network-osu-benchmark/run-metric.py create mode 100644 sdk/python/v1alpha1/metricsoperator/metrics/network.py diff --git a/Makefile b/Makefile index 1c5578e..f7e9fe0 100644 --- a/Makefile +++ b/Makefile @@ -262,6 +262,11 @@ test-deploy: manifests kustomize cd config/manager && $(KUSTOMIZE) edit set image controller=${DEVIMG} $(KUSTOMIZE) build config/default > examples/dist/metrics-operator-dev.yaml +.PHONY: test-deploy-recreate +test-deploy-recreate: test-deploy + kubectl delete -f examples/dist/metrics-operator-dev.yaml || true + kubectl apply -f examples/dist/metrics-operator-dev.yaml + # Build a catalog image by adding bundle images to an empty catalog using the operator package manager tool, 'opm'. # This recipe invokes 'opm' in 'semver' bundle add mode. For more information on add modes, see: # https://github.com/operator-framework/community-operators/blob/7f1438c/docs/packaging-operator.md#updating-your-existing-operator diff --git a/README.md b/README.md index 1e1dede..43fcbe2 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Note that I haven't started the operator yet because I'm [testing ideas for the To learn more: - ⭐️ [Documentation](https://converged-computing.github.io/metrics-operator/) ⭐️ -- 🐯️ [Python module](https://pypi.org/project/metricsoperator/0.0.0/) 🐯️ +- 🐯️ [Python Module](https://pypi.org/project/metricsoperator/) 🐯️ ## Dinosaur TODO @@ -18,8 +18,11 @@ To learn more: - Python function to save entire spec to yaml (for MetricSet and JobSet)? - Metrics parsers to do (need to add separators, formatting, python parser): - perf-sysstat - - netmark / osu-benchmark - + - netmark +- Plotting examples needed for + - perf-sysstat + - netmark + - io-sysstat ## License diff --git a/docs/_static/data/metrics.json b/docs/_static/data/metrics.json index 6b5f5dd..0a1682d 100644 --- a/docs/_static/data/metrics.json +++ b/docs/_static/data/metrics.json @@ -1,4 +1,11 @@ [ + { + "name": "network-osu-benchmark", + "description": "point to point MPI benchmarks", + "type": "standalone", + "image": "ghcr.io/converged-computing/metric-osu-benchmark:latest", + "url": "https://mvapich.cse.ohio-state.edu/benchmarks/" + }, { "name": "perf-sysstat", "description": "statistics for Linux tasks (processes) : I/O, CPU, memory, etc.", @@ -19,12 +26,5 @@ "type": "standalone", "image": "vanessa/netmark:latest", "url": "" - }, - { - "name": "network-osu-benchmark", - "description": "point to point MPI benchmarks", - "type": "standalone", - "image": "ghcr.io/converged-computing/metric-osu-benchmark:latest", - "url": "https://mvapich.cse.ohio-state.edu/benchmarks/" } ] \ No newline at end of file diff --git a/docs/getting_started/metrics.md b/docs/getting_started/metrics.md index a9a5fcc..341bb4f 100644 --- a/docs/getting_started/metrics.md +++ b/docs/getting_started/metrics.md @@ -78,7 +78,7 @@ The following examples are provided alongside the operator. Each directory has a - [perf-lammps](https://github.com/converged-computing/metrics-operator/tree/main/examples/tests/perf-lammps) - [io-host-volume](https://github.com/converged-computing/metrics-operator/tree/main/examples/tests/io-host-volume) - [network-netmark](https://github.com/converged-computing/metrics-operator/tree/main/examples/tests/network-netmark) (code still private) - - [network-osu-benchmarks](https://github.com/converged-computing/metrics-operator/tree/main/examples/tests/network-osubenchmarks) (code still private) + - [network-osu-benchmark](https://github.com/converged-computing/metrics-operator/tree/main/examples/tests/network-osu-benchmark) ### Apps to be Measured @@ -103,8 +103,6 @@ The following tools are folded into the metrics above. Often, one tool can be bu - [ghcr.io/converged-computing/metric-sysstat](https://github.com/converged-computing/metrics-operator/pkgs/container/metric-sysstat) -text.startsWith("Hello"); - Sysstat is stored as a general metrics analyzer, as it provides several different metric types; It generally provides utils to monitor system performance and usage, including: - *iostat* reports CPU statistics and input/output statistics for block devices and partitions. diff --git a/examples/python/io-host-volume/run-metric.py b/examples/python/io-host-volume/run-metric.py index 8314f07..f2bb88e 100644 --- a/examples/python/io-host-volume/run-metric.py +++ b/examples/python/io-host-volume/run-metric.py @@ -3,6 +3,7 @@ import argparse import os import json +import time from metricsoperator import MetricsOperator import metricsoperator.utils as utils @@ -33,9 +34,12 @@ def main(): # Create a metrics operator with our metrics.yaml m = MetricsOperator(metrics_yaml) m.create() + + print('Sleeping one minute to allow container to pull...') + time.sleep(60) for output in m.watch(): print(json.dumps(output, indent=4)) - utils.write_json(output, os.path.join(here, "metrics.json")) + utils.write_json(output, args.out) if __name__ == "__main__": main() diff --git a/examples/python/network-osu-benchmark/README.md b/examples/python/network-osu-benchmark/README.md new file mode 100644 index 0000000..ba2b526 --- /dev/null +++ b/examples/python/network-osu-benchmark/README.md @@ -0,0 +1,18 @@ +# OSU Benchmarks Python + +This is a quick example to show running and plotting a few of the benchmarks! +This assumes you have a running cluster with JobSet and the Metrics Operator installed! + +```bash +$ python run-metric.py +``` + +The script will use the metricsoperator library to submit the associated yaml under [tests](../../tests) +and then wait for the pod to complete and parse the output in the log. + +## Example Plots + +![img/OSU-MPI_Accumulate-latency-Test-v5.8.png](img/OSU-MPI_Accumulate-latency-Test-v5.8.png) +![img/OSU-MPI_Get_accumulate-latency-Test-v5.8.png](img/OSU-MPI_Get_accumulate-latency-Test-v5.8.png) +![img/OSU-MPI_Get-latency-Test-v5.8.png](img/OSU-MPI_Get-latency-Test-v5.8.png) +![img/OSU-MPI_Put-Latency-Test-v5.8.png](img/OSU-MPI_Put-Latency-Test-v5.8.png) \ No newline at end of file diff --git a/examples/python/network-osu-benchmark/img/OSU-MPI_Accumulate-latency-Test-v5.8.csv b/examples/python/network-osu-benchmark/img/OSU-MPI_Accumulate-latency-Test-v5.8.csv new file mode 100644 index 0000000..f0755d2 --- /dev/null +++ b/examples/python/network-osu-benchmark/img/OSU-MPI_Accumulate-latency-Test-v5.8.csv @@ -0,0 +1,24 @@ +,Size,Latency (us) +0,1.0,0.56 +1,2.0,0.41 +2,4.0,0.36 +3,8.0,0.3 +4,16.0,0.27 +5,32.0,0.25 +6,64.0,0.26 +7,128.0,0.29 +8,256.0,0.39 +9,512.0,0.57 +10,1024.0,0.78 +11,2048.0,1.49 +12,4096.0,2.36 +13,8192.0,4.68 +14,16384.0,9.47 +15,32768.0,18.38 +16,65536.0,35.33 +17,131072.0,68.67 +18,262144.0,138.39 +19,524288.0,271.58 +20,1048576.0,542.47 +21,2097152.0,1085.58 +22,4194304.0,2288.26 diff --git a/examples/python/network-osu-benchmark/img/OSU-MPI_Accumulate-latency-Test-v5.8.png b/examples/python/network-osu-benchmark/img/OSU-MPI_Accumulate-latency-Test-v5.8.png new file mode 100644 index 0000000000000000000000000000000000000000..34e9f88daae70580d9c2ad21afe59808742a6569 GIT binary patch literal 43489 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 F{{yW4eFXpj literal 0 HcmV?d00001 diff --git a/examples/python/network-osu-benchmark/img/OSU-MPI_Fetch_and_op-latency-Test-v5.8.csv b/examples/python/network-osu-benchmark/img/OSU-MPI_Fetch_and_op-latency-Test-v5.8.csv new file mode 100644 index 0000000..e93ba50 --- /dev/null +++ b/examples/python/network-osu-benchmark/img/OSU-MPI_Fetch_and_op-latency-Test-v5.8.csv @@ -0,0 +1,2 @@ +,Size,Latency (us) +0,8.0,0.5 diff --git a/examples/python/network-osu-benchmark/img/OSU-MPI_Fetch_and_op-latency-Test-v5.8.png b/examples/python/network-osu-benchmark/img/OSU-MPI_Fetch_and_op-latency-Test-v5.8.png new file mode 100644 index 0000000000000000000000000000000000000000..c5e56adaea5b18f87d8d2f5a69e9129d859005e0 GIT binary patch literal 26195 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 literal 0 HcmV?d00001 diff --git a/examples/python/network-osu-benchmark/img/OSU-MPI_Get-latency-Test-v5.8.csv b/examples/python/network-osu-benchmark/img/OSU-MPI_Get-latency-Test-v5.8.csv new file mode 100644 index 0000000..de9f9fe --- /dev/null +++ b/examples/python/network-osu-benchmark/img/OSU-MPI_Get-latency-Test-v5.8.csv @@ -0,0 +1,24 @@ +,Size,Latency (us) +0,1.0,0.57 +1,2.0,0.48 +2,4.0,0.34 +3,8.0,0.28 +4,16.0,0.19 +5,32.0,0.18 +6,64.0,0.15 +7,128.0,0.15 +8,256.0,0.15 +9,512.0,0.13 +10,1024.0,0.13 +11,2048.0,0.16 +12,4096.0,0.16 +13,8192.0,0.23 +14,16384.0,0.5 +15,32768.0,0.91 +16,65536.0,1.85 +17,131072.0,3.75 +18,262144.0,9.63 +19,524288.0,20.8 +20,1048576.0,45.42 +21,2097152.0,76.36 +22,4194304.0,303.25 diff --git a/examples/python/network-osu-benchmark/img/OSU-MPI_Get-latency-Test-v5.8.png b/examples/python/network-osu-benchmark/img/OSU-MPI_Get-latency-Test-v5.8.png new file mode 100644 index 0000000000000000000000000000000000000000..ca1ea8c479c0a68dc82b6b4b33d45463a7e6469a GIT binary patch literal 42162 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 literal 0 HcmV?d00001 diff --git a/examples/python/network-osu-benchmark/img/OSU-MPI_Get_accumulate-latency-Test-v5.8.csv b/examples/python/network-osu-benchmark/img/OSU-MPI_Get_accumulate-latency-Test-v5.8.csv new file mode 100644 index 0000000..9363b9d --- /dev/null +++ b/examples/python/network-osu-benchmark/img/OSU-MPI_Get_accumulate-latency-Test-v5.8.csv @@ -0,0 +1,24 @@ +,Size,Latency (us) +0,1.0,2.96 +1,2.0,1.89 +2,4.0,1.83 +3,8.0,1.75 +4,16.0,1.71 +5,32.0,1.68 +6,64.0,1.75 +7,128.0,1.9 +8,256.0,2.21 +9,512.0,2.65 +10,1024.0,2.99 +11,2048.0,3.66 +12,4096.0,5.6 +13,8192.0,10.8 +14,16384.0,23.46 +15,32768.0,46.46 +16,65536.0,75.88 +17,131072.0,166.75 +18,262144.0,256.08 +19,524288.0,456.7 +20,1048576.0,1026.29 +21,2097152.0,1970.85 +22,4194304.0,4172.06 diff --git a/examples/python/network-osu-benchmark/img/OSU-MPI_Get_accumulate-latency-Test-v5.8.png b/examples/python/network-osu-benchmark/img/OSU-MPI_Get_accumulate-latency-Test-v5.8.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0d135d02b37e3719388f03359ca80b5e331a49 GIT binary patch literal 41427 zcmce;by!wg_XWD?kPs0>Qsf9Kt#liJQli3(g0x6?N-HQJWzkY1CDPp>C4z)>m(ner zcW%Ejet+Ei&wZZnJjc%i@4NR}bIm#C7-KF!WhGfsVp?JZK}fG(yLt;jussn3Ym^Wl z{)WGO@EiO~*iQP6-EGSUc828g1rot2rTotd%TDF*`^TVqR$i(GZsy@zox6Y;;h zO#E)sOn8Zjmz{axpNPi!`2&fby2L&O2c-&w!85pA%P`NopW!0pMrrQ&@kp9 zzHBg~d6w(GwkLeB(S~@kVif+9%a8I+du#&T#y&n#K6@Pg7cOFNlG}9V%$bPLBSb{T z%f)MJb{$i*9;sa>TU%SB1p^i}Ns3XC_YQV8je~8cTE=FQW9tJ2hY1}W9eaCwtA>Uc zya>qab6X|+D-RD!Yv$rAKXJ-myXJdpK+EuMse^gcfr7^4IggmU4fz0p=)UsAB~B5M z62&D09-8I#9_@+AD9fjrncVXW3lt|$`ptACPjsf zvs>=c*!cKkVcSUrd7qZ{;?0`?$-_NLkArPCOvXLGySWdD1hndDsJXQQ>ikdC81aqQ z(^=NOyZ&l)aWN<-=K{T?JAE1^{o{aTW#HzB2h$C)6>pt6R&QU^>c@D2S}vPIjyG@J zdfb<5D7bU7tI%?!-#hEp`%{}N3LGGM(BRH@3=PKms>sMv9}^C zwl(S%F81(3fyL0X7c8=o5`rEFuJ4kQ_3Hyp`UVGE+8MF4u@MLh3rDZIAyo^7BSG5k z+j!a@`}PTqw{G5~aEH$rv~FP7+MbGyawAt$>ydG3?EY}q>*U1;I>TiTef|Bt%FD}7 zO=y-m@ltc$^R23qa{ci|kVeGLD8XR$#}7ph6p?mb6%5|*Eh+J?Cb5#nrH|X zEFF|(a;rtMQc})7;Gt2-bX*#a#?pa6|E^`Ipg@9Cb&QfSN^>&ahfxpdjpR2i8n%Tc zCqZ_%CW7xuNg;Csg_a2hu!)UG7HsJ&ES>7=YEp^V(9rI0a{;^$_-G@%yl`-;$QZ?X zXII5;-M$^6p8kL~@M*Nz!gtg*`8y-IK8()3nnhNRhFq4)n}>#? zg+)Yi;4oxCOz_mxG_|%GUNmgEUr|w^kk*xhg@d29Fi>clo}i_tcN(XPn&VE}==#pW zp}M)T`eB9QzVmdv4=snw&YJN?+ZFO`Pfz55zJ5(vd3m45!4D<}*do>_{>0*?iRG~x zGuZ9jC#F)^`lOq#*|?xrD~poQ6n%g)AtWnaq81ceDQGO`D+ z*ls-VA!E=B;N4hhV7iEyL6%ZYE50ECWutR z+gpgbFI*>1obZ9uKLJPWnw;E)1-!N8WklJLEJ~QZLOE3>oL3(oO%OFcfSV^sJ zJ2T0Iq@;Dz?Fj?x!vVa=(Rtj1osHW`3dVUo`R7dRYb0Ch>gs6tO^ydKia(>XETg#i zpxLwCsCM#86tBVO<8MUliQ)b5kU{$%O~liFuA7;a6`w^WfT#S1#^&YY)YN(#^L;cI z?i0e<#^L7X{`T#g&P07+(R#PW3S{lmTwEE|J@ime;4iP}>M}niX9{vzEG7sE3AuLt zdNtIYmCx*%d8U0EayM=?j8=QKm%BJBL$YpI5JzaDJeWyl~Lw$eZYBUgNL- zz?Y&cR=2e>VZAsgjEje7@3h}zD&O(^`B9ELS;$hwE*BE6q=wKkUf!F_th8zs-;_%3 z7z+|zl!D05$<1BqxFI(3)1Afxwu^@`H7#MW6;Q*#AAbi74$$&9CErzUQFVzBJt#kX(Y^1yoa_V=IW<)yeG zzJ8pHUdWTXaxbS{=)#2yJVtG&yq`Q7t32H2CO&dxWyo=43_hW@zU;@O)wtyYm;z_Ewu z_DsBxWi)oIoO3(ao^sk6^NH^=;nn?!i;IsxzPJ4YGHyeCAYHb{p?gO`*sE7wk8lXy z=H(qP9Cl`3EZ@{pQBz~#2OG2c>Y$al;1--h%}rkOs3Y*Yz{=BF4Ft*jJ!f-x_bUIEFC2!rFlRZ`Wl56{QGmc z!g`BXdvNOSIy;NpJ|8ka=EEf5R&k)62LWjy5}onI1(Af+!1oju63Y7g`7m3lf-t<3lD^&t54iJ!c!j_I4+_?D+?Z_nTK`LoHIv$ZwvTwgAm zt*z}ve!UMCOBkqSI8_w~J99GHjtegN26yZGD+#jPHHx~&>--pBR>dpkQt&rIxs4gKP5rd_ZS$W{>)zkCgZpV1+%#LKu4Tt=AKpp1ME z(^kmT-gSAnA5&6!u;Y)V169d#d5105^&^r6yO}dSK8_#TF}FUy`n@SBIM!*L2tTep z=4wLwr^{EaM3k4iC2WqicQRJx8n#}bqobo{WNd*`K*v#OJ|K{!a-MEJ5H@v_2H99F zT@r9UTwPtoACNO0ipn+XyMXTroAbVXiqT`w8sBptawjb5;eOG98q^|nv5%dvi*2Va zARK4U`idWHP0T+zp`}we;w}o=(`@xyr%c1=B$#a+2nwgu^?L8tVBGR?Cww~|J)(;$(ohLe_A24Lo#M#`~*tm8@57t8= z@m4nMf4&Hoowc>@5o!({^dIiBWo$Z0_p+H?^({S8ms=qnlM6^XuO!IXJOU|rmzoriFNWm`Nb4lB z0r*02dmG>!4-&}gqi8(mpbv!}&IFyX&3&&PjYwY_68y=<#THjLw>gibH|At z4)-^sv`RNxwQp0l$HkqR92;vN&DSb-=0)Z|yFywekDfOoxVB za1tLs)`!FWt^LiBsJ+P2#S;HimGd1AcO|j*zP-AkuBq+9=6Uz-U4>K?ft{1L0VWI% z4Mh|dIwp*yCC9o)F7)O4XcpT%fux*$#fL0=cd;}WOD85KCXlr-eH&m*M0B*KSEUA= z@z(WCs`x8aSML))!EOrWtohL@8T=(mQ2+2?U&!VgA)55Iww$1p;WN3dQ9NjQ)0a9C zDQwFMM~d5ZccHN8@L>06_5+ZAC5%f`y$qWMk&~0lGHO4K*!#R58XDqt-*Xb%{`Ly3 zA)@+Q0ILN9G*U^UC2RW2|Zl>$JN!fXi=^W;3f%^1bvi%`DH+2 z*f=;?NSazEJ|ea=op5i2E_lb9^~@O*oCZq7#>SF+ReM736Yp_&5YD5E4F%bUEyf8u zO3<>t$a;duZdw_h?Ml{d6>MzmqjYrs=^BObY;}3jW`ji(Po6vp7j?8q=(siPzPo_W zL{7tl&KNle;f8cjMIrOx|f}>_H5oPvPD4 zVDaqKaLM?v{^49*U$28k=|xCL*KE#uQ|F=dLryg{HHAn%qF1bn*vgwV8_-!bd`*;J z>AZbI7tYV}$_f^8HpIR#xom^mf3C|T!@aMdWFkm(bYj8_f@IoGL`6l#>c(X+FRvFd zF~b?_1=4Q2@MMBJgT53j3RCp6>(0>b@ol+Yx`gFf;-_=lL${NioBM=St^LN*NH8=b zmoj@;1O%ulSrt6tXuXy@gFZQQ5>)*B{7K*a{r$0!gM)+g3P%V4!V@RLWHP%B4Z1t0 zW+k;Hv#HfJq6(7ScekL(Xxz(S8EAlZY8fJ$g@c2{arhw{98IXDSe-+&@5Cp>p@~WG z*vb_+NdpJzDWytmSjZ9An@+t8rj{#F`_VVz~={!<7fy|%bZgG(KeJ4=V@ zg~KM+#XC!qLP9hIgmz;7=yEitt>d>w$W#ZSE|~TXWWrxKZp6CQAlQ4wu0|j z^1~Nv6xxb$_gLsaj!PbFu|SMB=I=r4nPt*-zByX-1b4;O+nIIUny0!@;|Px&sqyEo z@CD#b7!(v_z7_Q0h$6tqr=)aGYiqBX4HTr;5xuO|;Tb9_PSpsx*IHeTB_GOB4U3lL zvS|URl3;VtmfX|h@NxQKe9vo$PHdy?tKUOm7jyujIPI_Zyoint1mxSkc|N}jLiI&> zxUaW2ZgV(qf}*y@h}Gg?vC~wvV=awVZYY=Lv-j`M|HH~EP!x`fXt^x#@9oTGl4_+L ziht{4=?pb^R3hH?WuZO&@QAj;`k|Du35oe#kALmSH6^8bQo+Htq|EQuTg$q8dp}xf z#GUz|2kq3k@f-juH0OOun`ul-0Hw?$n+em?2dI%j+g5Q1yK2K&x2M}bru=PI2$q*N zwQt?RHZ(NM$ebB27p>S`6rEmo{)dfCf1tqpPQD4%gVq>Q0s?})k;8p$p9XtK-!*-G zC$-(ysX{q5o<4qzjUqs|owZ9)@QOwn0Gde+1z|C+pK!kCf^|b&TU*<1uA3D4!8&NJ z+bcah7On5lIUgf5ZifwxyOoMYRH2jOI>0yjFm7!bKy-R~dPO6Z2g>UE!yHHw6MYY3 zOmV1IX2V#G4;{wpGqH#x3gvGs~?ko9T_@s|-rPe~qDXL65 z*cGH9F<0+d=ek#fI67|1P*TM$9_?PA%|yx$uAf&lZpuMMCnvkV4VywX(QgQ{E|--p zDlW#7dZnK-^7LU|{yF8%-M+yk1Gk0(GbVHEv5$C2l{XP3Ed#!o)AFhJ@88q9DasFM z7g`JfU-1l@DF1@6E(n`)=k?24T3QLol>80#_4x3_MRqgC1S|%9;baSmh>SlXU_5GP z#<0DAE3IpKq*7ALX$%i-(h*NUnssa2L3_o8xw$p9ew5bRs|FC7q;ox)K3bWU9mA5N zBezAN)hi0k9C2~|{yBtIQv0w(Cc(Hv=mRMl&+y-PEQiG)fhdIYV4XX6E--W(P!f;J zhFOZrdDpdeSyHm53Me06l<1*v3WV4P;$_gTLoum`$#wY>`a{qe30aR{O~}+Ju{)P> zulO-k@>4=WMMEPRPEJB-xk6*^u|)ZmvtwgpPVo6RH8lKJCK~jYhRYSXdOBnNv9z=l zTdu+pa^2zy<+%Ix8~J8ur^>s;#0ZIu%8)A$9z5`=XE=83@yCysft)F;o{M$cI4NK` zJZQ8nx>$t6%*?z6^+dtrlIC3hkJ+yVgnbEfbK=f@cdcTZ#Ky*M003jKGt&OlW6(VXN?7vIYPcR}X?4Qla}M6y z+k4R3WMaGv`N|18|K|Yzfl1=u7XSY38{hViRL)rsGBIdW11&yS@Xrfq|rxEzzbTl0Ve*^YckreV|2hd?om_wW$fm6JJni zaXNN)C)wF`rS8PmxIcFsCN1g>!UV70*tiP|w*t)%xzteWfvGA6Gu|9=F|ghN0s;pa zemE5^Gcwh{?*!(pXezW z!?T0^U46*v(Ei9m=kT?oBO3rTQU!zso$JExQf2UusaE}iz3r{lCT?D{ULKUp1V}FA zw!=rpAmVLVv5g-eACGtfleD$FI{{7X6IfFq;o_CgE{_}@6e?0K0AkenG5Li?z>J1f z=?&DZ6KMBb>bO+@vv#|0#aFM=2I8Z|9G(&F(Op*?*?fb7WT2~2ij@e2Y}~=zS-^1w zX_eUJfOrcKT`KEXBP=g>**p!69yIUMZU6W*L^}@qK^7T@M0&}=K>(keF`&6wp~J1G z;_$#FW7F95HsTu?SOGUyUV0W(xV@(rAxHma?!e{0wp zgC?!dpFcwJQ&v`Po4!n`g+oAA3snMbxOG20XGY%&x{EC14%VyE()9w7;dHzutv z;-cX)lzphbI>2^qwR#+MjG6-L=L;n1X;#*x>ewzg1M~o2_=A`vgFbz_hNicSj0_Z6 z!>f?NxdhIuYCdQ-oZ))rCDt69(JCwf`&kw0W5+&11BLR4Xg}*R8DSV%CVNspfI-;C zoAYjtcObp+*EM_f^iTkX+2?L2Woec=@RwE$l{)4Expcw9!viJb=;`V2z`5!J4Dkt4 z;@6~XZ4bKe(7Y)LPsN#ObDa!(AOHjmTj;x!Z!k@ckADQ_8hU4aXsUE@ zSy@^1L!s!^ynOjmz3lr{85w*RXcO;1Tb`Spt-H9mXa?tRzDrGep)Ch`VfHzwEFC8K zC_AYb$>*1toLso`&-0|XCj+1P90x)mpamewqis7ZPoF0iPA||ty^{k~dHKc<9}2rb zsfehol)Rm)qUf#-`EK5iEk*}+5=h4jY;0`QR8)10P%t(iQUtf%v@(mA5`dr+-{{rn z5EANLGdxHP)6xT!|D~Wm&zRCbC`dqDb!umX30iNIAn3R)VrFJ`2l|{|I0b!anH8Te zT)ardomsK-jFd^@4Z2k6m?og7dtaZs9l3A2(ZpTJgM1lwNaa*_KK2Q+ zXWtca@y=0W9&wkA`{a^)JRo=Qa25iovoW0z92xUb&(yT(V@*vTU=D>Fxy2aMA&uPo zjmJ8A_JN~RzV@7QhRQxe;F^{*BRbY04@x_=!45Ht!hmQMv9zCv2py zsp-IEW&)88L8s({B;bhOO4zW9iw~J`5%M^8J|njumrdWg$?o3yj49tFvRbFA@fF*E z_+cFS3rrgfq7EFO@K6Ak3z@6B2m0|Vt$g3Erf(^;{rr`mznvDEzj>T55+Odt%zUXc zu%o3#DQ~lY?~hMEMxcqufdehhE%HkODO60ewZZBu37EYUDoK+wWRb|{swYQIykmT9 zrpzwU>Bp4+p9hnp|JQaAW?$gLdW{8(n(A|k?ynD5M2LRAG>IaDhxV9gs&8oUUp;vE z@ZsCC%rkE>t|^p~CUyV*(h#9(0Uqq5y8=8vSNrl?anB1!DJYoNkKXrEUx`=x`B?w@ z;qf@4IFfrMcGqW_KjG((Uy1(DdchOcUZRvbnezVqOJ~BIOTVuQyLB6`GCrK;#Q*!9 zUOxiT@M!V6g*X}bN?23 z>h*sw6vd}0A1;>CclaVKH7)*iJgqZKiikmVQlwWVCx=Op@Vso26WO!H0kUBnDXoc0OX!M={N&3j)Nr6AJ1pOf`QV7$GLNFxYA zAaN@R`O{mvF+T2d?XZ4;pZ|`D$>H~Lw|qiMa}}5*t#2b`4E)D}e97S*PjPeK`0E`F zThaj+WwTQn@Z%#@U*a=-19=W>x)AvJ__uE_|6f0UAg1BzbvF?~1V#BDkdk_TY$o6D zh9w~};+w2w@4NSVh)(v;+8C2c^m#O{t#k+yRM%l7db+>D!#D5m5!hb-ZSf-X*}Yzj zrN1LlnF~ZbHA)}qSUvZzO)#ND4**o%|KnwQO=|qa-h56Iv8Z`;6>PP5A8W zGB?*KedV=(?P_sHzy8>lqD zCJpV3QYVX?*WY(uc}{9l=Ogl;>{54Q7PEUnE^EdN3#n?6@te|n9DnQcgfSCmJZ$Of zkdW)*xP5WI<%f4>s`nCWo@quT1v4?slS>-@C_bCWf-b8GKSS!&?+4;~*E8Oyn;ZAz zi`2;x8v5w~jknEHp?nO|u%-aiUjLOFu6LOXJh?ot#EpdrnW~1n*d9Gjyv?+eE(^Z^ zQqzmSf1&++Wf?Wo{1*W?F_$|>2N%pm-01cGZOiy184&O@qGkgS&vpunBH>Qe{!4zI ztezJ@aOe7Ki{|Drl`$oczrC?RJj1+5V`z@`rp_&Kpve{B?Oz#5+pyp>$NPFip98nm zPr1C+R&BnHvD)X*2moeYL)#aL!<7A!T1C=AhCeOK+!8S%wQt=mDosAIV{bkC+Ft(O zl`Y$OE_iZ$uj@P_73WWV5#Qm3)79~}uo1Wf1oD4vgh)bH#2)bn$W<^L6Xa_@q~C>ok4?A^D|?ocGvu$8^&6Va z^$L5gc?$>eUCn9m*x7kjB4LYWb>&o!AH@Ig{(jW;3U)+Gk5?w$!$XWziN%;GNkYEb z#B8)5gX1fuqVoFh(EETf;CC)7zu2*6J$T9kx1|4B4wo&M60o2VIV~bWyRx$Kw(Jn- zO6iB%^1l~WzjlZ#s?rPA`L_s=>7F_w$F=3-uHusl;QZjYbouh*l+u)w`ftk%6XSmi z-ddw|a~np7lo2Q0t2|}& ze2+7(kfHJ3($eyGQef8j{Gs}IUHxAQUiBqQb=S~cW@mr(*Dl-Vb*;R);A%7aa%RHN zhk&K`OGZM?OL275tgW;E+O$lT^bD0wJ>$zIGs2axcD6<*mDMiQpK(Nw$P=pAgf`4? z@I%{0ql-4+P8la@U6(T=<>A4mFt^0^t?j;I^|Zz7g`}Rj7q4G?OStW{*)pIY0^GSPptf77(pX><22j`*F_VK%@G1$mS<^F&Sn=vU;e8 zU>|AlR`2|FgAjc(uj*5O?X0P3TE{lkmX2k?%!IHY0rOyu*0gRTBkYssB26n`pOHZ$2N@il z^NsM@ucMFrfMy1O$bZA0vUI4CL~OR~2okd)ur-o$G$q6?-`*AkH?$nw9dM{P3P%eI z={-voE-7-{Vng6q@aHo0^Y-?QPY7`Tmee!zF;khCaZraqN2EXIX)#QuM=rmC#w zf5mKNsCtOXT(*-2E###WZiD?_a3)G0I&`<)4}?Ss(#YAr7cV2E`csyfi^%F{Q!Het zd|_ov5i44l?{31sY;gAtzl=2rITw>4qYskn*|X!@QjFAV{N);@HW!EfetpIK{)gFw zBTTIXNXqf5rtJ7-yEeNGh?3VtI$-<(ef=p)ySQvFQt4B@y_>Cv=e#jb1f6D4Nr@ix zp}-+|zSA$U8hiY1E{yWGwOHE07(Y?HQ}JWOUxLw(Ov+Nbp@lJYo=60XgPr}#y?gZF zUE#GD6hiGzAhHX(ft<^zSz`CX^>WwC(NP_gv_ffYFwa3p`N(>rK0Yo^Du;K*PNcD$ zQ}DNFAIVSuY`S(QkCPORG@@hYO}99I>4aOJj}B!OaOeRvyx6fG2f~AcgFK*)@zm3D z*aDr!0!>uq-m1TH8r7iq=AajR1+$nKy}0vQ70^zo-3#0;assTfvO8gT&rby|JC_6l=oe9U1`zrM zF5)OZ4pKM;2`EeI>C_+xg4fD?#S|sFG%U-hfVQx*vXTNH0q{w?m>yMNPeFsN`SOJn zh$xHAaM90zopbD)NPmO0Y9q60EX6|4Rf!R+?)N+%c4zZUN?ym8FFaYvGniX{|AcYKzU4)pPQcY>_=1O=rK&2s$-Hd; zRZi@}LrOF3@W{w#m%Q++ySoeOzJr(0dVRLbA(IWF00jOboA1PoZfot-VW8xPg8~ZT z6sl0d8caabEn{PI;WP^iFVNUP^YZPKfPZQfI^Nz=M{e+Mp_U&9qh_>?GLGFl&obQm z!eYm%-jl1SedKNl)?LDCR?qVx&*t8B!#hxK9xZqPVjv+I*`&I|?#9A3Ma4Sc5!%2I z)iKA##T71S$!KC~nr$&uBBKpTh!6OwNEpRvpiC;C54n^3K(Vx8@Fp6%Wfhh5{#Wp~s>#|s*HkaGJ=gn%x|Jl^U&8xzFRm3x zh@To8t3gqW(tI%UHSz4ZbJY+7oSh~bb_aV85viUGO**$02no=-k_=|cmp>lq%{3$k zyN%V_^v&is!j#~lDcT%%iPF3Qw1%9#ykezy49C|oLuj-A*QCFb#2KhvHyw(r#EGrX3eJQAgFk80<-`m?e&v`LM z8B}bflVR2TS#EBwafCBSJ@wxjU%db&7i_B}^g>4=>P)ON4KlULmG9m)-f=<|H6Z0j zr>1;BI6ypugUM<1Kec8Kgu_oh11elaRTYAZ`q86DNsTFmg@O=5Hnww0PW-fipFVw( zl9t8;^DU4@RvYto5zpjgHa=QXXdp-s)bka>uBNP|MFxJ4t5>g%f=qybLgWZm)G=65 z#1qU?V5CBgK<7hiWP9K6EdHA4{SWuJ$I`G81Z#7B!-tUy=*Z#Ox)QGP#uIjr?F zFvo)W16(31k9Q6LJ8Rc|+scaP*|TSn3k%?GZf-7#io(aofBWIXhrVGT8NqTufB@H= z@c#Yh&QhoyMOI_jb|MV)3=Cu6zjwtsnwzJm-Ub~HD)Pl$4h_CSEz**~iC+1uU=NuYh(Cj;Teqqr1BVB*3V7bKsJ`3Angf0@+4JX3^1fhHRpVisE-lT@&axKX zg^K3n;!;@j<-z^?aY;$|8yg#s_X7yY$z?4pGQLT&pqAp7FZH@5S!ONIbF8=e!m50m zoQzy(_1z(QuOi8ET#hQ#ywQ6lwzP4G*2I7Hjen7{j=LmFo6{*`Kb!#__RJY(P}}9cSBl=wSLe)AAIng>KtrOOI;|}(_G^Et+TAo7$_-m5ODg+C$yRmmlaoEV4(O( zyG`S_ic{Z`wTRL;|Lw^-j&U6y`;>U$XVaNPzMOzLP2ox&C+rs(C=K@g?o91q(EB15 z@$LW^FlY+Bl+dm-+nLIsbp!2mrfeW=pKT0>KK&K5@?)S&Z`eI_yVZO93XX2(&715m z@?5ZmOgd8>GF9T0fsl;X)TU!%3I_QA2T^(>r0bl15aUtvloUlph*Ua;1!^D&BsHLn z@jhI=56e3S$_7g3hjMENft||1gDLt9KY#x1*67z4e??tgy$!qE@p<(K;!9*JZKpgW zywfR1zYv3T-ze%&U=g$)g#AoNc0|1jE*tZ_Zucaya6Lgl(F1sRCrbzGr@n6|vbHz` zZq^liZ~%8MTBEGaRT_d^xh(PgMQU~>bt=YSvgb}$Loux113$+^^4a!%Avz5Qlt; zAIeo7uJc!jL;|~T-V++6ONnMXWX#>eavYBtu$8V|tAfn~3f=#Nwkw6;kR2s5ippyj zTgCKCMutIiTLu;PNWOZSvZf~I@BKq-q{hjUHKnCFal2F2mYZvN}g)kZe4jzsHxm(F1_&i%a@N)PYep7Eh@Gj#A8gUYu%57pE&yLlBwUX z&tBX$nTsbBqd|rM&eJjRsH6@noW$rIGsAXT9=$Z^G!aN6=4ACMw#OuY3(md{yapsf zc-mZuYERT3VRM8AAta2W(_8(89nbB?;Dv~MkZ|f-TbYl4l%-lIMwQ)-(E}8DM@7XO zuvABbfPlTA^@sQGFO(;BnOK7|UbxF^)jbOq-aq=T5BXgLF1a^vYHSu2wrdWxOI8(k zW&ZoqrePWcYGFqMlxW1Wxw#p?=_CpM@#Dt{^VQK%`BW9NrUxV$K2p^Ceq~z6!93czDe0>`iOdP%*1$YG4Y)!a2RHj2@84+o59fZwo_fi7W4Te>tkArm8nht9D%u z-3A9H1h;GYLYHLz>F$1?OXxrs4mRo!ce1fTCP3{t=7mG}P$Qe81j&nwiwTK|KZ1h^ zHO_%9f^M|czGnONAHQxxdY7ROS3+FQBDFOR&Kus-&4Ih7>FKJ56lUb3U~&uwvj&Qm zky$dLO6XPE=GM{V&I8gUy|4`~%van24NEyKpBSFt&(%xqY8Q5a`Wyr;}<$0b&QcV=yV5KwMVVQOI-+sMBJ6{B)=WP8U zRRGd`2RnhQ$etT9#eyX475qx(BgG46;_lAee!>%A;D7h-ANXy8^C5D1>z$pQQfY}( zEUUkeqq(6N?Y(Gy=W*HBVdBH(EIEB_?tBgE>iHqnI#SRnfL|yMQ|RUqqvPZ0=VW7J z^9Q4S_e$E@+w-nb_Z+t{iAapan6)Km_EXHQqh{DemLn42&cXo{W9|?E>Y)zkt3po8 zap>v*Ao*i;ILguX9H^AF`Vy}I%H6F~o#k#f*0Rxb^>hCKA;%Fs8!lgdip=u@79+Z-@|&wf7BdGESk4uNg1g>9Mq8KC=PiIL910_ zM+7#SbgmQh^Z}qI7M9R&_keHl&($$uucyH*G+qvAAw-JuqX;aPZD-qD)J@n^A#13d z4*`kK++H|ZiJ)AIyVC?^lk`|$a#2r6Va_2{Lt24Fk2L>bq%aPGt_NT$HAaJ7 z3ycmN7LFGGqTr=P3)`WieZ84~^_T76EU>Ct%}%ffMb#D5=7!1Bvcu|Etig$28oWmybP5 zn{&V>C32|F0v>I+=a@zW4m5?}7)9OqsM&513?o}0`&t9`zE|c%fsT?bR_t1EXcUlu z)!qplP*2p;RpVSv0jK|89WOTzBg-A4`=j_W;#nSe>;@Up(fM-D^pN7CX6i%Woi*#t z!h)8H8$@HZJ=6^@(Msb5ErWnrFW3Ud1W3>mWN%I#v%-3szG>Yw92puOC9C7smOa=`V33QQL;QCzY z)ek1hH)%Zc&p&)y73dL@&t=IcWLm1czq6GZ|ETC(uQcS$prdBwI^gy#u`}Lku7s>x z)6qf6A{&H@0EW~>hb-mgO=mf;T@(}ZE`K-t@)z>7F}*9h$-s&IT+P~w*S@Q@hG47G z-NHfj#wR+IQVH$8v$G~04Pezk$Btkv={Tk)C!c~h55NGGnR%UP;m5DPK(5BruDZwP zIR>36L|AZ;fZ)|C56iWMy!EEkkT-+^SR_!x+7o0InJoKq@bJCj+i_t$kPuqO%jwcZ@Ug6|YAJ)^ zF4>eW^(U~hy#oXC;v{!}sdE>nF!(GrrhYTm8Z!~3XdrcEmUGN1n`*z0Lh-^B#)frz zDG68*aDIh6kUSg#M_l{6=Xn`|cfHAM~zTT*t*hp64O}&{St1V&UGjy+t z3toykQ)iK+bbZ}RlMng@R5a&z?dU(;+HY1xJk?XH_S)lpmtQ+9MWMferyoGHA`=l2 zaj(gkkG80^RHHU`f6ZAOd`NBJbt<9YgNVJmJ75(9^X}2*_wt10zh;Uz<4MF+Jvn+e&WQ0 z7r6xLw*&PUQ2bMHrJOo_8e5~l?2@Z%nR3nZtN$)*yAr@UU;SN2GvrFok$=DPIn+O; zy=TGKkI24`rTrkR`SVk=!k)nD{UO6$^ub7nh@jDb2GxX^BxS_} zPt(Xs#FctZrbI_FR4EjaPN{ny|Hi}Bb7-<+oP!(ch6V5CxcN3tibKFHgL{?!g@P1 z(blF6R232b&!U$nWyqs<{W2}raTP4EPna*GvE9}-#PPuoG7zZ1^dfdCbp|y0U>LUY z5_MJscCWGVdW!Cyf1DjIfQ#n8;(Dq&Z#{~^4k}a%C+eV5)bCg)L4H4VvAnOH&EK&P3+Fe|Wc*VfjCYgGcl21EHzXrD@-KX>krQ_dz0a7aSb z?&JX1aV&)IJRWs0(Us>>=E=c{oJOU`P{{$EFbCohAeAhTtSd0CHJT7C@ey)U0NS(x zTB`$&9}k9ZIqnr5MV`mR1igO!8lUp=R~qv@aQXb#ha^%O(xOxQO!My60hkx0QV}iM zlaFI6COsbEnX8Q-oj*Sc)~a!E#@FJIi+RE|036yCWz|zB^_PGAsDUQ#35-5rrIhBd z0izF~^D=48>2o2Ij<+(3e`&7fnlW{%A{~&)-Y{V1IDUPUDuy6;>i*+*S<-l!ss4^`hQ~2EbUiI zxHTFvR!wtKX|wxPX^;f5(lQ&zKz~0vB~uHh=j@t>Mmmf@=Q+7Bto~BzD_e~6K{Lo) zx+WWvvB=uGxM9LUOZoIHH^I#wcE0|MTIMa>=Y+wGAq~G)@n%c_ud9a`Q!G zr%Y2#ANF;0G>ptx!}Fxj&2W0)#FJ<8Fh*W>AVdf^IuOo03CJo;AaYpkr#=BW!0CI4 z8u(oC*A@oUK6R;!^>1zeQeyqu-)G(Oksjb0w{uUN$p?FhuADYgu5*E<#?Qb!5Vis@ ze*l9h^$Bh*Zy>B;v?36|A~~82pclshpBd_%9W1g2W}m_&AH#g{;_W|Dds{l!z4Y2w zl`;H^2YDuECL5lPKXR|giP^)-)AW3TU z89pWrvqX>q!CVcHhEgy8xK_3FbzMsa7~)rwHx|Mf7L;_1h3A6aQ$ zn!0%>6}Wbg>=zkc00_*ne03QO&M2e>pfo(0kjH`8PsjPghq^$_(eN1^g^^M#==OgO zH-keR7;Kx5IOQcvQAq=9k`OW?&R*0DuF#}kSxr$E z8hBb374FtZ+LX|CEE){Y%7gwlTEL;39xSYT1Ja0ZBLC$PU%6ISw0GEc5+{S^j zC11*h-Z^vBiss!J*h8S5UO3a_Nc~UDbaYF5E5{(w8)p8q;jru7WP*g^#f1$afBBz{ zg9@|PU7ZX&fkd`-Sx42339fRWj*d7OM*o8%$uQ5qm`+&w^%)kzRbV1!ecSVD!i5{? zXMyJd6}tX-<@I#Av~?$s)=D3Drpj|jhJ(N@(k2cxVWL(Ukdl4}B9%KBriE64p{1oH zof83swjow3lYRyNGQNTU^@jxl?&Q$(ct8X)K$qKxo4Va?QYED_l&~HI@bFaw0~){Y zc5HbX0cNq~g4>=^o}}3POq=EHfB&p!i^nLqmj7cx-W(1(ayF$C3&F<~(p6A%9yYiA z*AGJL_FQSr(c#?26de|_At2X$lKQHT`}Jhh$+@+?{k!ciKO?8x(=k(cjShH#;UHQf z+4~3ZIX*^|Qb3D=W)Fg*Z$5F_rB=ns|9!j35U_tN(5S!fh6saBj@<9xzX#X^RLF6- z3#ba{zpA&K-dGs;IgN}?J;LIwz=cZV8KsMt0WFR#E|TS|lY#;Z)pZ<1gKF@i zz(hYU+J3_Hg%Em)lKcKnzH#~gCl85B#(K!>*9bB=lvsLIl7;2UZ{Csj#>qd}mpde1 zNe0S2GJHzF%ziO9B=ht-1eON9sG|}(Y9JZnfh&DbYY$xKp$C^3SlQTogeUjC{)!by@*}NcKNNDcP2n!7`P|m= zZVgLmDNj4{sf^Ur-~AINA261+tM5oUnM|VkN64|b3a%AjO?QHm9|X&YS_lUCw@We5 z)=BKIbqKgAy1I&iqHO*BGZkuC;p9r|nd7ycR5%+VH$PZR38$qV7@|PfRajX)xCrTs z(y5dBPB6prA|j%1mQg0V4?6DO0-JxMtNq^nkWNLNw`KFzmYF5V>dG*eAV;55NdT{qsU_}t`QS`o+mV_?I=K~h49#oTO{`l)0ljfQwq^Jp9dNLKL-DxVoAm37ioaX+cEX^YfMFS(y{X?5qDXM~L z2gF)1i4HTZ9#N5|;1H5UJYfc}xOxsC84a)A)mKX$X=>am7)+!@49u{^IM1Ggyc%)v zeSBg9r=AAxx5DaFlmn9q(1Caw8X9oVOC)Oo*c!mg0}qd=#TU~5FTEjtKs6vzf4V~`VM+(_gs%dlLVccN5tLZe5dted zHadzxHt+DN+TYuY>zPv�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 Ox*DMp?Hy3uB9 zLwHf5_I5aTn7twIToI$Y_IgH!0z)j)NtGZ8Zco;^q#75CJ_>=9JqHhdyw;VAW6u&c zpSsmbO4sp*Jrg^OWB2Mz*lBp0B9WERhQ9zlfQyeGuX~)GU4d)7=wBo-$;Wpy|D8g5 zYN{w@$>mooq@^zaQnM0?4s+QE*DKs+w${h#0a{Fqu(*T-3|vcoeE+^EVyF7DWy{Qu z9^Hl0)4aKJ)u0ns8tvpjyHU+HH=nF0IQHLHsOjsI7E*FNgXWVU8k`4l|7A^0I3A@H z5jv5U%*@0_Mn_4C zlw=41%in;r_brce!D*8`WbrUV&}>5X%V3$}Yo}W%zyA$cqVeDO`S4oH;BPYm5Ci=G c@gozgo}B6}FIHsdQ1EB_)?HifsharwUs(7+{Qv*} literal 0 HcmV?d00001 diff --git a/examples/python/network-osu-benchmark/img/OSU-MPI_Put-Latency-Test-v5.8.csv b/examples/python/network-osu-benchmark/img/OSU-MPI_Put-Latency-Test-v5.8.csv new file mode 100644 index 0000000..1822aaf --- /dev/null +++ b/examples/python/network-osu-benchmark/img/OSU-MPI_Put-Latency-Test-v5.8.csv @@ -0,0 +1,24 @@ +,Size,Latency (us) +0,1.0,0.1 +1,2.0,0.1 +2,4.0,0.1 +3,8.0,0.1 +4,16.0,0.11 +5,32.0,0.11 +6,64.0,0.1 +7,128.0,0.11 +8,256.0,0.11 +9,512.0,0.11 +10,1024.0,0.13 +11,2048.0,0.16 +12,4096.0,0.23 +13,8192.0,0.3 +14,16384.0,0.6 +15,32768.0,1.03 +16,65536.0,2.49 +17,131072.0,5.46 +18,262144.0,10.59 +19,524288.0,19.91 +20,1048576.0,39.43 +21,2097152.0,81.25 +22,4194304.0,282.09 diff --git a/examples/python/network-osu-benchmark/img/OSU-MPI_Put-Latency-Test-v5.8.png b/examples/python/network-osu-benchmark/img/OSU-MPI_Put-Latency-Test-v5.8.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6bf4579ffbf6237ff614b4ba5326232e4789a0 GIT binary patch literal 40190 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%0AK?-rb30K(W@crbLVyyq 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 ./hostfile.txt echo "${worker}" >> ./hostfile.txt + +# Show metadata for run +echo "%s" ` - prefix := fmt.Sprintf(prefixTemplate, launcherHost, workerHost) + prefix := fmt.Sprintf(prefixTemplate, launcherHost, workerHost, metadata) // Prepare list of commands, e.g., // mpirun -f ./hostlist.txt -np 2 ./osu_acc_latency (mpich) // mpirun --hostfile ./hostfile.txt --allow-run-as-root -np 2 ./osu_fop_latency (openmpi) // Sleep a little more to allow worker to write launcher hostname - commands := "sleep 5\n" + commands := fmt.Sprintf("\nsleep 5\necho %s\n", metrics.CollectionStart) for _, command := range m.commands { + + // This starts the line with a separator for the new section line := fmt.Sprintf("mpirun --hostfile ./hostfile.txt --allow-run-as-root -np 2 ./%s", command) - commands += fmt.Sprintf("echo \"%s\"\n%s\n", line, line) + commands += fmt.Sprintf("echo %s\necho \"%s\"\n%s\n", metrics.Separator, line, line) } + // Close the commands block + commands += fmt.Sprintf("echo %s\n", metrics.CollectionEnd) + // Template for the launcher - // launcherTemplate := fmt.Sprintf("%s\n%s", prefix, commands) // The worker just has sleep infinity added, and getting the ip address of the launcher diff --git a/sdk/python/v1alpha1/CHANGELOG.md b/sdk/python/v1alpha1/CHANGELOG.md index 95cc208..cfe9cce 100644 --- a/sdk/python/v1alpha1/CHANGELOG.md +++ b/sdk/python/v1alpha1/CHANGELOG.md @@ -14,5 +14,6 @@ and **Merged pull requests**. Critical items to know are: The versions coincide with releases on pip. Only major versions will be released as tags on Github. ## [0.0.x](https://github.com/converged-computing/metrics-operator/tree/main) (0.0.x) + - Support for OSU Benchmarks parser (and plotting) (0.0.11) - First release with support for parsing io-sysstat output (0.0.1) - Skeleton release (0.0.0) diff --git a/sdk/python/v1alpha1/metricsoperator/metrics/__init__.py b/sdk/python/v1alpha1/metricsoperator/metrics/__init__.py index 1416b8b..bbdb60e 100644 --- a/sdk/python/v1alpha1/metricsoperator/metrics/__init__.py +++ b/sdk/python/v1alpha1/metricsoperator/metrics/__init__.py @@ -1,9 +1,13 @@ # Copyright 2023 Lawrence Livermore National Security, LLC # (c.f. AUTHORS, NOTICE.LLNS, COPYING) +from .network import network_osu_benchmark from .storage import io_sysstat -metrics = {"io-sysstat": io_sysstat} +metrics = { + "io-sysstat": io_sysstat, + "network-osu-benchmark": network_osu_benchmark, +} def get_metric(name): @@ -12,5 +16,5 @@ def get_metric(name): """ metric = metrics.get(name) if not metric: - raise ValueError("Metric %s does not have a known parser") + raise ValueError(f"Metric {name} does not have a known parser") return metric diff --git a/sdk/python/v1alpha1/metricsoperator/metrics/network.py b/sdk/python/v1alpha1/metricsoperator/metrics/network.py new file mode 100644 index 0000000..494fa51 --- /dev/null +++ b/sdk/python/v1alpha1/metricsoperator/metrics/network.py @@ -0,0 +1,79 @@ +# Copyright 2023 Lawrence Livermore National Security, LLC +# (c.f. AUTHORS, NOTICE.LLNS, COPYING) + +from .base import MetricBase + + +class network_osu_benchmark(MetricBase): + """ + Parse the OSU benchmarks output into data! + + We will eventually want to plot these via means from: + https://github.com/ULHPC/tutorials/tree/devel/parallel/mpi/OSU_MicroBenchmarks/plots + But likely I'll provide Python equivalents to do this. + """ + + container_name = "launcher" + + @property + def pod_prefix(self): + return f"{self.name}-l-0" + + def parse_row(self, row): + """ + Given a row of two values with spaces, parse. + """ + row = row.split(" ", 1) + return [x.strip() for x in row] + + def parse(self, pod, container): + """ + Parse osu benchmark output log and return json + """ + lines = self.stream_output( + name=pod.metadata.name, namespace=self.namespace, container=container.name + ) + + # Get the log metadata + metadata = self.get_log_metadata(lines) + + # Split lines by separator + results = [] + sections = self.get_log_sections(lines) + for section in sections: + if not section.strip(): + continue + section = section.split("\n") + section = [x.strip() for x in section if x.strip()] + + # Command is the first entry + command = section.pop(0) + + # Each section has some number of header lines (with #) + header = [] + while section[0].startswith("#"): + header.append(section.pop(0)) + + # Last row of the header are the column names + columns = header.pop() + columns = columns.replace("# ", "").strip() + columns = self.parse_row(columns) + + # The remainder is data, again always two points + data = [] + for line in section: + if not line: + continue + row = self.parse_row(line) + row = [float(x) for x in row] + data.append(row) + + datum = { + "matrix": data, + "columns": columns, + "header": header, + "command": command, + } + results.append(datum) + + return {"data": results, "metadata": metadata, "spec": self.spec} diff --git a/sdk/python/v1alpha1/metricsoperator/utils.py b/sdk/python/v1alpha1/metricsoperator/utils.py index 41a725c..569784d 100644 --- a/sdk/python/v1alpha1/metricsoperator/utils.py +++ b/sdk/python/v1alpha1/metricsoperator/utils.py @@ -7,11 +7,26 @@ def read_yaml(filename): + """ + Read yaml into dict + """ with open(filename, "r") as file: configuration = yaml.safe_load(file) return configuration def write_json(obj, filename): + """ + Write dict to json + """ with open(filename, "w") as fd: fd.write(json.dumps(obj, indent=4)) + + +def read_json(filename): + """ + Read json into dict + """ + with open(filename, "r") as fd: + content = json.loads(fd.read()) + return content diff --git a/sdk/python/v1alpha1/setup.py b/sdk/python/v1alpha1/setup.py index 642aeb5..60357b8 100644 --- a/sdk/python/v1alpha1/setup.py +++ b/sdk/python/v1alpha1/setup.py @@ -30,7 +30,7 @@ if __name__ == "__main__": setup( name="metricsoperator", - version="0.0.1", + version="0.0.11", author="Vanessasaurus", author_email="vsoch@users.noreply.github.com", maintainer="Vanessasaurus",