|

Monday May 30, 2005
Xmms audio output on solaris
Not really a gotcha, although not being able to listen to tunes has had been known to cause a dip in my productivity ;), but I'm sure it may catch someone out and cause some annoyance - the default installation of Xmms from blastwave.org will come up with an error about being unable to find devices (generally something like /dev/dsp can't be found), giving you something like the following.
The solution is to update your preferences to use the Solaris Audio plugin rather than libOSS, just do a ctrl-p while in xmms to call up your preferences, you should get the dialog below, and select the Solaris Audio driver.
And of course if your not using blastwave.org, go take a look. These folks are providing a fantastic, and extremely usefull, service for the Solaris community (personally things such as mutt, gnupg, xmms etc all come down from blastwave as soon as I reinstall my box).
(2005-05-30 03:31:27.0)
Permalink

Thursday May 26, 2005
Suns Performance Lifestyle : Buzzword Bingo and High Level Bug Evaluation
This post falls out of a converstation I had with my boss
earlier this week. We were discussing a (non) issue which had emerged in a conference call that I had attended
the week before, where I was asked are there any peformance problems in the latest builds of a new
product, my answer was "not directly in the product, but one of the benchmarks has highlighted a problem
in build blah of another product", to which I got an answer of "oh thats okay, its not in our test
matrix anyway".
Now I'll skip how infuriating that comment was [1] (suffice to say I am of the opinion if there are free
cycles available on a rig and you have benchmarked everything that needs to be benchmarked, well add
another combination and benchmark that as well, and if its a combination that you have no doubt that a
customer is eventually going to deploy it should be in your matrix - idle machines are a waste of valuable resources. Needless to say this applies to QA work as well), and instead use some buzzwords - leveraging synergies [ yes the dilbert link is intentional ].
Synergy is one of these words that upper management in every company loves, and as for leveraging,
yes the MBA's are going wild at that one. Anyway what does this "leveraging synergies" mean in reality?
In our case it means joining all the dots of what we are doing already, and highlighting this information.
Okay, that sounds like MBA speak as well (hey, I thought of doing one at one stage, but then I reflected
on Ross Perots famous comment (paraphrasing here) that he "never willingly hired an MBA" [2]).
Our initial goal is focused on Solaris, so we run a Solaris matrix that looks like the following
| Solaris 9 Update 7 (static) |
Solaris 9 + Patches (evolving) [1..x] |
Solaris 10 (static) |
OpenSolaris (Nevada) (evolving) [1..x] |
Solaris 10 + Patches (evolving) [1..x] |
Solaris 10 Update 1 (evolving) [1..x] |
Now the thing is that you as an end user will generally be much more interested in the performance
of the app that is running on Solaris, and in our case we need these userland apps to effectively
measure the kernel performance. So say we add in a specific version of these apps into our matrix.
| App X (static) |
Solaris 9 Update 7 (static) |
Solaris 9 + Patches (evolving) [1..x] |
Solaris 10 (static) |
OpenSolaris (Nevada) (evolving) [1..x] |
Solaris 10 + Patches (evolving) [1..x] |
Solaris 10 Update 1 (evolving) [1..x] |
| App Y (static) |
Solaris 9 Update 7 (static) |
Solaris 9 + Patches (evolving) [1..x] |
Solaris 10 (static) |
OpenSolaris (Nevada) (evolving) [1..x] |
Solaris 10 + Patches (evolving) [1..x] |
Solaris 10 Update 1 (evolving) [1..x] |
| App Z (static) |
Solaris 9 Update 7 (static) |
Solaris 9 + Patches (evolving) [1..x] |
Solaris 10 (static) |
OpenSolaris (Nevada) (evolving) [1..x] |
Solaris 10 + Patches (evolving) [1..x] |
Solaris 10 Update 1 (evolving) [1..x] |
Okay, so this just looks like slightly more combinations. Where does the "leveraging synergies" come into
this? Within Sun we are not just interested in kernel performance, we are interested in what is known
as "complete system" performance, so this means looking at the application as well. The real benefits
here (or "leveraging synergies" for the buzzword bingo players)
begins when we start revving the versions of the userland applications that we are using in our
benchmarks, giving us a matrix like the following...
App X (evolving) [1..x] |
Solaris 9 Update 7 (static) |
Solaris 9 + Patches (evolving) [1..x] |
Solaris 10 (static) |
OpenSolaris (Nevada) (evolving) [1..x] |
Solaris 10 + Patches (evolving) [1..x] |
Solaris 10 Update 1 (evolving) [1..x] |
App Y (evolving) [1..x] |
Solaris 9 Update 7 (static) |
Solaris 9 + Patches (evolving) [1..x] |
Solaris 10 (static) |
OpenSolaris (Nevada) (evolving) [1..x] |
Solaris 10 + Patches (evolving) [1..x] |
Solaris 10 Update 1 (evolving) [1..x] |
| App Z (static) |
Solaris 9 Update 7 (static) |
Solaris 9 + Patches (evolving) [1..x] |
Solaris 10 (static) |
OpenSolaris (Nevada) (evolving) [1..x] |
Solaris 10 + Patches (evolving) [1..x] |
Solaris 10 Update 1 (evolving) [1..x] |
Now we have a much fuller picture of complete system performance, for relatively little more
investment. For the purposes of a practical example lets break this down a bit, say we end up with the following matrix of results after a set of runs of
application X on a set of OS images.
App X [n] |
Solaris 9 Update 7 (static) |
Solaris 9 + Patches (evolving) [n] |
Solaris 10 (static) |
OpenSolaris (Nevada) (evolving) [n] |
Solaris 10 + Patches (evolving)) [n] |
Solaris 10 Update 1 (evolving)) [n] |
App X [n+1] |
Solaris 9 Update 7 |
Solaris 9 + Patches [n+1] |
Solaris 10 |
OpenSolaris (Nevada) [n] |
Solaris 10 + Patches [n+1] |
Solaris 10 Update 1 [n+1] |
So here it is quite obvious that a new patch on Solaris 9 is causing the problem, so this is where
we starting looking. Whereas if we saw the following matrix
App X [n] |
Solaris 9 Update 7 (static) |
Solaris 9 + Patches (evolving) [n] |
Solaris 10 (static) |
OpenSolaris (Nevada) (evolving) [n] |
Solaris 10 + Patches (evolving)) [n] |
Solaris 10 Update 1 (evolving)) [n] |
App X [n+1] |
Solaris 9 Update 7 |
Solaris 9 + Patches [n+1] |
Solaris 10 |
OpenSolaris (Nevada) [n] |
Solaris 10 + Patches [n+1] |
Solaris 10 Update 1 [n+1] |
It becomes pretty obvious that build n+1 of App X is causing our problem in combination with some resource
that it is using in Solaris 9 that has evolved in Solaris 10, and we begin our bug hunt by focusing our
search there.
The benefit of creating these large combinatorial matrices for Sun, and obviously for the members of
our group, is a more worthwhile, and higher value add, usage of our time (and Sun's resources).
Narrowing down
our inital search field for a bug saves us a huge amount of time, and also allows us to assist the
developers in a much more detailed manner by providing a greater amount of pertinent information, and the actual cost is maybe another
day or two of benchmarking, which in turn may also highlight other potential problems. And as I mentioned
before this all happens automatically, so we don't even have to think about it.
[1] Infuriating, but dealt with
[2] I actually disagree with this, an MBA is a usefull qualification, but only with some
practical experience. Someone going straight from a degree to an MBA and then the workplace
is of no use to anyone, the benefits of an MBA only accrue when you have a decent amount of real world
experience to base your opinions on and and apply your MBA to.
(2005-05-26 06:18:57.0)
Permalink

Tuesday May 24, 2005
Managers blog......
So our manager (or ex-engineer as we prefer to call him) has joined bsc, drum roll please....... introducing Damien Farnham. Back in his engineering days he worked on things such as TPC and the like (predominantly focused on Sybase). Or so he likes to tell us ;). These days he does all of that management stuff that us engineers like to avoid ;).
(2005-05-24 05:14:24.0)
Permalink

