Boost logo

Boost :

From: Max Motovilov (max_at_[hidden])
Date: 2004-03-02 14:17:37


"Jeff Flinn" <TriumphSprint2000_at_[hidden]> wrote in message
news:c22in1$god$1_at_sea.gmane.org...

> This topic has come up on the spirit list. Originally I was a proponent of
> mmap approach based on experiencing major performance improvements with
> earlier version of Windows particularly Windows CE. Today I've seen much
> less difference in performance. I've been told that Windows 2K/Xp using
NTFS
> memorymaps files under the covers, and unless your actively adressing into
> the memory range there's little to be gained, atleast on Windows. Perhaps
> other os do this as well?

This is an issue that I have researched before. I have compared the
performance of Win32 memory mapped file API, synchronous file I/O API along
with iostreams and C-style buffered I/O (stdio.h). Still have the benchmark
prog but it uses a few library classes of my own so if I'd try to post
enough of the source here so it can be built and run, it'll be rather
unwieldy. It used fairly large I/O buffers (16K) to maximize throughput and
tested both sequential and random reading and writing performance. Actually,
I even had a provision to test file creation as opposed to writing to an
already allocated space since it might have put mapped files at a
disadvantage.

The summary of multiple runs is on the attached chart. The chart is in
logarithmic scale so actual numbers should be irrelevant. To provide a
reference point, the test was run on a Xeon 1.7G x 2 machine with 2G RDRAM
under Win.2003 Server and allocated the file on an NTFS-formatted 7200 RPM
IDE drive connected to a non-RAID (and, as far as I can tell, non-cached)
onboard IDE adapter. Typical run times for a 256M test file are 0.3-0.5 sec
using memory mapped files, 0.5-0.6 sec using file I/O (I'm not even gonna
mention iostreams and stdio here, you'll see how atrocious they are from the
chart).

Short version - memory mapped files are SO much faster, it is not even
funny. I did not go the extra mile and test the asynchronous I/O
(scatter/gather reads and writes); my expectation is that they should beat
memory mapping but not by much. There apparently is a good reason to listen
to the old Microsoft's recommendation and use memory mapping of files where
possible.

...Max...

