20 to 30% performance increase for all USB (except UASP)

A 20% to 30% increase in USB 2 and USB 3 transfer speed is easily done by:

1:
Changing the size of the blocks of data sent to the USB drive from the default of 64 KB to larger blocks. (up to 2MB)
The larger blocks reduce protocol overhead; increasing speed.

2:
Windows only pretends to enable write caching on all file systems besides NTFS.
Let me repeat that:
Windows does NOT enable write caching on USB flash drives unless the drive is formatted NTFS. It only pretends to do so…!
(But that preset can be overridden!)

This means that the net is full of advice to format USB to NTFS “because it’s fastest”, while it IS NOT!
It’s simply write cached where exFAT (the true fastest FS if aligned) and FAT32 etc are not, even if windows says that the write cache is enabled.

1:
USBSTOR Maximum Transfer Length Tool
Can be changed manually by looking for VID/PID you want to speed up in the registry under:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbstor
BUT there is a much easier way:
Uwe Sieber (the USB guru) has written the USBSTOR Maximum Transfer Length Tool.
You can read more on it and download it here:

(I am especially proud of this app as I was the one to bring the tweak to Uwe’s attention. He then wrote the app)

NB that you want to set the Maximum Transfer Length to the average file size you are reading/writing from/to the USB attached device.

ie:
For large files, like movies, you can go with the maximum of 2MB.
For running an OS or app off the drive you want to keep the default of 64KB.
(NB that over 60% of windows I/O is Random 4K, NOT the large sequential numbers advertisers like to wave around like burning flags…!)

Or do you…?

NAND is read in small blocks called pages and are quick. (low latency)
But writes happen in large blocks called Erase Blocks and are much slower:
If 1 bit in an Erase Block needs to be changed, unless the drive is brand new, the whole erase block has to be read into RAM, the change made, and then the whole lot written back to the NAND chip/s.

So; if the Maximum Transfer Length matches the erase block size; you are likely to see better write performance than you would by following the above advice…

So what is the Erase Block size of your drive: who knows! That info is availabel if you can read the printing on the NAND itself and do an extensive search.
Its quicker and easier to try different sizes and see what benches best for you.

512KB is often the sweet spot and is the default for the new UASP enabled USB drives.

2:
USB-WriteCache V0.2
(Same link as above)
This app will add registry value WriteCacheEnableOverride (and UserRemovalPolicy) under HKLM\SYSTEM\CurrentControlSet\Enum<DeviceInstanceID>\Device Parameters\Classpnp

Once this is done (and the device restarted or the USB drive re-inserted) you will experience what write caching can do for exFAT (or FAT 32 etc) for the very 1st time.

My testing shows exFAT to be quite a bit faster than NTFS. Especially if the allocation unit size is also set to match the average file size as far as possible.

On Aligning USB Flash drives:
There are all sorts of command line options to align partitions and FS allocation unit size.
But I prefer Bootice by Pauly.

(No link as the one I had bookmarked has expired and I cannot yet speak to the integrity of the files/app available on other download sites.
As always run everything past VirusTotal before installing. They have a nice ‘upload’ app and an even nicer ‘send to us to check before you even download it’ browser extension)

What you want to do is tick the “4K aligned” option and then start your partition aligned to the beginning of the 2nd erase block, leaving the 1st to the internal workings of the drive and its ctlr chip.
Here trial and error and benchmarks are again easiest, unless you know the tech specs of your NAND chips.

On UASP:
UASP enabled USB devices are by far the fastest and allow you to TRIM the drive just for a start!
You can read up on it at Wikipedia:

Tomshardware has a nice write up too:

Basically you need USB hardware that’s UASP enabled all the way through the chain and nowadays windows will auto do the software side for you.

NB:
Be wary of vendors advertising UASP enabled drive enclosures as what they do NOT advetise is the fact that while the ctlr chip is in fact UASP enabled; its a SATA 2 ctlr chip (300 MB/s), not a SATA 3 ctlr chip. (600 MB/s)
Thats OK…ish for HDDs (you only lose burst speed to the HDD’s DRAM buffer) but NOT OK for SATA SSDs!

(This is not a driver, but as many people come here looking to get the last bit of performance out of their hardware; I thought it the best place to post…?)

1 Like

I tried this and it made no difference on my Win10 x64 TUF Sabertooth X99 system. The hardware ALLOWS it and the driver SHOULD enable it, but it does not.

I posed additional system & driver details in another thread.

Any ideas would be very much appreciated!

— DS

What exactly did you try Deathstalker?
And what USB drive did you use?

I have noticed that the newer USB3+ flash drives have ‘clever’ controllers and seem to do SLC write caching, write coalescing, etc already, which can cause confusion when benchmarking flash drives.
ie:
Much of what I discuss below seems to be done ‘in-house’ by today’s ctlr chips.
Only testing the different options will tell you which changes actually make your USB transfers faster.

USB-WriteCache:
Won’t make any difference if the partition is formatted NTFS. (Unticking Hotplug excepted)
That’s because Windows’ write caching does actually work on NTFS and ONLY NTFS. (not exFAT etc)

Benchmarks like Crystal etc often show a slowdown in R4K writes with write caching enabled and seems to be because of how the benchmark/s works:
It measures the time it takes a single 4K write to be flushed all the way down to to the NAND chip/s, while the cache waits for, and ultimately fails to get, more data to fill the write cache, before giving up and writing that 4KB all the way to NAND.

Here real world testing, where the cache is filled with often used/changed data, does show a marked increase in performance as the oft updated data is kept in and updated in DRAM.
Drives that fail the ‘Is it fast enough for ReadyBoost’ test will very often pass with this write cache enabled.

