1

Recently I bought SanDisk Extreme Pro Portable SSD. It is advertised as delivering almost 2GB/s read and and write speeds. Of course, such speeds are only achievable with compatible hardware.

I have two MBPs.

The first one is Mid 2015 with ThunderBolt 2 and USB 3.1 ports. It runs Catalina and I am kind reluctant to upgrade it to Big Sur. I connected my new SSD to this machine to get just about 18MB/s transfer speed. Of course, I thought, it is old hardware and it is pointless to expect any miracles from it.

The second one is the latest MBP with top specs, which I bought just few weeks ago. It is 16 inch model from the end of 2019. ThunderBolt 3 ports are claimed to support 40Gb/s transfer rates in native ThunderBolt mode and at least 10Gb/s in USB 3.2 mode. This way USB 3.2 connection should deliver about 1GB/s transfer speed. The expectation did not come true. The best transfer speed I can see from the latest and greatest 2019 MBP is 48.8MB/s.

Being technically advanced I know — to achieve good transfer speeds UASP must be supported. After connecting my new SSD drive to Catalina Mid 2015 MBP IOUSBAttachedSCSI is not activated, i.e., SSD is operating within old USB Mass Storage protocol, which is not optimal and is not designed for speed. The situation is even worse with the latest and greatest MBP, running Big Sur. It does not have IOUSBAttachedSCSI driver at all.

I did funny experiment. On all my systems I usually have some virtualization software installed. I happen to have VMware Fusion and Ubuntu 20.04.2 virtual machine on both computers. I disconnected my new SSD from host OS and connected it to virtual Ubuntu 20.04.2. Mid 2015 MBP demonstrated 416MB/s transfer speed and 2019 MBP demonstrated 700MB/s transfer speed.

My speed measurement methodology.

To measure speed with macOS I utilized dd and gdd. The results are less then 0.1% different, repeatable and consistent. This way I describe only gdd methodology, since it is simple.

... % diskutil list
...
...
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *2.0 TB     disk2
   1:       Microsoft Basic Data ⁨Extreme Pro⁩             2.0 TB     disk2s1

...
...

... % sudo gdd if=/dev/disk2 of=/dev/null bs=1M status=progress
537919488 bytes (538 MB, 513 MiB) copied, 11 s, 48.9 MB/s^C
549+0 records in
548+0 records out
574619648 bytes (575 MB, 548 MiB) copied, 11.7698 s, 48.8 MB/s

To measure speed with virtualised Ubintu 20.04.2 I utilised similar methodology:

... $ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   32G  0 disk 
├─sda1   8:1    0  487M  0 part /boot
└─sda2   8:2    0 31.5G  0 part /
sr0     11:0    1 1024M  0 rom  
sdb      9:0    1 2000G  0 disk
└─sdb1   9:1    1 2000G  0 part /mnt
...
...

... $ sudo dd if=/dev/sdb of=/dev/null bs=1M status=progress
18229493760 bytes (18 GB, 17 GiB) copied, 26.3 s, 692 MB/s^C
18647+0 records in
18646+0 records out
19551748096 bytes (20 GB, 18 GiB) copied, 28.2948 s, 691 MB/s

The results provided are collected from 2019 MBP, running Big Sur.

Disclaimer: I know, that dd is measuring synchronous reads and writes. I.e., next data exchange operation starts only after previous operation completely accomplished and data reached their final destination. Of course, fio instead of dd in asynchronous mode could possibly improve results, but I doubt 48.8MB/s from Big Sur could be improved 14+ times to just reach what virtualized Ubuntu is demonstrating.

Just for those, who understands what virtualization is. VMware Fusion is Type 2 hypervisor without hardware pass-through support. This way every single USB packet must be send/received by host driver and extracted/replicated into virtual address space. Of course, many advanced things, like common memory and fast IPCs are employed to make things happen, but virtualization layer is still there. Virtualization is never free. In this case it adds latency and overhead for any IO operation.

In simple words - hardware is there. I can use virtualized Linux to perform transfers, but this is not what I have my MBP’s for. I still hope, that there is a hidden button “Make Everything Perfect” somewhere in macOS, which I just don’t know where to look for.

Please, suggest, how to get expected USB SSD/HDD transfer speeds with latest Catalina and Big Sur.

5
  • Please don't repost questions which are on-hold, you loose all the comments etc that way. Also, the main problem remains despite all the analysis: the post still lacks an actual question. Which practical problem are you trying to solve here?
    – nohillside
    Commented Aug 23, 2021 at 14:25
  • I am trying to get reasonable speed from my new SSD in native mode with macOS. This is stated in the last part of my post. I am actually asking: Please, suggest, how to get expected USB SSD/HDD transfer speeds with latest Catalina and Big Sur. I really don't know how to formulate my question in more precise way. Commented Aug 23, 2021 at 14:37
  • If I can think that I somehow messed up my configuration of Mid 2015 MBP, but 2019 MBP is brand new and is running latest and updated version of Big Sur. It should not have any issues with transfers from external USB disks. I really need a solution for this problem, or at least, a direction where to look for. I often move big amount of data between sites and transfering them with 50MB/s speeds is painful. Commented Aug 23, 2021 at 14:42
  • 1
    You can't expect 2000 MB/s. That requires USB3.2 Gen2x2 which is not supported by any Mac. Absolute best you can expect is near 1000 MB/s - USB 3.2 Gen2 and USB 3.1 Gen2. Also no Macs have UASP.
    – Gilby
    Commented Aug 23, 2021 at 22:41
  • Google disagree with you :-) Let's say, this link is a good counter example. Also, there are many people on YouTube, who demonstrate about 1GB/s transfer speeds from USB with macOS. The same is with my experiment with virtualization. It seems, there is a hidden setting in macOS, which changes USB stack working mode. The only issue is to find it. Commented Aug 24, 2021 at 15:30

1 Answer 1

0

It’s a bit late but you’d need to be using the raw device interface, ie. /dev/rdisk2 instead of /dev/disk2.

The non-raw (cooked?) access uses buffering, caching, 4 kB blocks etc.

I just tried accessing a CFexpress 2.0 card in an external card reader.

I got 356 MB/s using /dev/disk7 and 1335 MB/s using /dev/rdisk7.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .