From: James Antill <james@and.org>
To: Ben Greear <greearb@candelatech.com>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
linux-net <linux-net@vger.kernel.org>
Subject: Re: OT: problem with select() and RH 7.3
Date: 14 May 2002 16:15:16 -0400 [thread overview]
Message-ID: <m3vg9qcwq3.fsf@code.and.org> (raw)
In-Reply-To: <3CDDC194.7000405@candelatech.com>
Ben Greear <greearb@candelatech.com> writes:
> Appologies for an OT post, but I am hoping someone here will
> have an answer.
>
> It appears that the select() call as found in RH 7.3 waits too
> long before it returns. I come to this conclusion because I
> was dropping a large number of UDP packets when I allowed the
> select timeout to be > 0. However, if I force the timeout to
> be zero in all cases, almost no packets are dropped (but the
> packet generator/receiver uses all of the CPU) My traffic pattern
> is 10Mbps send + 10Mbps receive on 4 ports (of a DFE-570tx 4-port
> NIC, tulip driver), pkt size of 1200 to 1514.
>
> If I understand select() correctly, it should work equally fast
> with a timeout of zero or 10 minutes, as long as the file descriptors
> are ready to be read from or written to.
You don't understand select()/poll() correctly.
If you call select()/poll() with a timeout then every "event" has to
be added to a kernel wait queue, and then removed from the wait queue
when any of those events happen or the timeout occurs.
[snip ... ]
> If anyone has any ideas or suggestions, I'd love to hear them!
Do a double poll() call, Eg. this code uses socket_poll and timer_q
from http://www.and.org/ ...
static int mypoll(void)
{
const struct timeval *tv = timer_q_first_timeval();
int ret = 0;
int msecs = -1;
if (tv)
{
long diff = 0;
struct timeval now_timeval;
gettimeofday(&now_timeval, NULL);
diff = timer_q_timeval_diff_msecs(tv, &now_timeval);
if (diff > 0)
{
if (diff >= INT_MAX)
msecs = INT_MAX - 1;
else
msecs = diff;
}
else
msecs = 0;
}
if (!(ret = socket_poll_update_all(0)) && msecs)
return (socket_poll_update_all(msecs));
return (ret);
}
--
# James Antill -- james@and.org
:0:
* ^From: .*james@and\.org
/dev/null
prev parent reply other threads:[~2002-05-14 20:15 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-05-12 1:12 OT: problem with select() and RH 7.3 Ben Greear
2002-05-12 14:04 ` Alex Riesen
2002-05-14 20:15 ` James Antill [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m3vg9qcwq3.fsf@code.and.org \
--to=james@and.org \
--cc=greearb@candelatech.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-net@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.