Having been a customer of Sun, as well as an employee, when I've had
a performance issue, I knew enough to make comparisons on like systems
to remove any doubt about the issue.
So the other day, a customer starts complaining about performance on a 16
core box running Oracle. When it all comes out in the wash, it turns out
they put a 16-core system behind a 4 disk, HW Raid 5 config and thought
that it should run like a comparable system (another OS, Fibre channel storage).
Huh? Are you kidding me? That's like running just on rims on an Indy Car.
Then, just to up the ante, I get another arbitrary comparison to
a different system, running a different OS, with double the cache
on the controller, and the worst possible unit of test. dd(1)
Off to get smarter about raid caching controllers.....
Off debugging my Visiontek x1550 PCI board for the radeonhd developers and I need to run something called rhd_conntest. That requires
pciutils, which provides tools like lspci and friends, including a library of the function calls. The README says pciutils compiles on Solaris, but there's some assumptions about the tool chain, which are not well stated.
Getting it working
1. Download the
pciutils tarball and unroll it in your source tree
2. The configure script uses
sed to mash up some variables for the the lib/Makefile include
(config.mk), but Solaris sed falls down on the job. Fix the configure script to use
gsed, or have a functional sed in front of /usr/bin in the PATH variable.
3. The install program has problems with the constructs in the pciutils Makefile for targets install and install-lib. Just replace install with
ginstall, or make sure a GNU install is ahead of /usr/bin and /usr/ucb
(since /usr/ucb/install is much more aligned with open source "install programs", than /usr/bin/install) in your PATH variable.
4. The
libpci.pc.in prototype in pciutils-2.2.10/lib doesn't have Libs correctly set, so add "
-R${libdir}" to the line starting with
Libs:
5. gmake is required for pciutils, and you'll need to set
CC=gcc to make it compile on Solaris.
Once it gets installed, then I had to figure out how to get pkg-config to
pick it up, which turned out to be a simple:
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
Since I'm working from a pristine environment.
This went pretty smooth given all things.
One of the things I get used to on my systems is the tool chain I get in my system, once I have it setup the way I like. However, I get frustrated when someone says "oh, go download it, run configure, you're done". Tried that this weekend with the radeonhd driver on a new Solaris Express install, and it's not quite that simple. I got a
Visiontek x1550 PCI recently since it's supposedly one of the fastest 32-bit PCI video cards, however Solaris Express B85 didn't recognize it. It appears to have a PCI-PCI_Express bridge in it and that just flat confused Solaris, reporting that all my onboard peripherals were now PCI-Express (USB, Via Rhine Ethernet, Floppy, IDE, Audio) on my Soyo Dragon Plus V1.0. I finally got the machine booting by putting back in an AGP card, and set to work at getting the driver working. I interpreted what I read on the
Opensolaris.org xwindows-discuss list that it should be a straightforward compile. IFF, you've got GIT and some other things setup, and I've got a bog-stock install.
The first pain is getting the code out of the
radeonhd GIT. I haven't seen a
Blastwave download for GIT, and have since got the hang of
spec-files-extra , so I fired up my ubuntu 7.10
QEMU image, which I was using to download the
Wine git, and pulled down the latest radeonhd source. I won't go into what happened next. Needless to say, lots of gnashing of teeth and FLW's(tm), and even when I got the driver compiled, it just spit out something that it wasn't recognized. It probably didn't help that Solaris reported all my onboard peripherals into PCI-Express devices (with nary a PCI-E bus on this AGP/PCI system) once the Visiontek PCI x1550 goes in the system, or that I have to have an AGP board in the system just to get it to boot. And for some reason, Solaris also doesn't see the second video port. So I thought it wasn't working. Eventually, after some debugging I figured out my DVI port wasn't recognized, and I got a xorg.conf file that eventually got me dual screens with my Nvidia FX5700.
I think I've got the punch list to make this work starting from a fresh Solaris Express install.
1) get
xorg utils-macros-1.1.6, configure and install. It ends up in /usr/local/share/aclocal if you don't give ./configure a
--prefix={someplace}.
2) get
xorg-server.m4 from freedesktop.org and install it in /usr/local/share/aclocal or whereever you set
--prefix={someplace}
3) download the
radeonhd GIT or a V1.2.0 April 12th, 2008 tarball.bz2 from
here and unroll it someplace.
If you have a git client, then it's a simple
git clone git://anongit.freedesktop.org/git/xorg/driver/xf86-video-radeonhd
4)Download and build
pciutils as listed in that blog entry.
5) setup environment variables to help autogen.sh (since the radeonhd code from the git HEAD doesn't have configure or friends built, though the released
xf86-vidoe-radeonhd-1.1.0.tar.bz2 does.
For sh/ksh/bash
ACLOCAL="/usr/bin/aclocal-1.10 -I/usr/local/share/aclocal"
AUTOMAKE="/usr/bin/automake-1.10"
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}"
export ACLOCAL AUTOMAKE PKG_CONFIG_PATH
For csh/tcsh
setenv ACLOCAL "/usr/bin/aclocal-1.10 -I/usr/local/share/aclocal"
setenv AUTOMAKE "/usr/bin/automake-1.10"
setenv PKG_CONFIG_PATH "/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}"
Initially, I just symlinked aclocal-1.10 to aclocal and did the same for
automake, but decided for the purposes of blogging, that I should do it the
Right Way(tm), so I found out what I should be doing.
5) Generate the radeonhd source build toolchain (configure, ltmain.sh, etc) and build
./autogen.sh (default install is to /usr/local/lib/xorg/modules/drivers)
./configure
make
6) Install the driver and get Solaris to use it
make install
cd /usr/X11/lib/xorg/modules/drivers
mv radeon_drv.so radeon_drv.so.ORIG
ln -s /usr/local/lib/xorg/modules/drivers/radeon_drv.so .
This will allow you to switch back to the original driver should something go badly.
7) do some testing. According to the release notes for Solaris, by default
radeonhd is not used so you have to create a xorg.conf file for it.
/usr/X11/bin/Xorg -configure
edit ~/xorg.conf.new and make sure variables are right, and push up to
/etc/X11/xorg.conf
Once you've got the driver installed, it's probably best to disable cde-login
or gdm-login through smf and remotely login via ssh to start the driver.
svcadm disable cde-login
/usr/X11/bin/Xorg -logverbose 7
svcadm enable cde-login
This generates a bucket of debug in /var/log/Xorg.0.log, and is one of the reasons
that I figured out that my driver was actually working, though one of my ports
just isn't discovered...
The good news is that it's working, at least on the VGA port.