diff options
author | 2023-06-18 23:30:01 -0700 | |
---|---|---|
committer | 2023-06-18 23:30:01 -0700 | |
commit | b951c1f89e90aeb4507d4402b4f1f5e5520b4923 (patch) | |
tree | cea31e2c51fc38110c66e321ef7e7f8ee0e676c9 /src | |
parent | b78b2a3031468a7461afd58b76153be7dc1d32f0 (diff) | |
download | bun-b951c1f89e90aeb4507d4402b4f1f5e5520b4923.tar.gz bun-b951c1f89e90aeb4507d4402b4f1f5e5520b4923.tar.zst bun-b951c1f89e90aeb4507d4402b4f1f5e5520b4923.zip |
Press the secret "use less RAM" button
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 72 |
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; } } |