Turbo Mode: Faster USB, With A Caveat
The maximum transaction size for bulk-only transfers (BOT) at the operating system level is 64 KB. However, sequential data is typically moved in 128 KB blocks, requiring two BOT transactions. What's being referred to as "Turbo mode" overcomes that limitation by increasing the maximum transfer size to 1 MB or larger, allowing the USB driver to pack several 128 KB sequential requests into one larger transaction. Fewer small transactions means less wait, ready, and acknowledge USB commands, in turn reducing the amount of bandwidth consumed by signal overhead.
USB 2.0 speeds generally increase by 8-10 MB/s with Turbo mode enabled, delivering a ~25-33% bump in performance. You'll always see that speed-up, regardless of whether you're using a conventional hard drive or SSD, because both storage devices outperform the bandwidth-constrained interface.
As we know, USB 3.0 rectifies our bottleneck issue. When we drop in a hard drive, sequential reads top out around ~128 MB/s—and Turbo mode has no effect. The hard drive simply isn't fast enough to push third-gen USB, so even when enable higher transfer speeds, the mechanical disk is still what's slowing us down.
Once we switch over to our 240 GB Vertex 3, Turbo mode starts playing a more significant role. Throughput on the Apricorn SATA-USB 3.0 adapter jumps about 30-40 MB/s, representing a ~20-25% improvement. Interestingly, the Thermaltake BlacX 5G is such a great performer by default that Turbo mode gives it no additional benefit.
Turbo Mode, Explained
Turbo mode is relatively uncomplicated, basically involving a simple modification of the BOT driver at the operating system level. ASRock's XFast USB and Asus' USB 3.0 Boost utilities enable Turbo mode, though these software tools are proprietary to specific ASRock or Asus motherboards.
Manually enabling Turbo mode on a board from a vendor that doesn't offer its own utility is possible by modifying the HKEY_LOCAL_MACHINES\SYSTEM\CurrentControlSet\Control\usbstor\054C00C1 registry key. Add a 32-bit DWORD value named "MaximumTransferLength" and specify the maximum transfer size value between 65535 (64 KB) and 2097120 (2 MB) in the data field. Depending on the vendor, some Turbo mode optimizations occur at the signaling level to remove the wait, ready, and acknowledge commands inherent to USB. However, these optimizations play only a minor role in how Turbo mode improves performance.
External storage predominantly involves sequential transfers. Very rarely does random I/O come into play. If you to try to run Windows from a thumb drive, then sure, you'd be accessing multiple small files scattered across the volume. And when this is the case, Turbo mode is going to negatively impact your random throughput (though this is really only applicable to SSDs; hard drives don't handle random requests well enough to get bogged down any worse). We see the 4 KB random read performance our Apricorn SATA-USB 3.0 adapter drop from 48 MB/s to 36 MB/s with Turbo mode enabled, while random writes suffer a slightly smaller slow-down.
There is really no good way to circumvent the loss of random I/O performance with BOT. Unlike sequential transfers, small random blocks cannot be packed together. The USB driver's look-forward algorithm sends transactions piece-by-piece because the LBA address locations are not adjacent.
But why does increasing the transaction size slow down the movement of random 4 KB blocks? You see, a larger transaction size extends the amount of time the USB driver attempts—and ultimately fails—to pack more 4 KB transfers into a larger transaction. The result is that our Vertex 3 barely breaks 80 MB/s. Attached to SATA, it hits ~325 MB/s at high queue depths.