begin 666 IOBenchmark.pdf
M)5!$1BTQ+C(*)<#(S-(-"C$@,"!O8FH*/#P*+U1I=&QE("A)3T)E;F-H;6%R
M:RYX;',I"B]!=71H;W(@*$UA>"D*+T-R96%T;W(@*'!D9D9A8W1O<GD@=W=W
M+G!D9F9A8W1O<GDN8V]M*0HO4')O9'5C97(@*'!D9D9A8W1O<GD@,BXQ-2!<
M*%=I;F1O=W,@,C P,R!397)V97(@4G5S<VEA;EPI*0HO0W)E871I;VY$871E
M("A$.C(P,#0P,S R,3(U-S Q*0H^/@IE;F1O8FH*-" P(&]B:@H\/ HO1FEL
M=&5R("]&;&%T941E8V]D90HO3&5N9W1H(#4@,"!2"CX^"G-T<F5A;0T*2(F%
MEUW/W<:MA>_]*_9E6CBJYE,2$.2B:5._at_0&Y:`[XVZK1Q82>M':-_OQR):TF;
M(64<G),S7L^[-</A(CGSE.OC?X\M37U]Y'F9^N/#BR6W::ZZ?/_B[R]4SNM%
ME,5%JGFJ%W%?7N16QG]._5A?@)ZGJ[XO+_(R3_6J'^LKL$SYJH_E15[+D[PO
M3[ED65]^7M<7H):I7LZGZPO0UFF^_L*QO@!]F])E"[J^`,LZKN($CO4%6/N4
M+K>CZPNP2="N>SC65V"=^O43Q_H$:EFGY;))75^ ]GP*75^ I4SM"ASK"[#6
MZT4?RXN\E6F[_OVQ/H$VIVN*'LNKO$XE7_5]?0%2?0:.]355UN=4.]:7+<YF
MB[/=8MJ>MK_at_OAYP>?WW,4^/__NTO\I^MTWYI&5G?2YE*EQ3KLOCXH_S=_!C_
ML]-+N_R?C_]Z;-M_at_QQ;R(\EO]D?*X\KD[_[X^Q=)=K!T#?(AMY'8JK8\$JC.
M^R4?\C*.HK(D8!M_W,<>\==RH$/.<QW_7N4_5=5M6JF6M&]LZ_QRN:AMV?<U
MY_/+<@^=NFQX[&Q=>*PZ['2H1?]%KG[IO_WQ4O8-UVT91SWD?/YVZ>4(679/
M7=;M"-DR#(Z_ELT<<DV[Z7)9QH^(++ESW7GM>S!SVGV!H#7\>LMI+/*:N>]$
MK>[;.+4ZX<1MV9,T]W3]55Y%G^?]HV+&CA/WD;0JYV7\66Y[0?E-.'O;+9I;
MTR/M-UEPXKYL^[;*/ ZNNQ[W<LC+W/>M/<GSF8+SM;_ &==T'\98]TP[UI%*
M7S[9]-1IRR>7GOKSMT]37K]&SYX?ASP?I=7N+:6]SE/GFD"M8Y\G@#6!0SD!
MK EH(A/ &D#.Y6F/7!-H\],FN2:P]*=-<@V_at_S/EIDUP3R-O3)KDF(.EUW237
M!-;\M$FN`8PZ==TDUP3*;L03P)J ^&>^`E_at_34-<3P!I 2WNA(< U@;HG_ E@
M3:#WITUR34 ZWG637 /HDKK737)-H+:G37)-0/Z_ZR:Y)G ,!B> -0#:9'Z:
M.$[@CZ]>_.'[-.J!W.&K?VH+DX:U'*G7]U+UZD^/K\>ZRCV^^L?CJ_EWCU?_
MEI(Q+XO4X/$O4]K_:1T])C7]FZ^.?_QZ+ZSCG^7X]J?2;!C\Z7P(8W=][.S/
MK\9FYT=Z?)UDBTGJF50+:7KRFQ\>7WUW;,G(VU[AAO[1U_>&,_0??;WOXAM?
MW*OOT']U]33O:1O_>MI[\M ?@=[W:Q'@4P"(>^\^($-&.[;XWP!HH_H.X',`
M[/7AYA.9(?PY`&YC)#VO'[__+@#V#AW?0BIYE)<!O ^ @C.^# #)NKMK* MB
M\(T/U-U>-X>09U8YMO!+`#2$(;CIND[K71S;C"CXF3Z&R-M<;/L(>A/GQHOX
MX -]'P8'\*T!Y(K$25(@N^M5E1=<DSV!ZOO8ZIW_at_T-,^7'L'@-YA!AM#`/O@
M=?.%E()$@5Z0*/X1AMUNMYA6;-&:20&92S5(;P._at_80LVTP"L\*N]1_at_5*02I:
MNP!HJ'M!&,0O6O>L7Q00O^@>K%\`9!2^X!3U:":.7P"L7[CL-N.R@[LZ7ETW
MV=#VGG5SFS+(:UD(0MU9F:QCVMY;CC?.T%^[^L8=V#.HOB!*-LZJ<X,V2(<N
M31A1M#$`P!/87 " VFKO"?J*#AU\(3$5; L#P%2P+0P`2F?PA<R+MJ8#P# '
M8<J+VMH/\\5S-E,4T.9@&QC4_at_A-:1P)H*,W!+90^^0U,=3'D79ZDFE![K1\!
MH+ %URQV++<A;/--'J?&LA?<86/9"R+<PK*G0&?9LUY<]\ZX]6GSO7CH29Y:
MP:P)H$95#P#'/1LD``OJ_at_0V#`M*@@D0`D">_04&O.(2-(X 5>[1F44 ZE":K
M[5 `ZN27=N_at_K[&AO2H&"/F_=`+VBJ_at_5!*!P$K!T4$#OH%H*;JA@$@C/4BF2Q
M?@"P?N&J*TM_<%-BB>Z7-0`-73BXRK9.OB-4[RP[QA$Y[15SHRF_\_4>=%CH
M:]!@51_O)[_!$JA!_R+0@_Y%8 OZ%P".?)\"O0;]B\ :]"\`IV$^!T#U^Q?U
M->A?`$H*^A>!XO<OZC7H7P3<!QC5+>A?`&I4M_at_ADOW]1[Y,[#5+?OA !<9,[
M5E.O2*0_at_1,VM!U0WC,R3#_0$L_X4`'7RO5CV07?CX\QZ\=#'H%9],P+@5&_3
M#, :M 8`YZ1F_at_PR@!.V+P!+E`8#5;U_0\_R%/8J7_/9%8 G:%X R^^V+>@W:
M%X'-;U_0I?GX[8M #MH7_at_8XM6#L`V# M!3<ECR/M7T$4Q _%+QD`&NXZB%-C
MQEI+*- 1:.L(Z RTM43?N^_&D?"UJX_V,ON6`) 1!7M(`#"E#2-T#G0VX0&P
M,MJ[5N <Z.Q5`JAHLL$GQ%/=;3^J9UZU;3\`>-7!%\0RW?>4`H6!#N)4.#H'
M_at_3Y-97T-8$&!MST(P(IC6MLI(+;KMU<AMM,X6-L!:)@E_at_KL2V]W'H;%\6=L!
M8/D*`M7X5+6V`["BNEC;*2"VT^IB?0>@X)C6=S(0EL,VU3<>@#4:#!5(T?Q-
M`%.9#23T`N_;G 70H]L&P =KL$?Q3?9G(@!E\J<RZ#VJL0I(IRG^70+@D]6V
M&@!LV3;I%9"DOXU"94NW.0^@80LVYP&@8P<W)2FOR1)$H95IK7>YT%CG_at_S!)
MRNM=VY17H#/0-N4!,- FY8M45VESZX(]?N?J6T8^?_3U&O0)Z!Q*WKAZFF<_
MRM1I2?\#8_I;W4P_at_P +[R0<2ZV?PB52]-D1UP?CYV0?.T2[X_7"T(\ H!E'*
M'$G>^4!A;0SNH; VO@\`3MDO`V!!CP_at_NXO3T:Q^H%7<=G.+L4T&@SO&P^$#+
MN.L<`/WN"(T#P_<^(*^A?'N$SH$AB/,Y'-ILJ;LBP^'L.U9U/MBL8P]]#(]^
MAR%0$2.;*P!\QT+=$*/@]Z7%!8D"H")&P1'.'ACL,,]NED M"-';`.C8P"\^
M('::W?Y%H,&0UBT`^N0^E:BOP2@"H')\MID&H 7#+0$.==8L"HA9?*] YTLI
M.$1CW;)V4:!SO_at_X.T5G^K5T`L&[9;%OVDB=]T*\Y*G.4L:FF.H=.N\%#'_U+
M.["U`X"[W8WN5?P0`F!5M=U+@7/B##XA=M/^9QL8@(XSV@:FP#DP!I^(!D;J
MC'(0I,Q!)PCS:3CK> `%J683!4#%*:TC`?0I*/X`./S[N93J[1'$CPH$4>+
M:>VH>N,L9OT(@$^HX 3BQ^S:4?6.82PX_at_K@QWP;Y'#=MIAQ&$SOY$3SDT7J"
M<1- #YZ1!#CMV50#L$V^(U5/.4H#`#5X`Q+H.(3-50`;]F_at_S08&<D:NV00'H
MV(-M4 `V=:3M3ZH7]GCK!@`==2T(0_&[DZJUH#4$]R1NN V!F$&OP;I!@990
M^*T;`/!U%9R_at_L2I9.RC0.30'A^C^) >5)<FD6I5Z*=/!RFGV.U??YB#1H.>@
M\D-G.7CCZ^QMO[KZZ&WM[@-I9O-]!$#3-/P4Z&OP- (@;E2__S<`6%4_!P"J
M:O"%S"C^' `MJ"@$4%7?!?H:3*L`BIM&5)E&+P. LV9P"YPU7_MZS4&>$W#[
M%M4%,TSQ_at_3;CEG,`5-QR<()STOS!!]BY_at_A"?KZK_&*#NQ7_at_KB*'UHNJ<9*T7
M5>>KRZ;9H<L8B!C8'0)@9[-I!F!!#()/I!3E`8"L0?+/<'EW!7L4+\WNDP)
M3_at_C3VP"HNH5?`GW%/7WP`7&#^ZZBSC$O",(YYEDW*"!N*+Z?`;"W!5$00^A%
M6$,H((;05XTU!( RK?7N%.>H9PVAP-F[@KL\'T[6$<O>E]8-[=/&Z="EN\R^
M(U1G=[5A5!VCH$WW0Q[-9_8+-P#611LC`*R+MOL`6(-W#0!Q5'>;#_2*,]KF
M`V!%+@5?$,-TWU$`&.8_at_3C(*+GZZ`EB#<11 2<@EVX$`9!S3F_at_X`I\G@*LYI
MTD^F83I_KB=0_at_IF9`%^QUG0*-(Y3UG0`\(H-#G$.E-9S"HCGBE\_`?!Y9#S7
MYKWHB&>JZSG51Q?Q1T("['/O`@`3V:^!ON"0/_I FH.[)L#Z&>SQ?$"]"8!E
M<NLK]#PC']\&0,46?@F !1?QP0<*V_7+`*C3;10*VWEPE36AQ <W)1F?W=)
MH.,FB@^TV4MWJ_at_4C2W"$QM+S_at_P]TENC@(L\7D,WWO _^V['!O_EB#6HG=-ZA
M_?JAISEA_S9-`$1W")UW^"D`MNENA\,*S6T@!/@$_!P`6V1'!>3YTMWIG(!O
M=Z@,HLU"`!N::!!E<8K6K/<!P$'#6_at_E \^LN=9:D;WR_at_SBC]P2'.D<[6`P`-
M80ANNN(5&<3QG.ALT0.0)W?4H,X73A#GQHNP)4N!\XGSK0':/@AM>*9:NQWR
ML$OSLQD`1VN[10"<IZSA%. \96\:.DN>C2* -OG)"'V%X:P;%)!Y2Y,QV&)F
MD[>I`F"%X>P]*%#8Y&V^`VA1X06PH'#9A%>@L@?;A ? <2HXA22\5F:;\ `8
M29OQ"ISC5'!7DO')?:\2X!LFN,VV(N&"4)]O&)ORZY[,&[]@<U[U#3W8;O'0
MQQO#WR%T/B9M.@'8L$-[UPK0$O8>H%<,(L$6)>7UJFV/44!27J_:]A@`=?);
M#'0^(*RI%#@?$#97`"",-EVA\_T0Q+GX'0;JAA-:QRD_at_LU:ZO07QB]]AH/?)
M=POT[0L1:&GRRP[TBD0*0J2JM3/4#25E\H'.6>BG`, L9)S4Y4&P'2^/Q;42
M`1:M'WU '@[N'5,OZ(!O`V );I$`FO1'7Y=WP^+:F4"%EWX.@ 69%NRQS)-;
M=ZFS27\(`(R4+WW]G'6"(%3.G-\$0,<6/@4`9\Y??:!%[R\"'-W?!0"GG2!.
MY[0S^4!'H'\*]&@:ZF7?W,:J:/-9=>[0IK/JT5RL^C",3H0V2 `:FH^]20`+
MBHJ]* 42QP!_C](\O,9 =4'1^.P#IU^"WX_]`H!^L:D$@&&TF:* &*JY<S$!
MS@#O`X#CEK44`%:NX"+*BCB\]H%:<=?!*2K?>4&@3L\5'VA\Y^4`<$=*JGSG
M?>\#TB#R[1$Z&T 0Y]-Q-EOZGD<;!V?KN$,?CMGN?F!,6\7W'( -I[2>4T!Z
M3'#5`#ANV1X"H >C"H \N_<,M2 9_at_QWFC@W8RJB &&)VAV("#9:R^0Z_at_3WX'
M@;XBFVVZ*R#IGMWG!X&&>PC"(.FN]V#370%)=S_;H;,\!X=HK#PVX14X)Z+@
M$)T%W"8\`%8>FZ_K/JFL6_#Z4'TKP>L#^N(_/E1.\QP\/@B4X/%!H/F/#^IK
MU `42#EX?!!HP>.#P.H_/J#G'#P^"+1@]":P^(\/ZFOD: 6*7_:@EN#Q0:!%
M8RL`^-':3?5SH_at_M.H-\/`E39YJW7%&AL\]9L`-CF_at_Q.<;OS!!SBM!2$^>\=_
MGH%%*K9<[]:#UX?J:4[!ZX- ]5\?U)?@]0$@16](`ME_?5"OP>N#P!I,4P!R
M"EX?!*K_^J"^!J\/`)+,;NN_at_7H/7!X&.7'WM`Y+,_M. `)^!010JGX'%!R2?
MM7#G`"C!Y$V ->4''^C15$J I?=(Z#^_^C_0]Y/_96YD<W1R96%M"F5N9&]B
M:@HU(# @;V)J"C0Q,C@*96YD;V)J"C8@,"!O8FH*/#P*+U1Y<&4@+U!A9V4*
M+U!A<F5N=" S(# @4_at_HO365D:6%";W@@6S @," W.3(@-C$R70HO4F5S;W5R
M8V5S"CP\"B]0<F]C4V5T(%LO4$1&+U1E>'1="B]&;VYT"CP\"B]&,2 W(# @
M4_at_H^/@H^/@HO0V]N=&5N=',@-" P(%(*/CX*96YD;V)J"C<@,"!O8FH*/#P*
M+U1Y<&4@+T9O;G0*+U-U8G1Y<&4@+U1R=654>7!E"B].86UE("]&,0HO0F%S
M949O;G0@+T%R:6%L"B]&:7)S=$-H87(@,S(*+TQA<W1#:&%R(#(U-0HO5VED
M=&AS(%LR-S@@,C<X(#,U-2 U-38_at_-34V(#@X.2 V-C<@,3DQ(#,S,R S,S,@
M,S_at_Y(#4X-" R-S@@,S,S(#(W." R-S@*-34V(#4U-B U-38_at_-34V(#4U-B U
M-38_at_-34V(#4U-B U-38_at_-34V(#(W." R-S@@-3_at_T(#4X-" U.#0_at_-34V"C$P
M,34_at_-C8W(#8V-R W,C(@-S(R(#8V-R V,3$@-S<X(#<R,B R-S@@-3 P(#8V
M-R U-38_at_.#,S(#<R,B W-S@*-C8W(#<W." W,C(@-C8W(#8Q,2 W,C(@-C8W
M(#DT-" V-C<@-C8W(#8Q,2 R-S@@,C<X(#(W." T-CD_at_-34V"C,S,R U-38@
M-34V(#4P," U-38_at_-34V(#(W." U-38_at_-34V(#(R,B R,C(@-3 P(#(R,B X
M,S,@-34V(#4U-_at_HU-38@-34V(#,S,R U,# @,C<X(#4U-B U,# @-S(R(#4P
M," U,# @-3 P(#,S-" R-C @,S,T(#4X-" W-3 *.#8U(#4T,B R,C(@,S8U
M(#,S,R Q,# P(#4U-B U-38_at_-34V(#$P,# @,3 U-R S,S,@,3 Q," U.#,@
M.#4T(#<Q.0HU-38@,C(R(#(R,B S,S,@,S,S(#,U," U-38@,3 P," W-3 @
M,3 P," Y,#8@,S,S(#@Q,R T,S@@-34V(#4U,@HR-S@@-C,U(#4P," U,# @
M-34V(#0X.2 R-C @-34V(#8V-R W,S<@-S$Y(#4U-B U.#0@,S,S(#<S-R R
M-S@*-# P(#4T.2 R-S@@,C(R(#0Q,2 U-S8_at_-3,W(#(W." U-38@,3 W,R U
M,3 @-34V(#(R,B V-C<@-3 P(#(W. HV-C<@-C4V(#8V-R U-#(@-C<W(#8V
M-R Y,C,@-C T(#<Q.2 W,3D_at_-3@S(#8U-B X,S,@-S(R(#<W." W,3D*-C8W
M(#<R,B V,3$@-C,U(#<V," V-C<@-S0P(#8V-R Y,3<@.3,X(#<Y,B X.#4@
M-C4V(#<Q.2 Q,#$P(#<R,@HU-38_at_-3<S(#4S,2 S-C4_at_-3@S(#4U-B V-CD@
M-#4X(#4U.2 U-3D_at_-#,X(#4X,R V.#@@-34R(#4U-B U-#(*-34V(#4P," T
M-3@@-3 P(#@R,R U,# @-3<S(#4R,2 X,#(@.#(S(#8R-2 W,3D_at_-3(Q(#4Q
M," W-3 @-30R70HO16YC;V1I;F<@+U=I;D%N<VE%;F-O9&EN9PHO1F]N=$1E
M<V-R:7!T;W(@." P(%(*/CX*96YD;V)J"C@@,"!O8FH*/#P*+U1Y<&4@+T9O
M;G1$97-C<FEP=&]R"B]&;VYT3F%M92 O07)I86P*+T9L86=S(#,R"B]&;VYT
M0D)O>"!;+38V-2 M,S(U(#(P,C@@,3 P-ET*+U-T96U6(#DU"B])=&%L:6-!
M;F=L92 P"B]#87!(96EG:'0_at_.3 U"B]!<V-E;G0_at_.3 U"B]$97-C96YT("TR
M,3(*/CX*96YD;V)J"C,@,"!O8FH*/#P*+U1Y<&4@+U!A9V5S"B]#;W5N=" Q
M"B]+:61S(%LV(# @4ET*/CX*96YD;V)J"C(@,"!O8FH*/#P*+U1Y<&4@+T-A
M=&%L;V<*+U!A9V5S(#,@,"!2"B]6:65W97)0<F5F97)E;F-E<R Y(# @4_at_H^
M/@IE;F1O8FH*.2 P(&]B:@H\/ HO5'EP92 O5FEE=V5R4')E9F5R96YC97,*
M/CX*96YD;V)J"GAR968*," Q, HP,# P,# P,# P(#8U-3,U(&8-"C P,# P
M,# P,38@,# P,# @;@T*,# P,# P-3_at_W-2 P,# P,"!N#0HP,# P,# U.#$X
M(# P,# P(&X-"C P,# P,# R,3 @,# P,# @;@T*,# P,# P-#0Q,B P,# P
M,"!N#0HP,# P,# T-#,R(# P,# P(&X-"C P,# P,#0U-SD@,# P,# @;@T*
M,# P,# P-38U," P,# P,"!N#0HP,# P,# U.30Y(# P,# P(&X-"G1R86EL
M97(*/#P*+U-I>F4@,3 *+TEN9F\@,2 P(%(*+U)O;W0@,B P(%(*+TE$(%L\
M.3%&049!-$0P-T,X1C%%-C4V0S!".$$Q-T)!0C9&,3,^/#DQ1D%&031$,#=#
M.$8Q138U-D,P0CA!,3="04(V1C$S/ET*/CX*<W1A<G1X<F5F"C4Y.34*)25%
#3T8*
`
end


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk