[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20080327114911.GT3700@mea-ext.zmailer.org>
Date: Thu, 27 Mar 2008 13:49:11 +0200
From: Matti Aarnio <matti.aarnio@...iler.org>
To: David Miller <davem@...emloft.net>
Cc: netdev@...r.kernel.org
Subject: Re: O(n^2) or worse ? cat /proc/net/tcp
On Sun, Mar 23, 2008 at 04:20:21PM -0700, David Miller wrote:
> From: Matti Aarnio <matti.aarnio@...iler.org>
> Date: Mon, 24 Mar 2008 00:43:07 +0200
>
> > I have about 750 TCP socket on one multi-threaded server application, and
> > about 250 on three single-threaded clients.
> >
> > I did observe odd slowness at first with "lsof -p .." program, then at
> > "netstat -na". Same slowdown happens with: cat /proc/net/tcp
> > (that 'cat' took 25 seconds...)
> >
> > Sure this is not earth shatterinly dangerous thing, rather a nuisance
> > when a monitoring application is not as fast as one would expect.
>
> There have been some improvements in this area over the
> past few releases.
>
> If you tell us what version you're running we can try to
> dig out the changes that matter.
I cooked up a small perl "client-server application" (at the end) that
opens up several hundred TCP sockets in between its two halfs.
It doesn't do anything else, that is the machine is _IDLE_ after socket
creations:
$ time cat /proc/net/tcp|wc;time cat /proc/net/tcp|wc;time cat /proc/net/tcp|wc
2215 35650 332250
real 0m35.731s
user 0m0.005s
sys 0m35.721s
1815 29445 272250
real 0m25.328s
user 0m0.004s
sys 0m25.309s
1815 30850 272250
real 0m29.521s
user 0m0.004s
sys 0m29.508s
Kernel:
2.6.25-0.90.rc3.git5.fc9 #1 SMP Tue Mar 4 20:19:33 EST 2008 x86_64 x86_64 x86_64
Machine:
vendor_id : AuthenticAMD
cpu family : 15
model : 35
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4400+
stepping : 2
cpu MHz : 2211.331
bogomips : 4425.68
Odd.. Another machine with slightly older kernel is definitely swifter
although it clocks less than half of the bogomips..
$ time cat /proc/net/tcp | wc
1822 30969 273300
real 0m6.674s
user 0m0.008s
sys 0m6.669s
2.6.25-0.40.rc1.git2.fc9 #1 SMP Wed Feb 13 17:17:48 EST 2008 x86_64 x86_64 x86_64 GNU/Linux
vendor_id : AuthenticAMD
cpu family : 15
model : 75
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4200+
stepping : 2
cpu MHz : 1000.000
bogomips : 2006.08
#!/usr/bin/perl
# Simple test load generator for Linux kernel related
# "cat /proc/net/tcp" performance issue..
use IO::Socket::INET;
my @rd = ();
my @wr = ();
my $rc = fork();
if ($rc == 0) { ## Child
$srv = IO::Socket::INET->new( Type => SOCK_STREAM, Listen => 900, LocalPort => 9988,
ReuseAddr => 1, Blocking => 1 );
while (1) {
my $s = $srv->accept();
push @rd, $s;
}
exit;
}
sleep 1; # make sure the "server" starts before our client-side does connects..
foreach my $i (1..900) {
my $s = IO::Socket::INET->new( Proto => TCP, PeerPort => 9988, PeerAddr => 'localhost' );
push @wr, $s;
};
while (1) {
sleep 100;
}
exit 0;
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists