SnabbCo/snabbswitch — pull request #335 by alexandergall (2014-12-08 13:28:16+00:00)
Title: Avoid interpreter fallback in timer and app core modules

The core modules app.lua and time.lua are causing an excessive amount
of interpreter fallback, leading to a significant performance penalty.
This changeset removes one of the causes and offers a workaround for
the other one through a configuration option.

The definition of call_timers() in core/timer.lua is moved out of
run_to_time() to avoid generation of the non-compileable bytecode
UCLO (bytecode 51 in the current version of LuaJIT).

The code for detecting dead apps by wrapping them in pcall() leads to
frequent trace aborts due to "NYI: return to lower frame". It is not
entirely clear what exactly this means and whether it can be avoided
somehow. A new configuration option "dead_app_detection" is
introduced that disables this mechanism when set to false (defaults to
true). The options for main() are passed on to breathe() to make this
work.