【VisionFive 2:集成3D GPU RISC-V单板计算机】+03.存储功能测试(zmj)
赛昉科技的“昉·星光 2”开发板的板载QSPI-FLASH(型号GD25LQ128ESIGR)提供BOOT功能,TF卡存放image和文件系统。同时,板卡还有4 × USB 3.0接口(通过PCIe 2.0 1 × lanes复用),以及M.2连接器/nvme接口。对于eMMC插槽来讲,暂时未找到合适的配件暂不测试。
本章节测试“昉·星光 2”开发板的存储功能(QSPI-FLASH/NVME-SSD/TF卡/USB3.0-U盘)。 注:未测试eMMC。
在测试前,切换至root用户,通过“fdisk -l”指令可以查看存储介质的相关信息:
//------切换至root用户,通过“fdisk -l”指令可以查看存储介质的相关信息:
user@starfive:~$ sudo su
[sudo] password for user:
root@starfive:/home/user# fdisk -l
Disk /dev/mtdblock0: 256 KiB, 262144 bytes, 512 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: 3 MiB, 3145728 bytes, 6144 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: 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/nvme0n1: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: KIOXIA-EXCERIA SSD
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x27a17600
Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 * 2048 974772223 974770176 464.8G 83 Linux
/dev/nvme0n1p2 974774270 976771071 1996802 975M 5 Extended
/dev/nvme0n1p5 974774272 976771071 1996800 975M 82 Linux swap / Solaris
Disk /dev/mmcblk1: 58.61 GiB, 62929764352 bytes, 122909696 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
Disklabel type: gpt
Disk identifier: E05DB137-41F7-47A6-B1C1-E9BE91A4BC0E
Device Start End Sectors Size Type
/dev/mmcblk1p1 4096 8191 4096 2M HiFive BBL
/dev/mmcblk1p2 8192 16383 8192 4M HiFive FSBL
/dev/mmcblk1p3 16384 221183 204800 100M EFI System
/dev/mmcblk1p4 221184 122896383 122675200 58.5G Linux filesystem
Disk /dev/sda: 116.37 GiB, 124948316160 bytes, 244039680 sectors
Disk model: TransMemory
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x150d0bb7
Device Boot Start End Sectors Size Id Type
/dev/sda1 6144 244039679 244033536 116.4G 7 HPFS/NTFS/exFAT
root@starfive:/home/user#
1. QSPI-FLASH功能测试
“昉·星光 2”开发板的QSPI-FLASH(型号GD25LQ128ESIGR)因为含有BOOT信息,因此此次测试已FLASH信息读取和FLASH内容读取为主。
//------QSPI-FLASH原理图
QSPI-FLASH基础操作指令说明:
//------QSPI-FLASH基础操作指令说明:
//---1.hexdump :查看分区内容
hexdump -C /dev/mtd0
hexdump -C /dev/mtd1
或者查看前10行内容
hexdump -C /dev/mtd0 | head -10
hexdump -C /dev/mtd1 | head -10
//---2.mtd工具安装
sudo apt install mtd-utils -y
//---3.mtd_debug read : 用来读取 qspi 数据到文件
mtd_debug read /dev/mtd1 0x0 140 read_mtd1.txt
读取mtd1分区的140Bytes内容并写入read_mtd1.txt。
//---4.mtd_debug erase :擦除 qspi 数据(不要随便操作)
mtd_debug erase /dev/mtd0 0 0x1000
从0x0起始地址开始,擦除4096Bytes(0x10000 = 4096)。
//---5.mtd_debug wirte:用来写入文件数据到 qspi(不要随便操作)
echo "1234567890abcdefghABCDEFGH1234567890Hello_World!MYIR-QSPI-FLASH." > qspi_wr.txt
准备文件qspi_wr.txt,内容自定义即可。
mtd_debug write /dev/mtd0 0x0 16 qspi_wr.txt
读取文件内容(共计64Bytes)并写入mtd0的分区。
//------QSPI-FLASH:一共3个可视分区
分区1:/dev/mtdblock0: 256 KiB
分区2:/dev/mtdblock1: 3 MiB
分区3:/dev/mtdblock2: 1 MiB
2. TF卡速率测试
简单测试64GB-TF卡的读写速度:
//------WR写入测试:19.1MB/S
dd if=/dev/zero of=/testfile bs=1M count=512 conv=fsync
//------RD读取测试:22.9MB/S
dd if=/testfile of=/dev/zero bs=1M count=512
//------log信息
root@starfive:/mnt# dd if=/dev/zero of=/testfile bs=1M count=512 oflag=direct
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 28.1562 s, 19.1 MB/s
root@starfive:/mnt# dd if=/testfile of=/dev/zero bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 23.4747 s, 22.9 MB/s
root@starfive:/mnt#
3. U盘(USB3.0)速率测试 (异常及定位)
赛昉科技的“昉·星光 2”开发板有4 × USB 3.0接口(通过PCIe 2.0 1 × lanes复用),随机选择一个USB3.0接口进行读写测试。
//------WR写入测试:90.3MB/S
dd if=/dev/zero of=/media/user/KIOXIA/testfile bs=1M count=512 oflag=direct
//------RD读取测试-1:329MB/S(第一次读取异常,见后面分析)
dd if=/media/user/KIOXIA/testfile of=/dev/zero bs=1M count=512
//------RD读取测试-2:93.6MB/S(第二次读取正常,见后面分析)
dd if=/media/user/KIOXIA/testfile of=/dev/zero bs=1M count=512
//------log信息
root@starfive:/home/user# dd if=/dev/zero of=/media/user/KIOXIA/testfile bs=1M count=512 oflag=direct
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 5.94628 s, 90.3 MB/s
root@starfive:/home/user# dd if=/media/user/KIOXIA/testfile of=/dev/zero bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 1.63083 s, 329 MB/s
< 此处断电重启系统,然后重新挂载USB3.0-U盘,再次进行U盘读取,测试正常>
root@starfive:/home/user# dd if=/media/user/KIOXIA/testfile of=/dev/zero bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 5.73332 s, 93.6 MB/s
user@starfive:~$
//------U盘读取速度异常分析(个人猜测):
U盘在写数据时,先在Cache中缓存数据再写入FLASH;
U盘在读取数据,先从FLASH读取数据写入缓存Cache,再传给CPU;
前期写入的数据还在Cache中,此时省略了FLASH写入Cache的流程,所以感觉读取速度非常快。
重启系统(先断电再上电,确保USB3.0-U盘的Cache掉电后丢失对应缓存),重新测试U盘RD读测试,测试数据正常。
4. M.2-Key/NVME-SSD
赛昉科技的“昉·星光 2”开发板有一个M.2-Key接口,可以接入NVME-SSD。
//------WR写入测试:242MB/S
dd if=/dev/zero of=/media/user/KIOXIA/testfile bs=1M count=512 oflag=direct
//------RD读取测试:190MB/S
dd if=/mnt/nvme_0/testfile of=/dev/zero bs=1M count=512
//------log信息
user@starfive:~$ sudo su
[sudo] password for user:
root@starfive:/home/user# dd if=/dev/zero of=/mnt/nvme_0/testfile bs=1M count=512 oflag=direct
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 2.21975 s, 242 MB/s
root@starfive:/home/user# dd if=/mnt/nvme_0/testfile of=/dev/zero bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 2.82966 s, 190 MB/s
root@starfive:/home/user#
//------综合测试结果:
结论:赛昉科技的“昉·星光 2”开发板的存储接口丰富,对于用户使用非常友好且功能十分强大。
PS:后面有机会尝试NVME系统镜像,理论上讲系统性能会有小幅提升。
//------end