How to install an NVMe SSD
The device includes an M.2 2280 NVMe socket, but if you have a shorter card like a 2230 or 2242, it’s no big deal—you can still use it with an M.2 NVMe SSD length extension adapter.
Installing a Fanxiang S700 500GB NVMe SSD






Checking for drives and partitions
In our setup, we installed a Fanxiang S700 500GB NVMe SSD, and Bianbu OS successfully recognized it as the device /dev/nvme0n.
tzah@home-spacemit:~$ fdisk -l
[sudo: authenticate] Password:
Disk /dev/sda: 119.27 GiB, 128068878336 bytes, 31266816 sectors
Disk model: TY7B-128
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 524288 bytes / 524288 bytes
Disklabel type: gpt
Disk identifier: A2AF2B80-ED3C-4D4E-95EE-ADDFEA8A902D
Device Start End Sectors Size Type
/dev/sda1 3072 68607 65536 256M Microsoft basic data
/dev/sda2 68608 134143 65536 256M Microsoft basic data
/dev/sda3 134144 31266782 31132639 118.8G Microsoft basic data
Disk /dev/mtdblock0: 8 MiB, 8388608 bytes, 16384 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock1: 128 KiB, 131072 bytes, 256 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock2: 512 KiB, 524288 bytes, 1024 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock3: 64 KiB, 65536 bytes, 128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock4: 1 MiB, 1048576 bytes, 2048 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock5: 384 KiB, 393216 bytes, 768 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock6: 5.94 MiB, 6225920 bytes, 12160 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/nvme0n1: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: Fanxiang S700 500GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Performance benchmarks [Fio benchmarking tool]
⚡Sequential Write Speed Test: Writing (creating) a 10 GB file on our UFS
tzah@home-spacemit:~$ dd if=testfile of=/dev/null bs=1G count=1 iflag=direct
dd: IO error: Invalid input
tzah@tzah-spacemit:~$ ^C
tzah@tzah-spacemit:~$ cd ~
sudo fio --name=write --filename=ssdtest --rw=write --bs=1M --size=10G --iodepth=16
write: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=16
fio-3.41
Starting 1 process
note: both iodepth >= 1 and synchronous I/O engine are selected, queue depth will be capped at 1
Jobs: 1 (f=1): [W(1)][98.3%][eta 00m:01s]
write: (groupid=0, jobs=1): err= 0: pid=268204: Wed May 20 15:09:49 2026
write: IOPS=175, BW=176MiB/s (184MB/s)(10.0GiB/58310msec); 0 zone resets
clat (usec): min=252, max=4590.4k, avg=5678.33, stdev=120813.39
lat (usec): min=264, max=4590.4k, avg=5692.21, stdev=120813.35
clat percentiles (usec):
| 1.00th=[ 277], 5.00th=[ 281], 10.00th=[ 281],
| 20.00th=[ 285], 30.00th=[ 285], 40.00th=[ 289],
| 50.00th=[ 293], 60.00th=[ 297], 70.00th=[ 306],
| 80.00th=[ 420], 90.00th=[ 11207], 95.00th=[ 11338],
| 99.00th=[ 15664], 99.50th=[ 23200], 99.90th=[2432697],
| 99.95th=[3506439], 99.99th=[4462740]
bw ( KiB/s): min= 2048, max=2125824, per=100.00%, avg=420508.73, stdev=462855.44, samples=49
iops : min= 2, max= 2076, avg=410.65, stdev=452.01, samples=49
lat (usec) : 500=86.68%, 750=0.33%, 1000=0.48%
lat (msec) : 2=0.35%, 4=0.04%, 10=0.10%, 20=11.25%, 50=0.66%
lat (msec) : >=2000=0.11%
cpu : usr=0.21%, sys=5.66%, ctx=1277, majf=0, minf=12
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=0,10240,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=16
Run status group 0 (all jobs):
WRITE: bw=176MiB/s (184MB/s), 176MiB/s-176MiB/s (184MB/s-184MB/s), io=10.0GiB (10.7GB), run=58310-58310msec
Disk stats (read/write):
sda: ios=9/9560, sectors=392/19491360, merge=29/18, ticks=333/3442620, in_queue=3442991, util=97.91%
Full SSD Benchmark Summary (10 GB Sequential Write Test)
| Metric | Result |
|---|---|
| Test Type | Sequential Write |
| Block Size | 1 MiB |
| Total Test Size | 10 GiB |
| I/O Engine | psync (synchronous) |
| Queue Depth | 1 (capped) |
| Average Bandwidth | 176 MiB/s (184 MB/s) |
| IOPS | 175 |
| Total Time | 58.3 s |
| Average Latency | 5.68 ms |
| Median Latency (p50) | 0.293 ms |
| p80 Latency | 0.420 ms |
| p90 Latency | 11.2 ms |
| p95 Latency | 11.3 ms |
| p99 Latency | 15.6 ms |
| Worst Latency (max) | 4.59 s |
| Disk Utilization | 97.9% |
| Total Writes Completed | 10 GiB |
| Device Tested | /dev/sda3 (TY7B‑128 SSD) |
Sequential Read Speed Test: Reading a 10 GB file on our UFS
tzah@home-spacemit:~$ fio --name=read --filename=ssdtest --rw=read --bs=1M --size=10G --iodepth=16
read: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=16
fio-3.41
Starting 1 process
note: both iodepth >= 1 and synchronous I/O engine are selected, queue depth will be capped at 1
Jobs: 1 (f=1): [R(1)][100.0%][r=871MiB/s][r=870 IOPS][eta 00m:00s]
read: (groupid=0, jobs=1): err= 0: pid=269981: Wed May 20 15:12:12 2026
read: IOPS=845, BW=845MiB/s (886MB/s)(10.0GiB/12114msec)
clat (usec): min=170, max=12842, avg=1130.56, stdev=977.49
lat (usec): min=171, max=12842, avg=1130.79, stdev=977.40
clat percentiles (usec):
| 1.00th=[ 176], 5.00th=[ 178], 10.00th=[ 178], 20.00th=[ 180],
| 30.00th=[ 188], 40.00th=[ 190], 50.00th=[ 857], 60.00th=[ 2024],
| 70.00th=[ 2040], 80.00th=[ 2040], 90.00th=[ 2057], 95.00th=[ 2057],
| 99.00th=[ 2540], 99.50th=[ 3392], 99.90th=[ 6063], 99.95th=[ 6718],
| 99.99th=[ 9241]
bw ( KiB/s): min=868352, max=921600, per=100.00%, avg=903257.04, stdev=16167.04, samples=23
iops : min= 848, max= 900, avg=882.09, stdev=15.79, samples=23
lat (usec) : 250=49.78%, 500=0.21%, 1000=0.01%
lat (msec) : 2=2.64%, 4=47.05%, 10=0.30%, 20=0.01%
cpu : usr=0.19%, sys=27.98%, ctx=5140, majf=0, minf=266
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=10240,0,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=16
Run status group 0 (all jobs):
READ: bw=845MiB/s (886MB/s), 845MiB/s-845MiB/s (886MB/s-886MB/s), io=10.0GiB (10.7GB), run=12114-12114msec
Disk stats (read/write):
sda: ios=10026/2, sectors=20529152/48, merge=0/4, ticks=34204/53, in_queue=34260, util=71.09%
Full SSD Benchmark Summary — 10 GB Sequential READ Test
| Metric | Result |
|---|---|
| Test Type | Sequential Read |
| Block Size | 1 MiB |
| Total Test Size | 10 GiB |
| I/O Engine | psync (synchronous) |
| Queue Depth | 1 (capped) |
| Average Bandwidth | 845 MiB/s (886 MB/s) |
| IOPS | 845 |
| Total Time | 12.1 s |
| Average Latency | 1.13 ms |
| Median Latency (p50) | 0.857 ms |
| p80 Latency | 2.04 ms |
| p90 Latency | 2.06 ms |
| p95 Latency | 2.06 ms |
| p99 Latency | 2.54 ms |
| Worst Latency (max) | 12.8 ms |
| Disk Utilization | 71.1% |
| Total Reads Completed | 10 GiB |
| Device Tested | /dev/sda3 (TY7B‑128 SSD) |


📘What do p80, p90, p95, and p99 latency mean?
These are latency percentiles — they tell you how long I/O operations take at different points in the distribution.
Think of them as “how fast the SSD responds for X% of operations”.
| Percentile | Meaning |
|---|---|
| p80 latency | 80% of all read operations were faster than 2.04 ms |
| p90 latency | 90% of reads were faster than 2.06 ms |
| p95 latency | 95% of reads were faster than 2.06 ms |
| p99 latency | 99% of reads were faster than 2.54 ms |
Test Results In plain language:
- The UFS is quite reliable.
- 99% of reads complete in under 3 ms
- Only 1% are slower (due to caching, garbage collection, controller behavior).
- Stable Reads: Conversely, the read latency is rock-solid. Even its absolute worst-case scenario is just 12.8 ms, ensuring quick response times when retrieving files.
- The performance is quite impressive for a 128 GB embedded storage.



