The misc/examples/kemi/kamailio-basic-kemi.cfg can not be with the default content, because it doesn't execute ksr_core_received() callback, also it has children=2, you said you have 1.

I tested with sipp and the sample kemi lua scripting.

Looking at your iperf command, this is just sending random binary data to port 5060 filling 1Gb/sec, but not clear how many udp packets (the size of each udp packet). The ksr_core_received() is executed before any attempt to parse, so it can be executed also for random binary data, but it is not relevant for sip routing point of view what you are testing. Maybe locating event_route[core:msg-received] is little bit faster than looking up ksr_core_received(), but if we talk here about 1 microsecond vs 1.2microseconds, then is irrelevant for overall execution time of routing rules for SIP messages.

Cheers,
Daniel

On 12.11.19 22:58, GG GG wrote:
I use the /misc/examples/kemi/kamailio-basic-kemi.cfg with log disabled. No log is printed at all, on a Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz.
What's your results ?

# and my lua file
-- Kamailio - equivalent of routing blocks in Lua
--
-- KSR - the new dynamic object exporting Kamailio functions (kemi)
-- sr - the old static object exporting Kamailio functions
--

-- Relevant remarks:
--  * do not execute Lua 'exit' - that will kill Lua interpreter which is
--  embedded in Kamailio, resulting in killing Kamailio
--  * use KSR.x.exit() to trigger the stop of executing the script
--  * KSR.drop() is only marking the SIP message for drop, but doesn't stop
--  the execution of the script. Use KSR.x.exit() after it or KSR.x.drop()
--


-- global variables corresponding to defined values (e.g., flags) in kamailio.cfg
--FLT_ACC=1

-- SIP request routing
-- equivalent of request_route{}
function ksr_request_route()
        KSR.info("===== request route\n");
end

function ksr_core_received()
        KSR.x.exit();
end

On Tue, Nov 12, 2019 at 4:21 PM Daniel-Constantin Mierla <miconda@gmail.com> wrote:

Do you run with high debug value (lot of log messages)? Because I don't get similar results to yours. Maybe you can share full kamailio.cfg and lua script for both cases.

Cheers,
Daniel

On 12.11.19 22:11, GG GG wrote:
Hello,

I removed KSR.x.exit() and I got same results for cpu usage and Recv-Q.

On Tue, Nov 12, 2019 at 3:56 PM Daniel-Constantin Mierla <miconda@gmail.com> wrote:

Hello,

can you remove the KSR.x.exit() and test again? It will be the same effect from sip routing point of view, just to see what is the result.

Because Lua 'exit' cannot be used, KSR.x.exit() is a workaround relying on error/exception handling with string comparison that I did.

However, overall KSR.x.exit() alone has an insignificant effect on a production configuration, based on the tests I did for kamailio 5.2, you can look for more at:

  - https://www.kamailio.org/wiki/kemi/performance-tests/5.2.x

Cheers,
Daniel

On 12.11.19 21:28, GG GG wrote:
Hi Daniel,

For lua example, it's just an error when writing my email... in my config file I have KSR.x.exit();
I have not tested a more complex config, but I'm curious about kemi framework and how it works. So before anything else I made a simple test to know the cpu overhead.
For this test, I noticed that the Recv-Q of kamailio remains high with kemi/lua, and with the native one remains to 0, with children=1 of course.
Next step, is to use a more complex config file.

On Tue, Nov 12, 2019 at 3:00 PM Daniel-Constantin Mierla <miconda@gmail.com> wrote:

Hello,

is it really just 'exit' in the ksr_core_received()? Because that should shut down kamailio.

Anyhow, practically with the examples here, you test the difference between looking up a function and doing exit in native kamailio.cfg and lua script, which is really marginal comparing with the rest of configuration file in a usual production deployment. Have you tested with a more complex set of actions/functions?

Cheers,
Daniel

On 12.11.19 17:36, GG GG wrote:
Hi!

I just made a simple test performance between native script and kemi/lua with the event_route[core:msg-received] callback.

# lua script children=1 cpu.process=100%
function ksr_core_received()
  exit;
end

# native script children=1 cpu.process=70%
event_route[core:msg-received] {
  exit;
}

# tested with udp 5060, 1000 Mbits/sec
iperf -c 127.0.0.1 -p 5060 -u -b1000m

I don't know if it's normal and what we should expect from kemi, but I would like to share this with you. Maybe someone could confirm the performance difference.

Have a good day !

_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
-- 
Daniel-Constantin Mierla -- www.asipto.com
www.twitter.com/miconda -- www.linkedin.com/in/miconda
Kamailio World Conference - April 27-29, 2020, in Berlin -- www.kamailioworld.com
-- 
Daniel-Constantin Mierla -- www.asipto.com
www.twitter.com/miconda -- www.linkedin.com/in/miconda
Kamailio World Conference - April 27-29, 2020, in Berlin -- www.kamailioworld.com
-- 
Daniel-Constantin Mierla -- www.asipto.com
www.twitter.com/miconda -- www.linkedin.com/in/miconda
Kamailio World Conference - April 27-29, 2020, in Berlin -- www.kamailioworld.com
-- 
Daniel-Constantin Mierla -- www.asipto.com
www.twitter.com/miconda -- www.linkedin.com/in/miconda
Kamailio World Conference - April 27-29, 2020, in Berlin -- www.kamailioworld.com