Re: O(n^2) or worse ? cat /proc/net/tcp

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Matti Aarnio
Date: Thursday, March 27, 2008 - 4:49 am

On Sun, Mar 23, 2008 at 04:20:21PM -0700, David Miller wrote:


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@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
O(n^2) or worse ? cat /proc/net/tcp, Matti Aarnio, (Sun Mar 23, 3:43 pm)
Re: O(n^2) or worse ? cat /proc/net/tcp, David Miller, (Sun Mar 23, 4:20 pm)
Re: O(n^2) or worse ? cat /proc/net/tcp, Matti Aarnio, (Sun Mar 23, 8:33 pm)
Re: O(n^2) or worse ? cat /proc/net/tcp, Andi Kleen, (Sun Mar 23, 9:06 pm)
Re: O(n^2) or worse ? cat /proc/net/tcp, Matti Aarnio, (Thu Mar 27, 3:51 am)
Re: O(n^2) or worse ? cat /proc/net/tcp, Matti Aarnio, (Thu Mar 27, 4:49 am)
Re: O(n^2) or worse ? cat /proc/net/tcp, David Miller, (Thu Mar 27, 2:28 pm)