Saúl,<br>
<br>
I see that each process registers a timer.  I would expect to see that the<br>
timer would fire in each process once per interval.  What I see is that<br>
once per second the timer callback to keepalive_timer is called on just one<br>
process at a time.  A second later it&#39;s called on another process.<br>
<br>
You can see this pattern in the trace below (I added trace at the end of<br>
the keepalive_timer method showing the value of &#39;iteration&#39;).  There was a<br>
single client registered, receiving keepalives.<br>
<br>
My change ensures that each process observes the same counter, so the<br>
workload is distributed across all processes.<br>
<br>
Your solution, to revert to a dedicated timer process would definitely<br>
solve the problem, as long as a single process (with a static iteration<br>
variable) delivered the keepalives.<br>
<br>
Thanks for looking into it!<br>
<br>
Alan<br>
<br>
​====================================================================================================<br>
Jan  6 18:56:16 alan-vm osips[28713]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 1<br>
Jan  6 18:56:17 alan-vm osips[28719]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 2<br>
Jan  6 18:56:18 alan-vm osips[28715]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:56:19 alan-vm osips[28717]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 1<br>
Jan  6 18:56:20 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 0<br>
Jan  6 18:56:21 alan-vm osips[28712]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 4<br>
Jan  6 18:56:22 alan-vm osips[28722]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:56:23 alan-vm osips[28719]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:56:24 alan-vm osips[28724]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:56:25 alan-vm osips[28723]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:56:26 alan-vm osips[28711]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:56:27 alan-vm osips[28715]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 4<br>
Jan  6 18:56:29 alan-vm osips[28717]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 2<br>
Jan  6 18:56:30 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 1<br>
Jan  6 18:56:31 alan-vm osips[28723]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 4<br>
Jan  6 18:56:32 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 2<br>
Jan  6 18:56:33 alan-vm osips[28722]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 4<br>
Jan  6 18:56:34 alan-vm osips[28720]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; send_keepalive<br>
Jan  6 18:56:34 alan-vm osips[28720]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 8<br>
Jan  6 18:56:35 alan-vm osips[28718]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 1<br>
Jan  6 18:56:36 alan-vm osips[28716]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:56:37 alan-vm osips[28713]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 2<br>
Jan  6 18:56:38 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:56:39 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 4<br>
Jan  6 18:56:40 alan-vm osips[28720]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; send_keepalive<br>
Jan  6 18:56:40 alan-vm osips[28720]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 9<br>
Jan  6 18:56:41 alan-vm osips[28713]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:56:42 alan-vm osips[28712]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 5<br>
Jan  6 18:56:44 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 5<br>
Jan  6 18:56:45 alan-vm osips[28717]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:56:46 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 6<br>
Jan  6 18:56:47 alan-vm osips[28724]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 4<br>
Jan  6 18:56:48 alan-vm osips[28713]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 4<br>
Jan  6 18:56:49 alan-vm osips[28720]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 0<br>
Jan  6 18:56:50 alan-vm osips[28718]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 2<br>
Jan  6 18:56:51 alan-vm osips[28720]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 1<br>
Jan  6 18:56:52 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 7<br>
Jan  6 18:56:53 alan-vm osips[28719]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 4<br>
Jan  6 18:56:54 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; send_keepalive<br>
Jan  6 18:56:54 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 8<br>
Jan  6 18:56:55 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; send_keepalive<br>
Jan  6 18:56:55 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 9<br>
Jan  6 18:56:56 alan-vm osips[28716]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 4<br>
Jan  6 18:56:57 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 0<br>
Jan  6 18:56:58 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 1<br>
Jan  6 18:57:00 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 2<br>
Jan  6 18:57:01 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:57:02 alan-vm osips[28724]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 5<br>
Jan  6 18:57:03 alan-vm osips[28713]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 5<br>
Jan  6 18:57:04 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 4<br>
Jan  6 18:57:05 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 5<br>
Jan  6 18:57:06 alan-vm osips[28721]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 6<br>
Jan  6 18:57:07 alan-vm osips[28720]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 2<br>
Jan  6 18:57:08 alan-vm osips[28723]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 5<br>
Jan  6 18:57:09 alan-vm osips[28720]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:57:10 alan-vm osips[28720]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 4<br>
Jan  6 18:57:11 alan-vm osips[28713]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 6<br>
Jan  6 18:57:12 alan-vm osips[28718]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 3<br>
Jan  6 18:57:13 alan-vm osips[28720]: INFO:nat_traversal:keepalive_timer:<br>
==&gt; keepalive_timer 5<br>
​<br>
<br>
<br>
<br>
<br>
On Tue, Jan 12, 2016 at 3:14 AM, Saúl Ibarra Corretgé &lt;<br>
notifications@github.com&gt; wrote:<br>
<br>
&gt; Hi, thanks for the patch! Can you please elaborate / link some<br>
&gt; documentation on why this is needed? According to the development guide<br>
&gt; &lt;http://www.opensips.org/Documentation/Development-Manual#toc23&gt;<br>
&gt; register_timer works on some &quot;global timer process&quot; which doesn&#39;t appear<br>
&gt; to be the case anymore.<br>
&gt;<br>
&gt; I see that the problem was introduced in caabbe5<br>
&gt; &lt;https://github.com/OpenSIPS/opensips/commit/caabbe53229bde6c1d939da2e5380e805b94b983&gt;.<br>
&gt; If timers are ran on all processes now, the change to nat_traversal is<br>
&gt; incorrect, because we depend on global data, so I&#39;d rather revert back to<br>
&gt; using a dedicated timer process for our purposes, as before.<br>
&gt;<br>
&gt; @bogdan-iancu &lt;https://github.com/bogdan-iancu&gt; can you please shed some<br>
&gt; light here?<br>
&gt;<br>
&gt; —<br>
&gt; Reply to this email directly or view it on GitHub<br>
&gt; &lt;https://github.com/OpenSIPS/opensips/pull/751#issuecomment-170879130&gt;.<br>
&gt;<br>


<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">&mdash;<br>Reply to this email directly or <a href="https://github.com/OpenSIPS/opensips/pull/751#issuecomment-171003796">view it on GitHub</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/AFOciTBG0UPlsPWQWJnw0W9EEJ2hmkGWks5pZT3OgaJpZM4HCenG.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/OpenSIPS/opensips/pull/751#issuecomment-171003796"></link>
  <meta itemprop="name" content="View Pull Request"></meta>
</div>
<meta itemprop="description" content="View this Pull Request on GitHub"></meta>
</div>