Hey
I thought I found a bug in ThreadSafeQueue, but convinced myself it is OK.
There could be problems in the threading core (which has been changed for
coreperformance work). However, I do not observe Click getting stuck.
Rather, I observe it performing radically slowly. The attached config prints
counter information, etc. every second. The counters keep going up. Although
the InfiniteSources often look unscheduled, this is because they *are*
unscheduled much of the time; the fast_reschedule() happens at the end of
InfintieSource::run_task(). I don't know what's going on. Commenting out all
notification does not help.
Eddie
On 2/24/11 8:12 AM, Cliff Frey wrote:
I wanted to benchmark the difference between ThreadSafeQueue and
one-queue-per-thread + RoundRobinScheduler + Unqueue + another-Queue.
However, I ended up finding a bug.
This config:
elementclass Foo {
is :: InfiniteSource -> [0] output;
};
f0::Foo,f1::Foo,f2::Foo,f3::Foo,f4::Foo,f5::Foo
-> master_q :: ThreadSafeQueue
-> uq2 :: Unqueue
-> c :: Counter(COUNT_CALL 4000000 stop)
-> Discard;
StaticThreadSched(
f0/is 0,
f1/is 1,
f2/is 2,
f3/is 3,
f4/is 4,
f5/is 5
uq2 7);
When run with 'click --threads=8 foo.click' ends up getting suck, with an
empty master_q and none of the infinitesource elements scheduled. I'm running
on a i7 CPU with 4 cores + hyperthreading, giving 8 CPUs from linux's
perspective.
Also interesting is how many drops will be seen at the queue in this case (not
too surprising really)
read f0/is.scheduled
false
read master_q.length
0
read master_q.drops
163540
read c.count
231797
Cliff
On Thu, Feb 24, 2011 at 7:27 AM, Eddie Kohler <[email protected]
<mailto:[email protected]>> wrote:
Try ThreadSafeQueue at the converge point, which as Bobby points out should
be
correct even when multithreaded, but doesn't require locks. However, it
will
still be slowish, as would be anything that tried to enforce strict order,
since the queue pointers will bounce among cores.
Eddie
On 2/23/11 9:36 PM, Philip Prindeville wrote:
> I was wondering... if I'm running multiple duplicate paths each on its
own core and I eventually need to collect them up so I can resequence
packets and pass them up into user-space... how feasible is it to go from
threaded and lockless to converging into a single locked queue (fan-in)?
>
> I figure it would be the best of both worlds because most of the
operations could happen threaded and without locking, and the locking only
needs to be enforced in the final stage...
>
> Thanks.
>
> -Philip
>
> _______________________________________________
> click mailing list
> [email protected] <mailto:[email protected]>
> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
_______________________________________________
click mailing list
[email protected] <mailto:[email protected]>
https://amsterdam.lcs.mit.edu/mailman/listinfo/click
elementclass Foo {
is :: InfiniteSource -> [0] output;
};
f0::Foo,f1::Foo,f2::Foo,f3::Foo,f4::Foo,f5::Foo
-> master_q :: ThreadSafeQueue
-> uq2 :: Unqueue
-> c :: Counter(COUNT_CALL 4000000 stop)
-> Discard;
StaticThreadSched(
f0/is 0,
f1/is 1,
f2/is 2,
f3/is 3,
f4/is 4,
f5/is 5,
uq2 7);
Script(TYPE ACTIVE,
wait 1s,
read f0/is.scheduled,
read f0/is.count,
read f5/is.scheduled,
read f5/is.count,
read uq2.scheduled,
read master_q.length,
read master_q.drops,
read c.count,
loop);
DriverManager(wait, read f0/is.scheduled, read f1/is.scheduled, read
uq2.scheduled, read master_q.length, read master_q.drops, read c.count)
_______________________________________________
click mailing list
[email protected]
https://amsterdam.lcs.mit.edu/mailman/listinfo/click