phpBB Benchmark Results (Apache 2.0.54) - NET Technologies

tunisianbromidrosisInternet και Εφαρμογές Web

5 Φεβ 2013 (πριν από 4 χρόνια και 6 μήνες)

335 εμφανίσεις

www.php
-
compiler.net

Jan Benda


Martin Maly

Tom
as Matousek


Ladislav Prosek

Pavel Novak

Vaclav Novak


Tomas Matousek

Department of Software Engineering

Faculty of Mathematics and Physics

Charles University in Prague

Czech Republic

www.php
-
compiler.net

Tomas Matousek, .NET Technologies, 5/30/2006

Outline


Introduction to the Phalanger System


main features and goals



Why PHP on .NET

Framework?


Performance benchmarks



Interesting Issues


inclusions, local variables optimization, multi
-
version types/functions


accessing .NET objects, adding fields on .NET objects at run
-
time


using PHP native libraries



Future Work: Phalanger 2.0


PHP/CLR


extending PHP to the first
-
class .NET language


Support for Mono Platform

www.php
-
compiler.net

Tomas Matousek, .NET Technologies, 5/30/2006

Phalanger


Extends the family of .NET languages with PHP versions 4, 5, and 6


introduces language extensions for using .NET types (PHP/CLR)



Makes it possible to run existing PHP applications on ASP.NET web server


Significant performance improvement


Higher reliability of the web server


Better configurability


More errors revealed by the compilation


Source
-
free application deployment



Brings virtually all PHP libraries to .NET Framework


migration from PHP interpreter is simple in practice without additional costs



Enriches both worlds


PHP applications with the functionality of the .NET platform


.NET applications with a possibility to use a popular dynamic language



Integrates PHP with Visual Studio .NET

www.php
-
compiler.net

Tomas Matousek, .NET Technologies, 5/30/2006

PHP Sample

include

"a.php";


class

C
extends

D
implements

I, J

