2021–03–17: PinePhone
eMMC measurements
I wrote a simple io_uring based benchmarking tool for block devices.
It's very simple. It creates a fixed size queue of random reads in the
io_uring and then just keeps the queue full.
I wanted to see what my devices can do. It maxes out at 640k random read
4KiB IOPS on my 500GB Samsung 980 PRO nvme SSD, with no special Linux block
subsystem tuning. Which is about in the middle of the supposed 500k and 800k
values in the datasheet. It's hard to interpret various small print notes, so
it's not clear what to expect with reads scattered across the whole drive.
I may try tuning the kernel configuration to see if I can get higher, but this
may already be close to the HW limit. So the tool can produce quite a bit of IO
activity. :)
I used this tool on various uSD cards and eMMCs I have in my
Pinephones.
Here are my results:
Pinephone 1 (early dev sample)
eMMC: (date=07/2019 manfid=0×0000da oemid=0×0101)
- 4kiB (QD1) = 5188 IOPS (20752 KiB/s)
- 4kiB (QD32) = 5809 IOPS (23236 KiB/s)
- 16kiB (QD1) = 1069 IOPS (17104 KiB/s)
- 64kiB (QD1) = 733 IOPS (46912 KiB/s)
- 256kiB (QD1) = 279 IOPS (71424 KiB/s)
- 1024kiB (QD1) = 79 IOPS (80896 KiB/s)
uSD: (32GiB Sandisk Ultra A1 08/2019)
- 4kiB (QD1) = 2873 IOPS (11492 KiB/s)
- 16kiB (QD1) = 1170 IOPS (18720 KiB/s)
- 64kiB (QD1) = 345 IOPS (22080 KiB/s)
- 256kiB (QD1) = 90 IOPS (23040 KiB/s)
Pinephone 2 (UBports endition)
eMMC: (date=07/2019 manfid=0×0000e1 oemid=0×0116)
- 4kiB (QD1) = 4202 IOPS (16808 KiB/s)
- 4kiB (QD32) = 3808 IOPS (15232 KiB/s)
- 16kiB (QD1) = 2180 IOPS (34880 KiB/s)
- 64kiB (QD1) = 953 IOPS (60992 KiB/s)
- 256kiB (QD1) = 298 IOPS (76288 KiB/s)
- 1024kiB (QD1) = 79 IOPS (80896 KiB/s)
uSD: (32GiB Sandisk Ultra A1 08/2019)
- 4kiB (QD1) = 1836 IOPS (7344 KiB/s)
- 16kiB (QD1) = 968 IOPS (15488 KiB/s)
- 64kiB (QD1) = 325 IOPS (20800 KiB/s)
- 256kiB (QD1) = 89 IOPS (22784 KiB/s)
Pinephone 3 (Fixed USB-C
UBports endition)
eMMC: (date=07/2019 manfid=0×0000e1 oemid=0×0116)
- 4kiB (QD1) = 4770 IOPS (19080 KiB/s)
- 16kiB (QD1) = 2529 IOPS (40464 KiB/s)
- 64kiB (QD1) = 991 IOPS (63424 KiB/s)
- 256kiB (QD1) = 300 IOPS (76800 KiB/s)
- 1024kiB (QD1) = 79 IOPS (80896 KiB/s)
uSD: (32GiB Sandisk Ultra A1 09/2018)
- 4kiB (QD1) = 2002 IOPS (8008 KiB/s)
- 16kiB (QD1) = 996 IOPS (15936 KiB/s)
- 64kiB (QD1) = 329 IOPS (21056 KiB/s)
- 256kiB (QD1) = 89 IOPS (22784 KiB/s)
Pinephone 4 (3GiB UBports
endition)
eMMC: (date=12/2019 manfid=0×000045 oemid=0×0100)
- 4kiB (QD1) = 1996 IOPS (7984 KiB/s)
- 16kiB (QD1) = 859 IOPS (13744 KiB/s)
- 64kiB (QD1) = 336 IOPS (21504 KiB/s)
- 256kiB (QD1) = 191 IOPS (48896 KiB/s)
- 1024kiB (QD1) = 60 IOPS (61440 KiB/s)
uSD: (32GiB Sandisk Ultra A1 10/2019)
- 4kiB (QD1) = 2350 IOPS (9400 KiB/s)
- 16kiB (QD1) = 1072 IOPS (17152 KiB/s)
- 64kiB (QD1) = 338 IOPS (21632 KiB/s)
- 256kiB (QD1) = 90 IOPS (23040 KiB/s)
The tool, in case you want
to check out the code.
Queue depth doesn't seem to matter much with eMMC/uSD cards in PinePhones,
while it does with high performance SSDs on my desktop.