Bob Friesenhahn wrote: > On Sat, 15 Mar 2008, Richard Elling wrote: >> >> My observation, is that each metaslab is, by default, 1 MByte in >> size. Each >> top-level vdev is allocated by metaslabs. ZFS tries to allocate a >> top-level >> vdev's metaslab before moving onto another one. So you should see eight >> 128kByte allocs per top-level vdev before the next top-level vdev is >> allocated. >> >> That said, the actual iops are sent in parallel. So it is not >> unusual to see >> many, most, or all of the top-level vdevs concurrently busy. >> >> Does this match your experience? > > I do see that all the devices are quite evenly busy. There is no > doubt that the load balancing is quite good. The main question is if > there is any actual "striping" going on (breaking the data into > smaller chunks), or if the algorithm is simply load balancing. > Striping trades IOPS for bandwidth.
By my definition of striping, yes it is going on. But there are different ways to spread the data. The way that writes are handled, ZFS rewards devices which can provide good sequential write bandwidth, like disks. Reads are another story, they read from where the data is, which in turn depends on the conditions at write time. The other behaviour you may see is that reads and writes are coalesced, when possible. At the device level you may see your smaller blocks being coalesced into larger iops. > > Using my application, I did some tests today. The application was > used to do balanced read/write of about 500GB of data in some tens of > thousand of reasonably large files. The application sequentially > reads a file, then sequentially writes a file. Several copies (2-6) > of the application were run at once for concurrency. What I noticed > is that with hardly any CPU being used, the read+write bandwidth > seemed to be bottlenecked at about 280MB/second with 'zfs iostat' > showing very balanced I/O between the reads and the writes. But where is the bottleneck? iostat will show bottlenecks in the physical disks and channels. vmstat or mpstat will show the bottlenecks in cpus. To see if the app is the bottleneck will require some analysis of the app itself. Is it spending its time blocked on I/O? > > The system I set up is performing quite a bit differently than I > anticipated. The I/O is bottlenecked and I find that my application > can do significant processing of the data without significantly > increasing the application run time. So CPU time is almost free. > > If I was to assign a smaller block size for the filesystem, would that > provide more of the benefits of striping or would it be detrimental to > performance due to the number of I/Os? I would not expect to see much difference, but the proof is in the pudding. Let us know what you find. -- richard _______________________________________________ zfs-discuss mailing list zfs-discuss@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/zfs-discuss