Summary: Switch both Transport::write() overloads (ByteRange and IOBufQueue) to use writeChain instead of writev/write. This enables the zero-copy (MSG_ZEROCOPY) code path in AsyncSocket::writeChainImpl, which checks zeroCopyEnabled_, isManaged(), and the enable threshold before adding MSG_ZEROCOPY to individual writes. The old writev/write path bypassed writeChainImpl entirely, so zero-copy decisions were never evaluated even when zero copy was enabled on the socket. For the IOBufQueue overload, this also avoids an intermediate std::vector<iovec> allocation from getIov(). For the ByteRange overload, wrapBuffer creates an unmanaged IOBuf so isManaged() returns false, meaning MSG_ZEROCOPY won't be added (which is correct since ByteRange data may point at stack memory). Reviewed By: dmm-fb Differential Revision: D96616945 fbshipit-source-id: 5a53269db20b8f3a0ae53d71530a2ee879a0de4e |
||
|---|---|---|
| .devcontainer | ||
| .github | ||
| build | ||
| ci | ||
| CMake | ||
| hphp | ||
| third-party | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| clang.code-workspace | ||
| clippy.toml | ||
| CMakeLists.txt | ||
| CODE_OF_CONDUCT.md | ||
| configure | ||
| CONTRIBUTING.md | ||
| default.nix | ||
| flake.lock | ||
| flake.nix | ||
| gpg-key.kms-ciphertext | ||
| hhvm.code-workspace | ||
| hhvm.nix | ||
| LICENSE.PHP | ||
| LICENSE.ZEND | ||
| main-repo-push-key.kms-ciphertext | ||
| README.md | ||
| rustfmt.toml | ||
| SECURITY.md | ||
| shell.nix | ||
| shell_clang.nix | ||
HHVM
HHVM page | HHVM documentation | Hacklang page | General group | Dev group | Twitter
HHVM is an open-source virtual machine designed for executing programs written in Hack. HHVM uses a just-in-time (JIT) compilation approach to achieve superior performance while maintaining amazing development flexibility.
HHVM should be used together with a webserver like the built in, easy to deploy Proxygen, or a FastCGI-based webserver on top of nginx or Apache.
Installing
If you're new, try our getting started guide.
You can install a prebuilt package or compile from source.
Running
You can run standalone programs just by passing them to hhvm: hhvm example.hack.
If you want to host a website:
- Install your favorite webserver. Proxygen is built into HHVM, fast and easy to deploy.
- Install our package
- Start your webserver
- Run
sudo /etc/init.d/hhvm start - Visit your site at
http://.../main.hack
Our getting started guide provides a slightly more detailed introduction as well as links to more information.
Contributing
We'd love to have your help in making HHVM better. If you're interested, please read our guide to contributing.
License
HHVM is licensed under the PHP and Zend licenses except as otherwise noted.
The Hack typechecker is licensed under the MIT License except as otherwise noted.
The Hack Standard Library is licensed under the MIT License except as otherwise noted.
Reporting Crashes
See Reporting Crashes for helpful tips on how to report crashes in an actionable manner.
Security
For information on reporting security vulnerabilities in HHVM, see SECURITY.md.
FAQ
Our user FAQ has answers to many common questions about HHVM, from general questions to questions geared towards those that want to use.
There is also a FAQ for contributors to HHVM.