One of the things I’m known for is NAT, or Network Address Translation. This leads many to ask, “What are you doing in the storage business?”
A “technical expert” declared, “I see a network guy, but I don’t see a storage guy.” (This particular VC “expert” worked for a large Fibre Channel firm that eventually lost its independence.)
What people don’t seem to understand is that storage is networking. Everyone knows there are spinning disks and solid-state disks. One is a stack of platters, spinning from 5,400 to 15,000 RPM. The other is a printed circuit board with NAND flash and a controller chip that executes legacy SATA commands. These are two very different creatures.
How then can spinning and solid state be so different, yet users can easily move between the two mediums? Although the drives differ, they still fit in the same bays because it turns out they use the same network interfaces, either SATA or SAS.
SATA and SAS are simply network devices. They use two twisted pairs of wire to send packets from a host to a device. These packets, called Frame Information Structures (FIS), are just another kind of network packet.
SATA has only two ends of a network: the host and the device. This means it doesn’t need a header with addresses. There is, however, a thirty-two bit Frame Check Sequence (FCS) just like Ethernet.
With SAS, we can have expanders allowing, say, eight physical ports to communicate with thirty-six disk drives, as in Coraid’s SRX/3641. To do this, a call is placed between the host and the disk. That’s right, a call, as in telephone call. You can’t get more network-y than placing a call between a host and a device.
Even the physical encoding of information is the same as in networking. SAS/SATA uses 8b/10b encoding, the same encoding as gigabit Ethernet, Fibre Channel, and PCI Express.
The fact is, I am an operating systems guy that started at a time when everyone was expected to be a storage guy and a network guy. It was all the same thing.
Operating system folks invented most of modern computing. Certainly, Dennis Ritchie was one, as is Ken Thompson and Niklaus Wirth. They are also compiler guys. Dennis evolved the C programming language, Ken is one of the three Google Go team leaders, and Professor Wirth perfected a long line of programming language including Pascal, one of the most influential programming languages in the history of computing.
Operating system people think about resource management in machine cycles, allocation and conservation of memory, and models for the input-output that storage IO fits into.
From the very early days of the computer, even memory has been viewed as networking. The first operational computer, the Cambridge EDSAC, used sequential bits in one- and two-meter tanks of mercury as the main storage. Does a sequence of serial bits sound familiar?
Operating system designers in the 1970s saw the patterns in all the parts of the computer. We think about P and N gates of silicon, register transfer level (RTL), microarchitecture, machine instructions and memory types, IO devices and their interfaces, DDR, MSI-X, processes, disk blocks, and file systems.
That’s why a RAID array was so natural for people like me: it’s network address translation.
A disk IO request, say a write, is an operation with an address, a disk, a sector on that disk, and some data to store there. To the host, the disk is the logical unit number (LUN) of the whole RAID and the logical block address on that LUN. When the IO request arrives at the SRX, we translate the LUN/LBA address into a disk/sector address.
This is just network address translation applied to disk IO.
For my VSX product, this is even more like the Cisco PIX. The actual disk is mapped by large chunks called extents into the physical SRX storage. That’s how we can do thin provisioning, snapshots, and remote replication so easily.
So, it’s all networking, and RAID is NAT on disk operations, but it takes an old-school operating system guy to notice it.