Obsolete:Hydra
- 2006/04/17: This machine has been returned to Sun while they work out what makes PHP so slow.
A Sun Fire T2000, 6-core 1.0GHz UltraSPARC T1, 8GB RAM. It's on evaluation; not ours yet. IP 10.0.0.201. Runs Solaris 10.
ALOM: connect to port 'hydra' on the SCS. Type #. to enter the ALOM console, 'console' from there to enter the system console. From Solaris type ESC-B to enter the openboot prompt. Type 'go' to get back to Solaris.
Useful ALOM commands at the sc> prompt:
poweron poweroff powercycle
It has two drives with all FSs mirrored. If the primary drive fails then 'boot backup_root' from the prom (it should do this automatically).
Don't use GCC to compile things here (it's slow on SPARC). Use cc (or CC for C++) in /opt/SUNWspro/bin.
Kate's benchmark
threads | req/s (Hydra) | time/req (Hydra) | req/s (srv54) | time/req (srv54) |
1 | 2.34 | 455 ms | 9.38 | 100ms |
2 | 4.84 | 208 ms | 17.84 | 54 ms |
4 | 8.87 | 130 ms | 25.05 | 37ms |
6 | 13.7 | 71 ms | 29.05 | 33 ms |
8 | 16.5 | 59 ms | 27.45 | 40 ms |
12 | 20.32 | 47 ms | 29.27 | 33 ms |
16 | 19.98 | 48 ms | 29.79 | 33 ms |
24 | 19.29 | 53 ms | 29.16 | 33 ms |
Tim's benchmark
String concatenation
Task was this:
<?php $n = 1000; $c = 1000; for ($i=0; $i<$n; $i++) { $s = ''; for ($j=0; $j<$c; $j++) { $s .= ' '; } } ?>
Executed 48 times, rounded down to the nearest multiple of the number of threads. Time shown below is the wall time divided by the number of runs.
Rescaled y-axis:
Data cache misses
Is it possible the task above had a small working size, and thus not many stalls for the strand-based execution model to take advantage of? I measured data cache miss rate directly.
Method
Three benchmarks were used: the above string concatenation test, the following string search test:
<?php $size = 10000000; $iterations = 100; $s = str_repeat( ' ', $size ); for ( $i = 0; $i < $iterations; $i++) { strpos( $s, 'hello' ); } ?>
and this random access test:
<?php $size = 1000000; $iterations = 1000000; $s = str_repeat( ' ', $size ); for ( $i = 0; $i < $iterations; $i++) { $p = mt_rand(0, $size - 1 ); $x = $s[$p]; } ?>
I ran each benchmark continuously in 48 threads. I took one sample of the data cache miss rate per second. I calculated the average and standard error of these samples.
Results
Data cache miss rate was:
- string concatenation: (8.3 ± 0.1)%
- string search: (3.11 ± 0.01)%
- random access: (9.019 ± 0.002)%
Conclusion
Tight PHP loops give a high data cache miss rate. The low miss rate for strpos() suggests that there is a lookahead mechanism.