From a7c41e264bac6e5a01d7b54ba171d89c2a0baef9 Mon Sep 17 00:00:00 2001 From: Yi-Ting Shih Date: Mon, 14 Apr 2025 09:02:16 +0800 Subject: [PATCH] Feat: complete the docs --- .gitignore | 1 + .gitmodules | 3 + HW1_111550013.zip | Bin 0 -> 85275 bytes bonus/bonus.fio | 23 +++++ bonus/bonus.output | 99 ++++++++++++++++++++++ docs/bibliography.yml | 20 +++++ docs/code/bonus.output | 1 + docs/code/q0.output | 1 + docs/code/q1.output | 1 + docs/code/q2.output | 1 + docs/code/q3.output | 1 + docs/code/q4.output | 1 + docs/code/q5.output | 1 + docs/code/q6.output | 1 + docs/code/q7.output | 1 + docs/main.pdf | Bin 0 -> 97626 bytes docs/main.typ | 188 +++++++++++++++++++++++++++++++++++++++++ docs/template | 1 + flake.lock | 27 ++++++ flake.nix | 27 ++++++ q0/q0.fio | 8 ++ q0/q0.output | 31 +++++++ q1/q1.fio | 12 +++ q1/q1.output | 51 +++++++++++ q2/q2.fio | 12 +++ q2/q2.output | 48 +++++++++++ q3/q3.fio | 12 +++ q3/q3.output | 46 ++++++++++ q4/q4.fio | 21 +++++ q4/q4.output | 97 +++++++++++++++++++++ q5/q5.fio | 22 +++++ q5/q5.output | 118 ++++++++++++++++++++++++++ q6/q6.fio | 30 +++++++ q6/q6.output | 178 ++++++++++++++++++++++++++++++++++++++ q7/q7.fio | 31 +++++++ q7/q7.output | 137 ++++++++++++++++++++++++++++++ run.sh | 9 ++ 37 files changed, 1261 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 HW1_111550013.zip create mode 100644 bonus/bonus.fio create mode 100644 bonus/bonus.output create mode 100644 docs/bibliography.yml create mode 120000 docs/code/bonus.output create mode 120000 docs/code/q0.output create mode 120000 docs/code/q1.output create mode 120000 docs/code/q2.output create mode 120000 docs/code/q3.output create mode 120000 docs/code/q4.output create mode 120000 docs/code/q5.output create mode 120000 docs/code/q6.output create mode 120000 docs/code/q7.output create mode 100644 docs/main.pdf create mode 100644 docs/main.typ create mode 160000 docs/template create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 q0/q0.fio create mode 100644 q0/q0.output create mode 100644 q1/q1.fio create mode 100644 q1/q1.output create mode 100644 q2/q2.fio create mode 100644 q2/q2.output create mode 100644 q3/q3.fio create mode 100644 q3/q3.output create mode 100644 q4/q4.fio create mode 100644 q4/q4.output create mode 100644 q5/q5.fio create mode 100644 q5/q5.output create mode 100644 q6/q6.fio create mode 100644 q6/q6.output create mode 100644 q7/q7.fio create mode 100644 q7/q7.output create mode 100755 run.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ddebfce --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +**/testdisk diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..2aa7d37 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "docs/template"] + path = docs/template + url = ../typst-template diff --git a/HW1_111550013.zip b/HW1_111550013.zip new file mode 100644 index 0000000000000000000000000000000000000000..b3ff237c3f149d5daccae88b1e206ea44be07d76 GIT binary patch literal 85275 zcmWIWW@Zs#00D82z9mmV5if z4O#1#PyDOif1Y3c?&kFLp54!OADg9F*E-eowY0zJ#x)BJOl^6!RX(0SFRr3ut1Txx zuXmrNinzFnoZQ+)v)2mBt=-VO_3`z1F27%W_00R4UhZ@H@l~d0Uy}V}mzJkbT{KkB ze(8N9dv?uS8IhhhXM0xu%+=vtd6cJjjqF*OyDMDxf8vOgz9BIya`uCZ|Be?pDzh^y zXFJkau{kGpE(!uA0 z_M87_KCN$=FDZIQMy7Yoku|-!AO2nYD5;g7lJx9B#``w+W8X7d1%KK*rM}^{|6FI* z`{w?vZ|6B!)uW@ml~Ny|U)H9aL! z|KINTD|@nD-rQ3;Ti89=M$PS8y}T=NrrtCGTU9^(b%7#I48g*ch_#0f=6CIdhc_sh)ePAonE#3MUwNH zu;qVhDrT=@b@|jpUIMO6`nAKu;ZCvD!;te72gvGsf0pBsEnHwd1yyy;T(xd7MQLfhQ{L&w#Y-% zm(XxI{tLgeHrOG-`SL|w+rqyl-~TLY4!m;2?xgZXyZ#j#3V+Ql zQ)fh;jye&cZms-;b?L{v=EUm$_Yb6cuNC#)>AoueUM{-cN`CL+Nvl@}Hvg`z?{r%* zLqbSga(0ZuECJrY-z#nw>)w5|oMV22$bqMeoyx9l$=clMd-Cz`FLJDYE=@JoeQaeX zef{F>6hmdbYgHzFs0`1RT)F@J66u|_lkz1c_}|^-ifn$3AxPLEbJ6WRmW8H;JyXg~?vuA|&=dtc^62JH$;nk}h`;Mht zD1FWDclNih%JM@qI34wGwX81VFB9AG+>xn!hUB*FD|`yRujZXJ-?Dq5HQS!~lhb>D zi^<$~3q9qod-!VZd1ujVt25#k#6?fMzr|3OEg`RXe*R^P6_38n zNq3T&vDUh<}Wjb z19!GOIN{gD-8b*U3LU0pf=dcrC$S2uUAVqU_nOo9X^)sMZx#D`Ts~iyK{?W*z>2|c zy0CV`f{caUQ9u67beHE-3y-+vx|D<7hfeVd>dX|^lD1y zr`=^6w%^+l+FyPk`GTMTlgXO9B^#^0Tsl2jYU&=p*P(BFuFA<5$^JO?ulrl?OEbN7 zydU4kY|AQO6aE@kXD@u;;d6^`+v!^ek7=ZBPMB5A-FNAD{sz{zJ9jIV>-x`s!JSag{3Yx6$J(aXb;6IAFLSRBwA4{w zylS@K1M``uwiT{ROP_if_Uj|uyZ zD=QqQRof&Q94(C8Bc0p*+5F0)FzwmT-iY(1x@$$hl6rErY4(g;@rI&i>lDj`jhf%C zNY$IJl;ot8dUau%d)fM5Mw-*O%&$zExU2kGNd42>hHAUAj0~DyT==(fT}ep%j8DH8 z1h+nO|9rD;Ez4m8wJUS3-U+gAXP$hrJn(U`a5m z#>Ss1y)S>x^1meApwD+Byw8JUE!)rIEFZZFA9U73${e2 zMha>laA7f!GWJ}0Cz8qfiBrO=d)ps=Fi>Vu;oI~x#KY1$y*%^B7x$Jv#-~BQZC*aR zcz55O-^bdW%O{?YXP%_U!oK3%-3_tF`{yVy3fV^nFW_U{Qxe;_IAhHtqo3`zXDn~$ z^hfVf(OofH;d|?wwHcSRRvT0;{OGjc&lG8Go1pbOXNx?UZ1y}n_VYHC(1Q!RW}UBV z-uC^&%3km1e-EZHye$^Yo%(lbctB*AZkaXL*@9>4{do6y zW#NQ7i$Ar`uw7pMrBS}j>A1ypvA@gjdG*}nNL=$TVrJ~RYs?{`mfia&_|+NzaNfmo zRAisBv|iimFI^Mtycf-Quds>tX4X}kO-&ODAC%pjpkk27qMtYW=?j(M!h7F2Z(oi7 zyt8+2%dc6*t2gEB(+P_F*1g;F^R`Hzn70`d6=yQ=IfpQHPhH35#??3@Y?|?r?&|y1 zp^p@fIy)yGi+f$&d)IYSX+f-@j^p0+4_0gM7V0c~Jau)w3;Tiz55BxVDa?9U=*9kL z+Y}>b>1n_F$8lM;c(L)Zt;-iLFc;Zb^=RvI<>bGj;l8%aoc|8oUvsNJxBb`?tEo&b z<l(Ln>?t;n^25)VU$`vJvpW1#Y?7Ms zF5|Fc1{a^XOPI_!xQMy3r&LO>tL#YXycna-)KgCmh&1YiIj}rB=22ggUn#Fz_1e6C zO=!`3S;iEfR|SXJa_s*F)HKH>h|0}#zkOj!bkM0gN)IxXRiC@@vB}z{Yusf#UNGs* zDINh$J-IhrM>n+`m@0SfKR97e@#bao+H+ElKHE^1 zWV@y@@gSoVx8kxz=XdZaE#9NGJaAQ>ses-}6ZWnzPGZgT98F7MZqoV2*mxF=P~(3wAM!Tbw$djEDUVshkB_OtWstqPDWlqgib;BP&3 z0(+oOl~>c{dtV|NY)-lfK8)Pk$uFHCa(!K|zQi?=iYsBS{m<3pHMi(`%DhZDA+q%D zjhkBYk7@XPSTRr6c|#K)J4ZqxtHZSGr_Vg)F^;W`d3~Zef91y-?wZf2vhUVTS{rcNllbahijv)u8YyG?aB-}u}7z2Dm7KXiF~*P~Mc zfA2qg|46#n%eQCC-CIStqVAQl8jE$VnI7cA{LJWA{p{JB-?LwpN`hM>&2E7hm&%SHhjgThh*$8mL5XxbS9v+y2@!RUf{v zb5*RKcK>L(#(yQj&ueQohN>)b%?OT}%XNYK%@VH%TaN7HadA}Ey0=Hre^SWHKgW#( zYD>do_0DA zQA3IpZ~aPx#QVG2Tt|4pZ&4bXleT2n1D+cjW1rP z-52ps@AXlcuR3RWeys7;`M-15=1c*|zs<+n>Hn9%Zt9%*b^bi=W9wJcSLnT%@$co%goMOj%bz#(PLzFL{I8~~wUhOI zv5(!+Gamo1F7e;E;X-}yo#iv^bW;<43JG6+emCB5Q(aohZz1L1(^KP<{uM2~P}|x2 z_jBJr@Az}lZf*L8HI=^mX8pf!ktZ>8-;rODT92oTKikYZUtT9Z>ED)_A6L&hf6M;! z#@f!#zsABeMV=# zWaR!Yse+fo-5(onuD$wMwQYUiPpLirkL~SW?EexfXMA{igne#e+Mm_u%M9y(uJ|W- z`crt${LYB|N50$?d$vC5T{jM#NR^Nchd#m#Q&OQxu)d* zh2>|z#3!Zw_Br?=eE#FZr+zHeKOMP$*Z<-S`{bGXk9@lMc#TfQn)ulNk_W!2K0ALe zA@#q|>E}90i+>AopRRxYHR)e?9j{o~w*RxPduQIM`pzD6T(_up!wZdn744}ukr7N$ zJh$ug?z~?U@NU+UdCSbVt#_hrp~v+?l9vs-d1&rj3) z@@?N)=UXM|)#_=pH@tp(dG66`JC7s<%ir3nRaAaWz&~y7(WAMnqRXRVIHzw+pVfTz zeyV<9!8^ry&kwfW{&%z6wEyAhRRtSAuIh}@>{+2qyL1sC66AKiY%z~zZD^yY?>GMJV9?&_v=F$ZJlh7Ct2TA zKPaEQVRq3hrC)0*`=pwpbBq1F=60N3QYwGoG}~+OsEQ|Tv;6#C>^WMKpWc3(nX~Tl z)2=7nZtB~$Wi&M3-%CsG*krlNzcY5WN9b$rIcxF^-{*O35R#8^43uwH<9HqG+k7)< z#pj-zCas1KSxZ1JV^_F`XWC2pQaXMV1mdHMI@`xXNXUP+0@g*J`mS#`e!%sLoAZG3GtIpF(LIksA{Vqf z-CY#(=g_xFJ1lh{TYQAU^bVqZ?}yK6}SJL=;z^CD7!^8(qPb3O+w0sb&d!TxUabC%+4eN>u)@ARAUzaDe z^mqp|)A1>md`}Dx9*&;2gKhVnef#5^PTik-C(ik(^sI>GRzCLrJ4+O2iJX3#o|2N5 zr^mjhfrpoci=QXj+0DUWceUh;TUE<$xV*`|**t5)1YSj-7U`6>GhX5!;_VAn4BySM zoV6^+y>`yQ`J59ciN()2qqFO-rOf^{w}KnE^~NT5XLj=TO;dB?ylfX2Wj@M_v9OqUT6~+Z z*{bxFg=-kBk5@O$pVaSF$y$47KL7ckXFrSU_qgmg?`gf8SL65VVO2}^BGxH)XJ7qQ zc+W2PZSBXJl)Gjto=s}Gj#p0RTA`PCP`nXEDiX58*P z_jJ}G#Ungbc9oxA`CXj&@w#mEznl9^Un$J|aM)wtxq$1ZRawG$e-!dNb{?#)T~&Hb z?&U|}62=2*{M(Dl1ty&KS6C-j5WF>a)>k*j?7doFc`wg;9DU}2T(Q}VjykFRujWtL zFzGgT@p*;b0~rprsdA4l?Dt=PRr@oGHs6;}4lip_Q`47LvFCWRLz9aq$YzyZY_QZ2aFpabGTZiC^UQ7K%jQ2S*mX0m-C1+e^2mx+Yfh+r2{|)S`HR(uNs2jT zd*6h73ONvRBRX%{@AP@v>8B6RY!6z}u3$Se!2fuw`n0ag=Br;Q-+c2uJZ%fpGB)X3 zi<~1xmoHyFxi{X>;^BnO*-7U<^*KWO{^1w>Fl`Zh>ueY;< z?){RV8K3T86L(zsw0-Tm?0_uSl@aT`G^4hD`TjLf$#nIxHV((M-|`lnFOEjsI2W0E zVoLs;4uKeFSwmWYIfht4-0^WCoV zti7MaXwSGC_2$&s#~ZI6J7sz=ewu!ip~tBMn>=PUtnOSo?bPzwId94YcNSinU#q>P z;m_rGSE&_0mMZETvFlHl?qIH|cr`Vn;>e0=8WWc^oCpoLa%<7HOoz|zft$R3{0uJo zw)lI|Dzi;X2YQrW+q^x9J>`YpC9iYJEvr^fFs`;` z3<&=pYP;OH?8Yvw=KJ^O`|dwo@_D79<8KMup4Ma0yMHd|e%!KMd87NMUn=pxmd;yQ z?mqdNNKO8frJfp&x@YId`-ZNjtFy)eP@`8P7dnyWrCe05y$x){& zocsLileq`ib~4Vi_1_avcDzfm&iwb=Sk1+zrF>O+>}TBy!pyhp-0(Ksd_hv-%k9&* zXI>1P%-Vak|KHa`3xaGKv=(uE^m}<|F}Jb3q{4x}(ROksFD8fw)Fm$wPEfnDB81Il z)_jY3r&p&qZ#g3K@AecE%jSK1_G}B>e7N%s2`(mTcH`?9cmYThi^PN<>YW za&g<^P40W%^ecF;Gz+PU%I8mIlVkm`wrs*A+c)?BeSPb9>%ikZ+x0ote|YX@68`Gt zPc5_8rpLScK7Bpe8j{lW`?mJ%mXn`;1O(o^abkC;*D1}U_6a@03)lVm^C?ySyDHl* z;lERCZ{%G5dUZ`9XJKRgJSJ;xz7M;miWZvu5Nd0hsKZ_^QopeJjBA_R1`{zk{S}r1 zpQFD&SC%i&*((3*t_Yj%<%TJj7()bD??fC6S{m)ZaGHZb?%u19JGfumzVK9O4%eg> zN8ZA%E%^zFo0q@np5F0tUqJL>JA-rf5*@xDc)$Kwy`kIjSJyJl^$R|J-Q(xb7Vs!7 z-bQnEWb1|{YwI`6uxPhsJe&92?EK%dl3?cSEtRthmF%B>+0!JiCp~lfgiqB>EL#|w zYa`dqo}3b1UAFesRgn~rvk~l(#Sd=C9(`=e?(Da|^ZuiA9ewk;T6I>`ubRcb?i!bb93D@Vo z)>htUTe7_`!OSzt#p{;6+UYA(CM^}%ek1nZ*%NDyt!z+t6tQ>P_FGyawX^ZUPfO09 zXLT*=tFHd3>s0O6-7RqAP_CM>ocvJ@8Y5T0ne^RB7O zqM6@0e;wY#xs`M0M;4X?D~?qeMB90>Ze%j8G!&_^&`2s_d#&VZ*BF6{!(v(y^V+2j(d>yyv z&&cBzZ+h*qu&B51`n5%6OjEsi&aRiv?cIFqeUgWqa@@M^Tw}8h&F@ZK{o$>u*~TxS zw6*o?>Eg`KwW1DN-)W0z23jv?pB^W-TyWKK<*<_%DuwyZ`{m{FmCx99l+*k9M!v87 zOVlPzdbHqvT>e!Kp-7WMx?+}Am)Umw*dgMiAGK$t?$$Xis)$d7Mufl?ty?UngyODAFGsz{~9~c*&TIV0dH}j$_|NXai=Il&gpV<@_d$w@)cs)3?eDk`tmD{q~e`IA!g)i8Vu>5w{S*h}kW?s(%`&?fZ*qDmC6gR$;^OJYN0-w{&B6Yqif4$tdF}-oB zGf?(P^j^6rnCFhfnyx*TzR6OHq&1aA+_HBG3Y4?>HMNGgomf44mw`u1QPIa$ug}g+ z^V_pR?lm2{6)+rHYeUF$fa zyr_e*Ys;5gE7ta|w}>gUK5(P{*KW4MXh`|K#&3I1vuixNZj%^HVX zby626JlGVIm=}4oB>Z(sa$S&@<#NIKJ;qLR+5VOp{_;{0nX|V0fK*ZN8}$kGHWyBt zOHL0|BrNpl3+WUZT4wH?~TtlitWp7!Xl$DoDK3ib=KGG)Ft153zvi{ zo`3o7|5Cet^^BdR())$xarN|GcFw4s%q8b+a_)FJM|xYSnN#rg=(&-<)%64yJt_DQ zbZ1xprnA}izc*#f+&$g#{PNC#uy~jFrKLV^L{@KOJkvPUuYfr(O#i`}Z!^B~h}Jz{ zdY|h=^@S5J%9`7*r9Sd-ENpeJFr1t(FsWvhPPW4HL#z0i|JHu^rI2uF^X7jR-cP;= z2>G(iw&v>Zn|f;+^M!X|v4Qy?Htng&JX2m2>3N{qc5S|A-ExcW62)dNYwOs*Huthb z1Q%_{Td_blfQ>crdEwa_R=H0{i`Q+s!z;VzgvD32bxlXPBZ_o|UM_!s|K10lMaIXx z3U)Kj>zJE1f9t7rt4ltcG5nQ#!7E@iwdC@Gn9qx+FYL;CGxN&a8;O6yT+4pQ`V@^^PyV^wq^>V6imA<~pWH4gke#+ebLG+Gn&0euRNr08S+8I8QdpX4^%}n}g9B}i zr{{R*nMPG9%v)F1s`2Tv4WrtM74e3l)o&Np7At;Ob}Y-{fz8&rP7Z%Bg%$?0DVIH! z%HPLWzE8DzeeDC8lO3mYn@^iZ{4@BkHn;I;&Xk4=;>+@mzrB0u-sYq4->jMObBf^J zmmj~pTlCf{goZ2zfT+6wMBXkGb zDP=paoOkEv<*XL<{Ax7)&*p`!k_}%azHGR@bh+Y-YaY|pAK!k+FBd+es66Jp0Lwof z)ro1{Yl=^8*m^>P@4V>ju3eW|KIidTv_BPCBD9CO_SxyY6=$}ei&g$3y{~f0&qEUm zR9lbK{k4>|k6pfOTif^Aoauh1nwx)VNZn4`{%GUzjSHq6amc>BX^-KChs8e+UE2PF zkHc#EC6&s}Z7Ytf>fb85Rm*sb^ueyB7xQ(ktvCLi^ZVD?{W(IHc(RKNm%j;AI~d=-vyWalCFr_R+LaakKlubMa&2XeNL@U4Yx|6*2ECeF&$Fi7kZAe%?AMNJ zq05!Ot9SA{&Jl9dX_r4!&?GlMfBj>o`lq?iDxDQ>CjO8$e15#-BzwWr^5a6qryjc% zw)nnZm%n@Zul@IwokZ*>G$}@!gwA^I{c6^p8J|{d@m@41>Kf-FFDaAW-__05rRqwH z8TT^lx>dj9tl1E^(?@e@+~dE2|7>y?Y_^}|o!);fdt>E>0}_tn;oHRd?E|$KzbSgF zWi9aw_c?g$Lh7DNIr?31c7Dy`aQ{)T*Jb_nv(0lwcq?xTyFQ=){+8pZZw#deGuW5+ zOD&bJDc<^H!eK|5b+KFPzpUT6RrP#B!OO23zqsqPaaeP|ZOysu{HJvF?i*dbQMc^` z^-dPt41Z$JUuQRML5uLYMPGV&yPNC=Q??a25ir3xT ztMYPb^6M>MOiHWe4rTBj43hH7NxY)JGrsTs#_~D+SL6DRY8&Rp^K>3;U(4vx@6LM3 z=YV0jb$Z#V$d6wH_{_>B>#aOenlp_BQ><(#NLgdh`y`8Ojodxq|Y?zv*y zgv6z1DwWlR$nNL9tG{;Bji9viZvTQ(UFNR6bn4mUF9~YxjRlb&C-&F|Ech*@CZ^=& zCdH(s##bbl#^ttAQ6OU5RQnG#{@bk-c0Sb**w*p<%|iPxbK|-bSl@ryBx$?hn8=F* z*K!L|ce5QmS-W@Bg~A_9+jFl!l;3e)N>Y1j?dHv4Ju8o#`mL&RNM(ujvzfAee7w08 z&tq&Rwf)?Cea_O?JkbpH4U@By*mpLq>}eGcQlDPI5FL7od2x#7zQ9eEdpRyCMOa^v z@ex{ggW2)Zo?FY_eo)apl>GbM$D@XeX6~@De|#b6;{)T66RRf)w!LqDv#IiPyl?0t z_7juNx3)=$Jk6H1<$eCQj$cDONOdaXfv|nM)2-jVmkN5%D(koW?)4?2{PODGIHv?W zH3|RTb+3?Fu)inNM)`C2oO>>28@f~)_cN~!Er0QBN7JikIx23#Rkt?lDf`{#HdPa3W0m3fn6u*f4F|^O zkBd4Eh}C`nF^O~P!z-U2i^yzE+jg@2KG)^#9`!fMy(|ykn7C9jL(=v5Z)Vr8Z8v_l z@^18R@|n}Nr)5@F;hu|f(hDCpES{FXYuAxYsi|xeFCNHDe)&%)C4k8+7UR{w zBJwx`r|;S8y@2aHBU^LXzQA}bk9lu8+?;eok}{6ptE`+V$o#8n{m!Nhn=fh2PI%{4 zc~^LXaFljtl=6&6(d*Z-20TzW`Qejp(%Jcwj#oz+SZZzlVAs`cP|o$x`J{>uz@U zso$RVmY0UwEZUH(q2$Ul>Em0I*Y6T}*CcSoyM?PQZePx4zQj^~^0ez*YNiT7swB}{GxAt{ZI+T9? zyHIr3t)R@~k%v^>mVbH3T^J!-9*v8z?DdTD>$sAw4+=C<8cdWF3h(^Uq}J2F2k zZkv7y@l%X?EH!!MW2cU%Z`C>7nDV#RU9vi(y>9A?WZTj&c?+k+xOc})_DX!dYkctr71IKvWNd-xv$f%{NHp{>o{-N)Ge!K|A{@f z`S0%ZSgsS_AO4#Zx#hPdGbk zDmVT6v6W+UMQfsKT9-`V2b;FkkZU*8PR+V9PgmOf`g0!uO=B z48gg%4z7Rq#4YSC^LKobr2Rd!mxC$oiEYP3qeIu^Kl4de?rm|1Ut3pyVr9athRaz} zmrv=q8tmf>DJg6F^DIpH!2R`2V!A6QT7!SKOP$V?}y5RiL2kVyl?$;nT0!E zz-?iKovgAxpO&CtCr2=2meRC0O2skDt|WC{YVhuj|DL&_QTT^^q@WJB;f7`JlH1?S znWZ#oyR+vCo_zN5t#AJ>ohWwq#NsQi>%v^QE(NXKF{A7Lf~8s4PMxq4oub;hce_ac z3Bx-lF5Svm__A}UVUj<~T$hWsm9}XsS7-9sPusb5<#LhU@=)G8tm>1P=4pw?+}yOs z@6zV#%btZf`I;hkXBO6Lb9M>I9N3)cm$!8KIk6*Qnaq|mvu-^8eqG4LB%dk1daXok zq4lkk+se=9CFSosxx~RMTvy;=>$T=JeGbOQM6Y=kneV>!=Z!1xx=j=L_9RSsY5el; z@`gtf95*bGo4(kkW|i*Dg?&Mqa(hh^37 zGn=TCAF)~ClUl_Q)oPX#jm2-D<$8X*<`czdw0qxAavp?Pba=V1xBAxrhzu6IETQr9I3Wyh_Je9F4)#lG1eTidv{ z=5T-gds;rMhG~t(&nr3FkHvEn3xlrdMIY9;*r~&{P@+VrgUS2uK_-*eYwq0rcwn<$ z&YG^Ww_U8KW>wl>>706GipjjilX9Xz-=5}qBB>$zs>iX|gE31AIwO8^9`!$z`Dg2% zupRBkesZNGa_i4j3YVDUTX$)e1Yh%M@w^h7)O`o`=Jt8zR2!xI$iMfh-a$NCG{nhW zsL6kl2P>z~e@3o%yI*KNYv6xwkR6ktx#Pj(?HrSgeK)E59pL_db?%W9T7l|EjT&?F zo)xM^8I&Zd#-DlF)!>%Jxq)l1?)&!}o~Q2N?yc&OUb}a)cFp4RY|3|L?^yfI#X(?N z{mP!Bx(q*M7aEIfWA#3~{hCC-wdMZM{UW*tW*DFT7+QaAZ*kwEDdO9+vqU%h{uoDI1Al&4 zr0!99`Dica#m(X`{+`N^4qDp2>j^*mqG?`v7rQiN6JLn__+|OcQqkV#Vuo;LwAGZq zy?bk4UtkMU>g%1F5mCG+=Gn447fb(Wv%dMIA*8Iz+OIY1{cCQmQ`s?!>A{Oi&nqx; z7&=-%bN`FfvJ74&`bkpOj=dZugE;{;IE1aK&MR@Iv_RsHi{#i~p zn`e}3q9pQO&940Tg77EP^$Z$k{}fS`n6m#!=rf^O8Sh|sxx`@QwJetLU)k#8mZ=8_ z=+@-i-7hssIe_Qwo{A0o!so4(kKSHdRoj#Dm0?3u;impCUsy}8|4-YQ^ns-})Mr`l zb4%qq@xXvq^`{0bjXLq-0W6;n6}p=q*w}D3>CnES$k)g7SD&5w{hO7!jr-kiySV)7 zLn>!z9rZraWwFxe=~mvK0@4fYo^cn*e%>Eew`l*8Lr?1N^onj;$hr4-`+V1L5USaykESN;(a%4T)BGf9@*{nH_vU_(i%N`{fB3Ul{cF6av$H>D;=QEwQ-Zhf5~<0 zS50qnXqzy{Jo}iXiT4VZh5Mhc`uMtKbDi4V4CXglPPwKXCV?U^PhMVjxR=4_PVkH+ zLc;G8nz_H(P1l`rdWwuPcaO#k2Fumie#Rnl!X+zoHT7LCKHAstNA@i1^ZA)iKCN|T zd44$YTJtWsXPFl>PkvVkI&m_J<=A&C&g+M_%d&73XiTY@Z!x2%$@|TmtKq!5Vun+` z#eG%ud|EE>=#$j}$si5BW}Ov_*j*x`8YX5h4STjp;XhYyt)OkP*5c!9qo&7MG++OE z%-Vzft8LnrKGq36)A!Exe0O}^<)Z;t?!+Bpzzp}7jF~=3Z%Ny zCUCC!x^GkG)wJf5hZ7lRDFepRg>g<;reRv`Gz`SL$hhoaX3bxqGOP%kC?fS)bG&3#GHm@x^mr*A@{rc7W z7d4jph-`hieogHx(aa1NKjHXiEe!{li!{!tD2mGTq%pUDl)1y}B6~eRansEml^>Nd zuZlR&PLYY?|LC$&@ahBW$uAGSP!iM0cU-abj!15w@W!2yZYo#1a<1H~c(_ksRmXmB zTRoc(tF8rYT;{y@&=mEj>a%uNUY-=pBUQe5*G+1}Hi=I^-n|90*%rB|nv7M+@M z$*j+etLhrxfBU9C`}yzvTkU(a=YM9f;o<);mnF6Rx3&I%|KYa(ndTqUuXdR!B{c0|%=`KCXVm(jazZ*gb++oSO^dfdu~?JZ);uGJUp_@eXwLBY+N|BH6$ z{6F@v?&H>a%NRAcW%YRmX^9E{p0g#3rR}P}o#5mC-+$Lv`P)7FU;SlYefpH&|NJ%Y z!e8xQ^X~qQ{cH4?x$o}ZxJ#$xe@f}h$eaI8zS>kDc%(k^uKuI%@@w=?Klk~szWVpk z>;F2rsE`Gm)IZv$N6fL@xRHJ z{z@PFv2^_&AD{SNucp_3+O_7(|3>}PKht-wnmJSAUv^DqlUs?LY}AFP@=tsz^w;crQrBD!*{}C{S-pA42etX(U0=-Jy}m5BUgPeT zyDEp8-9CoQJ?s7~Eb#b*>*~7CT8{UJN4eJQTa&%$;;wyhyYy%8%D>vY{`UNd>MO%{ z8vQPKm$TOQs4c%}vCzHyBBqNzTw1+7`r}9Gb6Z!*HOu8*3=FFOd3EwD=S(|}6AxB8 z&(S$K^-5~&O!iyVJ9T7Q-IwPtyL8QEnn#_w%F?@+c9zsFh`zhxgWGLUrRQfRzG2>J zuAX9bp6~abwyqzurIXri_;tk|n9JKaYc%rI%~qJAlOQp_Md!gS|H|W`9<5FYhYyw)eTGOSX%BIrwXZ4gZPat6v_9RX_bPH%GW?MYrnP zg)RzrnlJb|tExZJdhko%!{l9u!wms3nI=oWpZ8tM8UDykj8Q3#6}e<^@2RT#$!0G{ zISVdxX8DP?G>a!a-@)k+bI{xKZqcm;2X9~Q)N4@V=jq`qNWGJ2_Sb*;w|^39KQ7z9 zv41P;{<}&hC@fB9Yvjt+G9UJ_Unjy`uVPQQ@OEll~pLA{Y67V%pA~YMZX! z`20NJw|e8%RqeY=793#Fe|-GN?WgYB^eqY*f_!!;+*@);*>q<3)>GC(5B2{re170O zBU8q^OYDKV?mq*K8*ird&pfcrBDL-`zvIQpg@TWFR;pj>FHQb;S z9>4Q=fAYpv2lk-18^c?zXJ_Zl>@g|4_x)H>zUD>yr^k(gT`x}-U}e2&xL}2T^5XL6 zllF6m-+6Z}m%nzC<;>lsd)IXTd7w2hZ}VnLNy+K<+vImMS1$V`IB)WNxs4S*ZWrc0 zemG^R+Z#n2n|Y00D{8Y$er~Sv-K6&FtC~_~{noScf>nMC1mBy-zkjpw+Pwu+epTq~QVQR8wb`~rO^huj?zN@+?8>G-1|7ABe0z4d zRIOEAsAb>ddv)`?mig-QFI$#>sq9W|F7WK>S4f}L=4mb5e6ro}PQ#@9jZb=u?IzsW zoRY1+yihbCwqt(K(LLIadxW$!=6p*1zpBrFf}6qrglFQH(+@;y=`QNwfA@Gs_#3-c z+t1pQt~g%Z;x@r@9#=ww`}K?Kg}$g9S1$62Dx5s8HHe90Z}x)DQ+e`EuhTO>YrdK- zw$d%n{PlzXVMZZmt`D#o32% zd#<^y7+x8#Hs$9AoqKC~8Yk>qEd8zZ-W`pN@ogfV<~6V0RsDLj3H7uL%6%Hvwz z9XTkXRBXm+_$2VUW0QgFr_bt~mzb7zdH&<%xp0qrortJVX2S$#dxITU1il?H``q?! z=ZwS!rS80;lNY{a5jghl5nqXE`6J^kn~ql4P1AbZC~`||TRZR1t0IAKragH*v5w6| za57)@+&_A{9=kQ&9_13I#n&f@hRi>uq+nJ0m^o`GXQs-LM0~ zIcZ!4TKbzz`QQ5rwJ!X?@;J@&u4?yx=377Z9LsUk|5nTJx!1@;arva34fh#EnFW{@ zwJrZ*9Xc~|>Y@Xu4j2^4sq)8U**VR;^k=?v#lkmMXJ5s2-Tn4&Yw*H@Tkg&LZBy6u z{+&Br322L-pT6(TO{a*g zkgoGyGIQ-sN@7j6nC|LK&^Hy$;d|maW#Mjr>7^D$3Ew{M)A|>gT4%bZ@lV-ZmS1IO znLfPh;(T*Ckn__|wqG^PKT9GQYxao?t@&MgdFBQa3$KrT>F&%$Pj7zVm>u4`G)KXI z$-1_{s9#BWC$5V;H`YuzzuCF`o7pUWQEQQv3Au-#n;J~&@GErTJn<%z<1~BT*&Ayv zJzJByeUX`}aZTzbg;~~`D{YNqw$6O}wszI^DDf6^<7tU*4g2y_sy2IWF%0W4;kvzJ zMclsHC*Q7${C{(3p~8t@mf@fNTCpWui;5NYwv+Hv@VjEXB-h2nc%iTMGp>>bwO>ps zx<|yC^VB$ld?tsP9FSlQ_I%+|t>Aq+$;|OaW4L!^|J@*s>iP3_bl&pyo|tjL_4V!_ zj+)UWhmC(kMe5p@9XoXJz=vhQb2!wMQ!`$ym>E>mqhxD(QpVrk=K7rJ%SGH6|5fk& z?~^N`wBq)K89Y%N^UAHm;-vOYGMJ;!EEshxc14)3qNbz2#+}f#l*ZFjozy2m@jRr7PrmkJhRn7yQ{tHfrplDVQS5@6$OfFF3X(Ewkge?HtW(xTZiQ# zJ6Tsbt?>Tq>^gbTSKeh^F?T#xy2@xtuj8!#sCR1}N8+cvbFCs5H(d8vxx;&AY-ZN& zvdz<53qQZU@af2f)Z5N`jRYr8KTv3U=I5u_t2~V_<+w8h`HhU0Ty?5iTi2iWYS&4h zCUv%sUu}tMX`D|MM;-`#rM+h7kwl%zcsqO-Ju_N9_)%>V7JxTZ#biMcEgL7xw*z47%grl9+>lX zL&7=!n;XJDZFO0p!gz%7vxD%nRU$GvnIC0z3fn(#ytZupe)-2PGygCopZ=v*dX$4r zq4Mwvx#EnZ{k_M3|J3I>&9b&Vvts%4-_ND(SKZ$(AM*PAc?}cy-H(Ort~}8Aa(?!- z^U^QR3tV10r+_i&g_)VVM;mwU&bK``E14N)mc-tXb32=ycx#2OUbVK!u&8+Q3+e-z#@FWYarTcWhtHSOoV;|@3O zw@&Uk^N6oE@T=gYo&%ScJnFP5ytyfCu6@&!*-t*qs!z+C)^qauPp<|oQD={-ZR(G- zZmwIi`o@*Adwz!&uut$2y0H30Xn{%P8T+4CRzkv071F!;L7a7}eMjv&`6V?m zHM>)GizJ;^{2q5d`9j>>6?Po+9oMisvR%+D=Qyh~_wph!(fqxi)@(?gy7+qMY4PgC zF3N^Z-ZPS`+e@;aoYI~-JtDKFPG$W%aTi10kDmjsI4nE$@#o*h3mgYmCsv(0Aah2k zscyFUlBU&KuAK71Kdz;wUA61U_;&jW8`l*k;|rDjD`!dgZoIRivS$6I3m+|I%)Fyc z%$Te!yW#Rlj^ed4=3jM`x2#l5GL(2MT3BZGB1nz7t(slw!CLL-({F9$-Ib~}ecQI` zZ#$d}4T=-noqv>`;GZ^E=^p2@SfTf`Cko_FThqaOPUvD6OX2AcFOv(BgOp#ss*1E! zGPZl%(3!zv$foFaLg8gp)m+XS?8$~Nq1U-o^f5+mQdfoi(yK{`Gr*BO7vhB8k z-k&WMpHE$WJ?*T~ySpCl?$?WySE!3A{mYCoTYmaG_n#-7jh`0#PRYD|Pr+)1yW`i8 z=gqeszIop{Co}o|$J-g^Yi`bn?ke?j55B%)uUf~go@W2)nUD`OS~x$9GQHe(2Gc(~i@k4yDYlKYKzyz`EtL%*i2w4c$Tg-@Sy{u5K7IBwRq5kj#t%<- z*rrFRte@r@b(%*$P*j#Ba$yXV)v0E2(vV-Kly@H}&6Uu~&C&)&#%a>3QR4)n?vjy2nk_%O_mh7Upu? z!vDbh(!g!1u_j#imUjvr49nkFX)Tr-8o2S!Dalmdgp?_g4khkp>|K9n&-%nZ+5XCv z_siScS3iCJH+9q8O74TH@6GuyPtyAAI1 zL*HIdeJ!N$S;c#$&dY^QKm05d;{9oHB-(FfmtVDxVGVOZS2o+_Tc1lFf4fi_bNLc) z*lmTQqO~nKThqS1x~8a|Cc%A1-9LQwv{P>;fAXEUL^15@SxZZ!H&fZ`{^wcDvYcOf zX}-<7owxY+)V|IBvi7Xw!-TZMtM;VtUB3KTUup6B@Vv4a>mK!8-m1AY??|nO!N+%p zKWM*Rw|tw-p+#HosMRk}QePK3b)osG-;9b5ZbwojF134^Ogr?=_g2Ib)8cdYBTV=u zZtjndjx%fxao8fD$`*Z9B?$DfgGge8$Id(^ULM%h!tnhZjyKS}? z-4=4X)zxIYwA@gt6ybUDM$v5c3}2pka{^Y13HheKvi?<(kb0|MuAsN|$nAXXn@Y(t zQ%-uMzx{Tve42b`z|a2gY9?p>%$A9zFMswk@UhY19oc&4m&PXaPdxgm`t`Z#I&G!` z2}`!Q{);H#&3`4}#(3@e^;4{CGk*J|6dY+eAn+zk?!x8_E{>=(9}`zU**8%`!r-~3 zL7vlAejV{8=X!#T5B6K+>8#%WW^UEW*cWTceEBt{<#yZ1t@!q4&hx}q0@G?6;?LYQ z$#iX4fAzsM{uyug>{)7(=%~l`Zo7Z=rbmAyKeH`;SnD&IkGXwby|ZIgXXx)&Y2E>MZd6{`skd(Ktoz=pvm!Kp zUx|)+v~MlfhxDsAtj>y0wZD{+RQ~toN~W&oCDW$ZoadfrwKx6hy&oSmrhWVN>uTuS zxz7sc+`c8%msQ@Eeo}DDCie~DF7tM*UVVK26sG+g?mUO}*LxmZ{Hx6C-``_rXYx(8 z?5UgIkQR7$Rb+GSl~nVF==q^*Hr5@@kK4QYX4bD?FSh*WFFkttu!+Pn`9&u>A19iu ze*8Y3Y2lNj62|O}k~ZyPd}8yas#qS2yE0>0XSN_dSiI)DYS}i-C9sWK|Z>4_Bynji>b%$f#{SyB9Cr8=a`)|pKQx%zy zYV{u}XXGEh{%P-SnfYI;)1R}h?cAUz+aPV&y!wGeN8uY?gLCFe@yhj#Wli6UgVU$I zIHlv5SGV!#Hmjen5{;u~ZOm+JnH2L(Rn@XdB*W#@{GyZF+@1bjv(TL9yL0DL^=DB` zX8z0Tl+4ASKVRM6IqxlBQ5##|=~eA(c+aZMeQ{}l!%oLsef<;B%5$D;_}GdCJu+$& zJN35c>!EGhbF{9ON;%GaUVHkk&hlAn)D!(4$)2-5bDx!|clrx~oe>+4vF|S9v@*DU z$c#<@kB#o877r%rG_R5gF|*mc6*Ys_onG^t*+=sI+Qqx(>F@QOmT!OOTid3X#M|?y zcm0!D^68noZ^(MTYqw28Z$@PIJ9$6t@tV4F4p*?+v>(c6rX~2fJ%b8!wcD07p*vJQ70bLS9c;L zdG*EUg)K9R8@$$hUZJn!mr|J{a;84);Kv)H<{4+^*UgD37mk=x)#6)vt2!v`!Py%N zBMTe$%PljgYTO|4sYQMH2XUbb59BQtu2-<=W!V05PrOJ+H_u#!gSB>7S3KBpw?})X z`?lGVKjy~P&RHtE=BTCCas^JO7-hZ_kt-w(IV>dRGUz?{nXFRcmoH!1;<}jW`H7X4 zJC?+-LOS2-5A3pozXMyp{N@eCX908SgWJ1^g#G zvdUb(L~j4T#7u6RT}F`zegiEd0km?S$Vpb;J@mZ%!!MHD`R8+TJNb9 zc3Q;Oux@ti;Yk(JN6%e4KlO^|)4c5p^D^C@%x3kuGHb=doByUJJ$Sxs%kGEb&IvcS zIo6fTde8FFV8-{2FCP7Pz$TaBm$%lTw=K_at=-J4+-zI;I9Dg$zInvE^X=2-3sOu| z-OtXMEGinxwmN^(+q>n*H$9bjDz|%|@cO&z5BtodGsVrOXB=D8|6FL=6~mA-^+pGM zigxc>yGm>If0O&0o;_VRaVOi`D++BUhfXNp6Z-UM@k7Sn{}iUo?l4;StVHizynycE z&(i12WM4Qhc_a3RVTxJsfm!eBf}C142Sv(&yvOauO3wt;Vw2>^F1kr^Tq9?)XT4T-DL1vDPZ0-DO!70+`DDx zZbUmx?SGnFdWwJHr%%f*y(I71mlx?*3p=l$d;R+dWg(NyU!U6TI=N3 zD{N5jo_%-W3$y2O5A%=hIdbssy*u8!_HC$6e#h|WwDGpR*A<$NY~3fomcHzw%G?hM z^YnDf7Psd=Y?&FxdNz2r#wGP@(<(jQ?AK_tc%!;Pp8IZr^{Stl{-+jHJlx$bYdyp1gY{G$JZy2FKbbSHkAmDGIqh_Nkn`Q`vmaqCfYJsEkzMG4zd-!IKQTA+ozR(y&`xRTO%JP9A=!R z|J%g-_^VED%Pz%`r%T@y?de%;!m)sZZBYZ4>+EZ4{ktPycWi4p&&6JSSk&W_ZjE8? z?Y;&12YHmV^t3|#-ej|xOx{tjpjG>nN0s{?0mFl@R6->l+E8mHn5SP8)_ogfpY!Up{@TP_oUt)7zaE(XWWLuaaX)>vf1bYY z6Ipp%OBu8E9-H5KSRdgLbefXq>#}ztN4WPLmj;QX*M>!V&bOwf{Z>1q%(I<`BXOzO z9#6TAi4Dv-o<8O`o}|G*sA9{%PF5)SuY)Zj;Gc zRU2c!-kLZzNw@BP z#qw6GO+8%8XYz5aTr)H1-1D-keKXAqH&({pHk((sVbK=HY(7r0iLZ4X=hk$+lv({` zQq0MiIj1rc7OwcvS1#(f>tjrKzxvu;0@*iOmo!gLtG3%QFH3&Gx%wX`AHP~^XX^V> zDUO*r%ph{P%fvk=mM{3Twr~;K)2~w;JZD?n{c?`gP5I2#a|T~4dx`^7{v9wsUtExV zbWYHRf36N{H5QkOPQNw%$S?7cPxR3)*Pkx#EVH*(6Qm*o?_+&2x^R#K1udtuqVkROWHvog*1 zaM~59&pCB}X7Ha&5Jj{?6SZ%3CcI1?&>jRyBS=2d;7o1e@yCk&Rb{yYgYLp{tG=vj(O;Z6|$}NzEG*x z)1`H9o-<3Lyynyo7x!E4KVqrHw#0dD;Qh`?>_w&~VtWrRaNnywyZ*#=U7pqdEe@8) zK5;t1eB(e$%j=_=9PC*~6;BH}xMe-vcjS8CG}|M0S&Wv-^;(yHmUSVy< zVjgYKWc{fBqo{R{cIy#+j`J&QroP*tlM~9`@@em5pFKb4nEhydCh^>yPwe2bShs{t z58l+xc$F((9i*(BeQl+(Z%$h9(WRfgOnm3;GwDB3J@I|+iu;OY2aH;tJME6V*Yf6y z=1ykD0HUOvqt~`>;3HgR8&ddgn&No2@P-A1b#O zZ0DL+(mh{iPi&I42ake_a`n73g3h)WNr-5whS2@5Op$A3gG*QM;I88RrCcL>vwdfa+WWt~DRcaM z?0>(^x^irK(YolshHGw*wv@%>X#aLvp7WmnwJ*o-e(~0IPNnm9-;arTm$>yY*Bri% zd@JGJlsy$YJ|0c`6yf={Sx19YwE2RWG5eO|yE}yZzq{x9T={tKeT%WYLy52F{{N!W zKi5|U-TUA1`$v9;%(VaWjwL1?TAY@W{NL)%uh%U$V&DF2_I#fD!2XiOo1Xs@k0mZm z|21Ex@4I-?kM|kk$Nt|w{PD?=D?gsHYOv<4k>i68g7 zJ^I5f{C~cqMUT(_bb)i%Z>IXZG07?MS@U1;)sO4#ZHAZriZAT*e7RS?fN^?W;%Wzu z2yJ1bX%2rD85TTAxYuMX{zkjQn`7&h*KdCBkL}r=pfx4*FIU&C)3-IhRm@v&U9n61 zdPJ?>p0n@Eo9EW6?yuf=ea?glliJL4W2%fk?Raf7e^Fw%rk=TcPPf790B!F=c3ln4 ziuu96d~7bu_>}7Vulg|mx!k^2k-Hw)uXKO>E=H9>RqFKgV1rQp-{)sOkXMOk+a4LJ z>X1`DRqo%i#>A;QvxFy{5}Q$Ol)KtT-+P+f(z+8a+WOgtnKb`cEYR$fuz9__`le2F zu2gsEud|k`c1*q{8gO@i)9!?}LcNtwbT`IFy~Qzx%hJ)GCr zy|wK8^I6*e?|40~{n|H2`kPDaVQ#~1!B?(GG%}{Nq{yqX-xWz)vqaW|d!cNFaNJ>j z*7YHW^Q#}-kkURfo3$f$zvOz}$%g|v?0MT_4?10qGfh%(I1yj|O)x)fdjDLzoT zza#`wA8tqyTsSwPG54F&0Y)`Hqvk%{Z{hZiuO|NsP2|ri5cofLju*#y%_nnj$$l#Q z8!dd|^s(|q)0q~CuhDs86Ol1NJlS*YoR{-M5|5Shsdnf8x+H0N)9L13qlf2|W;#v% z_{N%BTIO+x#MPPMW!Q>Dny@31`0MMDUvCtW{g4_l?PgE5bt~!bezr zoAJU|Ykx>DT4L~MlB;8LZRHUz*F#nrHnE}Rx13k35kGo4s7QRh&9p+^$l_Oub1bjr zyGN#Ho1ALB%Uf~rtxn}pcB|mK>wf;{68kxwz3!s%g^ip4y+8BlY?*m@>rwG(eM{F~ zNf6syDWqMr(qx8Y(dx?k@=CAy_ z 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�X@*ETn$c$v#dH${P4 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 z zKPF9Z`Ru*i+V*ncKJQ8MVyhlC%v*hF!^^@6i{BjAlSz1bY4WuG?H);u;){BCL;m#k zo8HU6#(gqje&trx|L0g_X0;k5oZZ`1pm0wn?DRsO@Kcv&{I;GNe8eGKO}$+p=+B$* zmw`{Uv-1CODo<(Hz$U;PedL>D-HE7=m(?zu?0ehNa%9Q(gIuLYuPJqT96Gwwm^Jss ztYp;(%a>)&p3WAY5Usr5cAc|kyzP5SlZ6cJ(_id4F*)8V-0$lZ=W{HNqAnlo7R^)M zbBB*P&1mk<hOs^MRtQ+7%2@U4?sw`23&SKsqXdX#2yE^2kx zB2mwGPq%*N3chM^=H2?U$ML?~bdw@k;b_&K#^<$1z5ay9Om^9&HFMUq zndeU%$?18AhHhbh{ysv{=oj+>zKPmyZU=tvY7R~f|9s-FgM7j4swlhT>(-TDIrvy5 z&Y>b`(@M^q4N^yR=3lgT{V`+BnYtH_CQ|in0<&Feezxs5KG}tNw68qu zwZG`yN}Zg3pES-tn_gX*JiTdML$K_W&C{P*&$vIw%FB3JtYH=6RN0vwUE=rED(iG*@{@#J7q9=^@S$pF{iNm6e_LhFRT4T|J#Hmx{Xz8#wmPp0MC?Xw;f(o=@r&w?#IlcWWF|VOr;UXqKF>h?054 zfkbs}j<3htmvWjr&5;o((DtpYn0R{KJmr<&jJDhFpQh{oPL*r1oiNW+4fcuiQWBpk z-{{o!JNZv#@{TsyMI3A!LXK{Eq-!X~^g@}b4&gcCC~gVUV)D%FlpQTZHjB4AmH zSH}dWWjvBzM%+_1TX+&yLN0Tl!7t zXUNnSQd~=uXPheBnWX#O#z!+)!pL>fsk*YDajY&rA39aAf8j#@k~x?<+?D;i~ztj{|6 zCQeB9c+T7WspjxWN#6Hg&YU@<&p!Jzuf9M`y41`l=d$jJYyrv{jJDxhXRV6*q@1L5 zcK270dnPO9^c#Qi@&3bb`tioqAB@i1?*H}W21my-uP2gG#cy*WXXV^J&fmT0;^fCt zD)+9rzg*gUyw*oPL2|FR)n2VT%WL1-ue(1Zk89qwS7&#$_HvYV3dM3>-gN5qoWB-DCl50OcR`uEb>uba= z`IEmo=2V=ScpxkOefhrLwi9mRb1Elv)qS4veEU0zhtvA+JU8W)>y~@2-(3{_I(tTu zz?oImk+0WmnbkSXEXDlW&rN^o?tcF9?0Np?Nxqg_SL%8Hwd^liX2D~$PVLKcojKm2 zdnA|@EV#Q%4{?u=k8y)nICE$*7;r2Ahit**!U%sc02 z_TF1iYR{^ct1-`H=l=?cj;?+4%w7M@$qUP`E3eCb85_-O7bJPR?q}$Ehs%4c^Aubr zJvVayxbw5d@ypl#M9+QtFzxT1ERp43=C%0kd*NIcZMpZ$#^vo%DKf5dK6eCue>@>r z-5|;3G^4I?>I16)yBSKYUk+vdUy`5L-{WthX8LKV?MZ>11#92EDbHUXXv_KcdH?+6 zEz*mo{q2uDoj1e6vb83wXwy8c{esQ2f}iE^^)EZ%A!Tc6%A%pW?`xo%(X#vZJp$G} z>STU?L}Gg93d5VBZq9i!9Jce;Z!;}YI+?k2_OUMc`$2R59?^P}9;2sI@T05tAoqrK z$JsA(GS|;9+Rt-+N%V^IN17ZD3RwR--@kJD&E%q^$@4VLitk_hXlLRgkbFe+&0){r9@p3ye_i(JTy{ZC(5{4RR*Qc�hAr1_zw6h}y?Z&Iv)C)9?RS*^ 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 QA`F(S3=C)785tND0LS1X1^@s6 literal 0 HcmV?d00001 diff --git a/bonus/bonus.fio b/bonus/bonus.fio new file mode 100644 index 0000000..43fc32c --- /dev/null +++ b/bonus/bonus.fio @@ -0,0 +1,23 @@ +[global] +bs=8m +ioengine=libaio +iodepth=64 +size=1G +direct=1 +stonewall + +[ssd-read] +filename=/dev/nvme1n1 +rw=read + +[ssd-randread] +filename=/dev/nvme1n1 +rw=randread + +[hdd-read] +filename=/dev/sda +rw=read + +[hdd-randread] +filename=/dev/sda +rw=randread diff --git a/bonus/bonus.output b/bonus/bonus.output new file mode 100644 index 0000000..82146d8 --- /dev/null +++ b/bonus/bonus.output @@ -0,0 +1,99 @@ +ssd-read: (g=0): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=64 +ssd-randread: (g=1): rw=randread, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=64 +hdd-read: (g=2): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=64 +hdd-randread: (g=3): rw=randread, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=64 +fio-3.39 +Starting 4 processes + +ssd-read: (groupid=0, jobs=1): err= 0: pid=314662: Mon Apr 14 08:43:57 2025 + read: IOPS=412, BW=3303MiB/s (3464MB/s)(1024MiB/310msec) + slat (usec): min=46, max=7314, avg=1366.16, stdev=1757.98 + clat (msec): min=14, max=255, avg=140.27, stdev=65.17 + lat (msec): min=14, max=257, avg=141.63, stdev=65.69 + clat percentiles (msec): + | 1.00th=[ 17], 5.00th=[ 44], 10.00th=[ 80], 20.00th=[ 85], + | 30.00th=[ 89], 40.00th=[ 94], 50.00th=[ 110], 60.00th=[ 167], + | 70.00th=[ 207], 80.00th=[ 209], 90.00th=[ 226], 95.00th=[ 241], + | 99.00th=[ 253], 99.50th=[ 255], 99.90th=[ 255], 99.95th=[ 255], + | 99.99th=[ 255] + lat (msec) : 20=1.56%, 50=6.25%, 100=36.72%, 250=53.12%, 500=2.34% + cpu : usr=0.00%, sys=10.36%, ctx=176, majf=0, minf=775 + IO depths : 1=0.8%, 2=1.6%, 4=3.1%, 8=6.2%, 16=12.5%, 32=25.0%, >=64=50.8% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=98.5%, 8=0.0%, 16=0.0%, 32=0.0%, 64=1.5%, >=64=0.0% + issued rwts: total=128,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=64 +ssd-randread: (groupid=1, jobs=1): err= 0: pid=314663: Mon Apr 14 08:43:57 2025 + read: IOPS=415, BW=3325MiB/s (3486MB/s)(1024MiB/308msec) + slat (usec): min=44, max=7084, avg=1425.85, stdev=1528.22 + clat (msec): min=12, max=236, avg=139.74, stdev=49.47 + lat (msec): min=12, max=238, avg=141.17, stdev=49.75 + clat percentiles (msec): + | 1.00th=[ 26], 5.00th=[ 79], 10.00th=[ 84], 20.00th=[ 96], + | 30.00th=[ 108], 40.00th=[ 118], 50.00th=[ 123], 60.00th=[ 176], + | 70.00th=[ 176], 80.00th=[ 178], 90.00th=[ 207], 95.00th=[ 222], + | 99.00th=[ 234], 99.50th=[ 236], 99.90th=[ 236], 99.95th=[ 236], + | 99.99th=[ 236] + lat (msec) : 20=0.78%, 50=2.34%, 100=21.09%, 250=75.78% + cpu : usr=0.00%, sys=9.45%, ctx=222, majf=0, minf=265 + IO depths : 1=0.8%, 2=1.6%, 4=3.1%, 8=6.2%, 16=12.5%, 32=25.0%, >=64=50.8% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=98.5%, 8=0.0%, 16=0.0%, 32=0.0%, 64=1.5%, >=64=0.0% + issued rwts: total=128,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=64 +hdd-read: (groupid=2, jobs=1): err= 0: pid=314664: Mon Apr 14 08:43:57 2025 + read: IOPS=20, BW=167MiB/s (175MB/s)(1024MiB/6140msec) + slat (usec): min=342, max=528428, avg=44674.51, stdev=44631.06 + clat (msec): min=419, max=3260, avg=2302.17, stdev=775.39 + lat (msec): min=466, max=3304, avg=2346.84, stdev=776.16 + clat percentiles (msec): + | 1.00th=[ 468], 5.00th=[ 684], 10.00th=[ 936], 20.00th=[ 1485], + | 30.00th=[ 2072], 40.00th=[ 2668], 50.00th=[ 2769], 60.00th=[ 2769], + | 70.00th=[ 2769], 80.00th=[ 2802], 90.00th=[ 2970], 95.00th=[ 3071], + | 99.00th=[ 3205], 99.50th=[ 3272], 99.90th=[ 3272], 99.95th=[ 3272], + | 99.99th=[ 3272] + bw ( KiB/s): min=114688, max=1048576, per=100.00%, avg=299644.71, stdev=331555.65, samples=7 + iops : min= 14, max= 128, avg=36.57, stdev=40.48, samples=7 + lat (msec) : 500=1.56%, 750=4.69%, 1000=4.69%, 2000=17.97%, >=2000=71.09% + cpu : usr=0.00%, sys=0.52%, ctx=837, majf=0, minf=265 + IO depths : 1=0.8%, 2=1.6%, 4=3.1%, 8=6.2%, 16=12.5%, 32=25.0%, >=64=50.8% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=98.5%, 8=0.0%, 16=0.0%, 32=0.0%, 64=1.5%, >=64=0.0% + issued rwts: total=128,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=64 +hdd-randread: (groupid=3, jobs=1): err= 0: pid=314666: Mon Apr 14 08:43:57 2025 + read: IOPS=20, BW=161MiB/s (169MB/s)(1024MiB/6366msec) + slat (usec): min=358, max=108902, avg=46194.96, stdev=14404.86 + clat (msec): min=451, max=3702, avg=2565.65, stdev=871.70 + lat (msec): min=494, max=3754, avg=2611.84, stdev=870.24 + clat percentiles (msec): + | 1.00th=[ 493], 5.00th=[ 735], 10.00th=[ 1036], 20.00th=[ 1687], + | 30.00th=[ 2366], 40.00th=[ 2836], 50.00th=[ 2937], 60.00th=[ 3004], + | 70.00th=[ 3104], 80.00th=[ 3239], 90.00th=[ 3373], 95.00th=[ 3473], + | 99.00th=[ 3675], 99.50th=[ 3708], 99.90th=[ 3708], 99.95th=[ 3708], + | 99.99th=[ 3708] + bw ( KiB/s): min=114688, max=163840, per=92.36%, avg=152137.14, stdev=18230.43, samples=7 + iops : min= 14, max= 20, avg=18.57, stdev= 2.23, samples=7 + lat (msec) : 500=1.56%, 750=3.91%, 1000=3.91%, 2000=15.62%, >=2000=75.00% + cpu : usr=0.02%, sys=0.49%, ctx=835, majf=0, minf=264 + IO depths : 1=0.8%, 2=1.6%, 4=3.1%, 8=6.2%, 16=12.5%, 32=25.0%, >=64=50.8% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=98.5%, 8=0.0%, 16=0.0%, 32=0.0%, 64=1.5%, >=64=0.0% + issued rwts: total=128,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=64 + +Run status group 0 (all jobs): + READ: bw=3303MiB/s (3464MB/s), 3303MiB/s-3303MiB/s (3464MB/s-3464MB/s), io=1024MiB (1074MB), run=310-310msec + +Run status group 1 (all jobs): + READ: bw=3325MiB/s (3486MB/s), 3325MiB/s-3325MiB/s (3486MB/s-3486MB/s), io=1024MiB (1074MB), run=308-308msec + +Run status group 2 (all jobs): + READ: bw=167MiB/s (175MB/s), 167MiB/s-167MiB/s (175MB/s-175MB/s), io=1024MiB (1074MB), run=6140-6140msec + +Run status group 3 (all jobs): + READ: bw=161MiB/s (169MB/s), 161MiB/s-161MiB/s (169MB/s-169MB/s), io=1024MiB (1074MB), run=6366-6366msec + +Disk stats (read/write): + nvme1n1: ios=8036/19, sectors=4114432/504, merge=0/1, ticks=658566/8, in_queue=658578, util=61.58% + sda: ios=1781/0, sectors=4169216/0, merge=0/0, ticks=767527/0, in_queue=767527, util=97.16% diff --git a/docs/bibliography.yml b/docs/bibliography.yml new file mode 100644 index 0000000..ca67322 --- /dev/null +++ b/docs/bibliography.yml @@ -0,0 +1,20 @@ +archlinux: + type: Web + title: ArchLinux, a simple, lightweight distribution + url: https://archlinux.org/ +btrfs: + type: Web + title: Btrfs, a modern copy on write filesystem for Linux + url: https://btrfs.readthedocs.io/en/latest/ +ct1000p3pssd8: + type: Web + title: Crucial P3 Plus 1TB PCIe M.2 2280 SSD + url: https://www.crucial.tw/ssd/p3-plus/ct1000p3pssd8 +wd10ezex: + type: Web + title: WD Blue PC Desktop Hard Drive - 1TB + url: https://www.westerndigital.com/products/internal-drives/wd-blue-desktop-sata-hdd?sku=WD10EZEX +tufh470: + type: Web + title: TUF Gaming H470 Pro WiFi Motherboard + url: https://www.asus.com/tw/motherboards-components/motherboards/tuf-gaming/tuf-gaming-h470-pro-wi-fi/techspec/ diff --git a/docs/code/bonus.output b/docs/code/bonus.output new file mode 120000 index 0000000..fd0e6fa --- /dev/null +++ b/docs/code/bonus.output @@ -0,0 +1 @@ +../../bonus/bonus.output \ No newline at end of file diff --git a/docs/code/q0.output b/docs/code/q0.output new file mode 120000 index 0000000..f62b2a2 --- /dev/null +++ b/docs/code/q0.output @@ -0,0 +1 @@ +../../q0/q0.output \ No newline at end of file diff --git a/docs/code/q1.output b/docs/code/q1.output new file mode 120000 index 0000000..3055666 --- /dev/null +++ b/docs/code/q1.output @@ -0,0 +1 @@ +../../q1/q1.output \ No newline at end of file diff --git a/docs/code/q2.output b/docs/code/q2.output new file mode 120000 index 0000000..fd2c0ea --- /dev/null +++ b/docs/code/q2.output @@ -0,0 +1 @@ +../../q2/q2.output \ No newline at end of file diff --git a/docs/code/q3.output b/docs/code/q3.output new file mode 120000 index 0000000..84df815 --- /dev/null +++ b/docs/code/q3.output @@ -0,0 +1 @@ +../../q3/q3.output \ No newline at end of file diff --git a/docs/code/q4.output b/docs/code/q4.output new file mode 120000 index 0000000..446e939 --- /dev/null +++ b/docs/code/q4.output @@ -0,0 +1 @@ +../../q4/q4.output \ No newline at end of file diff --git a/docs/code/q5.output b/docs/code/q5.output new file mode 120000 index 0000000..c60c21f --- /dev/null +++ b/docs/code/q5.output @@ -0,0 +1 @@ +../../q5/q5.output \ No newline at end of file diff --git a/docs/code/q6.output b/docs/code/q6.output new file mode 120000 index 0000000..79f7162 --- /dev/null +++ b/docs/code/q6.output @@ -0,0 +1 @@ +../../q6/q6.output \ No newline at end of file diff --git a/docs/code/q7.output b/docs/code/q7.output new file mode 120000 index 0000000..8c27bc8 --- /dev/null +++ b/docs/code/q7.output @@ -0,0 +1 @@ +../../q7/q7.output \ No newline at end of file diff --git a/docs/main.pdf b/docs/main.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0d6bfcbc8b3843c7f0ddb68bb1cd0725a0ae974f GIT binary patch literal 97626 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 dP2bHIZEa{; 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

