• [技术干货] KVM虚拟机
    KVM实际是Linux内核提供的虚拟化  架构,可将内核直接充当Hypervisor来使用。KVM包含一个内核模块kvm.ko用来实现核心虚拟化功能,以及一个和处理器强相关的模块如kvm-amd.ko。KVM本身不实现任何模拟,仅仅是暴露了一个/dev/kvm接口,这个接口可被宿主机用来主要负责vCPU的创建,虚拟内存的地址空间分配,vCPU寄存器的读写以及vCPU的运行。有了KVM以后,Guest OS的CPU指令不用再经过QEMU来转译便可直接运行,大大提高了运行速度。KVM实现了CPU和内存的虚拟化,但KVM并不能模拟其他设备,还必须有个运行在用户空间的工具才行。KVM的开发者选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,QEMU  模拟IO设备(网卡,磁盘等),对其进行了修改,最后形成了QEMU-KVM。在QEMU-KVM中,KVM运行在内核空间,QEMU运行在用户空间,实际模拟创建、管理各种虚拟硬件,QEMU将KVM整合了进来,通过/ioctl调用/dev/kvm,从而将CPU指令的部分交给内核模块来做,KVM实现了CPU和内存的虚拟化,但KVM不能虚拟其他硬件设备,因此QEMU还有模拟IO设备(磁盘、网卡、显卡等)的作用,KVM加上QEMU后就是完整意义上的服务器虚拟化。建议的版本表1 建议的版本展开软件建议版本QEMU(CentOS)qemu-2.12.0及以上版本libvirt(CentOS)libvirt-4.5.0及以上版本QEMU(openEuler 20.03 LTS SP1)qemu-4.1.0及以上版本libvirt(openEuler 20.03 LTS SP1)libvirt-6.2.0及以上版本对于不同的硬件设备,通过在BIOS中设置一些高级选项,可以有效提升服务器的性能。展开BIOS配置项选项含义建议配置值修改路径SRIOV启用或禁用Single Root Input/Output Virtualization(SRIOV)。EnabledBIOS > Advanced > PCIe Config > SRIOVSupport Smmu启用或禁用SMMU功能。EnabledBIOS > Advanced > MISC Config > Support Smmu  按照上表推荐的BIOS配置项,配置操作步骤如下:重启服务器,进入BIOS设置界面。开启SRIOV。在BIOS中,依次选择“Advanced > PCIe Config > SRIOV”,设置为Enabled。开启SMMU。须知此优化项只在虚拟化场景使用,非虚拟化场景需关闭。在BIOS中,依次选择“Advanced > MISC Config > Support Smmu”,设置为Enabled。按F10保存BIOS设置,并重启服务器。安装虚拟化相关组件更新时间:2024/12/27需已配置本地源后或外网可用的情况下进行安装。CentOS和openEuler两种操作系统所需组件不完全相同,请根据实际需求进行安装。CentOS在CentOS中安装虚拟化相关组件。  yum -y install qemu* libvirt* AAVMF virt-installopenEuler获取virt-manager源码。 git clone https://gitee.com/src-openeuler/virt-manager.git -b openEuler-20.03-LTS-SP1编译virt-manager并安装。进入源码目录。 virt-manager安装必要软件包。m install rpm-build yum-builddep virt-manager.spec创建编译目录。 mkdir -p ~/rpmbuild/SOURCES将源文件拷贝至编译目录。 cp * ~/rpmbuild/SOURCES编译。 rpmbuild -bb virt-manager.spec安装生成的RPM包。 yum install ~/rpmbuild/RPMS/noarch/*.rpm安装虚拟化相关组件。 yum -y install qemu libvirt openssl-devel numactl numactl-devel libcap-ng-devel traceroute ipe创建第一个虚拟机启动libvirtd服务并设置开机自启。ystemctl start libvirtdsystemctl enable libvirtd创建存储池。创建存储池目录,配置目录权限。mkdir -p /home/kvm/imageschown root:root /home/kvm/imageschmod 755 /home/kvm/images定义一个存储池并绑定目录,建立基于文件夹的存储池、激活、设置开机启动。virsh pool-define-as StoragePool --type dir --target /home/kvm/imagesvirsh pool-build StoragePoolvirsh pool-start StoragePoolvirsh pool-autostart StoragePool查看存储池信息。virsh pool-info StoragePoolvirsh pool-list创建虚拟机磁盘空间。创建卷。创建名称为1.img,所在存储池为StoragePool,容量为50G,初始分配1G,文件格式类型为qcow2,硬盘文件的格式必须为qcow2格式。virsh vol-create-as --pool StoragePool --name 1.img --capacity 50G --allocation 1G --format qcow2 查看卷信息。virsh vol-info /home/kvm/images/1.img创建虚拟机。创建虚拟机vm1,虚拟机分配4个CPU、8G内存,使用1.img作为磁盘空间,将iso文件拷贝至/xxx(非/root)路径下,安装CentOS7.6系统。 brctl addbr br1virt-install --name=vm1 --vcpus=4 --ram=8192 --disk path=/home/kvm/images/1.img,format=qcow2,size=50,bus=virtio --cdrom /xxx/CentOS-7-aarch64-Everything-1810.iso --network bridge=br1,model=virtio --force --autostart  安装虚拟机的操作系统。配置所有带有“!”的选项,输入选项对应的序号进入配置,按照指示完成配置,然后按"b"开始安装。系统安装完成后,进入登录界面。  
  • [问题求助] 请教鲲鹏920下的Cuttlefish问题
    请教各位前辈,之前在rtk3588上测试的cuttlefish安卓虚拟机运行正常,现在移植到了Taishan服务器中,编译过程没出现什么问题,但是启动模拟器无法启动crosvm和qemu下均无法启动,重新编译了很多很多次都是不行,想请教是CPU不支持还是其他什么可能出现的原因呢OS : Ubuntu Server 20.04
  • [技术干货] 从NVP到NSX
    Cisco 的网络虚拟化联姻VMware的服务器虚拟化,似乎将成为云数据中心的标准打包方案,二者的未来看上去很美。然而,SDN的出现改变了数据中心网络的市场格局。Nicin的NVP平台是最早的基于SDN的数据中心网络解决方案。Nicira是SDN的骨灰级选手推出了 OpenFlow和OVS,该公司三位最主要的创始人MartinCasado、Nick McKeown和 Scott Shenker是业界公认的SDN奠基者。NVP所选的技术架构当时让人眼前一亮,使用 Overlay构建纯软件的虚拟化网络,SDN只负责网络边缘的控制,而不会对现有网络产生任何影响,可以说是现有数据中心网络向SDN演进的最佳形态。VMware看到了NVP在商业上具备的巨大价值,一旦将NVP集成到自己的虚拟化解决方案中,那么今后便有机会在网络虚拟化上与Cisco掰一掰手腕,从而开拓自己从未有机会触碰的市场。而Cisco同样敏感地意识到了NVP带来的挑战,这种纯软件的SDN解决方案对于 Nexus系列交换机在数据中心市场的布局将形成巨大的挑战,一旦VMware收了 NVP,那么肯定要吃不少苦果子,但如果自己拿到NVP,那么操作的空间可就大得多了--既可以选择温和地推进NVP,等到Nexus赚的盆满钵满,再迅速通过NVP来占领数据中心的 SDN市场。当然,也可以内部消化掉NVP,坐等SDN自生自灭。于是争端一触即发,2012年年中,双方展开了对Nicira的收购大战。从最后的结果来看,VMware以12.5亿美元收购了Nicira。VMware收购Nicira后,基于NVP的原型推出了自己的SDN网络虚拟化平台NSX,高调进军数据中心网络市场,也宣告着放弃了与Cisco在网络领域的合作关系。当然,Cisco也不会坐以待毙,于2013年以8.64亿美元收购了SDN创业公司Insieme,同时发布了ACI的架构与产品。此后,NSX和ACI在数据中心展开了正面的交锋,数据中心SDN也正式走上了商用的道路。不过,鉴于NVP选择开源的技术是其成功的先决条件之一,于是NSX采用了“两条腿走路”的策略:NSX-V将NVP的技术特征嫁接到了VDS上,将其网络虚拟化与服务器虚拟化的产品共同交付;NSX-MH则保留了NVP的开源基因,仍然使用OVS和 OpenFlow/OVSDB支撑SDN架构,可以服务于KVM、XEN等非VMware的服务器虚拟化产品。2016年5月,VMware推出NSX-T,NSX-T是对NSX-MH的一次重大的更新,旨在提供更好的Hypervisor Agnostic 特性。
  • [问题求助] QEMU 的这个版本不支持USB 重新定向
        vmware 迁移  22.03 LTS SP2 kvm  ,   桌面 Xfce  启动虚拟机提示错误 ! 无法完成安装:'不支持的配置:QEMU 的这个版本不支持 USB 重新定向'  Traceback (most recent call last):   File "/usr/share/virt-manager/virtManager/asyncjob.py", line 75, in cb_wrapper     callback(asyncjob, *args, **kwargs)   File "/usr/share/virt-manager/virtManager/create.py", line 2124, in _do_async_install     guest.installer_instance.start_install(guest, meter=meter)   File "/usr/share/virt-manager/virtinst/installer.py", line 413, in start_install     domain = self._create_guest(   File "/usr/share/virt-manager/virtinst/installer.py", line 358, in _create_guest     domain = self.conn.createXML(install_xml or final_xml, 0)   File "/usr/lib64/python3.9/site-packages/libvirt.py", line 4062, in createXML     if ret is None:raise libvirtError('virDomainCreateXML() failed', conn=self) libvirt.libvirtError: 不支持的配置:QEMU 的这个版本不支持 USB 重新定向 
  • [问题求助] 鲲鹏920支持 KVM嵌套虚拟化吗
    请问鲲鹏920支持 KVM嵌套虚拟化吗,因为想利用KVM嵌套虚拟化,创建KVM虚拟机,然后在里面继续创建嵌套的KVM虚拟机,这样我可以对中间的虚拟机进行内核修改等操作,这样不影响系统运行,不需要重装服务器操作系统,在X86平台上,我们可以用VMWare workstation,里面创建虚拟机kvm_intel也可以开启嵌套虚拟化。我的环境:鲲鹏920+openEuler22.03 SP2 aarch64版。目前创建的虚拟机ubuntu 22.04 server版和openEuler22.03 SP2 aarch64版,里面均没有/dev/kvm,表明不支持KVM虚拟化,我想问以下几个问题,请各位大佬解答一下,鲲鹏920是基于ARM V8.几架构,鲲鹏是否支持嵌套虚拟化,我查资料时,发现ARM V8.4支持NEVE嵌套虚拟化:ARM嵌套虚拟化扩展(NEVE: Nested Virtualization Extensions for ARM) — Cloud Atlas 0.1 文档 (cloud-atlas.readthedocs.io)如果支持,该如何开启需要配置固件UEFI,还是需要重新配置内核,因为ARM下的KVM已经没有KVM模块了,lsmod | grep kvm是没有的。
  • [技术干货] KVM-内存虚拟化的基本配置
    介绍:虚拟化通常是云计算的基础。简单的说,虚拟化可以满足在一台物理的服务器上可以跑多台虚拟机而,虚拟机共享服务器的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的,KVM是基于linux内核开发实现的,而kvm内核中有一个模块叫KVM.ko用于管理虚拟CPU和内存,在云计算当中还是非常常见的,相比openstack来讲,kvm也是有它的优点所在。步骤:先分配1G内存的大小启动客户机:代码:qemu-system-x86 anuo.img -m 1G -enable -kvm在客户机中查看内存相关信息:分配2G内存的大小启动客户机代码:qemu-system-x86_64 anuo.img -m 2G -enable -kvm在客户机中查看内存的相关信息:注意比较二者之间的差异,包括内存的变化等等。查看机器是否支持 eptlvpid代码:cat/proc/cpuinfo |“eptlvpid”查看模块支持情况内存过载时用到的三种方法:内存交换(swapping):用硬盘空间来弥补内存的不足。气球(ballooning):通过驱动实现。页共享(page sharing):多个扩展页使用相同的内存空间。比较启动客户机前后的内存使用情况:总结:kvm虚拟化虽然比不上openstack的应用面广,但是支持普通的小微企业还是分成耐用的,操作流程也很清晰,欢迎大家一起来探讨。
  • [交流分享] 在华为云鲲鹏BMS中部署kvm虚拟化的问题
    在华为云官网创建鲲鹏BMS(选择centos操作系统,只能选择centos7.6版本),然后在系统中部署kvm虚拟化(qemu-kvm2.12),启动kvm虚拟机,然后打开vnc画面,始终显示Guest has not initialized the display (yet),如下图:补充说明:查看BMS的CPU型号为kunpeng920,另外在我公司本地环境同样用搭载kunpeng920的TaiShan200服务器+openEuler20.3 部署qemu-4.1。
  • kvm网络的基本配置
    文章简介:通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,在一台计算机上同时运行多个逻辑计算机,同时每个逻辑计算机可运行不同的操作系统,应用程序都可以在相互独立的空间内运行而互相不影响,从而提高计算机的工作效率文章步骤:了解网络配置的基本参数。使用 qemu模拟网卡。:配置网络环境。实验前准备安装virt-manager环境。创建了宿主机实验流程(1)基础配置查看qemu支持的网络的相关模型参考命令 :  qemu-system-x86_64 -net nic,model=?在管理界面查看网卡的相关信息:     参考命令 :(qemu)info qtree在宿主机中启动一台客户机并配置好相应的网络参数[    参考命令: qemu-system-x86_64 -m 1024 rhel7.img -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 –net user 查看网卡的信息      参考命令:ethtool -i ens8在管理界面查看网络信息参考命令:(qemu) info block实验(2)配置 bridge模式宿主机实现如下操作:配置网络记录IP地址和网关    IP地址=  192.168.232.168           (参考命令:ifconfig)网关=    192.168.232.2             创建网桥的配置文件进入到存放网卡配置文件目录:(参考命令:/etc/sysconfig/network-scripts创建网桥的配置文件(vim ifcfg-br0)编写网桥配置文件:STP=yes TYPE=BridgeDEVICE=br0NAME=br0ONBOOT=yes BOOTPROTO=staticIPADDR=192.168.232.141GATEWAY=192.168.232.2NETMASK=255.255.255.0DNS1=114.114.114.114DNS2=8.8.8.8修改网卡的配置文件进入到存放网卡配置文件目录:(参考命令:/etc/sysconfig/network-scripts备份配置文件 (参考命令:cp ifcfg-ens33  ifcfg-ens33bak )打开配置文件 (参考命令:vim ifcfg-ens33)修改配置文件的内容:DEVICE=ens33ONBOOT=yesBRIDGE=br0TYPE=EthernetNAME=ens33重新启动libvirtd 和网络服务参考命令:systemctl restart libvirtd          systemctl restart network打开virt-manger工具    参考命令:virt-manager选择客户机-打开控制台-添加桥接网卡重启网络服务:(参考命令:systemctl restart network)启动客户机查看网卡信息,给出自动获得的ip 地址。(参考命令:ip a)新生成的网卡名称:    link/ens33           获得的IP地址为:       192.168.234.167           测试网络的联通性:(参考命令: ping www.baidu.com)​​​​​​​结束语:通过eqmu了解网络配置的基本参数配置信息如何使用 qemu模拟网卡和通过配置桥连接网络环境实现对网卡的配置让客户机上网本次实验对网络配置有了更深刻的了解比如在虚拟机的客户机上通过qemu来调配bridge的方式查看当前网络的配置状态 让客户机能上网这些操作
  • 基于kvm存储的基本配置
    实验步骤:(以下内容为简单示例,大家要按照实际的做实验的步骤填写)1. 使用一个镜像文件启动一个客户机(默认从第一块硬盘 启动​2. 客户机中:查看磁盘的相关信息:班级​​​3. 客户机中管理界面查看存储的相关信息:班级​4. 从光驱启动客户机​5. 设置启动顺序,并且弹出启动菜单​6. 使用 drive -file 启动客户机,设置 snapshot=on 参数,系统断电后重启,数据恢复到最初的状态。(1)新建 1 个文件​(2)关机班级​(3)重新启动​(4)查看新建的文件是否存在。​Vish 网络管理命令​​显示接口信息​​显示libvirt 管理的存储池​查询存储池的基本信息​根据uuid 查询存储池的名称​根据名称查询存储池的uuid​编辑一个存储池的XML文件​​关闭一个存储池​查询一个存储池中存储卷的列表​查询一个存储卷的路径​实验结果及分析:从 kvm 的几个基本操作出发实现对 kvm 虚拟化用 qemu-img 管理操作一条命令的上下 逻辑也非常的清晰比如说再创建快照时我们首先要 ll 查看客户机的信息 使用snapshot 命令创建一 个快照并查看是否创建成功 回到客户机删除创建的 txt 文件并查看是否删除成功随后要 shudown 重启操作并再终端输入 snapshot-a 的命令 重启客户机后发现被删除的文件被恢复了 对于基本命令 的逻辑操作还是非常重要的也要非常重视才行也包含了对virsh工具的基本命令解析如上所示 内容丰富 very good!
  • [问题求助] kvm虚拟机异常关机
    一直异常关机,报错如图 655516
  • [问题求助] kvm虚拟机异常关机
    虚拟机一直异常关机 655507
  • [问题求助] kvm虚拟机异常关机
    虚拟机一直异常关机 655507
  • [技术干货] 创建KVM虚拟机
    更多介绍:https://support.huaweicloud.com/instg-kunpengcpfs/kunpengcpfs_03_0002.html操作系统centos7.6 第一步:关闭防火墙systemctl  stop firewalldsystemctl  disable firewalld关闭selinuxvim /etc/sysconfig/selinux目前临时关闭,下次重启后会自动关闭setenforce 0第二步:在CentOS 7.6中安装虚拟化相关组件。yum -y install qemu* libvirt* AAVMF virt-install 启动libvirtd服务systemctl start libvirtd重启libvirt服务。service libvirtd restart查看版本信息virsh version 第一种方式:图形的形式安装GuestOS打开virt-manager 第二种安装方式:命令行方式安装虚拟机的配置文件存储的介质 根据配置文件创建虚拟机1、需要有磁盘配置文件cp vm1.img vm2.img或者cp vm1.img vm2.cqow22、需要有配置文件cp vm1.xml vm2.xml3、配置文件需要修改必要的内容注意:mac地址只能修改后面三段4、创建虚拟机virsh define /etc/libvirt/qemu/vm2.xml5、启动systemctl restart libvirtd 6、宿主机开启路由转发vim /etc/sysctl.conf添加如下内容net.ipv4.ip_forward=1使配置文件生效sysctl -p为虚拟机扩展另外一个磁盘方法一:通过图形界面启动虚拟机,登录验证能正常挂载显示。移除磁盘方法二:通过命令方式:第一步:修改虚拟机对应的配置文件vim /etc/libvirtd/qemu/vm1.xml第二步:创建新的空磁盘卷:qemu-img create –f qcow2 /var/lib/libvirt/images/vm1-1.qcow2 2G第三步:重新定义虚拟机的配置文件:virsh define /etc/libvirtd/qemu/vm1.xml第四步:启动虚拟机登录验证第三部分:KVM 必须要配置一个目录当做存储磁盘镜像(存储卷)的目录,我们称这个目录为存储池。默认的存储池:/var/lib/libvirt/images/存储池的管理创建基于文件夹的存储池(目录)mkdir –p /data/vmfs定义存储池与其目录virsh pool-define-as vmdisk --type dir -- target /data/vmfs创建已经定义的存储池virsh pool-build vmdisk查看已经定义的存储池,存储池不激活没法使用virsh pool-list --all激活并自动启动已定义的存储池virsh pool-start vmdiskvirsh pool-autostart vmdisk  这里vmdisk存储池已经创建好了,可以直接在这个存储池中创建虚拟磁盘镜像了。在存储池中创建虚拟机存储卷virsh vol-create vmdisk vm3.qcow2 15G --format qcow2 网络管理brctl show查看有多少个虚机交换机把虚拟机交互机上的vnet网卡删掉brctl delif virbr0 vnet0添加vnet网卡到交换机上brctl addif virbr0 vnet0通过配置文件配置桥接网卡在宿主机上操作查看宿主机上的物理网卡和ip地址:ip a通过route 查看宿主机的网关创建一个桥接网络接口的配置文件cd /etc/sysconfig/network-scripts/vim ifcfg-br0主要其中的ip和网关需要和宿主机保持一样 把物理机对应的ens33物理网卡配置文件进行备份并且修改cp ifcfg-ens33 ifcfg-ens33.bakvim ifcfg-ens33中的内容修改为如下DEVICE=”ens33”ONBOOT=yesBRIDGE=br0重启网络systemctl restart libvirtdsystemctl restart network通过图形界面为虚拟机vm2添加一个桥接网卡启动虚拟机vm2,查看方发现多了一个网卡ens9,并且有ip地址。发现和宿主机的ip(192.168.96.155)在同一个网段。通过在宿主机上ip a查看发现多另一个桥接网卡br0,并且这个ip地址就之前的宿主机网卡的ip(192.168.96.155)到此桥接网卡br0就和物理网卡ens33就行绑定了。同时桥接网卡的ip已经修改为物理网卡的ip地址。 删除桥接网卡关机对应的虚拟机图形删除对应虚拟机上的桥接网卡br0删除br0的配置文件rm –rf ifcfg-br0删除已经修改过的ens33网卡配置文件rm –rf ifcfg-ens33恢复之前备份好的ens33网卡配置文件mv ifcfg-ens33.bak ifcfg-ens33重启libvirtd和networksystemctl restart libvirtdsystemctl restart network查看网卡发现桥接网卡已经被删除,宿主机上的ens33网卡恢复对应的ip地址查看vm的网卡情况eth0正常开启。通过配置文件方式创建nat网络重新启动systemctl restart libvirtd为虚拟机添加刚刚新创建的nat1网卡启动虚拟机查看发现多一张网卡ens9,并且有对应的ip地址。删除对应的nat1网卡通过配置文件创建隔离的网卡启动服务:systemctl restart libvirtd 添加隔离的网卡启动虚拟机vm后查看vm的网口信息:卸载kvmyum remove `rpm -qa | egrep 'qemu|virt|KVM'` -yrm –rf /var/lib/libvirt  /etc/libvirt/ 
  • [管理与监控] ceph rbd+KVM TRIM功能使能和确认方法
    在Ceph 0.46和kvm 1.1 以后, Ceph块设备支持丢弃操作。时就意味着客户端可以发送TRIM请求让Ceph块设备释放未被使用的空间。这种操作可以通过ext4或者xfs支持。要支持这个选项,需要在启动虚拟机时候加上discard_granularity配置:例如:启动命令qemu-system-aarch64 \-bios /home/kvm/QEMU_EFI.fd \-cpu host -M virt -m 8G --enable-kvm -machine gic-version=3 -nographic \-device virtio-scsi-pci,id=scsi0 \-drive file=rbd:rbd/cent7-min2,format=raw,if=none,id=drive-scsi0-0-0-0 \-device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,bootindex=1 \-drive file=rbd:rbd/qimg0,format=raw,if=none,id=drive-scsi0-0-0-1 \-device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi0-0-0-1,id=scsi0-0-0-1,discard_granularity=512启动后进入OS查看 sdb的 discard_granularity/sys/block/sdb/queue/discard_granularity如果以virtio启动磁盘,则此参数为0,无效。(virtio不支持discard)
  • [技术干货] KVM调优指导书
    目录-1 调优概述 -1.1 应用介绍 -1.2 调优思路 -2 硬件调优 -2.1 BIOS配置 -2.1.1.1 设置内存刷新频率为Auto -2.1.1.2 开启NUMA -2.1.1.3 设置Stream Write Mode -2.1.1.4 开启CPU预取配置 -2.1.1.5 开启SRIOV -2.1.1.6 开启SMMU -2.1.1.7 打开内存交织 -3 操作系统调优 -3.1 文件系统调优 -3.2 关闭irqbalance -3.3 网卡中断绑核 -3.4 网络参数调优 -3.5 IO参数调优 -3.6 缓存参数调优 -4 软件调优 -4.1 Cpu绑核 -4.2 虚拟机网卡设置 -4.3 虚拟机存储使用virtio-blk -4.4 低负载调优V-Turbo -4.5 配置Guest NUMA1 调优概述1.1 调优思路      云平台重要的指标在于虚拟机性能的调优。虚拟机性能调优参数涉及cpu、内存、磁盘和网络,此次调优我们将结合ARM架构的优势,结合相关的参数对虚拟机进行不同场景的调优。2 硬件调优具体介绍性能调优在硬件层面的调优手段举例:2.1 BIOS配置2.1.1.1 设置内存刷新频率为Auto服务器重启,进入BIOS,依次选择“Advanced > Memory Config > Custom Refresh Rate”。         设置“Custom Refresh Rate”选项为“Auto”,按F10保存BIOS配置。2.1.1.2 开启NUMA服务器重启,进入BIOS,依次选择“Advanced > Memory Config > NUMA”。          设置“NUMA”选项为“Enable”,按F10保存BIOS配置。2.1.1.3 设置Stream Write Mode服务器重启,进入BIOS,依次选择“Advanced > Performance Config > Stream Write Mode”。              2.设置“Stream Write Mode”选项为“Allocate share LLC”,按F10保存BIOS配置。2.1.1.4 开启CPU预取配置开启CPU预取配置选项的目的在于CPU先行提取下一段指令以提高系统效能。说明:在使用lmbench测试内存带宽时,建议开启CPU预取。在使用lmbench测试内存延迟时,建议关闭CPU预取。     1.服务器重启,进入BIOS,依次选择“Advanced > MISC Config > CPU Prefetching Configuration”。             2.设置“CPU Prefetching Configuration”选项为“Enabled”,按F10保存BIOS配置。2.1.1.5 开启SRIOV    1.服务器重启,进入BIOS,依次选择“Advanced > PCIe Config > SRIOV”。           2.设置“SRIOV”选项为“Enable”,按F10保存BIOS配置。2.1.1.6 开启SMMU     系统存储管理单元(SMMU)是鲲鹏920系列处理器实现虚拟化扩展所提供的一个重要组件。     1.服务器重启,进入BIOS,依次选择“Advanced > MISC Config > Support Smmu”。              2.设置“Support Smmu”选项为“Enabled”。如果已经设置为Enabled,按F10保存BIOS配置。2.1.1.7 打开内存交织    1.进入BIOS,选择“Advanced > Memory Config”。             2.将“Die Interleaving”设置为“Enable”。        3 操作系统调优3.1 文件系统调优目的:       对于不同的IO设备,通过调整文件系统相关参数配置,可以有效提升服务器性能。方法:       以xfs文件系统为例,解释文件系统调优步骤。建议在文件系统的mount参数上加上noatime,nobarrier两个选项。命令为(其中数据盘以及数据目录以实际为准):mount -o noatime,nobarrier /dev/sdb /data1. 一般来说,Linux会给文件记录了三个时间,change time, modify time和access time。access time指文件最后一次被读取的时间。modify time指的是文件的文本内容最后发生变化的时间。change time指的是文件的inode最后发生变化(比如位置、用户属性、组属性等)的时间。     一般来说,文件都是读多写少,而且我们也很少关心某一个文件最近什么时间被访问了。所以,我们建议采用noatime选项,文件系统在程序访问对应的文件或者文件夹时,不会更新对应的access time。这样文件系统不记录access time,避免浪费资源。2. 现在的很多文件系统会在数据提交时强制底层设备刷新cache,避免数据丢失,称之为write barriers。但是,其实我们数据库服务器底层存储设备要么采用RAID卡,RAID卡本身的电池可以掉电保护;要么采用Flash卡,它也有自我保护机制,保证数据不会丢失。所以我们可以安全的使用nobarrier挂载文件系统。对于ext3, ext4和 reiserfs文件系统可以在mount时指定barrier=0。对于xfs可以指定nobarrier选项。3.2 关闭irqbalance目的:       关闭irqbalance,通过手动绑定中断的方法优化性能。方法:                       # 步骤 1 停止irqbalance服务。 systemctl stop irqbalance.service # 步骤 2 关闭irqbalance服务。 systemctl disable irqbalance.service # 步骤 3 查看irqbalance服务状态是否已关闭。 systemctl status irqbalance.service           3.3 网卡中断绑核目的:       手动绑定网卡中断,根据网卡所属CPU将其进行分配,从而优化系统网络性能。方法:     查询网卡所在的CPU,将网络中断绑定到该CPU的所有核上。# 步骤 1 查询中断号。 cat /proc/interrupts | grep $eth | awk -F ':' '{print $1}' #其中$eth表示需要优化的业务网口名称 #例如:cat /proc/interrupts | grep eth1 | awk -F ':' '{print $1}' #步骤 2 根据中断号,将每个中断各绑定在一个核上。 echo $cpunum > /proc/irq/$irq/smp_affinity_list #其中$cpunum表示需要绑定到的目标CPU序列号,$irq表示步骤 1执行的结果,如存在多个序列号,则需逐一执行绑定。                        3.4 网络参数调优目的:       对于不同的操作系统,通过在OS层面调整一些参数配置,可以有效提升服务器性能。方法:      表3-1 OS优化参数Linux参数参数含义操作tcp_max_syn_backlogtcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量。默认值是2048,建议修改成8192。echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlognet.core.somaxconn服务端所能accept即处理数据的最大客户端数量,即完成连接上限。默认值是128,建议修改成1024。echo 1024 > /proc/sys/net/core/somaxconnnet.core.rmem_max接收套接字缓冲区大小的最大值。默认值是229376,建议修改成16777216。echo 16777216 > /proc/sys/net/core/rmem_maxnet.core.wmem_max发送套接字缓冲区大小的最大值(以字节为单位)。默认值是229376,建议修改成16777216。echo 16777216 > /proc/sys/net/core/wmem_maxnet.ipv4.tcp_rmem配置读缓冲的大小,三个值,第一个是这个读缓冲的最小值,第三个是最大值,中间的是默认值。默认值是"4096 87380 6291456",建议修改成"4096 87380 16777216"。echo "4096 87380 16777216" > /proc/sys/net/ipv4/tcp_rmemnet.ipv4.tcp_wmem配置写缓冲的大小,三个值,第一个是这个读缓冲的最小值,第三个是最大值,中间的是默认值。默认值是"4096 16384 4194304",建议修改成"4096 65536 16777216"。echo "4096 65536 16777216" > /proc/sys/net/ipv4/tcp_wmemnet.ipv4.max_tw_buckets表示系统同时保持TIME_WAIT套接字的最大数量。默认值是2048,建议修改成360000。echo 360000 > /proc/sys/net/ipv4/tcp_max_syn_backlog 3.5 IO参数调优目的:        对于不同的IO设备,通过在OS层面调整一些IO相关参数配置,可以有效提升服务器性能。方法:Linux参数参数含义操作/sys/block/${device}/queue/scheduler配置IO调度,deadline或者noop更适用于MySQL数据库场景。命令中的${device}为磁盘名称,根据实际磁盘名称进行修改。NVME盘不支持此操作。echo deadline > /sys/block/${device}/queue/scheduler/sys/block/${device}/queue/nr_requests提升磁盘吞吐量,尤其对myisam存储引擎,可以调整到更大。命令中的${device}为磁盘名称,根据实际磁盘名称进行修改。echo 2048 > /sys/block/${device}/queue/nr_requests 3.6 缓存参数调优目的:      对于不同系统的内存使用情况,通过在OS层面调整一些缓存相关参数配置,可以有效提升服务器性能。方法:     表3-2 缓存调优参数Linux参数参数含义操作swappiness值越大,越积极使用swap分区,值越小,越积极使用内存。执行命令 vi /etc/sysctl.conf ,将 vm.swappiness = 1添加到文件底部,保存退出,执行命令sysctl -p使其生效。dirty_ratio内存里的脏数据百分比不能超过这个值。echo 5 > /proc/sys/vm/dirty_ratio4 软件调优4.1  Cpu绑核编辑虚拟机virsh edit vm1,增加cpu绑定参数:<cputune> <vcpupin vcpu="0" cpuset="0-31"/> <vcpupin vcpu="1" cpuset="32-63"/> <vcpupin vcpu="2" cpuset="64-95"/> <vcpupin vcpu="3" cpuset="96-127"/> <emulatorpin cpuset="0-127"/> </cputune>  4.2 虚拟机网卡设置虚拟机xml网卡参数使用virtio模式:      4.3 虚拟机存储使用virtio-blkvirtio-blk虚拟磁盘能够提供相对virtio-scsi虚拟磁盘较高的存储性能。虚拟机xml使用下面配置:     4.4 低负载调优V-Turbo     1.将vCPU的个数设置为虚拟机实际个数。                 2.配置threads为2,vCPU的值为sockets*cores*threads。              4.5 配置Guest NUMA虚拟机xml配置文件进行如下配置:     配置Guest NUMA时可以指定vNode的内存在Host上的分配位置,实现内存的分块绑定,同时配合vCPU绑定,使vNode上的vCPU和内存在同一个物理NUMA node上。虚拟机配置如下:      图1 虚拟机CPU绑核配置          图2 虚拟机NUMA配置         图3 虚拟机NUMA详细配置      4.6 配置KAE4.6.1 环境要求HostOS上已经建立虚拟机。HostOS上已经安装加速器内核驱动,虚拟机上已经安装KAE加速引擎软件包,安装方法请参考安装KAE加速引擎软件。4.6.2 在HostOS上进行虚拟化配置查询HostOS环境中安装的加速器和对应的bdf号。ls -al /sys/class/uacce             2.虚拟化加速器VF(以hisi_sec设备为例,各虚拟出3个VF,对应hisi_sec - 8 ~ hisi_sec - 13)。echo 3 > /sys/devices/pci0000:74/0000:74:01.0/0000:76:00.0/sriov_numvfs echo 3 > /sys/devices/pci0000:b4/0000:b4:01.0/0000:b6:00.0/sriov_numvfs        4.6.3 在虚拟机上配置加速器编辑虚拟机vm1的配置文件。virsh edit test1     2.在配置文件中添加vcpu配置(以配置4个core为例)。<cputune> <vcpupin vcpu='0' cpuset='4'/> <vcpupin vcpu='1' cpuset='5'/> <vcpupin vcpu='2' cpuset='6'/> <vcpupin vcpu='3' cpuset='7'/> <emulatorpin cpuset='4-7'/> </cputune>           上述的配置完成后,虚拟机进程运行会固在指定的主机的物理CPU上。   3.虚拟机配置VF。<hostdev mode='subsystem' type='pci' managed='yes'> <source> <address bus='0x76' slot='0x00' function='0x1'/> </source> </hostdev>      上述的配置完成后,虚拟机挂载了加速器虚拟出来的一个VF。说明:hisi_sec设备SBDF号以0000:7x:xx.x,其对应CPU0上设备;以0000:bx:xx.x为开头,对应CPU1上设备。为保证性能稳定,推荐虚拟机上核选取对应CPU上的core,同时VF也选择对应加速器上虚拟出来的VF。HostOS对单个虚拟机上VF挂载个数存在上限,默认为11个。   4.启动虚拟机。virsh start test1   5.登录虚拟机查询设备。ls /sys/class/uacce/      显示如下,说明挂载的VF已经在虚拟机上读取成功。hisi_sec-0 
总条数:44 到第
上滑加载中