I have two hard drives, hda and hdb, both UDMA66. hda
has the ext3 root
partition, a swap partition, and a FAT32 partition. hdb just has one
10Meg FAT32 partition.
When I stream a .wav file from the FAT32 partition on hda through say
XMMS, the total system load is very low, just a few percent cpu load.
When I do the same, but from hdb's FAT32 partition, the cpu load hovers
at around 30-50%. What is responsible for all the extra cpu activity in
reading from the 2nd harddrive ?
It's hard to really say, without alot of speculation... hdb's FAT32 may be
more fragmented than hda's. Do you see UDMA66 for both devices in "dmesg"
output?
Typically, your setup is a bad one for IDE, though. If you want two HDDs in
your system, it's probably better to put the HDDs on each channel, with the
secondary one on the same channel as the DVD/CD-ROM drive (which is not used
that often). Put the second HDD on hdc (secondary master), and the cd-rom
as hdd (secondary slave). Use an 80-conductor cable on both channels, as
UDMA66 requires it.
While it's handy for extra storage to "fill up" the master/slaves, the
performance is never good. It's especially bad because you have the swap
device on the same IDE channel as another data storage device. Unlike SCSI,
IDE channels don't "overlay multiple i/o commands" or have intelligent
multiple outstanding I/O commands where the device re-targets the host when
the I/O is completed. Furthermore, the "slave" device truly is a
second-class citizen, vis-a-vis contentious I/O access attempts.
Poor chipset tunings can make all of this really really bad. There are also
some buggy CMD6xx IDE interfaces which worsen this already bad situation.
Let's first check your hdparm settings.
hdparm -v /dev/hda
hdparm -v /dev/hdb
You should see Bus-Mastering, 32-bit I/O, unmask IRQ (a bit optional, but it
can reduce IRQ latency), and MultiSector mode enabled.
Inquiry the drives for what the maximum multisect count supported is:
hdparm -i /dev/hda
hdparm -i /dev/hdb
Now, let's do some basic performance checks.
Disable swap and flush dirty buffers with:
swapoff -a
sync;sleep 2;sync
Test buffer cache + drive interface speeds:
hdparm -t -T /dev/hda
hdparm -t -T /dev/hdb
Assuming the maximum supported MultiSect count is 16 on both drives, then
configure the drives thusly:
hdparm -m16 -c1 -u1 -d1 /dev/hda
hdparm -m16 -c1 -u1 -d1 /dev/hdb
Re-test performance and compare:
hdparm -t -T /dev/hda
hdparm -t -T /dev/hdb
Good luck. Some people find that reducing the -m parametre helps lower
latency without a significant cost to performance. Try -m8 or -m4 in these
cases.
If the above doesn't do anything, then you'll need to provide the exact hdd
models, kernel version, motherboard + chipset, etc.
You can dump the IDE chipset driver's info as follows:
VIA Chipset: cat /proc/ide/via
SiS Chipset: cat /proc/ide/sis
Intel Chipset: cat /proc/ide/piix
=MB=
--
A focus on Quality.