Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Dec 2006 08:00:19 -0500
From:      Randall Stewart <rrs@cisco.com>
To:        freebsd-current@freebsd.org
Subject:   curious results
Message-ID:  <457EA7E3.2010302@cisco.com>

next in thread | raw e-mail | index | archive | help
All:

I have two machines I am testing with... a Intel Xeon
2.8 Gig w/hyperthreading... and a Intel P4D dual core.

Now I am testing SCTP and how it interacts with SMP.. or
that is my intention. I have a snapshot of the MPI code
that one of my friends at UBC has been working on
with Argonne Labs... This uses SCTP :-)

He has written a serious of tests which all now pass
(after a LOT of bugs and LOR's.. all kinds of fun :D)

Now a seperate test he has written is something called
mywaitall. Basically you setup a number of processes,
all of them get up and settled in. Then they coordinate
(near as I can tell) sharing SCTP port and address info
with each other via TCP. Then they switch over and
use the SCTP one-2-many model.. sending data to each other
setting up implicit connections.

This means that running -np 10.. I have 10 endpoints with
90 associations ... I am doing this only on the local
host side.

I run this in a
while true
do
mpiexec -np 10 ./mywaitall
echo "-------"
done


Now on the xeon machine I see a very curious failure. After
about a day of running this. I get two endpoints stuck
one has data to be transmitted the other is waiting for
it.. (the way the program works is they all send/rcv some
info and then say goodbye to each other).

Now I am seeing loss because the app version I have is
buggy... the author did not handle the sending in non-blocking
mode correctly. He thought he got a -1/EAGAIN.. instead of
a 0/0 back.. so he ends up in a tight loop doing
while (sent > -1)
    ret = dothesend()
    if(ret < 0)
       break // error
    sent += ret;


Which means we peg the CPU sending with full send windows.. He
has fixed this.. but I keep testing with the buggy version since
it finds somemany unique problems :-)

But back to my scenario. Now I have, in the past, fixed many
bugs like this that were an SCTP problem :-) but this one
I don't think so anymore..

When I find and look at the assoc's in question the sender
has some outstanding chunks (4 in the last instance) and
its timer is running as far as it is concerned. Here is
the actual callout structure:

$6 = {c_links = {sle = {sle_next = 0x0},
                  tqe = {tqe_next = 0x0,
                  tqe_prev = 0xc6dd02a8}},
        c_time = 264796819,
        c_arg = 0xc27201ec,
        c_func = 0xc0748458 <sctp_timeout_handler>,
        c_mtx = 0x0,
        c_flags = 22}

Now there is another part to the structure (the c_arg) and if
I look in there I see things like it being started 1 second
before (which one would excpect... I save the ticks of
when it was started). I also have a stopped_from field
that gets set any time someone does a stop of the timer
and when the callout is called it sets it to various
values. The time structure is opaque to the SCTP code so
it does not play with these values.. and when you look at
the ticks, its long past expiration..

Note that the 22 indicates NO_MTX | PENDING and ACTIVE.
And yet the linked lists in c_links is NOT set to anything
like I normally see these dudes..

Now I did put a extra global SCTP lock in before starting/stopping
the timer. This did make it take 2-3 days to hit this case.. but
it still happens....

Has anyone seen this ?? I have looked at the timer code and I
do see a mutex spin lock.. but I can't see how SCTP would be
causing this... I am stumped .. any suggestions would be welcome ;-)

--------------------

My second problem is even more bizzare.. if thats possible...:-D

The other p4d runs along fine for a day or so .. and then it will
just stop.. and I mean stop.. if you have a top window up (I have
x off.. to panic it when I want :-D) you see the time frozen. No
updates... it just freezes...

If you type in anything.. the machine picks up again and starts
running as if nothing had happened. The last time I created
this the time had been frozen for at least 12 hours before
I got to it :-D

I dropped directly into KDB and pulled a crash dump...

Looking at all of the SCTP assoc's there was NOTHING
happening.. no data in flight..  nothing...

Now in the past type any key, change to another set
of windows ... and ta-da.. off it runs..

I do see a few TCP timeout alarms in the app (remember
the app talks TCP to setup the SCTP stuff)...

Very wierd...

Any ideas or suggestions would be welcome.

I just did an update in prep of doing a patch (currently
passed to gnn for approval).. so my cores are invalid.. but
I can recreate them pretty easily .. it just takes a
day or so :-)

I can also let anyone that is interested in when the event
occurs of problem one to the machine... and let them
puruse the timers or whatever of the running kernel.. or
take a crash dump and let you look at that..

If anyone has heard of anything like this I would appreciate
some pointers.. it could be something SCTP is doing... at
least the timer one..

Thanks for any suggestions..

R


-- 
Randall Stewart
NSSTG - Cisco Systems Inc.
803-345-0369 <or> 803-317-4952 (cell)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?457EA7E3.2010302>