Hello! I’m Jamie Alquiza, systems administrator at Nexcess. Performance is something our team discusses quite a bit. Today, I’ve got terrible news: IOPS are a myth. Well, almost.
You may or may not be familiar with IOPS. It’s a storage performance metric that describes how many operations per second can be delivered from your storage system. As an everyday website owner, this could suggest how quickly your website files can be accessed; how fast can this server find, open or update files? If you’re a member of the technical arm operating a website, IOPS may dictate your database performance expectations.
In the world of online sales, performance is everything. We understand the interest in these metrics because better numbers should yield better performance and ultimately a better user experience. A small delay in loading a page on a blog site may not deter the audience. This becomes increasingly true the more unique the information (personal movie review, an epic secret sauce recipe or maybe some thoughts on measuring performance).
This isn’t the case with online sales. A given item may be available from many merchants, and it’s up to the merchant to distinguish themselves among competitors as the merchant from which to purchase the item. It’s common sense wonderful designs and great prices attract consumers, but it took time and analysis to determine seemingly minor user experiences actually affected conversion rates. The industry learned a key user experience is site performance. Tight competition has taught merchants every bit of differentiation matters, and website performance became an attribute ranked along side website design and even product prices.
Now, here’s an interesting thought: you have full control over all website attributes except for performance. Performance has two general halves, and you only get one. Site design and coding significantly affects performance (see my next blog post!). You can streamline your code and reduce image sizes for faster page loads. The other half of performance is the hosting platform. This dictates how well a given set of website code can run. Identical code on two substantially different hosting platforms will yield substantially different performance. Since the hosting platform is owned by the hosting provider, providers find themselves in the very same boat as online merchants. It’s desirable to have differentiated performance metrics to attract an audience. The unfortunate downside to performance is that it’s actually quite complex. This complexity leaves massive headroom to play with numbers and allows providers to boast enticing attributes that may be misleading.
So back to storage. IOPS are one of my favorites because of how flexible the numbers are. So we know IOPS refers to how many operations per second a storage system can deliver. What’s an operation? On a traditional hard drive, it’s the drive seeking for data, reading data, modifying data and so on. Remember old hard drives making loud clicking noises? I/O operations requiring mechanical movement used to be more audible. That noise is a read/write head physically moving across the hard drive’s storage platters performing seek operations. The faster these operations can happen, the better the performance. Desktop computer hard drives are often advertised as being able to deliver say, 80 IOPS. Server hard drives? Usually 150 or more. Since more IOPS means you can get more done in a given time frame, servers usually use RAID configurations that allows data to be split across multiple hard drive so that more total IOPS were available for the data residing on it.
The trouble with advertising IOPS is that it’s often done without context. “Our server can deliver 100,000 IOPS!” Are these seeks per second? Reads per second? Read/modify/write operations per second? How large are the I/O requests? Are the requests random or sequential? 1,000 random synchronous writes per second is so much more impressive than 100,000 reads per second from a controller cache. Fortunately, this discussion will now become less technical and more interesting for consumers who don’t have the time to understand IOPS. What really matters is latency. Latency is something we’re familiar with in every day life. Imagine the last time you were picking up coffee and late for work. Every second counts. “Did this guy in front of me order the entire menu?” You probably started on some rudimentary math to measure up your impatience; how many people were in line, how many steps it takes to make a coffee, what everyone is ordering. If the coffee house were a hard drive, every customer in line is an I/O request. Every card swipe, milk frothed, cream stirred—that’s an operation being performed by the hard drive. Should you be interested in how many operations per second can be performed? Sometimes. But we can’t forget about latency. If you’re the only person in line, ordering one coffee with cream should be quite fast. On the other hand, ordering an espresso with no cream requires waiting for the espresso shot to be delivered and ultimately more time spent waiting even if both tasks require the same number of steps. This is latency experienced through single but different I/O requests. Another interesting perspective is not all operations contribute to how much time you spend waiting. Having 10 customers in line (an I/O queue depth) may mean more aggregate operations per second being performed, but much more time spent waiting since only 1/10th of the operations are applicable to your order.
Metrics like IOPS require context. And even with context, they’re quite complicated and can be as easily misleading as they are misunderstood. I personally like to believe that these sort of measurements are best used to build the right platforms rather than to describe them, and that the user experience is the ultimate benchmark. I’m looking forward to extending this discussion with future blog posts on performance, and although I have some topics in mind, I’d love to hear suggestions!Posted in: Nexcess