A virtual machine for executing programs written in Hack. https://hhvm.com
Find a file
Rahul Dutta b43c056186 Use writeChain instead of writev in Transport::write to have zerocopy support
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
2026-03-17 22:17:57 -07:00
.devcontainer
.github Upgrade GitHub Actions for Node 24 compatibility (#9692) 2026-01-07 02:58:16 -08:00
build Add tmate SSH debugging to generated GitHub Actions workflows 2026-03-17 11:38:30 -07:00
ci Find and link libsystemd (#9706) 2026-02-05 14:51:27 -08:00
CMake Enable stack trace symbolization for OSS builds (#9687) 2026-02-05 14:54:38 -08:00
hphp Add --arch flag for runtime architecture selection 2026-03-17 20:49:04 -07:00
third-party Use writeChain instead of writev in Transport::write to have zerocopy support 2026-03-17 22:17:57 -07:00
.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.