Hi,

I've been running some benchmarks recently on many of my machines across
different kernels, and have been horrified by a sudden drop in the
performance measured by the Byte Benchmarks.

See: http://www.arm.linux.org.uk/docs/bench.shtml

I originally ran them against 2.2.9 kernels back in 1999, and were built
using gcc 2.7.2.2, libc 4, a.out.

I re-ran them against a variety of kernels, some 2.2 series, 2.4 series and
2.5 series after rebuilding the benchmark suite for ELF.

Mulling over any changes in the kernel didn't produce anything which could
really account for a 50% drop in performance.

I then rebuilt the benchmarks using gcc 2.7.2.2 against libc 4, and
therefore a.out.  Here are my results:

GCC 2.96, GLIBC 2.1.3, ELF
--------------------------

  BYTE UNIX Benchmarks (Version 3.11)
  System -- assabet
  Start Benchmark Run: Thu Jan  1 03:01:26 /usr/local/arm 1970
   1 interactive users.
Process Creation Test                       349.4 lps   (10 secs, 6 samples)

GCC 2.7.2.2, LIBC 4.6.27, A.OUT
-------------------------------

  BYTE UNIX Benchmarks (Version 3.11)
  System -- assabet
  Start Benchmark Run: Thu Jan  1 03:09:35 /usr/local/arm 1970
   1 interactive users.
Process Creation Test                       600.2 lps   (10 secs, 6 samples)

Both these results were taken from the same machine running the same
kernel without a reboot between the two runs.


The process creation test is basically the following code, which gets run
for a set amount of time - iter is gives the number of loops over this
time period.  6 tests are run, and the geometric average taken to arrive
at the above result.

        while (1) {
                if ((slave = fork()) == 0) {
                        /* slave .. boring */
                        /* kill it right away */
                        exit(0);
                } else if (slave < 0) {
                        /* woops ... */
                        printf("Fork failed at iteration %d\n", iter);
                        perror("Reason");
                        exit(2);
                } else
                        /* master */
                        wait(&status);
                if (status != 0) {
                        printf("Bad wait status: 0x%x\n", status);
                        exit(2);
                }
                iter++;
        }

Other notes:
------------

Note that if you look closely, a similar slowdown can be seen in the execl
case as well, it looks like a similar problem.  The ELF results for this
one are on the web page, machine id ass2416.  Here are the a.out results:

---------------------------------------------------------------------------
  BYTE UNIX Benchmarks (Version 3.11)
  System -- assabet
  Start Benchmark Run: Thu Jan  1 03:23:51 /usr/local/arm 1970
   1 interactive users.
Execl Throughput Test                       181.0 lps   (9 secs, 6 samples)


                     INDEX VALUES            
TEST                                        BASELINE     RESULT      INDEX

Execl Throughput Test                           16.5      181.0       11.0
                                                                 =========
     SUM of  1 items                                                  11.0
     AVERAGE                                                          11.0
---------------------------------------------------------------------------

The double cases are directly attributable to the performance difference
between the C coded nwfpe, and the highly optimised Acorn FPE, so I'm not
worried about these ones.

_______________________________________________
http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm
Please visit the above address for information on this list.

Reply via email to