Thursday May 19, 2005
Not nuking your Access Manager ldap config.....
This one caught me today, so time to share and help avoid ;). I wasn't watching what I had in a script for adding ldif data to a directory server for an Access Manager benchmark that we run as part of our ongoing Java Enterprise System benchmarking effort.
When you install Access Manager it creates a bunch of entries in your directory server related to the access manager. Now to add some userdata into this I generated a 100,000 user file with MakeLDIF from slamd, lets say its /tmp/foo.ldif, and added it into my userRoot instance of the directory server using ldif2db.
ldif2db -n userRoot -i /tmp/foo.ldif
All fine one would think, but it actually rebuilds the entire user root, and hence when I try to access the Access Manager login screen I get the following error in my logs (/var/opt/SUNWam/amAuthentication.error in this case).
"2005-05-19 15:09:11" "Invalid Domain" amAuthentication.error AUTHENTICATION-20
"Not Available" "Not Available" INFO "Not Available" "Not Available"
"cn=dsameuser,ou=DSAME Users,dc=jestest,dc=sun,dc=com" "Not Available"
So what I should have done is backup the original contents and add them back in, like so
./db2ldif -n userRoot -a /tmp/bkup.ldif
./ldif2db -n userRoot -i /tmp/bkup.ldif -i /tmp/foo.ldif
And now back to my regular scheduled work....
[ update - May 20th ]
Just noticed I had a typo in the ldif2db ordering, the original ldif file has to go first or you end up in the situation I was in initially.
(2005-05-19 08:01:28.0)
Permalink

