aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp
index 13bb51afd..6b58c241f 100644
--- a/src/bun.js/bindings/ZigGlobalObject.cpp
+++ b/src/bun.js/bindings/ZigGlobalObject.cpp
@@ -180,6 +180,7 @@ namespace JSCastingHelpers = JSC::JSCastingHelpers;
#include "CallSitePrototype.h"
#include "DOMWrapperWorld-class.h"
#include "CommonJSModuleRecord.h"
+#include <wtf/RAMSize.h>
constexpr size_t DEFAULT_ERROR_STACK_TRACE_LIMIT = 10;
@@ -221,6 +222,8 @@ extern "C" void JSCInitialize(const char* envp[], size_t envc, void (*onCrash)(c
JSC::Options::showPrivateScriptsInStackTraces() = true;
JSC::Options::useSetMethods() = true;
+ bool didSetForceRAMSize = false;
+
if (LIKELY(envc > 0)) {
while (envc--) {
const char* env = (const char*)envp[envc];
@@ -233,6 +236,75 @@ extern "C" void JSCInitialize(const char* envp[], size_t envc, void (*onCrash)(c
if (UNLIKELY(!JSC::Options::setOption(env + 8))) {
onCrash(env, strlen(env));
}
+
+ didSetForceRAMSize = didSetForceRAMSize || strcmp(env + 8, "forceRAMSize") == 0;
+ }
+ }
+
+ /*
+ * The Magic "Use Less RAM" button
+ */
+ // # With /= 16,184
+ // cpu: Apple M1 Max
+ // runtime: bun 0.6.10 (arm64-darwin)
+ // benchmark time (avg) (min … max) p75 p99 p995
+ // ------------------------------------------------------------------- -----------------------------
+ // crypto.createHash("sha512") 953.74 ns/iter (842.34 ns … 1.11 µs) 1 µs 1.11 µs 1.11 µs
+ // crypto.createHash("sha256") 704.35 ns/iter (594.42 ns … 912.4 ns) 754.89 ns 912.4 ns 912.4 ns
+ // crypto.createHash("sha1") 608.53 ns/iter (488.66 ns … 724.54 ns) 637.75 ns 724.54 ns 724.54 ns
+ // Peak memory usage: 59 MB
+ // # With /= 8096
+ // cpu: Apple M1 Max
+ // runtime: bun 0.6.10 (arm64-darwin)
+ // benchmark time (avg) (min … max) p75 p99 p995
+ // ------------------------------------------------------------------- -----------------------------
+ // crypto.createHash("sha512") 821.71 ns/iter (716.88 ns … 1.01 µs) 859.07 ns 1.01 µs 1.01 µs
+ // crypto.createHash("sha256") 534.89 ns/iter (439.35 ns … 737.17 ns) 576.15 ns 633.4 ns 737.17 ns
+ // crypto.createHash("sha1") 529.1 ns/iter (432.46 ns … 766.94 ns) 566.07 ns 653.13 ns 766.94 ns
+ // Peak memory usage: 60 MB
+ // # With /= 1024
+ // cpu: Apple M1 Max
+ // runtime: bun 0.6.10 (arm64-darwin)
+ // benchmark time (avg) (min … max) p75 p99 p995
+ // ------------------------------------------------------------------- -----------------------------
+ // crypto.createHash("sha512") 751.13 ns/iter (703.45 ns … 947.73 ns) 754.54 ns 947.73 ns 947.73 ns
+ // crypto.createHash("sha256") 501.47 ns/iter (467.19 ns … 580.84 ns) 505.66 ns 572.42 ns 580.84 ns
+ // crypto.createHash("sha1") 482.16 ns/iter (452.7 ns … 570.29 ns) 482.74 ns 565.52 ns 570.29 ns
+ // Peak memory usage: 169 MB
+ // # With /= 256
+ // cpu: Apple M1 Max
+ // runtime: bun 0.6.10 (arm64-darwin)
+ // benchmark time (avg) (min … max) p75 p99 p995
+ // ------------------------------------------------------------------- -----------------------------
+ // crypto.createHash("sha512") 745.25 ns/iter (705.91 ns … 863.73 ns) 747.8 ns 863.73 ns 863.73 ns
+ // crypto.createHash("sha256") 506.94 ns/iter (459.27 ns … 692.93 ns) 514.95 ns 611.72 ns 692.93 ns
+ // crypto.createHash("sha1") 486.19 ns/iter (456.13 ns … 749.72 ns) 487.5 ns 578.84 ns 749.72 ns
+ // Peak memory usage: 270 MB
+ // # Unset
+ // cpu: Apple M1 Max
+ // runtime: bun 0.6.10 (arm64-darwin)
+ // benchmark time (avg) (min … max) p75 p99 p995
+ // ------------------------------------------------------------------- -----------------------------
+ // crypto.createHash("sha512") 752.96 ns/iter (705.88 ns … 954.63 ns) 758.78 ns 954.63 ns 954.63 ns
+ // crypto.createHash("sha256") 503.72 ns/iter (466.7 ns … 602.83 ns) 507.22 ns 593.72 ns 602.83 ns
+ // crypto.createHash("sha1") 484.25 ns/iter (454.55 ns … 555.84 ns) 487.96 ns 553.41 ns 555.84 ns
+ // Peak memory usage: 273 MB
+ // # Node.js, for comparison
+ // cpu: Apple M1 Max
+ // runtime: node v20.1.0 (arm64-darwin)
+ // benchmark time (avg) (min … max) p75 p99 p995
+ // ------------------------------------------------------------------- -----------------------------
+ // crypto.createHash("sha512") 1.82 µs/iter (1.77 µs … 2.17 µs) 1.84 µs 2.17 µs 2.17 µs
+ // crypto.createHash("sha256") 964 ns/iter (946.02 ns … 1.1 µs) 962.95 ns 1.1 µs 1.1 µs
+ // crypto.createHash("sha1") 985.26 ns/iter (956.7 ns … 1.12 µs) 1 µs 1.12 µs 1.12 µs
+ // Peak memory usage: 56 MB
+
+ if (!didSetForceRAMSize) {
+ size_t ramSize = WTF::ramSize();
+ ramSize /= 1024;
+
+ if (ramSize > 0) {
+ JSC::Options::forceRAMSize() = ramSize;
}
}