xfs
[Top] [All Lists]

Re: nfs/local performance with software raid5 and xfs and SMP

To: Simon Matter <simon.matter@xxxxxxxxxxxxxxxx>
Subject: Re: nfs/local performance with software raid5 and xfs and SMP
From: Andrew Morton <andrewm@xxxxxxxxxx>
Date: Thu, 19 Jul 2001 16:58:04 +1000
Cc: Tru Huynh <tru@xxxxxxxxxx>, "linux-xfs@xxxxxxxxxxx" <linux-xfs@xxxxxxxxxxx>
References: <3B55E49E.5B4B6CEF@xxxxxxxxxx> <3B567DE2.90F09F41@xxxxxxxxxxxxxxxx>
Sender: owner-linux-xfs@xxxxxxxxxxx
Simon Matter wrote:
> 
> ...
> Could you try RAID5/XFS with the onboard IDE controller and SMP Kernel?
> This way we could find out whether it's the 3ware / SMP / RAID5
> combination that makes the problem. I'm running several servers here
> with RAID5 on IDE and SCSI with good results but all of them are
> single CPU systems.

Some fairly significant RAID5 and RAID1 bugs were fixed in 2.4.7-pre5
or thereabouts.  One of them could cause largish IO stalls.

> 
> 3c905C NIC? I was having performance problems with them while the
> 3c905B were doing very fine.

905C should be in good shape nowadays.  There were some problems
with the 3c905CX, but they were farily obvious - it didn't receive
anything.

Dr Huynh should run a few network tests - look at the output of
`ifconfig' for errors, ping the server from another host while
the NFS load is applied, etc.

But I would mainly be suspecting the RAID5 timing problems.

This is the magical chunk:

Index: drivers/md/raid5.c
===================================================================
RCS file: /opt/cvs/lk/drivers/md/raid5.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -u -r1.17 -r1.18
--- drivers/md/raid5.c  2001/06/21 17:50:29     1.17
+++ drivers/md/raid5.c  2001/07/10 12:34:44     1.18
@@ -66,10 +66,11 @@
                        BUG();
                if (atomic_read(&conf->active_stripes)==0)
                        BUG();
-               if (test_bit(STRIPE_DELAYED, &sh->state))
-                       list_add_tail(&sh->lru, &conf->delayed_list);
-               else if (test_bit(STRIPE_HANDLE, &sh->state)) {
-                       list_add_tail(&sh->lru, &conf->handle_list);
+               if (test_bit(STRIPE_HANDLE, &sh->state)) {
+                       if (test_bit(STRIPE_DELAYED, &sh->state))
+                               list_add_tail(&sh->lru, &conf->delayed_list);
+                       else
+                               list_add_tail(&sh->lru, &conf->handle_list);
                        md_wakeup_thread(conf->thread);
                } else {
                        if (test_and_clear_bit(STRIPE_PREREAD_ACTIVE, 
&sh->state)) {
@@ -1167,10 +1168,9 @@
 
        raid5_activate_delayed(conf);
        
-       if (conf->plugged) {
-               conf->plugged = 0;
-               md_wakeup_thread(conf->thread);
-       }       
+       conf->plugged = 0;
+       md_wakeup_thread(conf->thread);
+
        spin_unlock_irqrestore(&conf->device_lock, flags);
 }


<Prev in Thread] Current Thread [Next in Thread>