Why echo is slow in PHP and how to make it really fast

You may have noticed that PHP scripts that echo a lot of content appear to be running with poor performance…

Well, the operative word here is “appear". It is a common misconception that “echo is the slowest PHP command"! :p

The problem is actually just a bandwidth issue! When you try to pump a lot of content though the Internet, at some point you experience “load time"… and at some point PHP actually experiences “send time"!

You may measure the execution time between the begining and the end of your script, and, on a slow connection, it may show you that it took 500 ms to execute. You may even narrow it down to a single echo statement that takes 480 ms to execute. But that time actually includes wait time where PHP cannot send any more data back to apache!

There is a common trick that consists of starting output befering before echoing, like this:

PHP

ob_start(); 
echo $a_lot_of_content;

This will allow PHP to move on and appear to terminate fast. But the truth is, all the content is now in PHP’s output buffer, and although your script is done, PHP is still working in the background to send all that data to your web server (apache for instance).

Full story »

How to log request processing times in Apache

If you have an apache (2) web server, you probably have an access.log file showing you all kinds of data using the “combined” log format. Let’s see how to include processing time into that log file.

By default a line in the combined log looks like this:

[codeblock lang="” line="1″]10.0.209.80 - - [03/Dec/2009:03:20:47 +0100] “GET /info-tech/ HTTP/1.1″ 200 46482 “http://fplanque.com/info-tech/” “Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5″[/codeblock]

Notice the 2 dashes - - just after the IP. The first one stands for “I could not identify the user using ident” and the second one for “no user authentication was performed".

Now, let’s face it: you will never identify anyone using ident. Your apache conf probably even doesn’t try. That field is a left over from ancient times. So let’s replace that first dash with something useful, i-e: the processing time of the request! Note that by doing this we keep the global structure of the file identical and any log processing tool you might be using should not be affected.

Full story »

How to install the APC PHP Cache on Debian (Lenny or Squeeze)

APC PHP Cache Control Panel
The APC PHP Cache Control Panel

The APC cache can significantly improve your PHP script performance, just by installing it, which basically takes 5 minutes! (Plus, it’s actually supported by the core PHP developers and will probably be integrated into PHP6…)

Here’s what I did on my Debian Lenny box…

First you may want to have a reference benchmark to see if it actually improves:

Code

ab -c5 -n100 http://www.yoursite.com/yourscript.php

Now install the APC package:

Code

aptitude install php-apc

Now, restart apache:

Code

/etc/init.d/apache2 restart

Now, you can run your benchmark again and see the difference! Tada! :)

Full story »

Make your mouse faster on Mac OS X

Make your mouse faster on Mac OS X

There’s 2 problems to mouse speed:

The maximum speed can be set through the System preferences panel, but even when the slider is all the way to the right, the speed may be too slow… especially if you line up 3 monitors side by side.

You can get faster speeds through the Applications > Utilities > Terminal. To see the current setting, type in this:

[codespan]defaults read -g com.apple.mouse.scaling[/codespan]

To make the mouse faster, set a different value, for example:

[codespan]defaults write -g com.apple.mouse.scaling 6[/codespan]

How to control fan speed & noise on the mac pro

How to control fan speed & noise on the mac pro

Did you know there were actually 5 different fans inside a Mac Pro (early 2009 version)? They are named Intake, Exhaust, BoostA, PCI and Power Supply! By default, all of them turn pretty slowly; in the 600 to 850 rpm range! Which makes the whole thing pretty silent… yet… anoying because of the complexity of the sound (yes, it’s 5 different spining motor sounds combined, not to mention the hard drive spinning!)

You can monitor that with iStat menus – which is very cool for monitoring a lot of things, except voltages & power consumption which do not seem to work, at least on the Mac pro 2009.

Now my problem is I’d like all these fans to run faster! Yes, faster! Not because I want some extra fan noise, but because I believe Uncle Steve pushed it too far when he asked his engineers to reduce the fan noise! I wouldn’t mind the noise to be a little bit higher pitched than it currently is.

I first tried FanControl from Lobotomo Software. BEWARE: it’s a pain to uninstall (unsinstall instrutions on their page). Because it’s designed for the macbook pro (yes, the laptop), it only controls 2 of the 5 fans and the minimum speed it allows is 1000 rpms. Up from 600 rpm, that is too much! I wish I could run every fan at 850 rpm!

Then I found smcFanControl from eidac. That one has the advantage of allowing settings for all 5 fans on the mac pro. However, again two of them cannot be set lower than 1000 rpm. Worse: it doesn’t actually do anything on the mac pro. It probably works on other apple computers but on the mac pro 2009 it has absolutely no effect on fan speed. :’(

From what I undrestand the fans are controlled by a chip called “SMC” as in “System Management Controller” and apple doesn’t give you much control over it, apart from a clunky procedure to reset it! Note: resetting the SMC allowed me to get back to original rpms for all fans after FanControl had messed them up. Resetting teh SMC also seems to have reduced the tempearture of the air mesured at the exhaust – at equivalent fan speeds and system load (that is: idle!). Strange…

If any of you knows a way to effectively control fan speed on the mac pro, please let me know.

I’d be up for some watercooling too :)