Sparc slowdown - problem identified...

Harti Brandt brandt at
Fri Aug 15 03:20:46 PDT 2003

Hi all,

it seems I have identified which commit causes the slow down on some
sparcs. The kernel from just before that commit works just fine, the
kernel from just after it is 3x slower on my Ultra-10 (as was also
reported by others). I have no idea why that happens. The only difference
in the time -l report is user and system time going up by a factor of
three and the involuntary context switches doubling.

It is also not (easily) possible to revert that commit, because of other
changes (for example, pci.c:1.220). When I simply revert the change, the
machine gets a missed data trap when accessing register 14 on non-existing
slots, when I add register 14 in the if() at the start of
psycho_read_config, the machine freezes after finding pci1.

Could please someone of the low-level sparc experts look at the problem?

While doing my binary search I also noted a gradual shift in performace
with time in the order of 5% (performance getting worse) in two month.
Wouldn't it be feasable to, let's say, run once or twice a week two simple
benchmarks (one disk bound, the other cpu bound) on a fresh kernel and
have the results available on a web-site, so that we can note such
performance shifts?

harti brandt,
brandt at, harti at

---------- Forwarded message ----------
Date: Sat, 21 Jun 2003 18:26:08 -0700 (PDT)
From: John-Mark Gurney <jmg at>
To: src-committers at, cvs-src at, cvs-all at
Subject: cvs commit: src/sys/sparc64/include bus.h cpufunc.h
    src/sys/sparc64/pci psycho.c src/sys/sparc64/sparc64 support.S

jmg         2003/06/21 18:26:08 PDT

  FreeBSD src repository

  Modified files:
    sys/sparc64/include  bus.h cpufunc.h
    sys/sparc64/pci      psycho.c
    sys/sparc64/sparc64  support.S trap.c
  add support for peeking at pci busses on UltraSparc systems.  This prevents
  data access errors when trying to read/write to non-existant PCI devices.

  fix the psycho bridge to use peek for probing devices.  This no longer
  fakes it if the OFW node doesn't exist (and the reg == 0).

  Reviewed by:    jake, tmm

  Revision  Changes    Path
  1.28      +27 -0     src/sys/sparc64/include/bus.h
  1.17      +9 -0      src/sys/sparc64/include/cpufunc.h
  1.39      +19 -12    src/sys/sparc64/pci/psycho.c
  1.27      +52 -0     src/sys/sparc64/sparc64/support.S
  1.64      +25 -0     src/sys/sparc64/sparc64/trap.c

More information about the freebsd-sparc64 mailing list