Re: PROBLEM: select() on TCP socket sleeps for 1 tick even if data

Michael Lindner (mikel@att.net)
Sat, 20 Jan 2001 22:20:45 -0500


OK, 2.4.0 kernel installed, and a new set of numbers:

test kernel ping-pongs/s. @ total CPU util w/SOL_NDELAY
sample (2 skts) 2.2.18 100 @ 0.1% 800 @ 1%
sample (1 skt) 2.2.18 8000 @ 100% 8000 @ 50%
real app 2.2.18 100 @ 0.1% 800 @ 1%

sample (2 skts) 2.4.0 8000 @ 50% 8000 @ 50%
sample (1 skt) 2.4.0 10000 @ 50% 10000 @ 50%
real app 2.4.0 1200 @ 50% 1200 @ 50%

real app Windows 2K 4000 @ 100%

The two points that still seem strange to me are:

1. The 1 socket case is still 25% faster than the 2 socket case in 2.4.0
(in 2.2.18 the 1 socket case was 10x faster).

2. Linux never devotes more than 50% of the CPU (average over a long
run) to the two processes (25% to each process, with the rest of the
time idle).

I'd really love to show that Linux is a viable platform for our SW, and
I think it would be doable if I could figure out how to get the other
50% of my CPU involved. An "strace -rT" of the real app on 2.4.0 looks
like this for each ping/pong.

0.052371 send(7, "\0\0\0
\177\0\0\1\3243\0\0\0\2\4\236\216\341\0\0\v\277"..., 32, 0) = 32
<0.000529>
0.000882 rt_sigprocmask(SIG_BLOCK, ~[], [RT_0], 8) = 0 <0.000021>
0.000242 rt_sigprocmask(SIG_SETMASK, [RT_0], NULL, 8) = 0
<0.000021>
0.000173 select(8, [3 4 6 7], NULL, NULL, NULL) = 1 (in [6])
<0.000047>
0.000328 read(6, "\0\0\0 ", 4) = 4 <0.000031>
0.000179 read(6,
"\177\0\0\1\3242\0\0\0\2\4\236\216\341\0\0\7\327\177\0\0"..., 28) = 28
<0.000075>

--
Mike Lindner
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/