Luis, I wonder, how many CPU cores/available hardware threads (taking into account HyperThreading and all that—so just the number of CPUs in /proc/cpuinfo) are available here? It almost sounds like something which would occur with maybe 1 or 2 CPUs being contended over. Perhaps the simplest thing for this kind of call volume is to run Kamailio on a host with 8 or 12+ CPU cores?
— Alex — Sent from my iPad > On Apr 10, 2020, at 2:20 AM, Luis Rojas G. <luis.ro...@sixbell.com> wrote: > > > Hello, > > I have a lot of experience developing mutithreaded applications, and I don't > see it so unlikely at all that a process loses cpu just after recvfrom(). > It's just as probable as to lose it just before, or when writing on a cache > or just before of after sendto(). If there are many messages going through, > some of them will fall in this scenario. if I try sending a burst of 100 > messages, I see two or three presenting the scenario. > > Just forward() with a single process does not give the capacity. I'm getting > almost 1000caps. More than that and start getting errores, retransmissions, > etc. And this is just one way. I need to receive the call to go back to the > network (our application is a B2BUA), so I will be down to 500caps, with a > simple scenario, with no reliable responses, reinvites, updates, etc. I will > end up having as many standalone kamailio processes as the current servers I > do have now. > > I really think the simplest way would be to add a small delay to 200 OK. Very > small, like 10ms, should be enough. Simple and it should work. As Alex > Balashov commented he did for the case with ACK-Re-Invite. > > I have to figure out how to make async_ms_sleep() work in reply_route(). > > Thanks for all the comments and ideas > > Best regards, > > Luis > > > > . On 4/9/20 12:17 PM, Daniel-Constantin Mierla wrote: >> >> >> mico...@gmail.com appears similar to someone who previously sent you email, >> but may not be that person. Learn why this could be a risk >> Feedback >> Hello, >> >> then the overtaking is in between reading from the socket and getting to >> parsing the call-id value -- the cpu is lost by first reader after >> recvfrom() and the second process get enough cpu time to go ahead further. I >> haven't encountered this case, but as I said previously, it is very >> unlikely, but still possible. I added the route_locks_size because in the >> past I had cases when processing of some messages took longer executing >> config (e.g., due to authentication, accounting, ..) and I needed to be sure >> they are processed in the order they enter config execution. >> >> Then the option is to see if a single process with stateless sending out >> (using forward()) gives the capacity, if you don't do any other complex >> processing. Or if you do more complex processing, use a dispatcher process >> with forwarding to local host or in a similar manner try to use >> mqueue+rtimer for dispatching using shared memory queues. >> >> Of course, it is open source and there is also the C coding way, to add a >> synchronizing mechanism to protect against parallel execution of the code >> from recvfrom() till call-id lock is acquired. >> >> Cheers, >> Daniel >> >> On 09.04.20 17:37, Luis Rojas G. wrote: >>> Hello, >>> >>> Well, it did not work at all. Exactly same behavior, with random out of >>> order messages. >>> >>> Best regards, >>> >>> Luis >>> >>> On 4/9/20 11:28 AM, Daniel-Constantin Mierla wrote: >>>> >>>> >>>> mico...@gmail.com appears similar to someone who previously sent you >>>> email, but may not be that person. Learn why this could be a risk >>>> Feedback >>>> Hello, >>>> >>>> the sip messages belonging to the same dialog have the same value for >>>> Call-Id header. The locking is done based on hashing the Call-Id, so it >>>> doesn't need at all the dialog module for its purpose. >>>> >>>> Cheers, >>>> Daniel >>>> >>>> On 09.04.20 14:19, Luis Rojas G. wrote: >>>>> Hello, Daniel, >>>>> >>>>> I am not so sure. I first tried adding that parameter, but it did not >>>>> work at all. Same behavior. Then I read the documentation more carefully >>>>> : >>>>> >>>>> https://www.kamailio.org/wiki/cookbooks/devel/core#route_locks_size >>>>> route_locks_size >>>>> >>>>> Set the number of mutex locks to be used for synchronizing the execution >>>>> of messages sharing the same Call-Id. In other words, enables Kamailio to >>>>> execute the config script sequentially for the requests and replies >>>>> received within the same dialog – a new message received within the same >>>>> dialog waits until the previous one is routed out. >>>>> >>>>> Locks to execute sequentially messages belonging to same dialog. How will >>>>> Kamailio be aware that messages belong to same dialog, without the dialog >>>>> module?. With just stateless proxy it has no idea about dialogs, it just >>>>> forwards messages. I guess that's why just adding that parameter did not >>>>> work. >>>>> >>>>> Am I wrong? >>>>> >>>>> Luis >>>>> >>>>> >>>>> >>>>> >>>>> On 4/9/20 3:47 AM, Daniel-Constantin Mierla wrote: >>>>>> Hello, >>>>>> >>>>>> On 08.04.20 23:03, Luis Rojas G. wrote: >>>>>>> Hello, Daniel, >>>>>>> >>>>>>> I looked into that parameter, but I need to use with the dialog >>>>>>> module, and I'm pretty afraid to use that. >>>>>> who said or where is written than you need to load the dialog module? >>>>>> You definitely don't. >>>>>> >>>>>> Cheers, >>>>>> Daniel >>>>>> >>>>>> >>>>>> >>>>>>> I was looking more into the stateless proxy, because I need to process >>>>>>> a lot of traffic. >>>>>>> >>>>>>> My target is 4200CAPS. with duration between 90s and 210. Let's say, >>>>>>> 150 seconds. That would mean 630.000 simultaneous dialogs. I don't >>>>>>> think the solution can go that way. >>>>>>> >>>>>>> it would really help me to be able to use completely stateless proxy >>>>>>> plus Async in reply_route(), to introduce an artificial delay before >>>>>>> forwarding 200 OK to Invite.. As someone mentioned, it would help me on >>>>>>> request_route(), for race conditions between ACK and Re-Invite. >>>>>>> >>>>>>> Any idea why Async is not allowed in reply_route()? >>>>>>> >>>>>>> Best regards, >>>>>>> >>>>>>> Luis >>>>>>> >>>>>>> >>>>>>> On 4/8/20 1:07 PM, Daniel-Constantin Mierla wrote: >>>>>>>> Hello, >>>>>>>> >>>>>>>> you have to keep in mind that Kamailio is a SIP packet router, not a >>>>>>>> telephony engine. If 180 and 200 replies are part of a call is not >>>>>>>> something that Kamailio recognize at its core. Its main goal is to >>>>>>>> route out as fast as possible what is received, by executing the >>>>>>>> configuration file script. Now, a matter of your configuration file, >>>>>>>> processing of some SIP messages can take longer than processing other. >>>>>>>> And the processing is done in parallel, a matter of children parameter >>>>>>>> (and tcp_children, sctp_children). >>>>>>>> >>>>>>>> With that in mind, a way to try to cope better with the issue you face >>>>>>>> is to set route_locks_size parameter, see: >>>>>>>> >>>>>>>> * https://www.kamailio.org/wiki/cookbooks/devel/core#route_locks_size >>>>>>>> >>>>>>>> Probably is what you look for. >>>>>>>> >>>>>>>> But if you want more tight constraints, like when receiving a 180 >>>>>>>> after a 200ok and not route it out, you have to make the logic in >>>>>>>> configuration file by combining modules such as dialog or htable (as >>>>>>>> already suggested). >>>>>>>> >>>>>>>> Cheers, >>>>>>>> Daniel >>>>>>>> >>>>>>>> On 08.04.20 16:04, Luis Rojas G. wrote: >>>>>>>>> Hi, Henning, >>>>>>>>> >>>>>>>>> No need to be ironic. As I mentioned on my first post, I tried >>>>>>>>> stateful proxy and I observed the same behavior. >>>>>>>>> >>>>>>>>> "I tried using stateful proxy and I obtained the same result." >>>>>>>>> >>>>>>>>> The asynchronous sleep seems promising. I will look into it. >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> >>>>>>>>> Luis >>>>>>>>> >>>>>>>>> >>>>>>>>> On 4/8/20 9:30 AM, Henning Westerholt wrote: >>>>>>>>>> Hi Luis, >>>>>>>>>> >>>>>>>>>> I see. Well, you want to use Kamailio as a stateless proxy, on the >>>>>>>>>> other hand it should do things that are inherently stateful. 😉 >>>>>>>>>> >>>>>>>>>> As mentioned, have a look to the dialog module to track the state of >>>>>>>>>> dialogs that you process. This will not work in a stateless mode, >>>>>>>>>> though. >>>>>>>>>> >>>>>>>>>> You can also use the htable module to just store some data about the >>>>>>>>>> processed messages in a shared memory table and use this to enforce >>>>>>>>>> your ordering. There is also the option to do an asynchronous sleep >>>>>>>>>> (with the async) module on the message that you want to delay but >>>>>>>>>> still processing other messages during it. >>>>>>>>>> >>>>>>>>>> Cheers, >>>>>>>>>> >>>>>>>>>> Henning >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Henning Westerholt – https://skalatan.de/blog/ >>>>>>>>>> Kamailio services – https://gilawa.com >>>>>>>>>> >>>>>>>>>> From: Luis Rojas G. <luis.ro...@sixbell.com> >>>>>>>>>> Sent: Wednesday, April 8, 2020 3:00 PM >>>>>>>>>> To: Henning Westerholt <h...@skalatan.de>; Kamailio (SER) - Users >>>>>>>>>> Mailing List <sr-users@lists.kamailio.org> >>>>>>>>>> Subject: Re: [SR-Users] Kamailio propagates 180 and 200 OK OUT OF >>>>>>>>>> ORDER >>>>>>>>>> >>>>>>>>>> Hello, Henning, >>>>>>>>>> >>>>>>>>>> I am worried about this scenario, because it's a symptom of what may >>>>>>>>>> happen in other cases. For instance, I've seen that this operator >>>>>>>>>> usually sends re-invites immediate after sending ACK. This may >>>>>>>>>> create race conditions like 3.1.5 of RFC5407 >>>>>>>>>> >>>>>>>>>> https://tools.ietf.org/html/rfc5407#page-22 >>>>>>>>>> >>>>>>>>>> I'd understand that one happens because of packet loss, as it's in >>>>>>>>>> UDP's nature, but in this case it would be artificially created by >>>>>>>>>> Kamailio. if there was no problem at network level (packet loss, >>>>>>>>>> packets following different path on the network and arriving out of >>>>>>>>>> order), why Kamailio creates it? >>>>>>>>>> >>>>>>>>>> I'd expect that the shared memory is used precisely for this. If an >>>>>>>>>> instance of kamailio receives a 200 OK, it could check on the shm >>>>>>>>>> and say "hey, another instance is processing a 180 for this call. >>>>>>>>>> Let's wait for it to finish" (*). I know there could still be a >>>>>>>>>> problem, the instance processing the 180 undergoes a context switch >>>>>>>>>> just after it receives the message, but before writing to shm, but >>>>>>>>>> it would greatly reduce the chance. >>>>>>>>>> >>>>>>>>>> In our applications we use a SIP stack that always sends messages to >>>>>>>>>> the application in the same order it receives them, even though is >>>>>>>>>> multi-threaded and messages from the network are received by >>>>>>>>>> different threads. So, they really syncronize between them. Why >>>>>>>>>> Kamailio instances don't? >>>>>>>>>> >>>>>>>>>> I am evaluating kamailio to use it as a dispatcher to balance load >>>>>>>>>> against our several Application Servers, to present to the operator >>>>>>>>>> just a couple of entrance points to our platform (they don't want to >>>>>>>>>> establish connections to each one of our servers). This operator is >>>>>>>>>> very difficult to deal with. I am sure they will complain something >>>>>>>>>> like "why are you sending messages out of order? Fix that". The >>>>>>>>>> operator will be able to see traces and check that messages entered >>>>>>>>>> the Kamailio nodes in order and left out of order. They will not >>>>>>>>>> accept it. >>>>>>>>>> >>>>>>>>>> (*) Not really "wait", as it would introduce a delay in processing >>>>>>>>>> all messages. it should be like putting it on a queue, continue >>>>>>>>>> processing other messages, and go back to the queue later. >>>>>>>>>> >>>>>>>>>> Well, thanks for your answer. >>>>>>>>>> >>>>>>>>>> Luis >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 4/8/20 3:01 AM, Henning Westerholt wrote: >>>>>>>>>> Hello Luis, >>>>>>>>>> >>>>>>>>>> as the 1xx responses are usually send unreliable (unless you use >>>>>>>>>> PRACK), you should not make any assumption on the order or even the >>>>>>>>>> arrival of this messages. It can also happens on a network level, if >>>>>>>>>> send by UDP. >>>>>>>>>> >>>>>>>>>> Can you elaborate why you think this re-ordering is a problem for >>>>>>>>>> you? >>>>>>>>>> >>>>>>>>>> One idea to enforce some ordering would be to use the dialog module >>>>>>>>>> in combination with reply routes and the textops(x) module. >>>>>>>>>> >>>>>>>>>> About the shared memory question – Kamailio implement its own memory >>>>>>>>>> manager (private memory and shared memory pool). >>>>>>>>>> >>>>>>>>>> Cheers, >>>>>>>>>> >>>>>>>>>> Henning >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Henning Westerholt – https://skalatan.de/blog/ >>>>>>>>>> Kamailio services – https://gilawa.com >>>>>>>>>> >>>>>>>>>> From: sr-users <sr-users-boun...@lists.kamailio.org> On Behalf Of >>>>>>>>>> Luis Rojas G. >>>>>>>>>> Sent: Tuesday, April 7, 2020 10:43 PM >>>>>>>>>> To: sr-users@lists.kamailio.org >>>>>>>>>> Subject: [SR-Users] Kamailio propagates 180 and 200 OK OUT OF ORDER >>>>>>>>>> >>>>>>>>>> Good day, >>>>>>>>>> >>>>>>>>>> I am testing the dispatcher module, using Kamailio as stateless >>>>>>>>>> proxy. I have a pool of UAC (scripts in SIPP) and a pool of UAS >>>>>>>>>> (also scripts in SIPP) for the destinations. Kamailio version is >>>>>>>>>> kamailio-5.3.3-4.1.x86_64. >>>>>>>>>> >>>>>>>>>> Problem I have is, if UAS responds 180 and 200 OK to Invite >>>>>>>>>> immediately, sometimes they are propagated out of order. 200 OK >>>>>>>>>> before 180, like this : >>>>>>>>>> >>>>>>>>>> <image001.png> >>>>>>>>>> >>>>>>>>>> UAS is 172.30.4.195:5061. UAC is 172.30.4.195:5080. Kamailio is >>>>>>>>>> 192.168.253.4:5070 >>>>>>>>>> >>>>>>>>>> Difference between 180 and 200 is just about 50 microseconds. >>>>>>>>>> >>>>>>>>>> My guess is that both messages are received by different instances >>>>>>>>>> of Kamailio, and then because of context switches, even though the >>>>>>>>>> 180 is received before, that process ends after the processing of >>>>>>>>>> 200. However, I had the idea that in order to avoid these problems >>>>>>>>>> the kamailio processes synchronized with each other using a shared >>>>>>>>>> memory. I tried using stateful proxy and I obtained the same result. >>>>>>>>>> >>>>>>>>>> By the way, anyone has any idea about how Kamailio's share memory is >>>>>>>>>> implemented? It clearly does not use the typical system calls >>>>>>>>>> shmget(), shmat(), because they are not shown by ipcs command. >>>>>>>>>> >>>>>>>>>> Before posting here I googled, but I couldn't find anything related >>>>>>>>>> to this. I can't believe I am the only one who ever had this >>>>>>>>>> problem, so I guess I am doing something wrong... >>>>>>>>>> >>>>>>>>>> Please, any help. I'm really stuck on this. >>>>>>>>>> >>>>>>>>>> Thanks. >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Luis Rojas >>>>>>>>>> Software Architect >>>>>>>>>> Sixbell >>>>>>>>>> Los Leones 1200 >>>>>>>>>> Providencia >>>>>>>>>> Santiago, Chile >>>>>>>>>> Phone: (+56-2) 22001288 >>>>>>>>>> mailto:luis.ro...@sixbell.com >>>>>>>>>> http://www.sixbell.com >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Luis Rojas >>>>>>>>> Software Architect >>>>>>>>> Sixbell >>>>>>>>> Los Leones 1200 >>>>>>>>> Providencia >>>>>>>>> Santiago, Chile >>>>>>>>> Phone: (+56-2) 22001288 >>>>>>>>> mailto:luis.ro...@sixbell.com >>>>>>>>> http://www.sixbell.com >>>>>>>>> >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> 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 >>>>>>> >>>>>>> -- >>>>>>> Luis Rojas >>>>>>> Software Architect >>>>>>> Sixbell >>>>>>> Los Leones 1200 >>>>>>> Providencia >>>>>>> Santiago, Chile >>>>>>> Phone: (+56-2) 22001288 >>>>>>> mailto:luis.ro...@sixbell.com >>>>>>> http://www.sixbell.com >>>>>> -- >>>>>> Daniel-Constantin Mierla -- www.asipto.com >>>>>> www.twitter.com/miconda -- www.linkedin.com/in/miconda >>>>> >>>>> -- >>>>> Luis Rojas >>>>> Software Architect >>>>> Sixbell >>>>> Los Leones 1200 >>>>> Providencia >>>>> Santiago, Chile >>>>> Phone: (+56-2) 22001288 >>>>> mailto:luis.ro...@sixbell.com >>>>> http://www.sixbell.com >>>> -- >>>> Daniel-Constantin Mierla -- www.asipto.com >>>> www.twitter.com/miconda -- www.linkedin.com/in/miconda >>> >>> -- >>> Luis Rojas >>> Software Architect >>> Sixbell >>> Los Leones 1200 >>> Providencia >>> Santiago, Chile >>> Phone: (+56-2) 22001288 >>> mailto:luis.ro...@sixbell.com >>> http://www.sixbell.com >> -- >> Daniel-Constantin Mierla -- www.asipto.com >> www.twitter.com/miconda -- www.linkedin.com/in/miconda > > -- > Luis Rojas > Software Architect > Sixbell > Los Leones 1200 > Providencia > Santiago, Chile > Phone: (+56-2) 22001288 > mailto:luis.ro...@sixbell.com > http://www.sixbell.com > _______________________________________________ > Kamailio (SER) - Users Mailing List > sr-users@lists.kamailio.org > https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
_______________________________________________ Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users