(TXT) View source
# 2025-11-21 - BSD Versus Linux
In 1999 i set up my first Linux server in a professional context. I
used existing hardware and Debian 2.1 (Slink). It worked great
except for a kernel OOPS that happened several times per month,
requiring a reboot. I couldn't understand the garbledygook in the
kernel messages, so i asked for help, probably on a Debian mailing
list. Nobody replied.
I tried NetBSD (1.4?) on the same hardware, and it was rock solid.
The NetBSD bug tracking system and mailing lists were a much
friendlier place for me, as a Unix newbie, compared to Debian.
So i went with that.
A year or so later, my supervisor figured out the root cause of the
Debian server instability. Linux was enabling Ultra DMA 3 for
faster disk access, which requires an 80-conductor ribbon cable. The
server only had a 40-conductor ribbon cable. This resulted in
cross-talk and data corruption, causing random, sporadic crashes.
The solution was to replace it with an 80-conductor ribbon cable.
(TXT) UDMA
I am no longer a newbie and i still don't understand why NetBSD
worked better. Reviewing the source code, i see that NetBSD 1.4
supported Ultra DMA. It should have enabled whatever level of UDMA
the disk claimed to support.
(HTM) wd(4) from NetBSD 1.4
For some reason NetBSD operated the disk at a lower speed, so it
never crashed. The 40 conductor ribbon cable happened to be good
enough. Perhaps NetBSD's cache flushing and filesystem defaults were
simply more conservative and sane compared to Linux.
It was a happy accident that it worked at all. In my experience this
is true of much of technology. To pretend that the technology is
pure or correct is a mistake. The important aspect is the social
aspect, keeping in mind human creators and human users. Otherwise
your dogma might get run over by your karma.
This human centered approach is what made BSD superior to Linux in
my book. I was willing to trade performance losses for better
community, documentation, and organization.
This is essentially the same point i made in another post:
(DIR) SystemD versus SYSV
p.s.
Today someone told me that i could have worked around this with
the NODMA Linux kernel command line option.
Debian 2.1 (Slink) used Linux kernel version 2.0.
(HTM) Debian Linux Kernel 2.0.33 Source Code (6 MB)
Documentation/ide.txt says:
> Bus-Master DMA support for Intel PCI Triton chipset IDE interfaces
> for details, see comments at top of triton.c
drivers/block/triton.c says:
> The hdparm-2.4 (or later) utility can be used for manually
> enabling/disabling DMA support, but must be (re-)compiled against
> this kernel version or later.
So if i had understood the garbledygook that the Linux kernel OOPS
had printed on my console, i could have minimized my risk of crashes
by editing my boot scripts and adding the following command to force
Ultra DMA 2:
hdparm -d1 -X18 /dev/hda
Later, Linux got boot parameters to disable DMA:
* Linux 2.4 -- ide=nodma
* Linux 2.6 -- ide0=nodma
* Later -- ide_core.nodma=0.0
* Even later -- libata.dma = 0
In contrast, NetBSD's option to disable DMA has remained the same:
wd* at atabus? drive ? flags 0x0f00
Now if only i had a time machine to send this information to my
befuddled self in 1999.
tags: bencollver,retrocomputing,technical,unix
# Tags
(DIR) bencollver
(DIR) retrocomputing
(DIR) technical
(DIR) unix