On Wed, November 4, 2009 11:41 am, Michael Evans wrote: > On Tue, Nov 3, 2009 at 4:37 PM, Chris Worley <worleys@xxxxxxxxx> wrote: >> On Tue, Nov 3, 2009 at 5:29 PM, Michael Evans <mjevans1983@xxxxxxxxx> >> wrote: >>>> >>>> So, you're saying that the MD layer is doing it's own buffering? Are >>>> you sure? With the system cache disabled and the drive (and block >>>> device driver) cache disabled, there should be no reason to require >>>> synchronous I/O, unless, as you suggest, the MD layer is broken. MD only does buffering for RAID4/5/6, and then normally only for writes. It has to buffer writes so that it can create the XOR reliably. >>>> >>>> You're saying that both O_DIRECT and O_SYNC must be used to disable >>>> cache effects. Why then are there two separate flags and not just one? >>>> Synchronous is a very different behavior that is not necessary for >>>> this test and put additional requirements that are not needed for this Without O_SYNC, the filesystem metadata which records where the blocks in the file are may be not be updated synchronously. This is probably what you want when testing device throughput. So just using O_DIRECT is correct. >>>> test. >>>> >>>> Chris >>>> >>> >>> Reading the manual page it seems O_DIRECT explicitly minimizes any >>> attempts at extra copying; not explicitly disabling buffers, merely >>> not adding more. In another mail thread this tweak-able was >>> discussed: >>> >>> echo 0 > /sys/block/md*/md/stripe_cache_size >>> >>> Which would should (I think) disable any cache involved with the md >>> layer. And given that the cache - where available - is essential, this would effectively stop your md array.... except that numbers less than 16 are rejected. >> >> Stripe_cache_size doesn't seem to exist in the /sys/block/md*/md/ >> directory on the RHEL5.3 2.6.18-92 kernel I'm using. >> >> # ls /sys/block/md*/md/s* >> /sys/block/md0/md/safe_mode_delay /sys/block/md0/md/suspend_hi >> /sys/block/md0/md/suspend_lo /sys/block/md0/md/sync_action >> /sys/block/md0/md/sync_completed /sys/block/md0/md/sync_speed >> /sys/block/md0/md/sync_speed_max /sys/block/md0/md/sync_speed_min RAID1 does not have a stripe cache, hence no 'stripe_cache_size'. As to why RAID1 appears fast than the plain drive, I cannot imagine. I would need specific details of exactly the tests that were run, exactly the results obtained, and exactly the version of the various software used. NeilBrown -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html