The 8 KiB default has been unchanged since 2015. With the threshold
check `size < (Buffer.poolSize >>> 1)`, this means allocations of 4 KiB
or larger bypass the pool entirely — including 4 KiB itself, a common
page and HTTP-frame size.
Raising the default to 64 KiB extends pool coverage to ~32 KiB
allocations, capturing common sizes used by HTTP parsers, stream
chunks, and small file reads.
Throughput improvements on workers-k=8 fs.readFileSync benchmarks
(Linux/glibc) at the affected sizes, with no regressions elsewhere:
file size | 8 KiB pool | 64 KiB pool | delta
-----------+--------------+---------------+-------
4 KiB | 326k ops/s | 360k ops/s | +10%
8 KiB | 202k ops/s | 254k ops/s | +26%
16 KiB | 148k ops/s | 181k ops/s | +23%
64 KiB | 86k ops/s | 87k ops/s | ~
1 MiB | 12k ops/s | 13k ops/s | ~
Cost: +56 KiB RSS per realm at startup.
Signed-off-by: Matteo Collina <hello@matteocollina.com>
PR-URL: #63597
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: LiviaMedeiros <livia@cirno.name>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
doc: remove list of versions inBUILDING.md27c1c1ddoc: document the latest-vX.x schemaececd80doc: add Hmac.digest() documentation-only deprecation (DEP0206)7d81419sqlite: keep source database alive during backup30e71c7module: fix sync hook short-circuit in require() in imported CJS69df688test: use ERM to destroy sqlite database handles after tests64efbfddoc,sqlite: document entryPoint argument for loadExtensione369886doc: update release steps when post-release failsaaef29etls: add unsupported renegotiation error94e5f63quic: remove unused binding variable in session.cc4b367cbdoc: clarify SEA platform support excludes darwin-x64a95fc1fdoc: updategit node landinstructions for security releases52a1c18build: defNODE_USE_NODE_CODE_CACHEonly used in node_mksnapshot7c22ee2meta: label "source maps" PRsa08cfcfstream: use data listener for compose forwardingf954ab3buffer: increase Buffer.poolSize default to 64 KiBd3ef412errors: handle V8 warnings in DisallowJavascriptExecutionScopee4e5137util: create hex style cache and fast pathfe4540edeps: upgrade npm to 11.16.0b76bfcdlib: definekEnumerablePropertyatomically02f35d6stream: switch to internalsleepbinding58fa2eeutil: remove unused functionsc605df9meta: flip mcollina emails in .mailmap7cead61src: remove TOCTOU race condition when encoding SAB-backedBuffers85d1639doc: remove duplicated sentences in large-pull-requests.md2390e3abuild: add --enable-all-experimentals build flag9ff36e4build,win: enable x64 PGO2551abdsrc: split profiling helpers from util8ac5d77src: remove license headers for new node_profiling files92d4f072026-06-19, Version 24.18.0 'Krypton' (LTS)89d2c9dReview requested:
#63563 this should be included
Uh oh!
There was an error while loading. Please reload this page.
I'm going to close this and regenerate the proposal for Monday once 63563 has passed a new CI.
We're also experiencing an outage on all the s390x linux systems at the moment so today is no longer an option regardless.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FWIW closing the PR in not necessary, you can also update the branch by pushing to it (or at least if the permissions are correctly set up).
You'd need to update the changelog to indicate who's signing it, the bot won't be able to help you with that
Labels
20 participants