fio -filename=/vdb_data/test_randread -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=4k -size=10G -numjobs=10 -runtime=60 -group\_reporting -name=mytest
参数解释
-filename=/vdb_data/test_randread:指定测试文件的路径和名称为/vdb_data/test_randread。
-direct=1:使用直接I/O模式,即跳过系统缓存,直接读写磁盘。
-iodepth 1:每个作业的I/O深度为1,即每个作业在队列中只有一个I/O请求。
-thread:使用线程模式执行测试任务。
-rw=randrw:使用随机读写模式进行测试,即同时进行随机读和随机写操作。
-ioengine=psync:指定使用psync I/O引擎。
-bs=4k:设置每个I/O请求的块大小为4KB。
-size=10G:指定测试文件的大小为10GB。
-numjobs=10:指定并发作业数为10,即同时执行10个测试任务。
-runtime=60:设置测试运行时间为60秒。
-group_reporting:汇总所有作业的结果报告。
-name=mytest:指定测试任务的名称为mytest,用于标识这个测试任务。
3.3 硬盘透传
虚拟机磁盘透传是指将物理主机上的磁盘直接映射给虚拟机使用,而不是通过虚拟机软件(如VMware、VirtualBox)创建虚拟磁盘文件。这样做可以提高性能,减少虚拟化层的开销,适用于一些对性能要求较高的应用场景。
3.3.1 以下是在一些常见虚拟化平台上实现磁盘透传的步骤:
KVM/QEMU(测试的情况)
1、编辑虚拟机的XML配置文件,添加类似如下的配置:
vim /vmimages/passthough-disk.xml
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/nvme4n1'/>
<target dev='vdd' bus='virtio'/>
</disk>
其中/dev/nvme4n1是要透传的物理磁盘设备。
2、使用virsh工具重新加载配置文件使更改生效:
#挂载透传硬盘
virsh attach-device vm1 /vmimages/passthough-disk.xml
#取消挂载透传硬盘
virsh detach-device vm1 /vmimages/passthough-disk.xml
# vm1是虚拟机名
VMware vSphere/ESXi
1、在ESXi主机上将物理磁盘添加到存储适配器中。
2、在虚拟机设置中选择添加硬件 - 存储控制器 - 硬盘。
3、选择“使用一个已经存在的磁盘”,然后选择要透传的物理磁盘。
4、完成虚拟机设置并启动虚拟机,系统会识别并挂载透传的物理磁盘。
Microsoft Hyper-V
1、在Hyper-V管理器中选择目标虚拟机,右键点击设置。
2、选择添加硬件,然后选择物理硬盘。
3、选择要透传给虚拟机的物理磁盘。
4、完成虚拟机设置并启动虚拟机,系统会识别并挂载透传的物理磁盘。
3.4 挂载内存盘
mount -t tmpfs -o size=40G tmpfs /mnt/tmp/
-t tmpfs:指定挂载的是内存盘
-o size=40G tmpfs;指定挂载内存盘大小
开机自动挂载
tmpfs /mnt/tmp/ tmpfs size=40G 0 0
内存盘读写性能测试(去除-direct参数,否则不能运行):
fio -filename=/mnt/tmp/test_randread -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=4k -size=2G -numjobs=1 -runtime=600 -group\_reporting -name=mytest
3.5 隔核测试
1、隔核操作
sudo vim /etc/default/grub
增加以下内容
# 隔核2-79,iommu=pt,intel\_iommu=on
GRUB\_CMDLINE\_LINUX\_DEFAULT="isolcpus=2-79 iommu=pt intel\_iommu=on"
使改动生效
update-grub
reboot
2、指定内核测试磁盘性能
taskset -c 3(指定xx核) fio -filename=/ssd_test/test_randread -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=10G -numjobs=1 -runtime=60 -group\_reporting -name=mytest
3、给予线程高权限,防止因为out of memory被宿主机kill:
ps aux | grep qemu(获取虚拟机得进程id)
echo -1000 > /proc/进程id/oom_score_adj
占用指定内存空间以达到极限测试效果的程序
def allocate\_memory(size_in_gb):
# 分配指定GB数的内存空间
num_bytes = size_in_gb \* (1024\*\*3) # 转换GB到字节
try:
# 使用bytearray创建一个大数组
big_array = bytearray(num_bytes)
print(f"Successfully allocated {size\_in\_gb} GB of memory")
return big_array
except MemoryError:
print(f"Failed to allocate {size\_in\_gb} GB of memory. Not enough resources.")
if __name__ == "\_\_main\_\_":
size = 40 # 指定想要分配的内存大小(GB)
memory_block = allocate_memory(size)
# 在此处加入任何想要进行的处理