I looked into the cause of the ddraid oops noted in the earlier benchmark posting. It turned out to be just the fact that nothing prevents the dm device from being removed while there is still deferred timer IO pending. I filled out the missing benchmark table entries by just not removing the device. the correct fix is probably to teach ddraid's destroy method to wait patiently until all the child events complete. Alternatively, we could think about a higher level dm mechanism that understands how to wait for pending events other than just IO transfers before calling the destroy method. Or I can just hack this into the destroy method for now and think about lifting it up into device mapper later. Anyway, the missing numbers are for all overhead enabled on the ddraid order 2, in other words, the most interesting numbers. The overheads in question are the parity calculations (calc) and the shared persistent dirty log (sync). We see that in this case ddraid finishes the tar test dead even with IO to the raw disk. But ddraid is doing more of course, it is running the dirty log, futzing with bio vectors and calculating parity on read and write. So the dirty log is very efficient, even in the lots-of-small-transfers case. In the nonfragmented IO case, ddraid does very well, as before. Even with the dirty logging, ddraid order 2 is more than twice as fast as a single raw disk. -------------------- untar linux-2.6.11.3 -------------------- raw scsi disk process: real 48.994s user 45.526s sys 3.063s umount: real 3.084s user 0.002s sys 0.429s ddraid order 1, no calc, no sync process: real 49.942s user 46.328s sys 3.028s umount: real 2.034s user 0.005s sys 0.626s ddraid order 1, calc, no sync process: real 50.864s user 46.221s sys 3.195s umount: real 1.839s user 0.006s sys 1.099s ddraid order 1, calc, sync process: real 50.979s user 46.382s sys 3.222s umount: real 1.895s user 0.002s sys 0.531s ddraid order 2, no calc, no sync process: real 49.532s user 45.837s sys 3.145s umount: real 1.318s user 0.004s sys 0.718s ddraid order 2, calc, no sync process: real 49.742s user 45.527s sys 3.135s umount: real 1.625s user 0.004s sys 1.054s ddraid order 2, no calc, sync process: real 50.620s user 46.285s sys 3.122s umount: real 1.293s user 0.003s sys 1.103s ddraid order 2, calc, sync process: real 50.832s user 46.495s sys 3.084s umount: real 1.437s user 0.004s sys 0.787s --------------------------------- cp /zoo/linux-2.6.11.3.tar.bz2 /x --------------------------------- raw scsi disk process: real 0.258s user 0.008s sys 0.236s umount: real 1.019s user 0.003s sys 0.032s raw scsi disk (again) process: real 0.264s user 0.013s sys 0.237s umount: real 1.053s user 0.005s sys 0.029s raw scsi disk (again) process: real 0.267s user 0.018s sys 0.233s umount: real 1.019s user 0.006s sys 0.028s ddraid order 1, calc, no sync process: real 0.267s user 0.007s sys 0.243s umount: real 0.568s user 0.006s sys 0.250s ddraid order 1, no calc, sync process: real 0.267s user 0.011s sys 0.240s umount: real 0.608s user 0.002s sys 0.032s ddraid order 1, calc, sync process: real 0.265s user 0.008s sys 0.239s umount: real 0.596s user 0.004s sys 0.042s ddraid order 2, no calc, no sync process: real 0.266s user 0.013s sys 0.234s umount: real 0.381s user 0.004s sys 0.049s ddraid order 2, calc, no sync process: real 0.269s user 0.010s sys 0.239s umount: real 0.392s user 0.004s sys 0.201s ddraid order 2, no calc, sync process: real 0.261s user 0.004s sys 0.244s umount: real 0.437s user 0.003s sys 0.195s ddraid order 2, calc, sync process: real 0.266s user 0.009s sys 0.240s umount: real 0.441s user 0.007s sys 0.026s