Performance during Multi-Threaded Reading/Writing
With this pattern we will explore the controller’s ability to perform multi-threaded sequential reading and writing by emulating several applications demanding large files all at the same time. IOMeter’s test agent (called Worker) that emulates an application sequentially reads/writes 64KB blocks of data starting from a certain sector. By increasing the number of requests coming from one Worker (from 1 to 8 stepping 1) we examine the ability of the drive or controller to reorder the requests (to glue several requests to sequentially located data together into one request). By increasing the number of the Workers we put a heavier load on the disk subsystem – like in the real environment when several applications are competing to access the drives. Each Worker works with its own data (i.e. the data addresses requested by the Workers are different).
The diagram below shows the speed of the arrays at a load of 1 request as the most probable in real environments.
The RAID0 arrays are all marked with the same color, the RAID5 arrays with another, and the mirroring arrays with a third color. The single drive and the RAID6 arrays have their own colors, too. The order of the arrays in the diagram corresponds to their order in the legend: the higher the bar, the more disks there are in the array.
At a load of one request per one thread the RAID0 and RAID5 arrays show good scalability: their speed is higher in proportion to the number of disks per array. The single drive performs almost as fast as the RAID1. The read speeds of the RAID10, RAID6 and the three-disk RAID5 almost coincide, too.
The arrays all slow down when processing two threads simultaneously, although the RAID0 and RAID5 still show performance scalability depending on the number of disks per array. With two threads, the hard drives’ read/write heads have to be constantly moving between the two work zones, so you can’t hope to achieve the linear speed. The HDDs we use in the tests are optimized for server use, i.e. have a very small access time. That’s why you shouldn’t expect look-ahead reading from them.
The speeds of all the arrays grow up a little as we add more threads.
And here are the results for writing:
The writing results look better. At a load of one request in one thread, the arrays are somewhat slower than at reading, but there is performance scalability of RAID0 and RAID5 arrays depending on the number of disks per array. The single drive’s speed almost coincides with the speed of the RAID1. The RAID10 is as fast as the two-disk RAID0.
But at two threads the write speed of every array is much higher than at reading. Even though the speed of almost each array becomes lower when we add more threads, it still remains higher than at reading when three and four threads are being processed!