如何在招聘网站上选个好公司做销售,WordPress电子书模板模板,红河蒙自网站开发,汽车销售管理系统一、背景
在kvm虚拟机ubuntu操作系统大数据平台测试的过程中#xff0c;遭遇了磁盘I/O性能的瓶颈#xff0c;因有cpu绑核操作#xff0c;故有做隔核操作验证是否是绑核影响的磁盘I/O#xff0c;后又对磁盘进行透传以及挂内存盘等操作#xff1b;
二、磁盘介绍
2.1 磁盘…一、背景
在kvm虚拟机ubuntu操作系统大数据平台测试的过程中遭遇了磁盘I/O性能的瓶颈因有cpu绑核操作故有做隔核操作验证是否是绑核影响的磁盘I/O后又对磁盘进行透传以及挂内存盘等操作
二、磁盘介绍
2.1 磁盘类型
HDD HDD硬盘也就是我们常常说的机械硬盘机械硬盘是传统的盘片磁头的工作原理数据都是存储在盘片上面磁头在盘片上面“做运动”来读取和处理数据信息。
SSD SSD由控制单元和存储单元FLASH芯片、DRAM芯片组成固态硬盘的数据读取速度非常的快。
影响磁盘的几个参数包含总线、协议、接口。
2.2 总线
SAS总线 SATA总线 PCIe总线 在数据传输速率表现层面我们可以简单地理解为PCIe4.0 PCIe3.0 ASTA3.0 SAS3.0
2.3 协议
AHCI协议 NVMe协议 SCSI协议不常用 在数据传输速率表现层面我们可以简单地理解为NVMe协议传输速度比AHCI协议更快。
2.4 接口 2.5 磁盘阵列
2.5.1 磁盘阵列介绍
磁盘阵列Redundant Arrays of Independent DisksRAID是由很多块独立的磁盘组合成一个容量巨大的磁盘组利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。它利用这项技术将数据切割成许多区段分别存放在各个硬盘上。在数据重构时可将数据经计算后重新置入新硬盘中。从用户观点看磁盘阵列虽然是由几个、几十个甚至上百个盘组成但仍可认为是一个单一磁盘。
2.5.2 磁盘阵列组成
Raid卡这是实现RAID功能的核心组件它可以划分RAID让很多磁盘驱动器同时传输数据而这些磁盘驱动器在逻辑上又是一个磁盘驱动器。 CPU用于处理RAID卡上的数据和指令。 IO处理器用于处理输入输出请求将数据从磁盘读取到缓存中或者将数据从缓存写入磁盘。 SCSI控制器用于控制SCSI总线上的设备实现设备之间的数据传输。 SCSI连接器用于连接SCSI设备和主机系统。 cache用于存储暂时不用的数据和指令提高系统的性能。
2.5.3 常见的Raid类型
RAID 0 RAID 1 RAID 5 RAID 6 RAID 10
2.5.4 影响磁盘阵列速度和性能的因素
磁盘阵列的设置如果磁盘阵列没有正确设置可能无法实现最佳的性能。 网络连接速度磁盘阵列设备的速度可能受到网络连接速度的限制。 磁盘过载如果磁盘阵列中的磁盘过载速度也可能会受到影响。 软件故障磁盘阵列设备中的软件可能出现故障导致性能下降。 磁盘污染磁盘阵列中的磁盘可能受到污染导致性能下降。 传输带宽传输带宽指的是硬盘或设备在传输数据的时候数据流的速度主要取决于磁盘阵列的构架、通道的大小以及磁盘的个数。
注磁盘的性能一般使用IOPS表示
IOPS固态硬盘的IOPS是指每秒输入/输出操作数表示固态硬盘每秒可以处理多少个读写请求。决定IOPS的主要取决于磁盘阵列RAID类型、CACHE命中率以及磁盘个数。磁盘阵列的速度和性能可能受到多种因素的影响包括硬件、软件、网络等多个方面。
三、挂载内存盘
3.1 查看虚拟机硬盘绑定情况
ps axu| grep qemu3.2 硬盘读写性能测试filename:待测试路径 HDD硬盘随机读写测试性能一般在4M/s左右
fio -filename/vdb_data/test_randread -direct1 -iodepth 1 -thread -rwrandrw -ioenginepsync -bs4k -size10G -numjobs10 -runtime60 -group_reporting -namemytest参数解释
-filename/vdb_data/test_randread指定测试文件的路径和名称为/vdb_data/test_randread。
-direct1使用直接I/O模式即跳过系统缓存直接读写磁盘。
-iodepth 1每个作业的I/O深度为1即每个作业在队列中只有一个I/O请求。
-thread使用线程模式执行测试任务。
-rwrandrw使用随机读写模式进行测试即同时进行随机读和随机写操作。
-ioenginepsync指定使用psync I/O引擎。
-bs4k设置每个I/O请求的块大小为4KB。
-size10G指定测试文件的大小为10GB。
-numjobs10指定并发作业数为10即同时执行10个测试任务。
-runtime60设置测试运行时间为60秒。
-group_reporting汇总所有作业的结果报告。
-namemytest指定测试任务的名称为mytest用于标识这个测试任务。3.3 硬盘透传
虚拟机磁盘透传是指将物理主机上的磁盘直接映射给虚拟机使用而不是通过虚拟机软件如VMware、VirtualBox创建虚拟磁盘文件。这样做可以提高性能减少虚拟化层的开销适用于一些对性能要求较高的应用场景。
3.3.1 以下是在一些常见虚拟化平台上实现磁盘透传的步骤
KVM/QEMU测试的情况 1、编辑虚拟机的XML配置文件添加类似如下的配置
vim /vmimages/passthough-disk.xmldisk typeblock devicediskdriver nameqemu typeraw cachenone/source dev/dev/nvme4n1/target devvdd busvirtio/
/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 size40G tmpfs /mnt/tmp/-t tmpfs指定挂载的是内存盘 -o size40G tmpfs;指定挂载内存盘大小
开机自动挂载
tmpfs /mnt/tmp/ tmpfs size40G 0 0内存盘读写性能测试去除-direct参数否则不能运行
fio -filename/mnt/tmp/test_randread -iodepth 1 -thread -rwrandrw -ioenginepsync -bs4k -size2G -numjobs1 -runtime600 -group_reporting -namemytest3.5 隔核测试
1、隔核操作
sudo vim /etc/default/grub增加以下内容
# 隔核2-79iommuptintel_iommuon
GRUB_CMDLINE_LINUX_DEFAULTisolcpus2-79 iommupt intel_iommuon使改动生效 update-grubreboot2、指定内核测试磁盘性能
taskset -c 3指定xx核 fio -filename/ssd_test/test_randread -direct1 -iodepth 1 -thread -rwrandwrite -ioenginepsync -bs16k -size10G -numjobs1 -runtime60 -group_reporting -namemytest3、给予线程高权限防止因为out of memory被宿主机kill:
ps aux | grep qemu获取虚拟机得进程idecho -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(fSuccessfully allocated {size_in_gb} GB of memory)return big_arrayexcept MemoryError:print(fFailed to allocate {size_in_gb} GB of memory. Not enough resources.)if __name__ __main__:size 40 # 指定想要分配的内存大小(GB)memory_block allocate_memory(size)# 在此处加入任何想要进行的处理# ...input(Press Enter to release the allocated memory and exit the program.)