It can be hard to keep up to date with the latest storage jargon, so some interesting technologies can be overlooked. When it comes to home storage, the advent of USB 3 has changed the game for external storage. Suddenly, enclosures can deliver multi-gigabit performance. Or they could, if only the storage stack could handle all this new speed! That’s where a new external drive protocol, USB Attached SCSI Protocol (UASP or UAS) comes in: It allows USB-attached storage to reach its maximum potential.
Back in USB 1 days, performance wasn’t really an option. Limited to 12 Mbps at “full-speed”, the bus was always the bottleneck. Plus, there really weren’t any high-speed storage devices to connect, since consumer SSD’s hadn’t yet been invented! So the designers of the USB storage stack stuck with a simple protocol for external storage devices: Bulk-Only Transport (BOT), introduced in 1999.
BOT worked well enough, given the other limitations of USB, that it remained unchanged with the advent of USB 2 in 2000. Although some devices could exceed the 480 Mbps of theoretical performance offered by “high-speed” USB 2, BOT was good enough for the simple external hard drives and thumb drives in use at the time.
But the limitations of BOT were starting to show: Since it lacked native queueing, commands were sent sequentially, causing the computer to wait for each read or write to complete before issuing another. Faster computers and faster devices meant a lot of waiting: Sometimes, the round-trip time of a storage operation was longer than it took the actual command to complete, reducing overall throughput by half or more. This is one reason that even the fastest USB 2 device has trouble exceeding 25 or 30 MB/s in real-world use.
UASP Brings SCSI to USB
Just about every operating system supports, SCSI, a full-featured and flexible storage protocol stack, but this was not available for USB devices. UASP changes that, allowing devices to use the SCSI protocol over USB. This improves performance, thanks to native command queueing, and also adds lots of other storage features like inquiry (INQ), multi-LUN configuration, and more. UASP was designed for USB 3, but it can even work with over a USB 2 connection for improved performance.
Here’s a great technical overview of UASP from usb.org: USB Attached SCSI Protocol (UASP)
For most users, UASP is all about performance. A UASP device can come much closer to the theoretical maximum throughput of the USB bus since commands no longer have to wait in a single queue. UASP separates commands, status, input, and output into four separate I/O “pipes”, eliminating the old “command, wait, response, I/O, wait, status response” cycle of BOT.
UASP is supported in the following operating systems today:
- Microsoft Windows 8 and newer “prefers” UASP if available over both USB 3 and USB 2
- Mac OS X added UASP support in OS X 10.8 “Mountain Lion” though it seems not to work reliably, especially when connected through USB hubs1
- Linux has had a UASP driver since 2.6.37 but it has been problematic and is disabled for certain hardware2
On the hardware side, UASP has been embraced by higher-end USB 3 storage controllers used by most major device manufacturers but it’s sorely lacking in low-end devices. Intel added native UASP to their Z77 motherboard PCH, but support requires an extra-cost license so some manufacturers have not enabled it.
UASP devices can be made backwards-compatible with BOT, and this new capability is auto-detected by most current operating systems, so users don’t have to worry about configuring it.
UASP has a lot of promise, bringing SCSI performance and features to the ever-expanding world of USB storage devices. But support has been haphazard, especially for Mac OS X and Linux, and this limits its impact. It would be nice if storage vendors could work with operating system developers to better support this storage protocol.