{


public function

m($a, $b = 1, $c =
array
(3,2,1))


{


$f = "sort";


$
f
($
c
);



$x = "b";


if

($
$x
) {
function

f() {
echo

"version 1"; } }



else

{
function

f() {
echo

"version
2
"; } }


f();



eval
('
$a++;
');


}




private

$d;




function

__get
($field_name) {
return

$d
-
>
$field_name; }


function __set
($field_name, $value) {

$d
-
>
$field_name = $value; }

}

www.php
-
compiler.net

Tomas Matousek, .NET Technologies, 5/30/2006

Micro
-
benchmarks

0,000
0,200
0,400
0,600
0,800
1,000
1,200
1,400
1,600
1,800
Empty loop
A::$x read
A::$x write
A::$$x read
A::$$x write
$x->a read
$x->a write
$x->$a read
$x->$a write
$x->a read (undeclared)
$x->a write (undeclared)
$x->$a read (undeclared)
$x->$a write (undeclared)
A::m()
A::$m()
$x->f()
$x->$f()
$x++
$x . $y
$x[0] read
$x[0] write
$x["str"] read
$x["str"] write
new A (no ctor)
new A (empty ctor)
time [microseconds]
PHP
Phalanger 1.0
Phalanger 2.0


each operation performed 10M times in a loop; machine: Pentium M Dothan 1.8GHz/2MB cache



the lesser the better

www.php
-
compiler.net

Tomas Matousek, .NET Technologies, 5/30/2006

phpBB Benchmark Results

(Apache 2.0.54)

0
2
4
6
8
10
12
14
Phalanger managed MSSQL
Phalanger native MSSQL (collocated)
Phalanger native MSSQL (isolated)
PHP 4.3.11 MSSQL Zend Optimizer
PHP 5.0.4 MSSQL Zend Optimizer
PHP 4.3.11 MSSQL
PHP 5.0.4 MSSQL
Phalanger native MySQL (collocated)
Phalanger native MySQL (isolated)
PHP 4.3.11 MySQL Zend Optimizer
PHP 5.0.4 MySQL Zend Optimizer
PHP 4.3.11 MySQL
PHP 5.0.4 MySQL
requests per second

MSDE 2000 SP3



MySQL 4.1.11



Phalanger

1.0


PHP + Zend Optimizer

PHP

the greater the better

www.php
-
compiler.net

Tomas Matousek, .NET Technologies, 5/30/2006

Major Issues


missing specification


“correctness” criteria: existing applications should work well without
modifications



inclusions


standard PHP mode


inclusions similar to C language; the included file needn’t to be known at compile
-
time


pure mode (since Phalanger 2.0)


C# like project


unconditional declarations visible in all files comprising the project



multi
-
version and compile
-
time unknown types/functions


classes and functions can be declared conditionally in multiple versions


classes and functions can be generated at run
-
time


class can extend/implement compile
-
time unknown class/interface



local variables optimization


creating a hash table for each call is expensive and unnecessary


compile
-
time known variables can be stored in CLR locals in majority cases


www.php
-
compiler.net

Tomas Matousek, .NET Technologies, 5/30/2006

Using PHP Native Extensions


a necessity for a seamless migration from PHP interpreter



PHP


Many functions and classes implemented in PHP extensions


php_imap.dll, php_pdf.dll, php_sockets.dll, php_gtk.dll, …


PHP interpreter exposes so called Zend API to extensions (php4ts.dll)



Phalanger


Makes the functionality in PHP extensions available for any .NET app.


managed wrappers


encapsulates and shields out native implementation


Extension Manager


emulates the PHP interpreter environment (Zend API)


within the application process using the extension or


in a separate process, isolating untrustworthy extensions

Extension
Wrapper

C++/CLI

php4ts.dll

Mixed Code

php_imap.dll

php_pdf.dll



Zend API

Application
(PHP, C#, …)

optional process boundary
bridged by .NET Remoting via
Shared Memory Channel

Native Code

Managed Code

Extension
Manager

www.php
-
compiler.net

Tomas Matousek, .NET Technologies, 5/30/2006

Managed Wrappers


Assemblies generated automatically from native extensions and optional
type information in XML format

...

<
function

returnType
="int"
name
="socket_write"

>


<
param

type
="resource"
name
="socket" />


<
param

type
="string"
name
="buf" />


<
param

optional
="true"
type
="int"
name
="length" />

</
function
>

...

php_sockets.xml

...

PHP_FUNCTION(socket_write)

{


zend_parse_parameters(...);



ZEND_FETCH_RESOURCE(...);



// ...



RETURN_LONG(...);

}

...

php_sockets.dll

.method public hidebysig static

int32 socket_write(


class

[PhpNetCore]PHP.Core.PhpResource socket,


string

buf,


int32

length)
cil managed

{


.custom instance void


PhpNetCore]PHP.Core.ImplementsFunctionAttribute ...


// ...


call object


[PhpNetCore]PHP.Core.Externals::InvokeFunction(...)


// ...


ret

}


.method public hidebysig static

int32 socket_write(


class

[PhpNetCore]PHP.Core.PhpResource socket,


string

buf)
cil managed

{


.custom instance void


PhpNetCore]PHP.Core.ImplementsFunctionAttribute ...


// ...


call object


[PhpNetCore]PHP.Core.Externals::InvokeFunction(...)


// ...


ret

}

php_sockets.mng.dll

www.php
-
compiler.net

Tomas Matousek, .NET Technologies, 5/30/2006

Summary & Future Work


Phalanger 1.0


goal achieved: to make existing application working under .NET


much better performance in practice


final version available for download



Phalanger 2.0, PHP/CLR


Make PHP a first
-
class language for .NET


extensions to the language enabling PHP programs to work directly with
.NET types, methods, delegates, events, generics, …


extending .NET classes, overload resolution, run
-
time fields addition, …


multi
-
threading


support for Language Integrated Query (LINQ)


minimize necessary language modifications


keep the dynamic nature of the language


e.g. run
-
time specified generic type arguments, etc.


ASP.NET Controls in PHP etc.

www.php
-
compiler.net

Tomas Matousek, .NET Technologies, 5/30/2006

Related Work


Dynamic languages on .NET


IronPython


Python is a bit more dynamic


e.g. replacing methods at run
-
time


less optimizations possible


PyStone benchmark


overall improvement by factor 1.84


micro
-
benchmark results range from 10x faster to 10x slower


Ruby, Perl, JScript, …



PHP compilers


Resin Quercus


PHP to Java translation, compilation to JVM byte
-
code


Roadsend Compiler


PHP to C translation, compilation to native code

www.php
-
compiler.net

Tomas Matousek, .NET Technologies, 5/30/2006




Q & A