Re: EVAPI processing delays
Victor Seva via sr-users <[email protected]>
| Newsgroups | gmane.comp.voip.ser |
|---|---|
| Message-ID | <[email protected]> |
Hi Sergio,
On 1/16/26 12:32, Sergio Charrua via sr-users wrote:
> Hello everyone!
>
> For future reference and to close this subject, I have resolved the
> issue using the wait_idle and wait_increase parameters. While these are
> documented, I believe the underlying mechanism could be more clearly
> explained.
One of the great things about kamailio being an open source project is
that you can contribute to it improving, in this case, the documentation.
> Issue Summary: During testing at 1 call per minute, we observed random
> delays of 0.1 to 1.5 seconds between the EVAPI client response and
> Kamailio relaying the call.
>
> Findings:
> Debug logs (level 3) showed that the delay occurred between
> evapi_queue_add(), when the response is received and queued, and
> evapi_queue_get(), when it is fetched for processing.
>
> 2026-01-15T10:45:52.640261+01:00 ire-lab-kamailio1 kamailio[1489415]:
> DEBUG: {1768470259.772039 1489415 1 1 OPTIONS 123} evapi
> [evapi_dispatch.c:140]: evapi_queue_add(): adding message to queue
> [RESPONSE:30920:1266302652:{"action"
> 2026-01-15T10:45:53.637553+01:00 ire-lab-kamailio1 kamailio[1489416]:
> DEBUG: {1768470352.135725 1489416 1 1 OPTIONS 123} evapi
> [evapi_dispatch.c:187]: evapi_queue_get(): getting message from queue
> [RESPONSE:30920:1266302652:{"acti
> 2026-01-15T10:45:53.637930+01:00 ire-lab-kamailio1 kamailio[1489416]:
> DEBUG: {1768470352.135725 1489416 1 1 OPTIONS 123} evapi
> [evapi_dispatch.c:880]: evapi_run_worker(): processing task:
> 0x7fa97d286b00 [RESPONSE:30920:1266302652
>
> - Despite not developing C/C++ for about 30 years, reviewing the code
> (at https://github.com/kamailio/kamailio/blob/5.8.4/src/modules/evapi/
> evapi_dispatch.c <https://github.com/kamailio/kamailio/blob/5.8.4/src/
> modules/evapi/evapi_dispatch.c>), lines between 877 and 890 where a
> While loop would actively check for queued messages (at least, that is
> my understanding)
> - the loop makes use of the _evapi_wait_increase and _evapi_wait_idle
> variables, that match Evapi's module parameters waint_increase and
> wait_idle.
> - the line 890 is where the delay is generated:
>
> sleep_us(_evapi_wait_idle_step * _evapi_wait_idle);
>
>
> While this delay likely disappears under high load (our target is 1500+
> CAPS), it caused our QA tests to fail at low volumes. By setting
> wait_idle to 50ms and wait_increase to 1, the delay was reduced to a
> range of 20ms to 70ms.
>
> Thanks god Kamailio is open-source! ;)
>
> Hoping that Kamailio Dev / Docs teams won't mind, I would suggest to
> detail more the Evapi Module.
> Documentation doesn't say anything about a queue managing the responses
> from EVAPI Client. In fact, the word "queue" is only mentioned once in
> the wait_idle description, but it really is not clear, technically, why
> the queue exists or how it is handled and how to manage it.
> The Evapi Module is a fantastic tool once you understand it, as with any
> other tool (software or hardware), but it is unclear how it works behind
> the scenes.
> More low-level details about the internal processing logic would be very
> helpful for users to optimize their configuration.
>
We don't mind quite the opposite. Please create a pull request with your
desired changes.
> Hope this helps.
Looking forward to see that improvement as a pull request.
--
-----------------------------------------------------------------
| ⢀⣴⠾⠻⢶⣦⠀ Victor Seva |
| ⣾⠁⢠⠒⠀⣿⡁ [email protected] |
| ⢿⡄⠘⠷⠚⠋⠀PGP: 8F19 CADC D42A 42D4 5563 730C 51A0 9B18 CF5A 5068 |
| ⠈⠳⣄⠀⠀⠀ Debian Developer |
-----------------------------------------------------------------
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions -- [email protected]
To unsubscribe send an email to [email protected]
Important: keep the mailing list in the recipients, do not reply only to the sender!
OpenPGP_0x51A09B18CF5A5068.asc
(application/pgp-keys, 18.3 KB)
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 2Q7b =yxa8 -----END PGP PUBLIC KEY BLOCK-----
OpenPGP_signature.asc
(application/pgp-signature, 235 B)
-----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQQq6AO8RS0zF4SC1vh9e2XEKg7IsgUCaXD2LwAKCRB9e2XEKg7I srzSAQDuAmSLOBDBE04yM3ynvV0zFIudA/WFmB9yo6AR+ELCgQEA2+Q8PyW5/8QW St87qsn4B3Hjb2ZrZKEbhLFg03fKigs= =kVaK -----END PGP SIGNATURE-----