Ubuntu和Macports版本的PHP之间存在奇怪的性能差异

时间:2010-10-13 08:28:27

标签: php

在对个人宠物项目进行一些分析之后,我正在玩一些愚蠢的微观优化。它在很大程度上是一个实验,所以我正在调整的东西实际上并不需要调整。尽管如此,这仍然是一项有趣的练习。

无论如何,我在OS X上通过Macports安装PHP 5.3和在apt上安装Ubuntu时遇到了奇怪的性能差异。

以下代码似乎显示了OS X上两个不同版本之间的巨大速度差异,但在Ubuntu上只有极小的速度差异。

$x = array(9);

// As per BarsMonster's comment, this ensures it runs for more
// than a second in order to avoid possible kernel scheduler differences
$count = 10000000;
$s = microtime(true);
for ($i=0;$i<$count;$i++) {
    $q = is_string($x);
}
var_dump(microtime(true)-$s);

$s = microtime(true);
for ($i=0;$i<$count;$i++) {
    // This is obviously only useful if you'll never need a string 
    // with 'Array' in it here
    $q = (string)$x!='Array';
}
var_dump(microtime(true)-$s);

在OS X上运行时的输出:

float(17.977133989334)
float(4.2555270195007)

在Ubuntu上运行时的输出:

float(5.2112979888916)
float(3.4337821006775)

看到被黑客攻击的版本的数字非常相似并不令我感到惊讶,但是is_string方法却截然不同。

我可以将此归因于什么?如果从简单类型测试功能的安装到安装的性能变化很大,我如何使用与我的目标部署平台不匹配的操作系统信任分析结果?

在Ubuntu和OS X上打开或关闭APC的时间没有区别。

2 个答案:

答案 0 :(得分:1)

Ubuntu安装与OS X安装在同一台PC上?

这可能与zts有关。

尝试在两个系统上使用相同的标志自行配置。 默认情况下,在ubuntu上可能启用了选项,这些选项在端口中默认禁用。

我不确切知道哪个,但你的phpinfo()会告诉我。如果没有(也许phpinfo没有显示,也许它只是显示一个空白页面;那么你的系统之一可能正在编译Susoshin补丁(或其他)。

答案 1 :(得分:0)

  1. 请测试1秒钟的最小值,在0.1秒的时间范围内内核调度程序差异(以及其他几十个原因)可能会影响您的结果。

  2. 检查您是否意外安装了任何加速器(APC,eAccelerator,e.t.c) - 只需比较两个实例中的phpinfo(),您就会看到。