工具脚本:参见:《test_ssd_small_files.sh》 如下通过vdbench工具整理的测试报告,仅供参照,不同的cpu和不同厂商的磁盘差别较大,请知悉!
挂载方式 | 测试工具 | 操作方式 | 读占比 | IO模式 | 文件数 | 文件大小 | xfersize | 进程数 | 线程数/进程数 | IOPS/秒 | 文件数/秒 | 读流量(MB/s) | 写流量(MB/s) | 总流量(MB/s) | 操作时延(毫秒) | cpu(%) |
ext4 | vdbench | 写 | 0% | 顺序 | 1000 | 6M | 1024K | 1 | 4 | 73.7 | 12.28 | 0 | 73.67 | 73.67 | 54.23 | 4.3 |
vdbench | 写 | 0% | 顺序 | 100 | 64M | 1024K | 1 | 4 | 44.6 | 0.69 | 0 | 44.62 | 44.62 | 89.00 | 3.7 | |
vdbench | 写 | 0% | 顺序 | 1000 | 1M | 1024K | 1 | 4 | 86 | 86 | 0 | 86 | 86.00 | 46.55 | 2.6 | |
vdbench | 写 | 0% | 顺序 | 1000 | 4M | 1024K | 1 | 4 | 62.7 | 15.67 | 0 | 62.68 | 62.68 | 63.74 | 4 | |
vdbench | 写 | 0% | 顺序 | 10000 | 512K | 512K | 1 | 4 | 99.9 | 99.9 | 0 | 49.96 | 49.96 | 33.76 | 4 | |
vdbench | 写 | 0% | 顺序 | 10000 | 64K | 64K | 1 | 4 | 100.3 | 100.3 | 0 | 6.27 | 6.27 | 5.65 | 4.4 | |
vdbench | 写 | 0% | 顺序 | 10000 | 32K | 32K | 1 | 4 | 100.5 | 100.5 | 0 | 3.14 | 3.14 | 2.64 | 3.6 | |
vdbench | 读 | 100% | 顺序 | 1000 | 6M | 1024K | 1 | 4 | 376.6 | 62.76 | 376.6 | 0 | 376.60 | 10.60 | 4.9 | |
vdbench | 读 | 100% | 顺序 | 100 | 64M | 1024K | 1 | 4 | 393.2 | 6.14 | 393.2 | 0 | 393.20 | 10.16 | 4.7 | |
vdbench | 读 | 100% | 顺序 | 1000 | 1M | 1024K | 1 | 4 | 386.6 | 386.6 | 386.6 | 0 | 386.60 | 10.25 | 5.2 | |
vdbench | 读 | 100% | 顺序 | 1000 | 4M | 1024K | 1 | 4 | 381.4 | 95.35 | 381.4 | 0 | 381.40 | 10.46 | 4.6 | |
vdbench | 读 | 100% | 顺序 | 10000 | 512K | 512K | 1 | 4 | 370.1 | 370.1 | 370.1 | 0 | 370.10 | 5.37 | 5.5 | |
vdbench | 读 | 100% | 顺序 | 10000 | 64K | 64K | 1 | 4 | 6037 | 6037 | 377.3 | 0 | 377.30 | 0.64 | 16.6 | |
vdbench | 读 | 100% | 顺序 | 10000 | 32K | 32K | 1 | 4 | 10182 | 10182 | 318.2 | 0 | 318.20 | 0.37 | 24.6 | |
vdbench | 读/写 | 40% | 顺序 | 1000 | 6M | 1024K | 1 | 4 | 24.3 | 4.05 | 10.87 | 13.4 | 24.27 | 293.21 | 3.5 | |
vdbench | 读/写 | 40% | 顺序 | 100 | 64M | 1024K | 1 | 4 | 27.5 | 0.43 | 12.11 | 15.38 | 27.49 | 256.23 | 3.4 | |
vdbench | 读/写 | 40% | 顺序 | 1000 | 1M | 1024K | 1 | 4 | 22.8 | 22.8 | 9.92 | 12.93 | 22.85 | 312.79 | 3.3 | |
vdbench | 读/写 | 40% | 顺序 | 1000 | 4M | 1024K | 1 | 4 | 22.4 | 5.6 | 9.8 | 12.62 | 22.42 | 318.06 | 3.2 | |
vdbench | 读/写 | 40% | 顺序 | 10000 | 512K | 512K | 1 | 4 | 37.5 | 37.2 | 7.93 | 10.84 | 18.77 | 191.30 | 3.2 | |
vdbench | 读/写 | 40% | 顺序 | 10000 | 64K | 64K | 1 | 4 | 331.3 | 331.3 | 7.91 | 12.80 | 20.71 | 24.01 | 4.4 | |
vdbench | 读/写 | 40% | 顺序 | 10000 | 32K | 32K | 1 | 4 | 927.2 | 927.2 | 11.26 | 17.71 | 28.98 | 8.52 | 6.1 | |
vdbench | 写 | 0% | 随机 | 1000 | 6M | 1024K | 1 | 4 | 21.2 | 3.53 | 0 | 21.25 | 21.25 | 187.92 | 3.3 | |
vdbench | 写 | 0% | 随机 | 100 | 64M | 1024K | 1 | 4 | 13.9 | 0.21 | 0 | 13.87 | 13.87 | 287.88 | 2.8 | |
vdbench | 写 | 0% | 随机 | 1000 | 1M | 1024K | 1 | 4 | 61 | 61 | 0 | 61.03 | 61.03 | 65.42 | 3.8 | |
vdbench | 写 | 0% | 随机 | 1000 | 4M | 1024K | 1 | 4 | 19.9 | 4.97 | 0 | 19.9 | 19.90 | 200.65 | 3.1 | |
vdbench | 写 | 0% | 随机 | 10000 | 512K | 128K | 1 | 4 | 149.2 | 74.6 | 0 | 18.66 | 18.66 | 47.88 | 4.5 | |
vdbench | 写 | 0% | 随机 | 10000 | 64K | 64K | 1 | 4 | 100.3 | 100.3 | 0 | 6.27 | 6.27 | 8.45 | 3.3 | |
vdbench | 写 | 0% | 随机 | 10000 | 32K | 32K | 1 | 4 | 99.9 | 99.9 | 0 | 3.12 | 3.12 | 2.86 | 3.5 | |
vdbench | 读 | 100% | 随机 | 1000 | 6M | 1024K | 1 | 4 | 383.6 | 63.93 | 383.6 | 0 | 383.60 | 10.41 | 4.5 | |
vdbench | 读 | 100% | 随机 | 100 | 64M | 1024K | 1 | 4 | 378.9 | 5.92 | 378.8 | 0 | 378.88 | 10.54 | 4.2 | |
vdbench | 读 | 100% | 随机 | 1000 | 1M | 1024K | 1 | 4 | 379.9 | 379.9 | 379.9 | 0 | 379.90 | 10.48 | 5.3 | |
vdbench | 读 | 100% | 随机 | 1000 | 4M | 1024K | 1 | 4 | 385.7 | 96.42 | 385.6 | 0 | 385.60 | 10.35 | 4.6 | |
vdbench | 读 | 100% | 随机 | 10000 | 512K | 512K | 1 | 4 | 727.9 | 727.9 | 363.9 | 0 | 363.90 | 5.43 | 5.7 | |
vdbench | 读 | 100% | 随机 | 10000 | 64K | 64K | 1 | 4 | 6793.3 | 6793.3 | 424.58 | 0 | 424.58 | 0.56 | 18.3 | |
vdbench | 读 | 100% | 随机 | 10000 | 32K | 32K | 1 | 4 | 10427 | 10427 | 325.8 | 0 | 325.86 | 0.36 | 24.6 | |
vdbench | 读/写 | 40% | 随机 | 1000 | 6M | 1M | 1 | 4 | 24.7 | 4.11 | 10.96 | 13.77 | 24.73 | 290.67 | 3.3 | |
vdbench | 读/写 | 40% | 随机 | 100 | 64M | 1M | 1 | 4 | 24.7 | 0.38 | 10.91 | 13.79 | 24.70 | 287.78 | 2.9 | |
vdbench | 读/写 | 40% | 随机 | 1000 | 1M | 1M | 1 | 4 | 24 | 24 | 10.57 | 13.43 | 24.00 | 298.42 | 3.4 | |
vdbench | 读/写 | 40% | 随机 | 1000 | 4M | 1M | 1 | 4 | 23.3 | 5.82 | 10.23 | 13.08 | 23.31 | 303.00 | 3.4 | |
vdbench | 读/写 | 40% | 随机 | 10000 | 512K | 512K | 1 | 4 | 36.3 | 36.3 | 7.74 | 10.42 | 18.16 | 196.71 | 3.2 | |
vdbench | 读/写 | 40% | 随机 | 10000 | 64K | 64K | 1 | 4 | 323.7 | 323.7 | 7.71 | 12.52 | 20.23 | 24.57 | 4.3 | |
vdbench | 读/写 | 40% | 随机 | 10000 | 32K | 32K | 1 | 4 | 858.6 | 858.6 | 10.43 | 16.40 | 26.83 | 9.20 | 5.7 |
参照多线程的测试:在此硬件下线程数4,IO大小1M 基本上是比较合适
6m-1线程:
avg_2-100 67.0 14.819 4.6 1.54 0.0 0.0 0.000 67.0 14.819 0.00 66.98 66.98 1048419
6m-2线程:
avg_2-100 72.1 27.611 5.2 1.55 0.0 0.0 0.000 72.1 27.611 0.00 72.08 72.08 1048576
6m-4线程:
avg_2-100 67.8 58.021 4.7 1.55 0.0 0.0 0.000 67.8 58.021 0.00 67.83 67.83 1048576
6m-8线程:
avg_2-100 54.9 143.75 4.4 1.55 0.0 0.0 0.000 54.9 143.75 0.00 54.91
6m-16线程:
avg_2-100 66.4 238.40 4.8 1.71 0.0 0.0 0.000 66.4 238.40 0.00 66.41 66.41 1048576
32k-1线程:
avg_2-100 99.5 0.414 7.1 1.50 0.0 0.0 0.000 99.5 0.414 0.00 3.11 3.11 32768
32k-2线程:
avg_2-100 98.3 0.690 7.4 1.61 0.0 0.0 0.000 98.3 0.690 0.00 3.07 3.07 32768
32k-4线程:
avg_2-600 100.1 1.216 3.7 1.47 0.0 0.0 0.000 100.1 1.216 0.00 3.13 3.13 32767
32k-8线程:
avg_2-100 99.8 2.416 7.3 1.66 0.0 0.0 0.000 99.8 2.416 0.00 3.12 3.12 32768
32k-16线程:
avg_2-100 98.5 2.252 7.3 1.62 0.0 0.0 0.000 98.5 2.252 0.00 3.08 3.08 32768
64m-1M/IO:
avg_2-600 382.8 10.439 4.8 2.99 100.0 382.8 10.439 0.0 0.000 382.7 0.00 382.77 1048576
64m-4M/IO:
avg_2-100 58.0 68.587 4.1 2.26 100.0 58.0 68.587 0.0 0.000 232.1 0.00 232.16 4194304
64m-8M/IO:
avg_2-100 28.6 139.23 4.2 2.15 100.0 28.6 139.23 0.0 0.000 228.6 0.00 228.64 8388608
64m-64M/IO:
avg_2-100 4.2 959.05 5.4 2.28 100.0 4.2 959.05 0.0 0.000 265.6 0.00 265.60 67108864
工具:vdbench /home/intel/vdbench50406
样例
1.全写:
fsd=fsd1,anchor=/opt/Tvdbench/6M,depth=1,width=1,files=1000,size=6144k
fwd=fwd1,fsd=fsd1,operation=write,threads=4,openflags=o_direct,xfersize=1M,fileio=sequential
rd=rd1,fwd=fwd*,fwdrate=100,format=yes,elapsed=600,interval=1
2.全读:
fsd=fsd1,anchor=/opt/Tvdbench/6M,depth=1,width=1,files=1000,size=6144k
fwd=fwd1,fsd=fsd1,operation=read,xfersize=1M,fileio=sequential,openflags=o_direct,fileselect=random,threads=4
rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=600,interval=5
3.读写4/6:
fsd=fsd1,anchor=/opt/Tvdbench/6M,depth=1,width=1,files=1000,size=6144k
fwd=default,xfersize=1M,fileio=sequential,fileselect=random,threads=4,xfersize=4K,openflags=o_direct
fwd=fwd1,fsd=fsd1,operation=read,fileio=sequential,xfersize=1M,skew=40,openflags=o_direct,threads=4
fwd=fwd2,fsd=fsd1,operation=write,fileio=sequential,xfersize=1M,skew=60,openflags=o_direct,threads=4
rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=600,interval=1
坏道检测:
badblocks -v /dev/sda >> ./tbadblock.txt
备注:
在U盘、SSD等固态存储产品中,闪存芯片颗粒是核心,其关乎产品成本、寿命以及速度。闪存芯片颗粒主要有三种类型,分别为SLC、MLC、TLC,三者之间的区别,如下。slc、mlc、tlc闪存芯片颗粒区别介绍SLC=Single-LevelCell,即1bit/cell,速度快寿命长,价格贵(约MLC3倍以上的价格),约10万次擦写寿命;MLC=Multi-LevelCell,即2bit/cell,速度一般寿命一般,价格一般,约3000---10000次擦写寿命TLC=Trinary-LevelCell,即3bit/cell,也有Flash厂家叫8LC,速度慢寿命短,价格便宜,约500-1000次擦写寿命。QLC,全称是 Quad-Level Cell
,四层式存储单元,QLC闪存颗粒拥有比TLC更高的存储密度。成本上相比TLC更低,优势 就是可以将容量做的更大,成本上更低;理论擦写次数仅150~300次。
#!/bin/bash
# Copyright (2023)
# author:
# file: test_ssd_small_files.sh
# desc: 测试ssd小文件的读写性能
df -h
df -iT
free -h
lscpu
uname -a
echo $(date +"%Y-%m-%d %H:%M:%S") "test ssd small begin"
# 测试目录
mkdir -p /opt/Tvdbench
#
smartctl -a /dev/sda
# 读写性能
sync
ping -c 3 -w 3 127.0.0.1
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
# 顺序读写
mkdir -p ./log/seq/
echo $(date +"%Y-%m-%d %H:%M:%S") "test ssd small fio seq write"
./vdbench -f ./tlingwu/seq/create_files_64m -o ./log/seq/create_files_64m
./vdbench -f ./tlingwu/seq/create_files_6m -o ./log/seq/create_files_6m
./vdbench -f ./tlingwu/seq/create_files_4m -o ./log/seq/create_files_4m
./vdbench -f ./tlingwu/seq/create_files_1m -o ./log/seq/create_files_1m
./vdbench -f ./tlingwu/seq/create_files_512k -o ./log/seq/create_files_512k
./vdbench -f ./tlingwu/seq/create_files_64k -o ./log/seq/create_files_64k
./vdbench -f ./tlingwu/seq/create_files_32k -o ./log/seq/create_files_32k
free -h
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
echo $(date +"%Y-%m-%d %H:%M:%S") "test ssd small read"
free -h
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_read_64m -o ./log/seq/seq_read_64m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_read_6m -o ./log/seq/seq_read_6m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_read_4m -o ./log/seq/seq_read_4m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_read_1m -o ./log/seq/seq_read_1m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_read_512k -o ./log/seq/seq_read_512k
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_read_64k -o ./log/seq/seq_read_64k
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_read_32k -o ./log/seq/seq_read_32k
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
echo $(date +"%Y-%m-%d %H:%M:%S") "test ssd small read and write"
free -h
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_rw_64m -o ./log/seq/seq_rw_64m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_rw_6m -o ./log/seq/seq_rw_6m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_rw_4m -o ./log/seq/seq_rw_4m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_rw_1m -o ./log/seq/seq_rw_1m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_rw_512k -o ./log/seq/seq_rw_512k
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_rw_64k -o ./log/seq/seq_rw_64k
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/seq/seq_rw_32k -o ./log/seq/seq_rw_32k
free -h
# 随机读写
mkdir -p ./log/random/
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
echo $(date +"%Y-%m-%d %H:%M:%S") "test ssd small fio random write"
free -h
./vdbench -f ./tlingwu/random/create_files_64m -o ./log/random/create_files_64m
./vdbench -f ./tlingwu/random/create_files_6m -o ./log/random/create_files_6m
./vdbench -f ./tlingwu/random/create_files_4m -o ./log/random/create_files_4m
./vdbench -f ./tlingwu/random/create_files_1m -o ./log/random/create_files_1m
./vdbench -f ./tlingwu/random/create_files_512k -o ./log/random/create_files_512k
./vdbench -f ./tlingwu/random/create_files_64k -o ./log/random/create_files_64k
./vdbench -f ./tlingwu/random/create_files_32k -o ./log/random/create_files_32k
free -h
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
echo $(date +"%Y-%m-%d %H:%M:%S") "test ssd small read"
./vdbench -f ./tlingwu/random/seq_read_64m -o ./log/random/seq_read_64m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_read_6m -o ./log/random/seq_read_6m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_read_4m -o ./log/random/seq_read_4m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_read_1m -o ./log/random/seq_read_1m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_read_512k -o ./log/random/seq_read_512k
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_read_64k -o ./log/random/seq_read_64k
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_read_32k -o ./log/random/seq_read_32k
free -h
echo $(date +"%Y-%m-%d %H:%M:%S") "test ssd small read and write"
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_rw_64m -o ./log/random/seq_rw_64m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_rw_6m -o ./log/random/seq_rw_6m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_rw_4m -o ./log/random/seq_rw_4m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_rw_1m -o ./log/random/seq_rw_1m
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_rw_512k -o ./log/random/seq_rw_512k
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_rw_64k -o ./log/random/seq_rw_64k
sync
echo 3 > /proc/sys/vm/drop_caches
ping -c 3 -w 3 127.0.0.1
./vdbench -f ./tlingwu/random/seq_rw_32k -o ./log/random/seq_rw_32k
free -h
echo 3 > /proc/sys/vm/drop_caches
df -h
df -iT
echo $(date +"%Y-%m-%d %H:%M:%S") "test ssd small end"