Hi Dave,

On Mon, Dec 02, 2019 at 10:12:27AM -0600, Dave Chiluk wrote:
> Since 2.0 nbproc and nbthreads are now mutually exclusive, are there
> any ways to make lua multi-threaded?

Unfortunately no. Lua itself is inherently single-threaded and
even when you believe you're using multi-threading, you end up
on a big lock around all the engine that serializes everything.

>From what I've found, there were several attempts to make Lua support
preemptive threads, but most of them had huge limitations like not
sharing anything (pointless already), they were also limited to older
versions like 5.0 or 5.1.

With this said, I can easily understand that something light and fast
like Lua is hard to port to threads without losing all of its benefits.

Are your really using it so much that it becomes a bottleneck ? I find
this quite surprizing. If so, did you find any single part responsible
for most of the CPU usage ? Then do you think that by moving a few of
it to native code (sample fetches, converters set into variables), it
could improve the situation ? Maybe you should try a trick consisting
in setting tune.lua.forced-yield to a lower value (the default being
10000) so that it executes much less instructions at once, leaving more
room for other threads to take a share of the CPU. But in any case at
a given instant you will definitely have only one thread executing
Lua code. If at least you can make sure that others are not waiting
too much and find other things to do with the rest of haproxy, maybe
that could improve the efficiency of your program already.


Reply via email to