For a simple test; try writing a large number of small files to a flash drive.
Or run some apps off of a flash drive.

Writing large files like movies to a drive, the cache only increases performance by around 1MB/s in my testing.
I guess that extra 1MB/s is because the next packet comes from the DRAM cache rather than waiting for the sending drive to get around to it. Especially if the sending drive is busy elsewhere, like a system drive is.
(1MB/s = 60MB/minute…)

USBSTOR Maximum Transfer Length Tool:
With this you are increasing the amount of data per packet, decreasing overhead.
ie: More words in the letter for the same size, addressed envelope.

But you also get an advantage when the packet is the size of NAND erase block.
Here an erase block of 512KB (or larger nowadays) is read-modified-written in one operation, rather than 8 times as would/could happen with 8 64KB packets.
(Many of the better USB flash drives seem to be dual channel nowadays and can read 2 pages and write 2 erase blocks at a time)

UASP:
The ctlr chips in UASP enabled flash drives and enclosures seem to often do some sort of caching and/or write coalescing etc of their own, negating much of the advantage one gains with slower, cheaper drives.
Here, write caching from a busy drive, to DRAM, then to the USB attached drive does help in my testing.
But UASP already uses a Maximum Transfer Length of 512KB (vs the 64KB of old).
Then there’s Multi Channeling, AHCI, TRIM etc, so I do not see much improvement in my testing of MTL here.

Have tried doing the ~2MB block size + regedit, no diff. CrystalDiskInfo is supposed to show it using USAP. but it doesn’t, no matter what - always 300/600 - HOWEVER, I have to check the disks as well! What I’m looking at are NEWER 23-18TB WD easyStore drives - they SHOULD be full 600/600, but I do not believe ANY are showing as that. Not sure if that’s a unit controller limitation, or what - I’ve NEVER schucked one, so I don’t know, and I have to look around for an older full SATA III 600 HDD to plug in one of my docking stations to see (I think they’re both Sabrent, but don’t know the models offhand), will have to check. and also check the specks on them (they’re not that old).

FWIW, my SATA III to SATA II speeds are CRAP as well - ~75+ NO idea why - latest drivers, full SATA iii 5gb 7200rpm drives - should be hitting close to 200! Driving me up the wall and I am NOT in the mood (nor do i have the time or patience) to do another clean install. Maybe I need to post a separate thread about that, I don’t know. But I DO know that ALL drivers are current with Driver Booster 6.6, and that has never failed me.

(MY only question with Driver Booster, and yea, probably for another thread, is the "cleanup of “invalid” drivers - still a bit concerned about that - has anyone done it an seen an improvement? And NO, I have not run the extras like “Clean & Optimize” :wink: )

Thanks!

— DS

UASP requires:

  1. UAS support in the USB driver stack.
  2. Device hardware supporting UAS.
  3. Device firmware supporting UAS.
  4. UAS-compatible system controller.

see here for more info and how to check etc:

USBSTOR Maximum Transfer Length Tool has no effect in on UASP enabled transfers.
The registry settings for UASP MTL are under:
HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_xxxx\Device Parameters

If no UASP:
I found that a seagate drive I had in an external enclosure set the MTL to 2MB either automatically or with a driver install. I don’t recall the details.
Point being: Your MTL may already have been set to 2MB.

use:
USB Device Tree Viewer

to see exactly where your drives are attached and all the info you would require for finding the issue.
You want to plug the drive/s into a USB port that supports UASP and preferably one that is directly connected to the CPU without going through the chipset or a 3rd party ctlr.

Not sure HOW I would determine how to identify a port that doesn’t go through the chipset.

Since the board is an Asus Sabertooth X99, I KNOW that the USB hubs SUPPORT USAP, but I need to determine how to figure out if an external drive - in this case a WD eastStore (or Elements, as I have 1 or 2 of those) ALSO supports it. Also, according to Uwe, it is not EXACTLY 2mb.

And, again, I’m also concerned about the SATA III 600 (6gb) speeds - shall I start a separate thread for that? :slight_smile:

Thanks!

— DS

Asus has licensed MCCI’s universal USB/UASP driver which is damn good.
(faster than the MS one in R4K and only slightly slower at large sequential IIRC)

It’s called USB 3.0 Boost. V3 is the latest version IIRC.
Look for it under the drivers for your MB on their site.
If its not there; check other Asus MB models. The older MBs that came out at around the same time as USB3 will have it.

No, Asus’ USB Boost no longer functions and is no longer supported by Asus. However, I DID realize that a couple of my externals were using older controllers that, while still 3.0, did NOT have UASP support (the older Rosewill enclosures), however, my WD easyStore drives DO show that they are using full speed.

They do NOT show as UASP in CrystalDiskInfo, as an earlier post indicated, but they DO show as USB (Serial ATA) SATA/600 | SATA/600 (and a couple of different STANDARDS). Not certain that they should show anything different, should they? AND these are JUST the current standard MS drivers -
Intel USB 3.0 eXtensible Host Controller - 1.0 (Microsoft) USB xHCI Compliant Host Controller v10.0.19041.3031
USB Root Hub (USB 3.0) v10.0.19041.3208 (MS)
Intel C610 series/X99 chipset USB Enhanced Host Controller v10.1.1.38
Generic SuperSpeed USB Hub v10.0.19041.3208 (MS)
ASMedia USB3.1 eXtensible Host Controller v1.16.35.1 (yes, i know it still needs to be updated!)
ASMedia USB Root Hub v1.16.35.1
Generic USB Hub (Sabrent Hub) v10.0.19041.2546 (MS)

That is ALL the current USB Controller/Hub driver info from Device Mgr.

— DS

— DS