summaryrefslogtreecommitdiff
path: root/ext/ffi/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ffi/README.md')
-rw-r--r--ext/ffi/README.md22
1 files changed, 22 insertions, 0 deletions
diff --git a/ext/ffi/README.md b/ext/ffi/README.md
index cc2d81cd2..5f7f1cb9f 100644
--- a/ext/ffi/README.md
+++ b/ext/ffi/README.md
@@ -1,3 +1,25 @@
# deno_ffi
This crate implements dynamic library ffi.
+
+## Performance
+
+Deno FFI calls have extremely low overhead (~1ns on M1 16GB RAM) and perform on
+par with native code. Deno leverages V8 fast api calls and JIT compiled bindings
+to achieve these high speeds.
+
+`Deno.dlopen` generates an optimized and a fallback path. Optimized paths are
+triggered when V8 decides to optimize the function, hence call through the Fast
+API. Fallback paths handle types like function callbacks and implement proper
+error handling for unexpected types, that is not supported in Fast calls.
+
+Optimized calls enter a JIT compiled function "trampoline" that translates Fast
+API values directly for symbol calls. JIT compilation itself is super fast,
+thanks to `tinycc`. Currently, the optimized path is only supported on Linux and
+MacOS.
+
+To run benchmarks:
+
+```bash
+target/release/deno bench --allow-ffi --allow-read --unstable ./test_ffi/tests/bench.js
+```