Browse Source
Investigating a susprisingly slow-compiling module recently, it turns out that if you create a wasm module with 40k empty functions (e.g. `(module (func) (func) (func) ...)`) then it takes **3 seconds** to compile and drop via the CLI locally on a Linux system. This seems like an extraordinary amount of time for "doing nothing", and after some profiling I found that basically all of the time was spent in `__deregister_frame` calls. Poking around in the source it looks like libgcc is managing some form of linked list, and by deregistering in the LIFO order instead of FIFO order it avoids a quadratic search of all registered functions. Now that being said it's still pretty bad to do a linear search all the time, and nothing will be fixed if there are *two* instances both with 40k functions. For now though I hope that this will patch over the performance issue and we can figure out better ways to manage this in the future.pull/913/head
Alex Crichton
5 years ago
committed by
GitHub
1 changed files with 16 additions and 2 deletions
Loading…
Reference in new issue