1. 在澳门云主机控制台创建至少一台相同规格的测试实例(CPU/内存相同),并在同一区域分别挂载不同类型磁盘:HDD、SATA SSD、SAS(若有)、本地NVMe、云块盘(高性能型)。2. 系统使用 Linux(推荐 Ubuntu/CentOS),已安装 sudo 权限与网络访问。3. 安装测试工具:sudo apt update && sudo apt install -y fio sysstat
1. 列出磁盘:lsblk 或 sudo fdisk -l,记录设备名(/dev/vdb 等)。2. 为每盘建立分区并格式化:sudo mkfs.ext4 -F /dev/vdb3. 创建挂载点并挂载:sudo mkdir -p /mnt/disk_hdd && sudo mount -o noatime,nodiratime /dev/vdb /mnt/disk_hdd4. 为避免页面缓存影响,测试前执行 echo 3 | sudo tee /proc/sys/vm/drop_caches
1. 随机4K读写混合(模拟数据库):sudo fio --name=randrw --ioengine=libaio --iodepth=32 --rw=randrw --rwmixread=70 --bs=4k --size=2G --numjobs=1 --runtime=60 --time_based --direct=1 --group_reporting2. 顺序大块读写(备份场景):sudo fio --name=seqwrite --ioengine=libaio --rw=write --bs=1m --iodepth=16 --size=4G --runtime=60 --direct=1 --group_reporting3. 输出 JSON 以便后处理:--output=结果.json --output-format=json
1. 对每一块磁盘重复相同妥当的测试顺序:先随机读写,再顺序读,再顺序写。2. 测试顺序示例:HDD -> SATA SSD -> SAS -> 云盘 -> NVMe,每次更换磁盘后 drop_caches 并确保没有后台 IO。3. 每种测试至少跑 3 次取中位数以降低偶然误差。
1. 同步采集 iostat:sudo iostat -x 1 > iostat_hdd.log &,在测试同时记录,以获取 util/await/svctm。2. 使用 fio 的 clat、bw、iops 字段查看延迟与吞吐。若需更细颗粒度用 --lat_percentiles=1 。3. 保存 JSON 输出并在本地用 jq 提取关键字段:cat 结果.json | jq '.jobs[].read.bw, .jobs[].read.iops, .jobs[].read.clat.mean'
1. 比较 IOPS:对于 4K 随机混合测试,IOPS 高且延迟(clat.mean/clat.p99)低的磁盘适合高并发小 IO 场景(数据库)。2. 顺序大块写/读关注吞吐(MB/s)与稳定性。3. 注意云盘可能受共享网络与后端限速影响,查看 iostat util% 与等待时间(await)来判断瓶颈类型。
Q: 我在相同测试下,云盘 IOPS 明显低于本地 NVMe,该如何定位?
A: 首先确认实例规格与云盘性能级别(是否为高性能型)。用 iostat 查看 await 与 util,若 await 高且 util 低,可能为网络延迟或后端队列受限;再对比不同时间和不同实例重试。可试用更大 iodepth 或并发 numjobs 测试云盘极限,或联系供应商查看后端 QoS。
Q: 我的 MySQL 对 IOPS 很敏感,应该选哪种磁盘?
A: 优先选择本地 NVMe 或高性能云 SSD(低延迟、随机 IOPS 高)。若必须用网络云盘,选择有 IO 保证/独立吞吐的类型,并开启直写/direct=1 与合适文件系统挂载参数(noatime)。必要时使用缓存或本地写入加速层。
Q: 测试结果波动大,如何降低测试噪声?
A: 保证测试时实例无其他负载,测试前 drop_caches,测试多次取中位数;用 JSON 输出记录 percentiles(p50/p95/p99),避免短时间测试(time_based 最少 60s);若仍波动,尝试不同可用区或联系运营商排查后端噪声。
