Not sure why but all the hype around software defined storage seems to be reaching a crescendo. Possible due to conference season coming up but it started earlier this year. I attended an SNW analyst session that was talking about software defined storage had on its panel technical people from HDS, IBM, Data Core and VMware. It seems the distinction between storage virtualization and software defined storage is getting slimmer every time we talk about it. I have written before about software defined storage (see my Data Hypervisor post).
Server, networking and storage virtualization today
Server virtualization makes an awful lot of sense, has made lots of money and arguably been around for decades now especially in mainframe systems. Servers have so much power today that dedicating one to a single workload just doesn’t make any sense anymore.
Network virtualization from OpenFlow and others also makes a lot of sense (see OpenFlow the next wave in networking and OpenFlow part 2, Cisco’s response posts). Here we aren’t necessarily boosting network utilization as much as changing resource allocation to deal with altered traffic flows. That and the fact that provisioning, monitoring and other management characteristics can now be under pragmatic control from the user makes these systems very appealing. Especially, to organizations that exhibit varying network activity over time.
Storage virtualization has been around for a long time too and essentially places a storage system abstraction layer on top of a group of other, heterogeneous storage systems. This provides a number of capabilities such as allowing data to be migrated from one storage system to another without host knowledge or intervention. Other storage virtualization features include, centralized, management, common storage features, different storage personalities (protocols), etc. But just being able to migrate data from one storage system to another without host intervention or knowledge provides an awful lot of value, especially to large data centers which refresh technology frequently.
Software defined storage compared to server virtualization
Software defined storage seems to imply some ability to marry storage virtualization services to RESTful and other APIs which would allow programatic storage provisioning, monitoring and management. This would allow data centers to manage and control their storage without involving storage administrators in day-to-day activities.
When I compare this to server virtualization the above described capabilities really don’t increase storage utilization much. Yes, by automating provisioning or even running thin provisioning one can potentially boost storage capacity utilization but you really haven’t increased the IO utilization much by doing this.
Looking under the covers of most storage systems one might find that CPU cores are pretty idle, but data paths and storage devices are typically running flat out. One problem is that today’s enterprise storage subsystems are already highly shared across applications and users. So there is really no barrier to sharing these resources as widely as they can. As such, storage system IOPS and/or bandwidth utilization is already pretty high. I would say a typical enterprise application environment storage subsystem performance usually runs above 30% and reaching 50% or more during peak time periods. Increasing IOPS utilization much beyond that risks seriously impacting peak performance periods.
Now if somehow one could migrate slower data around a complex to lower performing storage when there’s no need for high performance and higher performing data to higher performing storage when there is a need then that could help increase performance utilization considerably. But, many storage systems already do this internally through automated storage tiering and even some can do this across storage systems using storage virtualization.
But the underlying problem here is that in takes a lot of time, resources and effort to move TBs of data around a data center, especially when its doing other work. So other than something akin to storage tiering across storage systems we are unlikely to see much increase in storage performance utilization with a gaggle of multiple storage systems. I suppose in the future moving TB of data may take much less time & resources than today but then the problem becomes moving PB of data around.
Software defined storage compared to network virtualization
When I compare the above capabilities to network virtualization it doesn’t look very similar. There’s really no way to change the storage performance to optimize it for one direction (or application) at this instant and then move storage performance around to another application a couple of hours later. Yes, again automated storage tiering can do this, and yes some of these systems can tier across storage systems using storage virtualization but in general barring storage tiering there’s nothing like this available today.
Maybe if inside a storage system the data paths could somehow be programatically reconfigured to offer say more internal bandwidth to the Device-to-Cache path vs. the Cache-to-Frontend path. Changing or reconfiguring data path resources like this could certainly optimize the internal performance of a storage system and this would be a worthwhile feature of any software defined storage. Knowing which is more important to one application and less important to all the others will take some smarts, across the storage system and host O/S but it’s certainly feasible. So, with RESTful interfaces, APIs or application hints data paths could be reconfigurations on demand to support applications that are all vieing for IO activity.
With these sorts of capabilities software defined storage starts to look a little more like software defined networking.
Software defined storage on its own
But in the end we always reach a fundamental limit of IO capabilities in today’s storage systems which is the devices. Yes you can have 2000 or more devices in high-end storage today and yes you can have all-flash arrays. However, most storage systems are configured to keep whatever devices they have pretty busy as much of the time as possible.
Until we create some sort of storage device that can provide more performance than most applications can ever use, even when they are shared via a storage system, software defined storage capabilities will be limited. Today’s SSDs have certainly boosted performance considerably but this just means that most applications that warrant all flash arrays are performing faster. It just so happens that some applications can take all the performance you throw at them and still want more.
I suppose if SSDs cost were to come down to match NL-SAS storage prices and still maintain the 100X faster IOP rate, then maybe a storage system built on such devices could be more “software defined” than others. And maybe that’s where everyone is headed, believing NAND/SSD price trends will drive costs down so much that everyone can have all the IOPS performance they will ever need out of a single storage system.
Yet, this still just looks like shared storage we have today, only more of it. So we return back to our roots and see that software defined storage is just another way to add more storage sharing. Storage virtualization is nice, new more programmatical storage systems is even better but faster-cheaper storage devices is best of all.
So what we really need is much cheaper SSDs to realize the full promise of software defined storage. In the mean time opening up APIs and providing RESTful interfaces to provide programatic interfaces to provisioning, monitoring, managing and tuning storage system data paths and other performance characteristics are all we can hope for.