Machines used for testing

Server:
  • spud2.woodstock.clarkson.edu
  • AMD Athlon 800 MHz processor
  • 256 MB of RAM
  • 100 Mb Ethernet Card
  • Redhat Linux 7.2
    Linux version 2.4.7-10 (bhcompile@stripples.devel.redhat.com) (gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)) #1 Thu Sep 6 16:46:36 EDT 2001
    
    processor       : 0
    vendor_id       : AuthenticAMD
    cpu family      : 6
    model           : 4
    model name      : AMD Athlon(tm) Processor
    stepping        : 2
    cpu MHz         : 800.056
    cache size      : 256 KB
    fdiv_bug        : no
    hlt_bug         : no
    f00f_bug        : no
    coma_bug        : no
    fpu             : yes
    fpu_exception   : yes
    cpuid level     : 1
    wp              : yes
    flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr syscall mmxext 3dnowext 3dnow
    bogomips        : 1595.80
    
    Client:
  • popcorn.riverside.clarkson.edu
  • Intel Pentium II
  • 224 MB of RAM
  • 100 Mb Ethernet Card
  • Redhat Linux 7.0
    Linux version 2.2.16-22 (root@porky.devel.redhat.com) (gcc version egcs-2.91.66
    19990314/Linux (egcs-1.1.2 release)) #1 Tue Aug 22 16:49:06 EDT 2000
    
    processor       : 0
    vendor_id       : GenuineIntel
    cpu family      : 6
    model           : 5
    model name      : Pentium II (Deschutes)
    stepping        : 1
    cpu MHz         : 398.273
    cache size      : 512 KB
    fdiv_bug        : no
    hlt_bug         : no
    sep_bug         : no
    f00f_bug        : no
    coma_bug        : no
    fpu             : yes
    fpu_exception   : yes
    cpuid level     : 2
    wp              : yes
    flags           : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36
    mmx fxsr
    bogomips        : 794.62
    

    Scripts Used for testing

    Client Test Script

    #!/usr/bin/perl
    
    @threadnums = (1,2,4,8,16,32);
    @loopnums = (1,100,1000,10000,100000,500000);
    $base   = 10010;
    $checks = 10000;
    $ip="127.1";
    
    foreach $threadnum (@threadnums)
    {
        foreach $loopnum (@loopnums)
        {
            for($i=0;$i<($threadnum *2) -1;$i++)
            {
                print("./client $ip $base &\n");
                system("./client $ip $base &");
            }
            printf("./client $ip $base\n");
            system("./client $ip $base");
            sleep(5);
            $base++;
        }
    }
    

    Server Test Script

    #!/usr/bin/perl
    
    
    @threadnums = (1,2,4,8,16,32);
    @loopnums = (1,100,1000,10000,100000,500000);
    $base   = 10010;
    $checks = 10000;
    unlink("thread.results");
    foreach $threadnum (@threadnums)
    {
        foreach $loopnum (@loopnums)
        {
            $temp = int($checks / $loopnum) + 200;
            print("./server $base $threadnum $loopnum $temp  >> thread.results\n");
            system("./server $base $threadnum $loopnum $temp >> thread.results");
            $base++;
        }
    }
    

    Results of Testing

    Loops:      1  Threads:  1 Dispatches/sec:    526.660
    Loops:    100  Threads:  1 Dispatches/sec:    533.225
    Loops:   1000  Threads:  1 Dispatches/sec:    267.247
    Loops:  10000  Threads:  1 Dispatches/sec:     55.794
    Loops: 100000  Threads:  1 Dispatches/sec:      6.596
    Loops: 500000  Threads:  1 Dispatches/sec:      1.325
    Loops:      1  Threads:  2 Dispatches/sec:    666.329
    Loops:    100  Threads:  2 Dispatches/sec:     16.175
    Loops:   1000  Threads:  2 Dispatches/sec:    247.148
    Loops:  10000  Threads:  2 Dispatches/sec:     64.766
    Loops: 100000  Threads:  2 Dispatches/sec:      6.664
    Loops: 500000  Threads:  2 Dispatches/sec:      1.328
    Loops:      1  Threads:  4 Dispatches/sec:    575.043
    Loops:    100  Threads:  4 Dispatches/sec:    966.688
    Loops:   1000  Threads:  4 Dispatches/sec:    381.330
    Loops:  10000  Threads:  4 Dispatches/sec:     65.346
    Loops: 100000  Threads:  4 Dispatches/sec:      6.775
    Loops: 500000  Threads:  4 Dispatches/sec:      1.375
    Loops:      1  Threads:  8 Dispatches/sec:    616.021
    Loops:    100  Threads:  8 Dispatches/sec:    339.300
    Loops:   1000  Threads:  8 Dispatches/sec:    304.173
    Loops:  10000  Threads:  8 Dispatches/sec:     67.703
    Loops: 100000  Threads:  8 Dispatches/sec:      6.781
    Loops: 500000  Threads:  8 Dispatches/sec:      1.433
    Loops:      1  Threads: 16 Dispatches/sec:    617.017
    Loops:    100  Threads: 16 Dispatches/sec:    496.465
    Loops:   1000  Threads: 16 Dispatches/sec:    346.666
    Loops:  10000  Threads: 16 Dispatches/sec:     61.634
    Loops: 100000  Threads: 16 Dispatches/sec:      6.854
    Loops: 500000  Threads: 16 Dispatches/sec:      1.505
    Loops:      1  Threads: 32 Dispatches/sec:   1053.896
    Loops:    100  Threads: 32 Dispatches/sec:    381.208
    Loops:   1000  Threads: 32 Dispatches/sec:    313.846
    Loops:  10000  Threads: 32 Dispatches/sec:     89.955
    Loops: 100000  Threads: 32 Dispatches/sec:      8.458
    Loops: 500000  Threads: 32 Dispatches/sec:      2.130
    

    Source Code

  • threadpool.tar.gz
  • code/