Building your own vSphere storage-accelerator card!?!

Is this blogpost going to inspire you to buy a soldering iron and build a PCI-e card? No. Is it a really cool idea to try and build a Fusion-I/O or EMC Lightning-like card in your homelab? Possibly: YES!



So what are Fusion-I/O or EMC Lighting solutions all about?

The idea behind server-side cards like these are really simple: You somehow get the cards inbetween the storage datastreams of the vSphere5 server, and you cache any data passing through on flash memory placed on the card. Some cards are smarter, some a little less smarter in the way they work. The basic idea remains the same though.

Doing read caching is not too complex for cards like these; there is no risk here in loosing data since you are only caching blocks from the array (which you then do NOT have to get from the array and this is where you win for reads). Can you also do write caching in these cards? You sure could, if you can live with potential data loss if the write was stored in the card and not yet synced to the array and your box burns down.


So how to build one of these without a soldering iron?

If you look at these server cards, and you take a step back, what do you see? Exactly, it is an appliance that has data in, data out and some solid state device on the side to cache stuff.

So what would happen if I built a virtual appliance, that uses NFS exports as an input and delivers NFS exports out again, using either memory and/or a local SSD drive as its caching device? By the sounds of this it could REALLY work. The best part? Your original NFS store would not be touched if you just did read caching. Write caching within this appliance would even be possible, especially when an SSD is used as a caching device (because the SSD would be non-volatile).

One major downdise of this solution would be the ineffectiveness of vMotion. vMotion would work, but if you want REAL performance you’d want to keep the VMs running through an appliance like this local to the appliance itself (to keep the NFS exports coming out of the appliance from traversing the physical network). A script might be able to vMotion the VMs to “their” vSphere server, or you could create a DRS rule to keep the VMs running off an appliance together with the appliance if the appliance only uses vSphere memory for its caching. Either way, this could work smooth!


So how to shape this idea

Instead of building my own appliance, I decided to look around for an appliance that already does this. After looking around for some time, I came to the conclusion that this has NOT been done yet. I could not find a single virtual appliance that would take one or more NFS exports and redeliver them from a local NFS server transparantly.

The thing that comes closest to this I think will be a ZFS-based appliance: ZFS is able to use memory as cache, and on top of that you can assign a “caching device” to ZFS as well.

Unfortunately it will not create a “transparant” appliance; the data on the external NAS (through a vmdk) or SAN device will be ZFS formatted. To bad, but at least it will be able to demonstrate the power of a software solution like this.


To the lab!

I will be testing this setup with some kind of ZFS-based NFS virtual appliance that will take caching memory or a caching device. I will be looking at appliances like Nexanta to do some fun testing! I’ll need an SSD in one of my homelab servers though, and most important…. I’ll need TIME.

Any ideas that might help here are more than welcome. How cool would it be if you can create a caching appliance within vSphere??!?!

6 Responses to “Building your own vSphere storage-accelerator card!?!”

  • bert vd l says:

    Sounds like a great idea! I have been thinking about something like your idea for a while, but didn’t come up with a solution yet.

    As for a ZFS appliance: I would recommend you to have a look at ZFSGuru. This is a clean FreeBSD server installation with the latest ZFS version and a nice webinterface to manage it.
    The cool thing about ZFS used with FLASH storage it that you not only can use FLASH as read cache, but also as write cache (ZIL)

    One of the things I tried is using a PCI based card (Marvell HyperDuo) with a normal disk and a flash disk used as cache. works pretty well, but it’s not working in ESXi 🙁

  • Hi Bert,

    Yes there could be cool possibilities here. I really do not want to use ZFS, but I would have liked it more to use a “transparent” solution like NFS-in-NFS-out. That way one would see NFS storage on the vSphere nodes which is exactly the same on the actual NFS box (but includes caching). But that would be complex to build, starting out with a ZFS appliance is definitely easier.

    I will look into ZFS guru. Using flash for write caching might be a problem, the ZIL gets 100% write operations (unless after a crash when the ZIL is used to roll back to a consistent data set). That might wear out the SSD very quickly.

    For lab work (and maybe non-persistent VDI) it might be acceptable to use NFS async (like write-back) and using memory as a write cache.

  • Edward says:

    Erik,
    What about placing files on the ZFS filesystem which are exported via iSCSI to ESXi
    Success

    • Hi Edward,

      Yes this is one of the ideas to get it working easily. It tends to become a storage applinace then, which I think is a shame. The beauty of a transparant appliance would be that you can always put it inbetween or remove it, and the data on the actual storage system would be the same as presented to vSphere, whether the appliance is inbetween or not. You could actually have a cached and a non-cached store (either iSCSI or NFS) each containing the same data.

      Still, building such an appliance would be a lot of work. I agree with you that using a ZFS-based appliance would be the easiest one to get started with, even though I’d need some empty storage and use storage vMotion to get my VM(s) there (and out if needed).

  • Bert vd L says:

    Hi Erik,

    Best wishes for the new year!

    Still walking around with this concept in my head…

    Currently looking at DragonFlyBSD with SWAPCACHE functionality with SSD’s.
    SWAPCACHE is a mechanism to use fast swap to cache filesystem data and meta-data, written for SSD disks.
    From what I have read in the documentation NFS should be able to use it, so I’ll give it a try. Will let you know if successfull!

    Other interesting development is done on the OpenBSD operating system. Quote from Theo de Raadt:
    “We wanted to make a better use of buffering. Computers today have immense quantity of unused memory. This new software almost works, we still have some minor bugs to fix, but the results so far are incredible. On computers with 16GB of RAM we can dedicate as much as 13 GB to buffering and almost no data is read from the hard drive, everything is in the RAM. It performs even faster than SSDs.”
    Could be interesting but I couldn’t find more information on how to configure this.

    kind regards,

    Bert

  • Dru says:

    I am pretty sure this has been done by Atlantis Computing with the ILIO product.
    http://www.atlantiscomputing.com/products/atlantis-ilio/
    It might be more VDI centric that you are thinkingg however.

Soon to come
  • Coming soon

    • Determining Linked Clone overhead
    • Designing the Future part1: Server-Storage fusion
    • Whiteboxing part 4: Networking your homelab
    • Deduplication: Great or greatly overrated?
    • Roads and routes
    • Stretching a VMware cluster and "sidedness"
    • Stretching VMware clusters - what noone tells you
    • VMware vSAN: What is it?
    • VMware snapshots explained
    • Whiteboxing part 3b: Using Nexenta for your homelab
    • widget_image
    • sidebars_widgets
  • Blogroll
    Links
    Archives