You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Oct 28, 2022. It is now read-only.
On release builds, creating a ScillaJIT object takes ~10ms, which an actual message execution takes < 1ms.
While one solution is to cache ScillaJIT objects, separately created for each popular contract and reuse them, it is better to see if its creation can be refactored so that multiple contracts can use the same ScillaJIT object. Note that all Scilla allocated memory is freed after each message execution / deployment anyway.
The main challenge is that different Scilla modules have same named identifiers in them, so LLJIT will have trouble resolving names when multiple of these object files are loaded.
The text was updated successfully, but these errors were encountered:
Turned out that the culprit for ~10ms ScillaJIT objection creation time was creating the Secp256k1 context. This is now fixed by having a single global context (not thread-safe).
Also experiments revealed that the object file generated by LLVM-JIT can be linked into a shared object (.so) by using clang -shared on it. This .so can then be loaded with dlopen and functions in it invoked. This path has none of the overheads of LLVM JIT creation.
So a good solution is to generate LLVM bitcode binaries in the Scilla-LLVM compiler. Run clang -fPIC -shared on the command line on the bitcode and generate .so. These shared objects can be cached and used directly in the VM. The VM will no longer do any JIT compilation and will not have an LLVM dependence either. It will become a pure run-time library.
On release builds, creating a
ScillaJIT
object takes ~10ms, which an actual message execution takes < 1ms.While one solution is to cache
ScillaJIT
objects, separately created for each popular contract and reuse them, it is better to see if its creation can be refactored so that multiple contracts can use the sameScillaJIT
object. Note that all Scilla allocated memory is freed after each message execution / deployment anyway.The main challenge is that different Scilla modules have same named identifiers in them, so LLJIT will have trouble resolving names when multiple of these object files are loaded.
The text was updated successfully, but these errors were encountered: