Benchmark of new VM

php.internals

Andi Gutmans

21 years ago
Hi, Take it at face value but I get the following results with the new VM vs. 5.0.x on the bench.php script I commited to php5/Zend/tests. PHP 5.0.x PHP 5.1.x 37.5secs vs 29secs You know I'm not a big believer in synthetic benchmarks but it's still quite nice. Andi

Thies C. Arntzen

21 years ago
On 2004-09-24 01:42:48 +0200, Andi Gutmans <andi@zend.com> said:
> Hi, > > Take it at face value but I get the following results with the new VM > vs. 5.0.x on the bench.php script I commited to php5/Zend/tests. > > PHP 5.0.x PHP 5.1.x > 37.5secs vs 29secs > > You know I'm not a big believer in synthetic benchmarks but it's still > quite nice. > > Andi
on my box: 5.0.x 45,3 5.1.x 36.1 4.3.x(*) 27.1 i just could not resist... re, tc *with fasterharderstronger patch

Andi Gutmans

21 years ago
Hi Thies, I'll see which parts of your patch can be adapted for 5.1.x. I think the var lookup is probably the most substantial one but I will probably implement it slightly different. I'll mail internals@ when I have something. As I mailed you, I tried the zval_copy_ctor() and zval_dtor() optimization of yours but didn't get any improvement. Can you try and run the patch I sent you to see if you get different results? I'm also attaching it again, in case others want to see if it changes anything. Andi At 06:36 PM 9/25/2004 +0200, Thies C. Arntzen wrote:

Thies C . Arntzen

