While debugging a flib test that times out due to bad
compile-time behavior, I fixed several small sources of bad perf
before giving up on trying to just make things fast enough. Most of
these came from profiling while the flib test repeatedly compiled a
tracelet with close to 100k SSATmps (it keeps side-exiting and
recompiling).
Details:
- Waiting until codegen for punting on DefCns made some tracelets
take really long to compile (when they just consist of a bunch of
DefCnses).
- In LinearScan::collectInfo, m_jmps.reset() was the top of the
profiler (since we do it for each exit trace), and from talking
with @swtaarrs it seems like it can be just omitted.
- dce.cpp consumeIncRef was trying to memoize in a way that involved
creating hphp_hash_sets for each SSATmp; removed that. (Someone
should double-check I didn't break the algorithm if possible
because I didn't quite spend the time to 100% understand it.)
- dce creates a new StateVector<SSATmp,SSATmp*> for each exit trace
when sinking. Since the tracelet in question had a side exit for
about 1/3rd of the HHBC ops, this was kinda bad. It's also pretty
sparse, so I just changed it to a smart::flat_map.
- Convert WorkList from std::list to smart::list. (Should maybe be
smart::deque but I didn't want to test fixing the remove() call.)
HipHop VM for PHP 
HipHop VM (HHVM) is a new open-source virtual machine designed for executing programs written in PHP. HHVM uses a just-in-time compilation approach to achieve superior performance while maintaining the flexibility that PHP developers are accustomed to. HipHop VM (and before it HPHPc) has realized > 5x increase in throughput for Facebook compared with Zend PHP 5.2.
HipHop is most commonly run as a standalone server, replacing both Apache and modphp.
Installing
You can install a prebuilt package or compile from source.
Running
You can run standalone programs just by passing them to hhvm: hhvm my_script.php.
HipHop bundles in a webserver. So if you want to run on port 80 in the current directory:
sudo hhvm -m server
For anything more complicated, you'll want to make a config.hdf and run sudo hhvm -m server -c config.hdf.
Contributing
We'd love to have your help in making HipHop better. If you run into problems, please open an issue, or better yet, fork us and send a pull request. Join us on #hhvm on freenode.
If you want to help but don't know where to start, try fixing some of the Zend tests that don't pass. You can run them with hphp/test/run. When they work, move them to zend/good and send a pull request.
Before changes can be accepted a Contributors Licensing Agreement (pdf - print, sign, scan, link) must be signed.
Licence
HipHop VM is licensed under the PHP and Zend licenses except as otherwise noted.