Wednesday May 04, 2005
uint*_t and standards
After my post about getting libnjb to compile on Solaris I got a couple of comments around uint*_t types, and why we defined uint's in the manner that we do. Mainly because the convention we use is a standard, as per Ansi C99, the Single Unix Specification (which supercedes Posix and XPG).
Unfortunately all of these specs cost money to download (something of a bone of contention with me, open standards should be free to view), but the best online explanation that I can find is available in this article by Michael Barr over on O'Reilly. From that article I quote
In hindsight, it sure would have been nice if the authors of the C standard had defined
some standard names and made compiler providers responsible for providing the appropriate
typedef for each fixed-size integer type in a library header file. Alternatively, of
course, the C standard could have specified (as Java does) that each of the types short,
int, and long has a standard width on all platforms; but that can have an impact on
performance, particularly on 8-bit processors that must implement 16- and 32-bit additions
in multi-instruction sequences.
Interestingly, it turns out that the authors of a 1999 update to the ISO C standard
(hereafter "C99") did just that. It seems the ISO organization has finally put the weight
of its standard behind a preferred set of names for signed and unsigned fixed-size integer
data types. The newly defined type names are as follows:
8-bit: int8_t uint8_t
16-bit: int16_t uint16_t
32-bit: int32_t uint32_t
64-bit: int64_t uint64_t
So there you go.
[ update - 05/05/05 ]
A couple of people have commented that you can access the Unix O3 spec here, thanks for the clarification. Anyone got a url for a C99 spec that they can point us at?
[update - 07/05/05 ]
Terry Lambert pointed me at a C99 spec.
(2005-05-03 20:29:08.0)
Permalink

Tuesday May 03, 2005
Echo Chambers?
Fascinating article over on The Register entitled SCO, Groklaw and the Monterey mystery that never was. Its a lot closer to the history that I remember around project monterey.
Whats interesting is the commentary about online forums turning into "echo chambers" (or could that be Harry Potter and the chambers of conspiracy ?). The current echo on slashdot around this story is sadly predictable.
(2005-05-02 16:29:41.0)
Permalink
|