DyMtod0Rjvv{BCmXwK?F4gvJo$}UG)pD!4 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 literal 0 HcmV?d00001 diff --git a/docs/main.typ b/docs/main.typ new file mode 100644 index 0000000..2682a81 --- /dev/null +++ b/docs/main.typ @@ -0,0 +1,188 @@ +#import "template/styles.typ": document +#show: document.with( + title: "Memory and Storage System - HW1 FIO", + authors: (( + name: "Yi-Ting Shih (111550013)", + affiliation: "National Yang Ming Chaio Tung University", + email: "ytshih@cs.nycu.edu.tw", + ),), +) + += Specifications + +All the read operations except bonus are tested on ssd. \ +Model: Micron CT1000P3PSSD8@ct1000p3pssd8 (Crucial P3 Plus) + +All the write operations are tested on disk files, which are in a RAID 1 +btrfs@btrfs filesystem. + +The tested operating system was Arch Linux@archlinux, which was running Linux +kernel 6.14.2.arch1-1. + += Questions + +== Q0. Example + +=== Result +#raw(read("code/q0.output")) + +== Q1. Read vs. Randread + +=== Result +#raw(read("code/q1.output")) + +=== Question +Is there any significant difference between read and randread? Why or why not? +Please justify your answer in brief. + +=== Answer +_read_ is significantly faster than _randread_. + +The SSD controller might be optimized for sequential access, such as leveraging +internal parallelism more effectively, or have lower command overheader perunit +of data for sequential reads. + +== Q2. Write vs. Randwrite + +=== Result +#raw(read("code/q2.output")) + +=== Question +Is there any significant difference between write and randwrite? Why or why not? +Please justify your answer in brief. + +=== Answer +There is no significant difference between _write_ and _randwrite_. + +The SSD controller will go through the page / block translation process no +matter there is write or random write access. Therefore there is no significant +difference. + +Also, I use disk file to test the write operation, which is on a btrfs +filesystem. There are cache on btrfs@btrfs or page cache so the data might not +be actually write to the SSD. + +== Q3. Forward write vs. Backward write + +=== Result +#raw(read("code/q3.output")) + +=== Question +Is there any significant difference between forward and backward write? Why or +why not? Please justify your answer in brief. + +=== Answer +There is no significant difference between _forward write_ and _backward write_. + +The reason is same as the previous question. + +== Q4. Buffered read vs. Nonbuffered read + +=== Result +#raw(read("code/q4.output")) + +=== Question ++ Is there any significant difference between buffered and nonbuffered + sequential read? Why or why not? Please justify your answer in brief. ++ Replace sequential read with random read. Is there any significant difference + between buffered and nonbuffered random read? Why or why not? Please justify + your answer in brief. + +=== Answer +- _buffered sequential read_ is significantly faster than _non-buffered + sequential read_. +- There is no significant difference between _buffered random read_ and + _non-buffered random read_. + +The data can be buffered by _read-ahead_ for sequential read operation. This +cannot be done for random read operation, because the next read operation +cannot be predicted. + +== Q5. LBA + +=== Result +#raw(read("code/q5.output")) + +=== Question +Is there any bandwidth trend between these jobs? Why or why not? Please justify +your answer in brief. You can also experiment with the size of the file. + +=== Answer +The job where `offset=80%` is faster than `offset=60%`, and `offset=60%` is +faster than the rest of the jobs. + +The identified response presents an analysis of experimental results; the +underlying theoretical framework remains unclear, necessitating further +investigation. + +== Q6. Blocksize + +=== Result +#raw(read("code/q6.output")) + +=== Question + ++ Is there any significant difference between 4k and 1k read? Why or why not? + Please justify your answer in brief. ++ If you want to achieve the best performance in the condition above, how would + you modify `blocksize`? Explain it briefly. + +=== Answer +- _4k read_ is significantly faster than _1k read_ in terms of bandwidth and + latency. +- The bandwidth can be increased by changing `blocksize` to up to `8m`. + +Larger `blocksize` might be useful when doing large sequential read. + +== Q7. Fastest nonbuffered read + +=== Result +#raw(read("code/q7.output")) + +=== Question +Please explain how you achieve the fastest 1G nonbuffered read in brief. + +=== Answer +According to the result in the previous questions, namely, Q5 and Q6, the +fastest non-buffered read happens when `offset=80%` and `blocksize=8m`. + +Furthermore, I have tested the difference between `ioengine=psync`, which is +the default for fio, and `ioengine=libaio`, which is Linux native asynchoronous +I/O. The result shows that `ioengine=libaio` is better in terms of bandwidth. + +For asynchoronous I/O, I also tested the impact of the `iodepth`. The result +showes that `iodepth=64` will reach the peak bandwidth. + +Therefore, the fastest non-buffered 1G read should be the combination of +`offset=80%`, `blocksize=8m`, `ioengine=libaio`, and `iodepth=64`. + +== Bonus + +=== Result +#raw(read("code/bonus.output")) + +=== Question ++ Compare with multiple kinds of storage devices. \ + Is there any significant difference between read/randread on storage devices? + Why or why not? Please justify your answer in brief. ++ Find the specs of your own hardware that you tested on. \ + Is your hardware running to spec? If not, could you come up with a possible + theory? + +=== Answer +This experiment include two storage devices, Crucial P3 Plus M.2 +SSD@ct1000p3pssd8 (Disk 1) and WD Blue HDD@wd10ezex (Disk 2). The hardware +sequential read rate for Disk 1 is 5000MB/s. And the hardware transfer rate for +Disk 2 is up to 150MB/s. + +The result for the experiment shows that ++ Disk 1 (SSD) is significantly faster than Disk 2 (HDD). ++ Disk 1 is quite a bit slower than the hardware spec (about 3400MB/s). ++ Disk 2 is faster than the hardware spec (about 170MB/s). + +The reason for the underperformance of Disk 1 might be +- I'm using Disk 1 to run my OS at the same time, which interferes the result. +- Disk 1 had been used for over 4 years and had used up 50% of the capacity. + In constract, Disk 2 was seldom used and didn't used up any of the capacity. + +#bibliography("bibliography.yml") diff --git a/docs/template b/docs/template new file mode 160000 index 0000000..bc97b8b --- /dev/null +++ b/docs/template @@ -0,0 +1 @@ +Subproject commit bc97b8bb81723287a011dec62bd4dd71d1e1799c diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..c8a0cad --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1744232761, + "narHash": "sha256-gbl9hE39nQRpZaLjhWKmEu5ejtQsgI5TWYrIVVJn30U=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f675531bc7e6657c10a18b565cfebd8aa9e24c14", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..193a50e --- /dev/null +++ b/flake.nix @@ -0,0 +1,27 @@ +{ + description = "Nix flake for running fio (Flexible I/O Tester)"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + }; + + outputs = { self, nixpkgs, ... }: + let + system = "x86_64-linux"; + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + }; + in + { + devShells.${system}.default = pkgs.mkShell { + packages = with pkgs; [ + fish + pkgs.fio + ]; + shellHook = '' + exec fish + ''; + }; + }; +} diff --git a/q0/q0.fio b/q0/q0.fio new file mode 100644 index 0000000..a4ca07c --- /dev/null +++ b/q0/q0.fio @@ -0,0 +1,8 @@ +[global] +filename=/dev/nvme1n1 +bs=4K +size=1g +direct=1 + +[job1] +rw=read diff --git a/q0/q0.output b/q0/q0.output new file mode 100644 index 0000000..b4573b2 --- /dev/null +++ b/q0/q0.output @@ -0,0 +1,31 @@ +job1: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +fio-3.39 +Starting 1 process + +job1: (groupid=0, jobs=1): err= 0: pid=22642: Sat Apr 12 19:28:44 2025 + read: IOPS=60.8k, BW=238MiB/s (249MB/s)(1024MiB/4311msec) + clat (usec): min=9, max=2086, avg=16.20, stdev= 9.84 + lat (usec): min=9, max=2087, avg=16.23, stdev= 9.84 + clat percentiles (nsec): + | 1.00th=[11712], 5.00th=[11840], 10.00th=[12096], 20.00th=[12224], + | 30.00th=[12352], 40.00th=[12352], 50.00th=[12480], 60.00th=[12736], + | 70.00th=[13504], 80.00th=[14912], 90.00th=[25728], 95.00th=[36608], + | 99.00th=[48896], 99.50th=[64256], 99.90th=[71168], 99.95th=[71168], + | 99.99th=[88576] + bw ( KiB/s): min=210008, max=250232, per=99.85%, avg=242862.00, stdev=13417.57, samples=8 + iops : min=52502, max=62558, avg=60715.50, stdev=3354.39, samples=8 + lat (usec) : 10=0.03%, 20=81.94%, 50=17.13%, 100=0.90%, 250=0.01% + lat (usec) : 500=0.01%, 750=0.01% + lat (msec) : 4=0.01% + cpu : usr=2.39%, sys=7.68%, ctx=262148, majf=0, minf=9 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=262144,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 + +Run status group 0 (all jobs): + READ: bw=238MiB/s (249MB/s), 238MiB/s-238MiB/s (249MB/s-249MB/s), io=1024MiB (1074MB), run=4311-4311msec + +Disk stats (read/write): + nvme1n1: ios=251884/14, sectors=2015072/536, merge=0/0, ticks=3534/6, in_queue=3543, util=81.46% diff --git a/q1/q1.fio b/q1/q1.fio new file mode 100644 index 0000000..2a43b0f --- /dev/null +++ b/q1/q1.fio @@ -0,0 +1,12 @@ +[global] +filename=/dev/nvme1n1 +bs=4k +size=64m +direct=1 +stonewall + +[read] +rw=read + +[randread] +rw=randread diff --git a/q1/q1.output b/q1/q1.output new file mode 100644 index 0000000..d4696a2 --- /dev/null +++ b/q1/q1.output @@ -0,0 +1,51 @@ +read: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +randread: (g=1): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +fio-3.39 +Starting 2 processes + +read: (groupid=0, jobs=1): err= 0: pid=23955: Sat Apr 12 19:36:41 2025 + read: IOPS=62.1k, BW=242MiB/s (254MB/s)(64.0MiB/264msec) + clat (usec): min=10, max=913, avg=15.86, stdev=11.07 + lat (usec): min=10, max=913, avg=15.89, stdev=11.07 + clat percentiles (nsec): + | 1.00th=[10176], 5.00th=[11840], 10.00th=[12096], 20.00th=[12224], + | 30.00th=[12224], 40.00th=[12224], 50.00th=[12352], 60.00th=[12480], + | 70.00th=[12992], 80.00th=[14016], 90.00th=[25472], 95.00th=[37632], + | 99.00th=[48896], 99.50th=[51456], 99.90th=[65280], 99.95th=[69120], + | 99.99th=[93696] + lat (usec) : 20=83.84%, 50=15.50%, 100=0.66%, 1000=0.01% + cpu : usr=3.42%, sys=6.84%, ctx=16384, majf=0, minf=9 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=16384,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +randread: (groupid=1, jobs=1): err= 0: pid=23956: Sat Apr 12 19:36:41 2025 + read: IOPS=15.4k, BW=60.0MiB/s (62.9MB/s)(64.0MiB/1067msec) + clat (usec): min=10, max=2157, avg=64.80, stdev=22.68 + lat (usec): min=10, max=2157, avg=64.83, stdev=22.68 + clat percentiles (usec): + | 1.00th=[ 11], 5.00th=[ 63], 10.00th=[ 65], 20.00th=[ 65], + | 30.00th=[ 65], 40.00th=[ 65], 50.00th=[ 65], 60.00th=[ 65], + | 70.00th=[ 70], 80.00th=[ 71], 90.00th=[ 72], 95.00th=[ 72], + | 99.00th=[ 73], 99.50th=[ 75], 99.90th=[ 113], 99.95th=[ 165], + | 99.99th=[ 914] + bw ( KiB/s): min=61312, max=61784, per=100.00%, avg=61548.00, stdev=333.75, samples=2 + iops : min=15328, max=15446, avg=15387.00, stdev=83.44, samples=2 + lat (usec) : 20=4.03%, 100=95.65%, 250=0.27%, 500=0.02%, 1000=0.01% + lat (msec) : 4=0.01% + cpu : usr=0.66%, sys=2.06%, ctx=16390, majf=0, minf=8 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=16384,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 + +Run status group 0 (all jobs): + READ: bw=242MiB/s (254MB/s), 242MiB/s-242MiB/s (254MB/s-254MB/s), io=64.0MiB (67.1MB), run=264-264msec + +Run status group 1 (all jobs): + READ: bw=60.0MiB/s (62.9MB/s), 60.0MiB/s-60.0MiB/s (62.9MB/s-62.9MB/s), io=64.0MiB (67.1MB), run=1067-1067msec + +Disk stats (read/write): + nvme1n1: ios=30190/5, sectors=241528/376, merge=0/0, ticks=1083/69, in_queue=1153, util=72.01% diff --git a/q2/q2.fio b/q2/q2.fio new file mode 100644 index 0000000..d303935 --- /dev/null +++ b/q2/q2.fio @@ -0,0 +1,12 @@ +[global] +filename=testdisk +bs=4k +size=64m +direct=1 +stonewall + +[write] +rw=write + +[randwrite] +rw=randwrite diff --git a/q2/q2.output b/q2/q2.output new file mode 100644 index 0000000..05371b6 --- /dev/null +++ b/q2/q2.output @@ -0,0 +1,48 @@ +write: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +randwrite: (g=1): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +fio-3.39 +Starting 2 processes + +write: (groupid=0, jobs=1): err= 0: pid=12418: Sat Apr 12 18:34:15 2025 + write: IOPS=33.1k, BW=129MiB/s (136MB/s)(64.0MiB/495msec); 0 zone resets + clat (usec): min=18, max=2971, avg=29.41, stdev=26.49 + lat (usec): min=19, max=2972, avg=29.55, stdev=26.49 + clat percentiles (usec): + | 1.00th=[ 24], 5.00th=[ 26], 10.00th=[ 26], 20.00th=[ 27], + | 30.00th=[ 27], 40.00th=[ 28], 50.00th=[ 28], 60.00th=[ 28], + | 70.00th=[ 29], 80.00th=[ 31], 90.00th=[ 32], 95.00th=[ 32], + | 99.00th=[ 118], 99.50th=[ 131], 99.90th=[ 208], 99.95th=[ 225], + | 99.99th=[ 619] + lat (usec) : 20=0.01%, 50=98.83%, 100=0.10%, 250=1.01%, 500=0.03% + lat (usec) : 750=0.01% + lat (msec) : 4=0.01% + cpu : usr=3.04%, sys=36.44%, ctx=37026, majf=0, minf=6 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=0,16384,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +randwrite: (groupid=1, jobs=1): err= 0: pid=12423: Sat Apr 12 18:34:15 2025 + write: IOPS=39.7k, BW=155MiB/s (162MB/s)(64.0MiB/413msec); 0 zone resets + clat (usec): min=16, max=33415, avg=24.41, stdev=261.81 + lat (usec): min=16, max=33415, avg=24.53, stdev=261.81 + clat percentiles (usec): + | 1.00th=[ 18], 5.00th=[ 22], 10.00th=[ 22], 20.00th=[ 23], + | 30.00th=[ 23], 40.00th=[ 23], 50.00th=[ 23], 60.00th=[ 23], + | 70.00th=[ 23], 80.00th=[ 23], 90.00th=[ 23], 95.00th=[ 23], + | 99.00th=[ 25], 99.50th=[ 25], 99.90th=[ 28], 99.95th=[ 31], + | 99.99th=[ 2835] + lat (usec) : 20=3.01%, 50=96.97%, 250=0.01% + lat (msec) : 4=0.01%, 50=0.01% + cpu : usr=4.13%, sys=31.55%, ctx=16389, majf=0, minf=7 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=0,16384,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 + +Run status group 0 (all jobs): + WRITE: bw=129MiB/s (136MB/s), 129MiB/s-129MiB/s (136MB/s-136MB/s), io=64.0MiB (67.1MB), run=495-495msec + +Run status group 1 (all jobs): + WRITE: bw=155MiB/s (162MB/s), 155MiB/s-155MiB/s (162MB/s-162MB/s), io=64.0MiB (67.1MB), run=413-413msec diff --git a/q3/q3.fio b/q3/q3.fio new file mode 100644 index 0000000..d7b9a23 --- /dev/null +++ b/q3/q3.fio @@ -0,0 +1,12 @@ +[global] +filename=testdisk +bs=4k +size=64m +direct=1 +stonewall + +[forward] +rw=write + +[backward] +rw=write:-8k diff --git a/q3/q3.output b/q3/q3.output new file mode 100644 index 0000000..ed80423 --- /dev/null +++ b/q3/q3.output @@ -0,0 +1,46 @@ +forward: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +backward: (g=1): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +fio-3.39 +Starting 2 processes + +forward: (groupid=0, jobs=1): err= 0: pid=12464: Sat Apr 12 18:34:17 2025 + write: IOPS=42.8k, BW=167MiB/s (175MB/s)(64.0MiB/383msec); 0 zone resets + clat (usec): min=15, max=2975, avg=22.54, stdev=23.29 + lat (usec): min=16, max=2976, avg=22.71, stdev=23.30 + clat percentiles (usec): + | 1.00th=[ 17], 5.00th=[ 18], 10.00th=[ 22], 20.00th=[ 23], + | 30.00th=[ 23], 40.00th=[ 23], 50.00th=[ 23], 60.00th=[ 23], + | 70.00th=[ 23], 80.00th=[ 23], 90.00th=[ 24], 95.00th=[ 24], + | 99.00th=[ 28], 99.50th=[ 37], 99.90th=[ 48], 99.95th=[ 58], + | 99.99th=[ 322] + lat (usec) : 20=5.47%, 50=94.43%, 100=0.08%, 500=0.01% + lat (msec) : 4=0.01% + cpu : usr=4.19%, sys=31.41%, ctx=16387, majf=0, minf=6 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=0,16384,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +backward: (groupid=1, jobs=1): err= 0: pid=12474: Sat Apr 12 18:34:17 2025 + write: IOPS=41.6k, BW=162MiB/s (170MB/s)(64.0MiB/394msec); 0 zone resets + clat (usec): min=15, max=726, avg=23.17, stdev=10.51 + lat (usec): min=15, max=727, avg=23.34, stdev=10.51 + clat percentiles (usec): + | 1.00th=[ 17], 5.00th=[ 22], 10.00th=[ 22], 20.00th=[ 23], + | 30.00th=[ 23], 40.00th=[ 23], 50.00th=[ 23], 60.00th=[ 23], + | 70.00th=[ 23], 80.00th=[ 24], 90.00th=[ 26], 95.00th=[ 26], + | 99.00th=[ 38], 99.50th=[ 41], 99.90th=[ 59], 99.95th=[ 85], + | 99.99th=[ 693] + lat (usec) : 20=4.46%, 50=95.36%, 100=0.14%, 250=0.02%, 750=0.02% + cpu : usr=4.33%, sys=32.82%, ctx=16389, majf=0, minf=7 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=0,16384,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 + +Run status group 0 (all jobs): + WRITE: bw=167MiB/s (175MB/s), 167MiB/s-167MiB/s (175MB/s-175MB/s), io=64.0MiB (67.1MB), run=383-383msec + +Run status group 1 (all jobs): + WRITE: bw=162MiB/s (170MB/s), 162MiB/s-162MiB/s (170MB/s-170MB/s), io=64.0MiB (67.1MB), run=394-394msec diff --git a/q4/q4.fio b/q4/q4.fio new file mode 100644 index 0000000..75a640f --- /dev/null +++ b/q4/q4.fio @@ -0,0 +1,21 @@ +[global] +filename=/dev/nvme1n1 +bs=4k +size=64m +stonewall + +[sequential_buffered] +buffered=1 +rw=read + +[sequential_nonbuffered] +buffered=0 +rw=read + +[rand_buffered] +buffered=1 +rw=randread + +[rand_nonbuffered] +buffered=0 +rw=randread diff --git a/q4/q4.output b/q4/q4.output new file mode 100644 index 0000000..7df31f5 --- /dev/null +++ b/q4/q4.output @@ -0,0 +1,97 @@ +sequential_buffered: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +sequential_nonbuffered: (g=1): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +rand_buffered: (g=2): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +rand_nonbuffered: (g=3): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +fio-3.39 +Starting 4 processes + +sequential_buffered: (groupid=0, jobs=1): err= 0: pid=225892: Sun Apr 13 16:32:18 2025 + read: IOPS=364k, BW=1422MiB/s (1491MB/s)(64.0MiB/45msec) + clat (nsec): min=414, max=244928, avg=2552.07, stdev=17447.08 + lat (nsec): min=434, max=244948, avg=2573.40, stdev=17447.28 + clat percentiles (nsec): + | 1.00th=[ 426], 5.00th=[ 434], 10.00th=[ 438], 20.00th=[ 446], + | 30.00th=[ 450], 40.00th=[ 454], 50.00th=[ 462], 60.00th=[ 474], + | 70.00th=[ 490], 80.00th=[ 506], 90.00th=[ 556], 95.00th=[ 652], + | 99.00th=[118272], 99.50th=[154624], 99.90th=[211968], 99.95th=[224256], + | 99.99th=[238592] + lat (nsec) : 500=77.34%, 750=19.23%, 1000=1.57% + lat (usec) : 2=0.21%, 4=0.06%, 10=0.01%, 20=0.01%, 50=0.12% + lat (usec) : 100=0.31%, 250=1.15% + cpu : usr=6.82%, sys=34.09%, ctx=246, majf=0, minf=8 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=16384,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +sequential_nonbuffered: (groupid=1, jobs=1): err= 0: pid=225893: Sun Apr 13 16:32:18 2025 + read: IOPS=35.0k, BW=137MiB/s (143MB/s)(64.0MiB/468msec) + clat (usec): min=10, max=310, avg=28.03, stdev=24.76 + lat (usec): min=10, max=310, avg=28.07, stdev=24.76 + clat percentiles (usec): + | 1.00th=[ 11], 5.00th=[ 13], 10.00th=[ 13], 20.00th=[ 13], + | 30.00th=[ 13], 40.00th=[ 13], 50.00th=[ 14], 60.00th=[ 16], + | 70.00th=[ 25], 80.00th=[ 64], 90.00th=[ 68], 95.00th=[ 73], + | 99.00th=[ 85], 99.50th=[ 122], 99.90th=[ 182], 99.95th=[ 194], + | 99.99th=[ 239] + lat (usec) : 20=65.66%, 50=11.58%, 100=22.11%, 250=0.65%, 500=0.01% + cpu : usr=2.36%, sys=5.35%, ctx=16388, majf=0, minf=8 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=16384,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +rand_buffered: (groupid=2, jobs=1): err= 0: pid=225899: Sun Apr 13 16:32:18 2025 + read: IOPS=14.8k, BW=57.9MiB/s (60.7MB/s)(64.0MiB/1105msec) + clat (usec): min=11, max=740, avg=67.02, stdev=18.23 + lat (usec): min=11, max=740, avg=67.06, stdev=18.23 + clat percentiles (usec): + | 1.00th=[ 12], 5.00th=[ 64], 10.00th=[ 65], 20.00th=[ 67], + | 30.00th=[ 67], 40.00th=[ 67], 50.00th=[ 68], 60.00th=[ 68], + | 70.00th=[ 72], 80.00th=[ 73], 90.00th=[ 74], 95.00th=[ 75], + | 99.00th=[ 92], 99.50th=[ 106], 99.90th=[ 351], 99.95th=[ 429], + | 99.99th=[ 586] + bw ( KiB/s): min=54936, max=58928, per=95.99%, avg=56932.00, stdev=2822.77, samples=2 + iops : min=13734, max=14732, avg=14233.00, stdev=705.69, samples=2 + lat (usec) : 20=4.00%, 50=0.02%, 100=95.34%, 250=0.51%, 500=0.12% + lat (usec) : 750=0.02% + cpu : usr=0.91%, sys=3.71%, ctx=16386, majf=0, minf=7 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=16384,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +rand_nonbuffered: (groupid=3, jobs=1): err= 0: pid=225901: Sun Apr 13 16:32:18 2025 + read: IOPS=15.1k, BW=59.1MiB/s (62.0MB/s)(64.0MiB/1082msec) + clat (usec): min=10, max=161, avg=65.44, stdev=11.95 + lat (usec): min=10, max=161, avg=65.48, stdev=11.95 + clat percentiles (usec): + | 1.00th=[ 11], 5.00th=[ 63], 10.00th=[ 64], 20.00th=[ 65], + | 30.00th=[ 65], 40.00th=[ 66], 50.00th=[ 67], 60.00th=[ 68], + | 70.00th=[ 71], 80.00th=[ 72], 90.00th=[ 73], 95.00th=[ 74], + | 99.00th=[ 86], 99.50th=[ 94], 99.90th=[ 112], 99.95th=[ 115], + | 99.99th=[ 153] + bw ( KiB/s): min=60152, max=60984, per=100.00%, avg=60568.00, stdev=588.31, samples=2 + iops : min=15038, max=15246, avg=15142.00, stdev=147.08, samples=2 + lat (usec) : 20=4.01%, 50=0.02%, 100=95.66%, 250=0.31% + cpu : usr=1.20%, sys=2.41%, ctx=16388, majf=0, minf=7 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=16384,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 + +Run status group 0 (all jobs): + READ: bw=1422MiB/s (1491MB/s), 1422MiB/s-1422MiB/s (1491MB/s-1491MB/s), io=64.0MiB (67.1MB), run=45-45msec + +Run status group 1 (all jobs): + READ: bw=137MiB/s (143MB/s), 137MiB/s-137MiB/s (143MB/s-143MB/s), io=64.0MiB (67.1MB), run=468-468msec + +Run status group 2 (all jobs): + READ: bw=57.9MiB/s (60.7MB/s), 57.9MiB/s-57.9MiB/s (60.7MB/s-60.7MB/s), io=64.0MiB (67.1MB), run=1105-1105msec + +Run status group 3 (all jobs): + READ: bw=59.1MiB/s (62.0MB/s), 59.1MiB/s-59.1MiB/s (62.0MB/s-62.0MB/s), io=64.0MiB (67.1MB), run=1082-1082msec + +Disk stats (read/write): + nvme1n1: ios=60308/601, sectors=612976/18856, merge=67/21, ticks=3076/2672, in_queue=5750, util=75.21% diff --git a/q5/q5.fio b/q5/q5.fio new file mode 100644 index 0000000..5561bcf --- /dev/null +++ b/q5/q5.fio @@ -0,0 +1,22 @@ +[global] +filename=/dev/nvme1n1 +bs=1m +size=1g +rw=read +direct=1 +stonewall + +[job1] +offset=80% + +[job2] +offset=60% + +[job3] +offset=40% + +[job4] +offset=20% + +[job5] +offset=0 diff --git a/q5/q5.output b/q5/q5.output new file mode 100644 index 0000000..a4b3966 --- /dev/null +++ b/q5/q5.output @@ -0,0 +1,118 @@ +job1: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 +job2: (g=1): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 +job3: (g=2): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 +job4: (g=3): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 +job5: (g=4): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 +fio-3.39 +Starting 5 processes + +job1: (groupid=0, jobs=1): err= 0: pid=307878: Mon Apr 14 07:49:52 2025 + read: IOPS=2985, BW=2985MiB/s (3130MB/s)(1024MiB/343msec) + clat (usec): min=328, max=1158, avg=333.33, stdev=26.18 + lat (usec): min=328, max=1158, avg=333.41, stdev=26.19 + clat percentiles (usec): + | 1.00th=[ 330], 5.00th=[ 330], 10.00th=[ 330], 20.00th=[ 330], + | 30.00th=[ 330], 40.00th=[ 330], 50.00th=[ 330], 60.00th=[ 334], + | 70.00th=[ 334], 80.00th=[ 334], 90.00th=[ 334], 95.00th=[ 338], + | 99.00th=[ 351], 99.50th=[ 371], 99.90th=[ 400], 99.95th=[ 1156], + | 99.99th=[ 1156] + lat (usec) : 500=99.90% + lat (msec) : 2=0.10% + cpu : usr=0.58%, sys=7.31%, ctx=1037, majf=0, minf=264 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=1024,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +job2: (groupid=1, jobs=1): err= 0: pid=307879: Mon Apr 14 07:49:52 2025 + read: IOPS=2737, BW=2738MiB/s (2871MB/s)(1024MiB/374msec) + clat (usec): min=327, max=2373, avg=363.76, stdev=97.13 + lat (usec): min=327, max=2373, avg=363.84, stdev=97.13 + clat percentiles (usec): + | 1.00th=[ 330], 5.00th=[ 330], 10.00th=[ 330], 20.00th=[ 330], + | 30.00th=[ 330], 40.00th=[ 330], 50.00th=[ 330], 60.00th=[ 334], + | 70.00th=[ 334], 80.00th=[ 343], 90.00th=[ 490], 95.00th=[ 515], + | 99.00th=[ 553], 99.50th=[ 586], 99.90th=[ 1500], 99.95th=[ 2376], + | 99.99th=[ 2376] + lat (usec) : 500=91.89%, 750=7.91% + lat (msec) : 2=0.10%, 4=0.10% + cpu : usr=0.27%, sys=6.97%, ctx=1024, majf=0, minf=264 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=1024,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +job3: (groupid=2, jobs=1): err= 0: pid=307880: Mon Apr 14 07:49:52 2025 + read: IOPS=1996, BW=1996MiB/s (2093MB/s)(1024MiB/513msec) + clat (usec): min=330, max=1471, avg=499.92, stdev=66.04 + lat (usec): min=330, max=1472, avg=500.01, stdev=66.05 + clat percentiles (usec): + | 1.00th=[ 334], 5.00th=[ 461], 10.00th=[ 469], 20.00th=[ 478], + | 30.00th=[ 486], 40.00th=[ 494], 50.00th=[ 498], 60.00th=[ 502], + | 70.00th=[ 510], 80.00th=[ 523], 90.00th=[ 537], 95.00th=[ 545], + | 99.00th=[ 652], 99.50th=[ 709], 99.90th=[ 1270], 99.95th=[ 1467], + | 99.99th=[ 1467] + lat (usec) : 500=53.81%, 750=45.70%, 1000=0.10% + lat (msec) : 2=0.39% + cpu : usr=0.78%, sys=4.49%, ctx=1025, majf=0, minf=262 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=1024,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +job4: (groupid=3, jobs=1): err= 0: pid=307881: Mon Apr 14 07:49:52 2025 + read: IOPS=2000, BW=2000MiB/s (2097MB/s)(1024MiB/512msec) + clat (usec): min=337, max=1452, avg=499.02, stdev=39.01 + lat (usec): min=338, max=1452, avg=499.10, stdev=39.01 + clat percentiles (usec): + | 1.00th=[ 461], 5.00th=[ 465], 10.00th=[ 469], 20.00th=[ 478], + | 30.00th=[ 486], 40.00th=[ 490], 50.00th=[ 498], 60.00th=[ 502], + | 70.00th=[ 506], 80.00th=[ 519], 90.00th=[ 537], 95.00th=[ 545], + | 99.00th=[ 570], 99.50th=[ 603], 99.90th=[ 644], 99.95th=[ 1450], + | 99.99th=[ 1450] + lat (usec) : 500=60.16%, 750=39.75% + lat (msec) : 2=0.10% + cpu : usr=0.00%, sys=5.28%, ctx=1024, majf=0, minf=262 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=1024,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +job5: (groupid=4, jobs=1): err= 0: pid=307882: Mon Apr 14 07:49:52 2025 + read: IOPS=2000, BW=2000MiB/s (2097MB/s)(1024MiB/512msec) + clat (usec): min=369, max=1216, avg=499.36, stdev=33.86 + lat (usec): min=369, max=1216, avg=499.45, stdev=33.87 + clat percentiles (usec): + | 1.00th=[ 429], 5.00th=[ 465], 10.00th=[ 469], 20.00th=[ 478], + | 30.00th=[ 486], 40.00th=[ 494], 50.00th=[ 498], 60.00th=[ 502], + | 70.00th=[ 506], 80.00th=[ 519], 90.00th=[ 537], 95.00th=[ 545], + | 99.00th=[ 553], 99.50th=[ 586], 99.90th=[ 627], 99.95th=[ 1221], + | 99.99th=[ 1221] + bw ( MiB/s): min= 2002, max= 2002, per=100.00%, avg=2002.00, stdev= 0.00, samples=1 + iops : min= 2002, max= 2002, avg=2002.00, stdev= 0.00, samples=1 + lat (usec) : 500=56.45%, 750=43.46% + lat (msec) : 2=0.10% + cpu : usr=0.00%, sys=5.09%, ctx=1025, majf=0, minf=264 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=1024,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 + +Run status group 0 (all jobs): + READ: bw=2985MiB/s (3130MB/s), 2985MiB/s-2985MiB/s (3130MB/s-3130MB/s), io=1024MiB (1074MB), run=343-343msec + +Run status group 1 (all jobs): + READ: bw=2738MiB/s (2871MB/s), 2738MiB/s-2738MiB/s (2871MB/s-2871MB/s), io=1024MiB (1074MB), run=374-374msec + +Run status group 2 (all jobs): + READ: bw=1996MiB/s (2093MB/s), 1996MiB/s-1996MiB/s (2093MB/s-2093MB/s), io=1024MiB (1074MB), run=513-513msec + +Run status group 3 (all jobs): + READ: bw=2000MiB/s (2097MB/s), 2000MiB/s-2000MiB/s (2097MB/s-2097MB/s), io=1024MiB (1074MB), run=512-512msec + +Run status group 4 (all jobs): + READ: bw=2000MiB/s (2097MB/s), 2000MiB/s-2000MiB/s (2097MB/s-2097MB/s), io=1024MiB (1074MB), run=512-512msec + +Disk stats (read/write): + nvme1n1: ios=19144/231, sectors=9801728/7256, merge=0/4, ticks=6025/353, in_queue=6382, util=61.60% diff --git a/q6/q6.fio b/q6/q6.fio new file mode 100644 index 0000000..d8d7e0f --- /dev/null +++ b/q6/q6.fio @@ -0,0 +1,30 @@ +[global] +filename=/dev/nvme1n1 +size=64m +rw=read +direct=1 +stonewall + +[1k_block] +bs=1k + +[4k_block] +bs=4k + +[1m_block] +bs=1m + +[2m_block] +bs=2m + +[4m_block] +bs=4m + +[8m_block] +bs=8m + +[16m_block] +bs=16m + +[32m_block] +bs=32m diff --git a/q6/q6.output b/q6/q6.output new file mode 100644 index 0000000..6e9ddca --- /dev/null +++ b/q6/q6.output @@ -0,0 +1,178 @@ +1k_block: (g=0): rw=read, bs=(R) 1024B-1024B, (W) 1024B-1024B, (T) 1024B-1024B, ioengine=psync, iodepth=1 +4k_block: (g=1): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 +1m_block: (g=2): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1 +2m_block: (g=3): rw=read, bs=(R) 2048KiB-2048KiB, (W) 2048KiB-2048KiB, (T) 2048KiB-2048KiB, ioengine=psync, iodepth=1 +4m_block: (g=4): rw=read, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=psync, iodepth=1 +8m_block: (g=5): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=psync, iodepth=1 +16m_block: (g=6): rw=read, bs=(R) 16.0MiB-16.0MiB, (W) 16.0MiB-16.0MiB, (T) 16.0MiB-16.0MiB, ioengine=psync, iodepth=1 +32m_block: (g=7): rw=read, bs=(R) 32.0MiB-32.0MiB, (W) 32.0MiB-32.0MiB, (T) 32.0MiB-32.0MiB, ioengine=psync, iodepth=1 +fio-3.39 +Starting 8 processes + +1k_block: (groupid=0, jobs=1): err= 0: pid=310156: Mon Apr 14 08:12:27 2025 + read: IOPS=61.9k, BW=60.5MiB/s (63.4MB/s)(64.0MiB/1058msec) + clat (usec): min=9, max=828, avg=15.88, stdev= 6.29 + lat (usec): min=9, max=828, avg=15.92, stdev= 6.29 + clat percentiles (usec): + | 1.00th=[ 10], 5.00th=[ 15], 10.00th=[ 15], 20.00th=[ 15], + | 30.00th=[ 15], 40.00th=[ 15], 50.00th=[ 15], 60.00th=[ 16], + | 70.00th=[ 16], 80.00th=[ 17], 90.00th=[ 18], 95.00th=[ 24], + | 99.00th=[ 25], 99.50th=[ 25], 99.90th=[ 67], 99.95th=[ 137], + | 99.99th=[ 176] + bw ( KiB/s): min=62446, max=62446, per=100.00%, avg=62446.00, stdev= 0.00, samples=1 + iops : min=62446, max=62446, avg=62446.00, stdev= 0.00, samples=1 + lat (usec) : 10=3.78%, 20=89.12%, 50=6.87%, 100=0.15%, 250=0.07% + lat (usec) : 500=0.01%, 1000=0.01% + cpu : usr=3.12%, sys=8.33%, ctx=65539, majf=0, minf=9 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=65536,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +4k_block: (groupid=1, jobs=1): err= 0: pid=310157: Mon Apr 14 08:12:27 2025 + read: IOPS=61.4k, BW=240MiB/s (251MB/s)(64.0MiB/267msec) + clat (usec): min=10, max=893, avg=15.99, stdev=11.09 + lat (usec): min=10, max=893, avg=16.02, stdev=11.09 + clat percentiles (usec): + | 1.00th=[ 11], 5.00th=[ 12], 10.00th=[ 13], 20.00th=[ 13], + | 30.00th=[ 13], 40.00th=[ 13], 50.00th=[ 13], 60.00th=[ 13], + | 70.00th=[ 14], 80.00th=[ 15], 90.00th=[ 26], 95.00th=[ 38], + | 99.00th=[ 49], 99.50th=[ 50], 99.90th=[ 67], 99.95th=[ 133], + | 99.99th=[ 182] + lat (usec) : 20=83.81%, 50=15.75%, 100=0.38%, 250=0.05%, 1000=0.01% + cpu : usr=2.63%, sys=8.27%, ctx=16384, majf=0, minf=8 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=16384,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +1m_block: (groupid=2, jobs=1): err= 0: pid=310160: Mon Apr 14 08:12:27 2025 + read: IOPS=2000, BW=2000MiB/s (2097MB/s)(64.0MiB/32msec) + clat (usec): min=372, max=1191, avg=494.23, stdev=91.47 + lat (usec): min=372, max=1191, avg=494.31, stdev=91.49 + clat percentiles (usec): + | 1.00th=[ 371], 5.00th=[ 461], 10.00th=[ 461], 20.00th=[ 469], + | 30.00th=[ 474], 40.00th=[ 478], 50.00th=[ 482], 60.00th=[ 490], + | 70.00th=[ 494], 80.00th=[ 502], 90.00th=[ 515], 95.00th=[ 523], + | 99.00th=[ 1188], 99.50th=[ 1188], 99.90th=[ 1188], 99.95th=[ 1188], + | 99.99th=[ 1188] + lat (usec) : 500=79.69%, 750=18.75% + lat (msec) : 2=1.56% + cpu : usr=0.00%, sys=6.45%, ctx=64, majf=0, minf=262 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=64,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +2m_block: (groupid=3, jobs=1): err= 0: pid=310161: Mon Apr 14 08:12:27 2025 + read: IOPS=1280, BW=2560MiB/s (2684MB/s)(64.0MiB/25msec) + clat (usec): min=642, max=979, avg=763.00, stdev=45.56 + lat (usec): min=642, max=980, avg=763.10, stdev=45.58 + clat percentiles (usec): + | 1.00th=[ 644], 5.00th=[ 725], 10.00th=[ 750], 20.00th=[ 758], + | 30.00th=[ 758], 40.00th=[ 758], 50.00th=[ 758], 60.00th=[ 766], + | 70.00th=[ 766], 80.00th=[ 766], 90.00th=[ 766], 95.00th=[ 783], + | 99.00th=[ 979], 99.50th=[ 979], 99.90th=[ 979], 99.95th=[ 979], + | 99.99th=[ 979] + lat (usec) : 750=6.25%, 1000=93.75% + cpu : usr=0.00%, sys=4.17%, ctx=32, majf=0, minf=518 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=32,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +4m_block: (groupid=4, jobs=1): err= 0: pid=310162: Mon Apr 14 08:12:27 2025 + read: IOPS=695, BW=2783MiB/s (2918MB/s)(64.0MiB/23msec) + clat (usec): min=1326, max=2065, avg=1403.20, stdev=176.93 + lat (usec): min=1326, max=2065, avg=1403.32, stdev=177.04 + clat percentiles (usec): + | 1.00th=[ 1319], 5.00th=[ 1319], 10.00th=[ 1352], 20.00th=[ 1352], + | 30.00th=[ 1352], 40.00th=[ 1352], 50.00th=[ 1352], 60.00th=[ 1369], + | 70.00th=[ 1369], 80.00th=[ 1369], 90.00th=[ 1385], 95.00th=[ 2073], + | 99.00th=[ 2073], 99.50th=[ 2073], 99.90th=[ 2073], 99.95th=[ 2073], + | 99.99th=[ 2073] + lat (msec) : 2=93.75%, 4=6.25% + cpu : usr=0.00%, sys=4.55%, ctx=17, majf=0, minf=520 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=16,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +8m_block: (groupid=5, jobs=1): err= 0: pid=310163: Mon Apr 14 08:12:27 2025 + read: IOPS=363, BW=2909MiB/s (3050MB/s)(64.0MiB/22msec) + clat (usec): min=2545, max=3297, avg=2648.25, stdev=262.22 + lat (usec): min=2545, max=3297, avg=2648.38, stdev=262.28 + clat percentiles (usec): + | 1.00th=[ 2540], 5.00th=[ 2540], 10.00th=[ 2540], 20.00th=[ 2540], + | 30.00th=[ 2540], 40.00th=[ 2540], 50.00th=[ 2540], 60.00th=[ 2573], + | 70.00th=[ 2573], 80.00th=[ 2573], 90.00th=[ 3294], 95.00th=[ 3294], + | 99.00th=[ 3294], 99.50th=[ 3294], 99.90th=[ 3294], 99.95th=[ 3294], + | 99.99th=[ 3294] + lat (msec) : 4=100.00% + cpu : usr=4.76%, sys=0.00%, ctx=8, majf=0, minf=522 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=8,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +16m_block: (groupid=6, jobs=1): err= 0: pid=310164: Mon Apr 14 08:12:27 2025 + read: IOPS=190, BW=3048MiB/s (3196MB/s)(64.0MiB/21msec) + clat (usec): min=4946, max=5717, avg=5146.10, stdev=380.86 + lat (usec): min=4946, max=5717, avg=5146.43, stdev=380.85 + clat percentiles (usec): + | 1.00th=[ 4948], 5.00th=[ 4948], 10.00th=[ 4948], 20.00th=[ 4948], + | 30.00th=[ 4948], 40.00th=[ 4948], 50.00th=[ 4948], 60.00th=[ 4948], + | 70.00th=[ 4948], 80.00th=[ 5735], 90.00th=[ 5735], 95.00th=[ 5735], + | 99.00th=[ 5735], 99.50th=[ 5735], 99.90th=[ 5735], 99.95th=[ 5735], + | 99.99th=[ 5735] + lat (msec) : 10=100.00% + cpu : usr=0.00%, sys=5.00%, ctx=4, majf=0, minf=525 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=4,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +32m_block: (groupid=7, jobs=1): err= 0: pid=310165: Mon Apr 14 08:12:27 2025 + read: IOPS=90, BW=2909MiB/s (3050MB/s)(64.0MiB/22msec) + clat (usec): min=10075, max=11211, avg=10643.69, stdev=803.40 + lat (usec): min=10075, max=11212, avg=10643.99, stdev=803.39 + clat percentiles (usec): + | 1.00th=[10028], 5.00th=[10028], 10.00th=[10028], 20.00th=[10028], + | 30.00th=[10028], 40.00th=[10028], 50.00th=[10028], 60.00th=[11207], + | 70.00th=[11207], 80.00th=[11207], 90.00th=[11207], 95.00th=[11207], + | 99.00th=[11207], 99.50th=[11207], 99.90th=[11207], 99.95th=[11207], + | 99.99th=[11207] + lat (msec) : 20=100.00% + cpu : usr=0.00%, sys=9.52%, ctx=2, majf=0, minf=533 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=2,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 + +Run status group 0 (all jobs): + READ: bw=60.5MiB/s (63.4MB/s), 60.5MiB/s-60.5MiB/s (63.4MB/s-63.4MB/s), io=64.0MiB (67.1MB), run=1058-1058msec + +Run status group 1 (all jobs): + READ: bw=240MiB/s (251MB/s), 240MiB/s-240MiB/s (251MB/s-251MB/s), io=64.0MiB (67.1MB), run=267-267msec + +Run status group 2 (all jobs): + READ: bw=2000MiB/s (2097MB/s), 2000MiB/s-2000MiB/s (2097MB/s-2097MB/s), io=64.0MiB (67.1MB), run=32-32msec + +Run status group 3 (all jobs): + READ: bw=2560MiB/s (2684MB/s), 2560MiB/s-2560MiB/s (2684MB/s-2684MB/s), io=64.0MiB (67.1MB), run=25-25msec + +Run status group 4 (all jobs): + READ: bw=2783MiB/s (2918MB/s), 2783MiB/s-2783MiB/s (2918MB/s-2918MB/s), io=64.0MiB (67.1MB), run=23-23msec + +Run status group 5 (all jobs): + READ: bw=2909MiB/s (3050MB/s), 2909MiB/s-2909MiB/s (3050MB/s-3050MB/s), io=64.0MiB (67.1MB), run=22-22msec + +Run status group 6 (all jobs): + READ: bw=3048MiB/s (3196MB/s), 3048MiB/s-3048MiB/s (3196MB/s-3196MB/s), io=64.0MiB (67.1MB), run=21-21msec + +Run status group 7 (all jobs): + READ: bw=2909MiB/s (3050MB/s), 2909MiB/s-2909MiB/s (3050MB/s-3050MB/s), io=64.0MiB (67.1MB), run=22-22msec + +Disk stats (read/write): + nvme1n1: ios=71570/134, sectors=179344/4416, merge=0/3, ticks=948/104, in_queue=1053, util=62.66% diff --git a/q7/q7.fio b/q7/q7.fio new file mode 100644 index 0000000..309f2e4 --- /dev/null +++ b/q7/q7.fio @@ -0,0 +1,31 @@ +[global] +filename=/dev/nvme1n1 +direct=1 +size=1g +stonewall +rw=read + +offset=80% +bs=8m + +[psync] +ioengine=psync + +[libaio] +ioengine=libaio +iodepth=1 + +[libaio-iod32] +ioengine=libaio +iodepth=32 + +[libaio-iod64] +ioengine=libaio +iodepth=64 + +[libaio-iod128] +ioengine=libaio +iodepth=128 + +[fastest] +ioengine=libaio diff --git a/q7/q7.output b/q7/q7.output new file mode 100644 index 0000000..a1fbd9a --- /dev/null +++ b/q7/q7.output @@ -0,0 +1,137 @@ +psync: (g=0): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=psync, iodepth=1 +libaio: (g=1): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=1 +libaio-iod32: (g=2): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=32 +libaio-iod64: (g=3): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=64 +libaio-iod128: (g=4): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=128 +fastest: (g=5): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=1 +fio-3.39 +Starting 6 processes + +psync: (groupid=0, jobs=1): err= 0: pid=314338: Mon Apr 14 08:40:53 2025 + read: IOPS=411, BW=3293MiB/s (3453MB/s)(1024MiB/311msec) + clat (usec): min=2412, max=3248, avg=2426.43, stdev=73.58 + lat (usec): min=2412, max=3248, avg=2426.55, stdev=73.59 + clat percentiles (usec): + | 1.00th=[ 2409], 5.00th=[ 2409], 10.00th=[ 2409], 20.00th=[ 2409], + | 30.00th=[ 2409], 40.00th=[ 2409], 50.00th=[ 2409], 60.00th=[ 2409], + | 70.00th=[ 2409], 80.00th=[ 2409], 90.00th=[ 2442], 95.00th=[ 2442], + | 99.00th=[ 2442], 99.50th=[ 3261], 99.90th=[ 3261], 99.95th=[ 3261], + | 99.99th=[ 3261] + lat (msec) : 4=100.00% + cpu : usr=0.00%, sys=2.90%, ctx=130, majf=0, minf=522 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=128,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +libaio: (groupid=1, jobs=1): err= 0: pid=314339: Mon Apr 14 08:40:53 2025 + read: IOPS=410, BW=3282MiB/s (3441MB/s)(1024MiB/312msec) + slat (usec): min=62, max=651, avg=75.86, stdev=53.47 + clat (usec): min=2219, max=2586, avg=2352.36, stdev=25.94 + lat (usec): min=2414, max=3238, avg=2428.22, stdev=72.91 + clat percentiles (usec): + | 1.00th=[ 2343], 5.00th=[ 2343], 10.00th=[ 2343], 20.00th=[ 2343], + | 30.00th=[ 2343], 40.00th=[ 2343], 50.00th=[ 2343], 60.00th=[ 2343], + | 70.00th=[ 2343], 80.00th=[ 2343], 90.00th=[ 2376], 95.00th=[ 2376], + | 99.00th=[ 2409], 99.50th=[ 2573], 99.90th=[ 2573], 99.95th=[ 2573], + | 99.99th=[ 2573] + lat (msec) : 4=100.00% + cpu : usr=0.00%, sys=2.89%, ctx=131, majf=0, minf=522 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=128,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 +libaio-iod32: (groupid=2, jobs=1): err= 0: pid=314340: Mon Apr 14 08:40:53 2025 + read: IOPS=418, BW=3346MiB/s (3509MB/s)(1024MiB/306msec) + slat (usec): min=48, max=597, avg=500.10, stdev=162.08 + clat (msec): min=11, max=146, avg=73.69, stdev=30.45 + lat (msec): min=11, max=147, avg=74.19, stdev=30.48 + clat percentiles (msec): + | 1.00th=[ 12], 5.00th=[ 15], 10.00th=[ 27], 20.00th=[ 52], + | 30.00th=[ 77], 40.00th=[ 77], 50.00th=[ 77], 60.00th=[ 77], + | 70.00th=[ 77], 80.00th=[ 88], 90.00th=[ 120], 95.00th=[ 133], + | 99.00th=[ 144], 99.50th=[ 148], 99.90th=[ 148], 99.95th=[ 148], + | 99.99th=[ 148] + lat (msec) : 20=7.03%, 50=12.50%, 100=64.84%, 250=15.62% + cpu : usr=0.00%, sys=5.90%, ctx=177, majf=0, minf=136 + IO depths : 1=0.8%, 2=1.6%, 4=3.1%, 8=6.2%, 16=12.5%, 32=75.8%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=99.0%, 8=0.0%, 16=0.0%, 32=1.0%, 64=0.0%, >=64=0.0% + issued rwts: total=128,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=32 +libaio-iod64: (groupid=3, jobs=1): err= 0: pid=314341: Mon Apr 14 08:40:53 2025 + read: IOPS=418, BW=3346MiB/s (3509MB/s)(1024MiB/306msec) + slat (usec): min=49, max=7156, avg=1794.84, stdev=2134.18 + clat (msec): min=18, max=263, avg=138.99, stdev=70.33 + lat (msec): min=19, max=266, avg=140.78, stdev=70.87 + clat percentiles (msec): + | 1.00th=[ 35], 5.00th=[ 60], 10.00th=[ 62], 20.00th=[ 66], + | 30.00th=[ 79], 40.00th=[ 100], 50.00th=[ 129], 60.00th=[ 155], + | 70.00th=[ 186], 80.00th=[ 232], 90.00th=[ 236], 95.00th=[ 249], + | 99.00th=[ 262], 99.50th=[ 264], 99.90th=[ 264], 99.95th=[ 264], + | 99.99th=[ 264] + lat (msec) : 20=0.78%, 50=1.56%, 100=39.06%, 250=53.91%, 500=4.69% + cpu : usr=0.00%, sys=10.49%, ctx=221, majf=0, minf=265 + IO depths : 1=0.8%, 2=1.6%, 4=3.1%, 8=6.2%, 16=12.5%, 32=25.0%, >=64=50.8% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=98.5%, 8=0.0%, 16=0.0%, 32=0.0%, 64=1.5%, >=64=0.0% + issued rwts: total=128,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=64 +libaio-iod128: (groupid=4, jobs=1): err= 0: pid=314344: Mon Apr 14 08:40:53 2025 + read: IOPS=418, BW=3346MiB/s (3509MB/s)(1024MiB/306msec) + slat (usec): min=371, max=7565, avg=1792.97, stdev=2067.63 + clat (msec): min=76, max=304, avg=231.90, stdev=60.80 + lat (msec): min=82, max=305, avg=233.69, stdev=59.54 + clat percentiles (msec): + | 1.00th=[ 83], 5.00th=[ 104], 10.00th=[ 132], 20.00th=[ 197], + | 30.00th=[ 215], 40.00th=[ 220], 50.00th=[ 226], 60.00th=[ 255], + | 70.00th=[ 284], 80.00th=[ 296], 90.00th=[ 300], 95.00th=[ 305], + | 99.00th=[ 305], 99.50th=[ 305], 99.90th=[ 305], 99.95th=[ 305], + | 99.99th=[ 305] + lat (msec) : 100=3.91%, 250=54.69%, 500=41.41% + cpu : usr=0.00%, sys=17.38%, ctx=198, majf=0, minf=522 + IO depths : 1=0.8%, 2=1.6%, 4=3.1%, 8=6.2%, 16=12.5%, 32=25.0%, >=64=50.8% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=50.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=50.0% + issued rwts: total=128,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=128 +fastest: (groupid=5, jobs=1): err= 0: pid=314345: Mon Apr 14 08:40:53 2025 + read: IOPS=411, BW=3293MiB/s (3453MB/s)(1024MiB/311msec) + slat (usec): min=60, max=630, avg=72.57, stdev=51.51 + clat (usec): min=2214, max=2634, avg=2353.93, stdev=29.25 + lat (usec): min=2413, max=3265, avg=2426.50, stdev=75.19 + clat percentiles (usec): + | 1.00th=[ 2311], 5.00th=[ 2343], 10.00th=[ 2343], 20.00th=[ 2343], + | 30.00th=[ 2343], 40.00th=[ 2343], 50.00th=[ 2343], 60.00th=[ 2343], + | 70.00th=[ 2343], 80.00th=[ 2343], 90.00th=[ 2376], 95.00th=[ 2376], + | 99.00th=[ 2442], 99.50th=[ 2638], 99.90th=[ 2638], 99.95th=[ 2638], + | 99.99th=[ 2638] + lat (msec) : 4=100.00% + cpu : usr=0.00%, sys=2.90%, ctx=128, majf=0, minf=522 + IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% + submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% + issued rwts: total=128,0,0,0 short=0,0,0,0 dropped=0,0,0,0 + latency : target=0, window=0, percentile=100.00%, depth=1 + +Run status group 0 (all jobs): + READ: bw=3293MiB/s (3453MB/s), 3293MiB/s-3293MiB/s (3453MB/s-3453MB/s), io=1024MiB (1074MB), run=311-311msec + +Run status group 1 (all jobs): + READ: bw=3282MiB/s (3441MB/s), 3282MiB/s-3282MiB/s (3441MB/s-3441MB/s), io=1024MiB (1074MB), run=312-312msec + +Run status group 2 (all jobs): + READ: bw=3346MiB/s (3509MB/s), 3346MiB/s-3346MiB/s (3509MB/s-3509MB/s), io=1024MiB (1074MB), run=306-306msec + +Run status group 3 (all jobs): + READ: bw=3346MiB/s (3509MB/s), 3346MiB/s-3346MiB/s (3509MB/s-3509MB/s), io=1024MiB (1074MB), run=306-306msec + +Run status group 4 (all jobs): + READ: bw=3346MiB/s (3509MB/s), 3346MiB/s-3346MiB/s (3509MB/s-3509MB/s), io=1024MiB (1074MB), run=306-306msec + +Run status group 5 (all jobs): + READ: bw=3293MiB/s (3453MB/s), 3293MiB/s-3293MiB/s (3453MB/s-3453MB/s), io=1024MiB (1074MB), run=311-311msec + +Disk stats (read/write): + nvme1n1: ios=22560/1, sectors=11454960/176, merge=128/0, ticks=940215/0, in_queue=940215, util=51.56% diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..1a17fa4 --- /dev/null +++ b/run.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env -S bash + +JOBS=$(find . -type f -name '*.fio') + +for job in ${JOBS[@]}; do + output="$(sed -rn 's/(.*)\.fio/\1.output/p' <<< "$job")" + echo "Running $job, writing result into $output" + sudo $(which fio) "$job" > "$output" +done