21 years ago
On 2004-09-26 03:05:18 +0200, Andi Gutmans <andi@zend.com> said:
> I'll see which parts of your patch can be adapted for 5.1.x. I think > the var lookup is probably the most substantial one but I will probably > implement it slightly different. I'll mail internals@ when I have > something.
this needs to get fixed in the compiler. (which sterling and i didn't want to touch) to make things good - we should always fetch the same variable into the same register (in the compiler). that way we could check if the register is already "loaded" and only fetch from the symbol-table if not. unless i'm missing something this should be relativly easy and it would work better (gain us more speed) than the hack sterly and i did. for real register-reuse we would have to do some basic flow-analysis, which i believe is too much science for PHP... re, tc

Thies C. Arntzen

21 years ago
On 2004-09-26 15:46:06 +0200, Thies C. Arntzen <thies@thieso.net> said:
> On 2004-09-26 03:05:18 +0200, Andi Gutmans <andi@zend.com> said: > >> I'll see which parts of your patch can be adapted for 5.1.x. I think >> the var lookup is probably the most substantial one but I will probably >> implement it slightly different. I'll mail internals@ when I have >> something. > > this needs to get fixed in the compiler. (which sterling and i didn't > want to touch) > > to make things good - we should always fetch the same variable into the > same register (in the compiler). that way we could check if the > register is already "loaded" and only fetch from the symbol-table if > not. unless i'm missing something this should be relativly easy and it > would work better (gain us more speed) than the hack sterly and i did. > > for real register-reuse we would have to do some basic flow-analysis, > which i believe is too much science for PHP... > > re, > tc
here we go - the worst hack ever (against php4 as i don't fully understand the new executor) (currently no support for functions calls;-) what it does: it remembers simple variable-fetches in the compiler and always fetches the same var into the same register. (hackish as i added a new field to the zend_op). in the executor we cache those lookups into a global array (hence no functioan call support) called "tubu". what are the benefits? - we save on temps as the same var is always fetches into the same temp - we save a most hash-lookups for simple var acesses (loops etc) is this the way to go andi? tc begin 644 worst_hack_ever.txt.bz2 M0EIH.3%!62936?Q\S`8``V_?@$`P>7__^__OWUJ_[]_Z8`?_>%IIH&A6@T`` M``+"4U")J:#U`VB-!HT&F:09`T#0:`T](,<`PC":8A@$`R`&$:9,F$8"&AP# M",)IB&`0#(`81IDR81@(:#3TD$D])/4>4](,@:>H:-&3":````,AP#",)IB& M`0#(`81IDR81@(:"1(("9!-,F@!-#11^BFTAZC:>E'BCU&C;4U&D"8L1&1RR MD,K,:DG)1`-J414/[?!-LK02K9LD0A,"6Q2FVG!HHTIHVF@;@(!3+D&P4\JR M"%2FV2I9-*,5"&)"(5Q+F%0J5G1SY!TBUF"!0(G!J[<(NTG9H@?7ZW4VJ^3= MRJ5B1GS@`>^GYTYE=]#4U\*76XEJUZ]?V"J7*`;6A$#2&)IBX"P^+4T?3?J[ M0MISL54@FK0LO:#*G&WNX*/L4CR*(?,W&M]-,5IYTY=R#R#,/(.L,=876R7Z MA`H/OQ)5/VWOKB?'RQ*04FR%O(7/OFCW7;X6YQB9"I"GF,+/0YBK#-7BU;#; M;8W.=<#[\='Y):UM.*B5EF',[`XH1=*U`[LXVULD7=I`O7N[-WFT;[=<@SPC MTL(DI>=,"H/TM_@*$QBVZE;CTE/$F''5_7VHJ,<X(L"(7Y4+56#E$"C3::(+ M,[306V/X<<I+%3?(*QGPL*,X-BT$F1V/(A:[,K])*SPU2U5?R^LW,OV6>_6; M>9H7.02D+J$(]8#19)!Q'I)9Z"-$O=QT.0^%'QR&KZ6P62F2O4EX?B>JX[XX M/U2)TE3A;W^8>T1[`&'&@.S5L;8P:;&DT,8$@6A?P6A8J0M"S3334+G_`N$- M(9M&VV_M$8KL9(7Q)*X&(FF*Q'XC1=U=GAV,.(.((6]IM-I[`->W.J-NU5`- MP*J2O%N.*A$2IXA!-UW:ZT\ZB3JLU]+;;;;XO^Y7-RH:#XJ`@Q3--,*&B!U+ M$$!2@%USQ*J4(TWNW0&6)U+&V]889(PR#25&7@3)88#4*2:=E*I9E]_<3+30 MD]))6V6-Q5%Z+:Z+B*1.DQT<U;;Y^</N%@7#,>[2&,6>9>?JC=ZZ:IF]R++I M>EZ<FW7412S'5E[55<-'+BZQ?=S3<%AKWFG5[!'N%#!B"8T=X2`HP;Y4D#"2 M_(0400@^ARMBH8W+@8Y"/L7X09&1_2QX-.FZ@I%(LA*SJ`FS-Y\-/'!Y!I_X M$M*VF(8U%H;:(E`4%D8(TFX*&0>\+S:'C@C[(H8(PL#['&>Z:OP%B8',,PR# M,V(D5"+=2HC+67''B&D;625Y^MH8DCE**?B*),^#6170&A\"%B7JP/(?4#!> M*]H_W!WO%+S!Y!M,#H*&]Z#UW>U$>(AY^@I[(HQH_2L>U;32;:O@N"81@G"R M%L!KVN'%2"`A8*R!.LFT`Y#NPK\YJ[<K%(/I9@,9:X/D#5$'S;V"80VB]G8' M08[$EFQ??[I0E($:\BX":`SA0@5R-@8\HK$;#ZW!=GW>R]&]+KY`1L5BD'N` MXZP0%G%K]&@#!6\V5@<+4C`"^T,=&X1D*X$M3$;!H1.\,+BY9"K]QAGX!!JQ MO,M'+-0EH1Q$G`9NE+BL2+H"BLA.@5L:)#28$ZMMMML-SS$T.E)#(A4'NL@E M"X!1()_,1?M$Q@&>I.EPAK)G>@/_($3ORNFNU*`L;F1<Q!XH6E*$+D!A<L@J MD95J@8;U/D]^_FYE2U%P04B#<,BP<26*&AM&A3%-MV0E-6@=31RB($W-)PK; M4MJ,A0'0!^VM$N01L`;U8\72IK<D!S!;45^!SN-NH-):'M4[TNC8CRM"T&MJ MY1(XU!D>82W,X"31OE(IPX*04$!IT[6,6/(E*6,TKE`@O4DI>=0((8Q:3-(@ M&&ID+?D16)""1<2"$A+V!0DA!OSYKII%G7,)@32G8`]V@U(-,D37`6Y32+15 M@#8K>$#&T9$(>Z2RZ6=(V?HBL=$,FP.)DBMZY0K`0'AW'1N-J7:0/:=,A)C1 M#4D/FZ4*))%\"`@+`_CHXQ)<8S/F0P+6-@B!K\P@(&*V<@8=2.RGF%!N?R6/ M")<A+D+O<&W?,YP#U!B2+FS<PS$:@U.^22'Q2F$PZ?WZJ;8E'7`F'@R"4WA. MUC2(+^T,`EN>V85M<)L+#N`KRBK.D"#9)8V8C%52B<U`TAB9(G*`BJ%<KK!4 M$;+G%EB6NU@>E97N\.^NP+#B#A;(LY%B&X$LA,600N@-.>K#18!Q8C:9-1T! M(Y0&A=8<FP.3D$8S'I$'3GC:9]K$;S^@:^]5;-*80E`K6E<MD(D!HXJ2:H!( MEN"X"@5KM#3JJD&0M@$UDA=9:P!(%S)XDH$/&*$)BDRP*-=1,*&H%N-.RB[D (BG"A(?CYF`P` ` end

Wez Furlong

21 years ago
The script gets nuked when buildconf is run (since it matches *.php in the .cvsignore file). Not sure how to fix that :-) --Wez. On Thu, 23 Sep 2004 16:42:48 -0700, Andi Gutmans <andi@zend.com> wrote: