Well, the earlier message got sent from the wrong account and bounced. However, 
it gives me an opportunity to update this further. Having spent a few more 
hours exploring it, I have found that the culprit may well have been some 
"performance enhancing" suggestions given to me by a colleague. Rebooting my 
systems (thus resetting those changes) results in slower performance - but I 
now see no impact at all from starting threads. Re-installing those changes 
results in the prior behavior.

Not sure I understand the connection, but at least it is reproducible...and 
nothing to do with libevent.

> I did some further debug on this, and I've convinced myself this isn't a 
> libevent issue. By starting various threads, I've found that we get an added 
> latency impact of about 80 nanoseconds/thread, even for threads that are 
> confirmed blocked in select or poll. Enabling libevent thread support doesn't 
> seem to have any impact at all - it's the existence of a thread that causes 
> the issue.
> 
> Best I can figure is that there is some impact via the Linux scheduler due to 
> having the additional threads, but I'm not entirely sure how to confirm 
> and/or measure that. Any thoughts would be appreciated, though I know it 
> strays from libevent itself.
> 
> Ralph
> 
> 
> On Nov 21, 2012, at 7:49 AM, Ralph Castain <ra...@castain.org> wrote:
> 
>> 
>> On Nov 21, 2012, at 7:26 AM, Nick Mathewson <ni...@freehaven.net> wrote:
>> 
>>> On Tue, Nov 20, 2012 at 5:55 PM, Ralph Castain <r...@open-mpi.org> wrote:
>>>> Hi folks
>>>> 
>>>> We have a case where we are running two parallel threads, each looping on 
>>>> their own event base (we have the libevent thread support enabled). Even 
>>>> though the two bases are running in separate threads, however, we see an 
>>>> impact on response time - i.e., if we run only one thread, events in that 
>>>> event base are serviced faster than when the other thread is in operation, 
>>>> even if no events in that thread are active.
>>>> 
>>>> Just to be clear, the two cases are:
>>>> 
>>>> Case 1
>>>> A single event base is created, and a single event loop is running. Two 
>>>> file descriptors are being monitored by separate events - when one file 
>>>> descriptor has data, that event is "activated" to handle the data. Data is 
>>>> only arriving at one file descriptor, so the other one is "quiet".
>>>> 
>>>> Case 2
>>>> Two event bases are created, each being looped by an independent thread. 
>>>> Each base is monitoring a different file descriptor. Only one file 
>>>> descriptor (for the same base as above) is receiving data - the other 
>>>> base/thread is blocked in select. We see a measurable increase in the time 
>>>> it takes for the "active" event to be serviced when compared to Case 1 - 
>>>> the difference is roughly 20%.
>>>> 
>>>> Is this cross-interaction expected? Any suggestions on how we might better 
>>>> separate the two channels?
>>> 
>>> Mysterious!
>>> 
>>> It's sure not expected that there would be that much of a drop-off.
>> 
>> To be fair, I should have clarified the scale we are talking about. That 20% 
>> corresponds to 80 nanoseconds, so it isn't a huge amount of time in absolute 
>> terms. Still, for MPI purposes, that is of concern.
>> 
>>> I'd try to look harder to diagnose what's going on.  Stuff to look at
>>> would include:
>>> 
>>> * What OS is this?  You mentioned "select" which makes me think
>>> Windows, but you didn't actually say.
>> 
>> It's CentOS 6.1
>> 
>>> * Can you trace system calls in the thread that is supposed to be
>>> idle?  Have you verified that it's really sleeping on select, or is
>>> that an inference?  (It's a reasonable inference, mind you, but when
>>> debugging, we shouldn't trust any inferences without checking.)
>> 
>> It's a good point - one of my compatriots raised it last night as well. I 
>> fear it was an inference and I'm beginning to believe it is wrong. I'll 
>> check to ensure we aren't polling.
>> 
>>> * Can you profile the code, and find out which piece exactly is
>>> taking longer here?
>> 
>> I'll do so once I verify we aren't actually polling. 
>>> 
>>> -- 
>>> Nick
>>> ***********************************************************************
>>> To unsubscribe, send an e-mail to majord...@freehaven.net with
>>> unsubscribe libevent-users    in the body.
>> 
> 
***********************************************************************
To unsubscribe, send an e-mail to majord...@freehaven.net with
unsubscribe libevent-users    in the body.

Reply via email to