On Wed, 2008-04-02 at 23:05, Charles P Wright wrote:
> My best guess is that if you look at the default messages in the source, 
> that ACK will match up relatively nicely to one of them in there rather 
> than it coming from some sort of corruption.

Yes, it turns out to be the case, but why we get to that code is still a
mystery -- it's coming from abortCall() and likely process_unexpected()
but I can't quite catch that. Still, this happens quite rarely, and
there's a more general issue with the ACKs that I'll show below
(originally, I thought it was all the same, but it turns out not to be).

> I would also be interested if you can provide any more information about 
> regressions you've seen.

I'm beginning to think that what I'm seeing is a different manifestation
of the same symptom I see in the stable build. In general, I see more
errors and a longer reported avg call length (maybe 20-30% more) at the
end of a run -- but the call length is, I suspect, at least partly
because of the extra error processing time. It could also be a compile
issue -- I can't compile the latest code with the SunStudio compiler I
used for the stable code, though I don't really think that there is a
signficant difference between that at gcc these days.

About those errors -- I'm increasingly convinced that something is wrong
in the combination of optional messages received out of order and
congestion. If I run 100 calls in the latest code (well, the latest I
checked out, which is SVN version 424), the uac reports this:

  Call limit reached (-m 100), 0.494 s period  1 ms scheduler resolution
  0 calls (limit 1536)                   Peak was 62 calls, after 0 s
  0 Running, 100 Paused, 0 Woken up
  17 dead call msg (discarded)           0 out-of-call msg (discarded)
  2 open sockets

                                 Messages  Retrans   Timeout   Unexpected-Msg
      INVITE ---------->         100       0         0
         100 <----------         100       0         0         0
         180 <----------         85        0         0         0
         200 <----------  E-RTD1 122       0         0         0
         ACK ---------->         122       0
       Pause [      0ms]         122                           0
         BYE ---------->         122       0         0
         200 <----------         78        0         0         22

There's just some bad call-matching going on there; there shouldn't 22
extra 200OK received to from the INVITE; clearly they belong to the BYE
(and then the 22 extra BYEs cause 22 481s to be received).

For comparison, here's what I see in the stable build:
  Call limit reached (-m 1000), 0.660 s period  9 ms scheduler
resolution
  172 calls (limit 1536)                 Peak was 858 calls, after 1 s
  0 Running, 172 Paused, 0 Woken up
  0 out-of-call msg (discarded)
  2 open sockets                          0/0/12 TCP errors
(send/recv/cong)

                                 Messages  Retrans   Timeout  
Unexpected-Msg
      INVITE ---------->         1000      0         0
         100 <----------         1000      0         0         0
         180 <----------         933       0         0         0
         200 <----------  E-RTD1 1000      0         0         0
         ACK ---------->         829       0
       Pause [      0ms]         829                           0
         BYE ---------->         829       0         0
         200 <----------         828       0         0         0

At this point, the uac never sends anything else; for some reason it has
dropped 171 200 responses and not sent out an ACK. [But I don't see 171
of the abort-call generated ACKs either -- possibly there are two
different things going on.]

If a GLOBAL optional message is received out of order, perhaps it should
just be ignored (that is, after incrementing the recv counter,
call::process_incoming() could return without processing the rest)? That
certainly fixes the issue for me (on both the stable and trunk builds).
Or perhaps there could be an optional="ingore" tag for that case?

-Scott


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
Sipp-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sipp-users

Reply via email to