qemu-kvm绑定cpu的核上

使用qemu-kvm建立一个虚拟机,然后虚拟机的线程绑定到具体的一个cpu的核上
环境,centos6.5,双核,

1,在主机上修改grub,把主机的核隔离
2.使用taskset 把qemu的线程绑定到隔离的核上。



yum install glib2 glib2-devel libtool gcc-c++ gcc zlib zlib-devel flex bison
lsmod |grep kvm
ls -l /dev/kvm

打开vmware或者bios的cpu的VT
kvm在/usr/libexec/qemu-kvm

新建一个硬盘
dd if=/dev/zero of=rhel65.img bs=1M count=8192 

第一次使用iso新建系统
/usr/libexec/qemu-kvm -m 2048 -smp 2 -boot order=cd  -hda /root/kvm/rhel65.img -cdrom /root/kvm/CentOS-6.5-x86_64.iso 

第二次就不用iso了
/usr/libexec/qemu-kvm -m 2048 -smp 2 -boot order=cd  -hda /root/kvm/rhel65.img  -vnc 192.168.137.188:1 &

如果模拟具体某种cpu
/usr/libexec/qemu-kvm -cpu SandyBridge -m 2048 -smp 2 -boot order=cd  -hda /root/kvm/rhel65.img  -vnc 192.168.137.188:1 -daemonize

看支持的cpu
/usr/libexec/qemu-kvm -cpu ?

启动之后用vnc连上去
ctrl+alt+2 切换到qemu
info cpus
info kvm
[img]http://dl2.iteye.com/upload/attachment/0109/8611/c1571c24-9b4a-3208-b4f6-4332e63ec74f.jpg[/img]
修改grup,然后重启主机,
[code="java"]
# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=89c4d858-c966-44b9-b2a8-df121e83cb78 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet isolcpus=1
initrd /initramfs-2.6.32-431.el6.x86_64.img
[/code]
把 isolcpus=1 把第二个核隔离,
重启之后
[code="java"]
# ps -eLo psr|grep 0|wc -l
351
#
#
# ps -eLo psr|grep 1|wc -l
35
#
[/code]
看出差别
第二个核上的线程数很少,只有linux基本的
[code="java"]
# ps -eLo ruser,pid,ppid,lwp,psr,args |awk '{if($5==1) print $0}'
root 2 0 2 1 [kthreadd]
root 7 2 7 1 [migration/1]
root 8 2 8 1 [migration/1]
root 9 2 9 1 [ksoftirqd/1]
root 10 2 10 1 [watchdog/1]
root 12 2 12 1 [events/1]
root 13 2 13 1 [cgroup]
root 14 2 14 1 [khelper]
root 15 2 15 1 [netns]
root 19 2 19 1 [bdi-default]
root 21 2 21 1 [kintegrityd/1]
root 23 2 23 1 [kblockd/1]
root 29 2 29 1 [ata_sff/1]
root 31 2 31 1 [khubd]
root 34 2 34 1 [md/1]
root 36 2 36 1 [md_misc/1]
root 38 2 38 1 [khungtaskd]
root 43 2 43 1 [aio/1]
root 45 2 45 1 [crypto/1]
root 51 2 51 1 [kthrotld/1]
root 164 2 164 1 [mpt_poll_0]
root 844 2 844 1 [vmmemctl]
root 990 2 990 1 [xfslogd/1]
root 992 2 992 1 [xfsdatad/1]
root 994 2 994 1 [xfsconvertd/1]
root 996 2 996 1 [xfsalloc/1]
root 998 2 998 1 [xfseofblocks/1]
root 1000 2 1000 1 [xfssyncd/dm-1]
root 1054 2 1054 1 [kauditd]
[/code]
看qemu的进程绑定到哪个cpu
[code="java"]
# ps -eLo ruser,pid,ppid,lwp,psr,args |grep qemu|grep -v grep
root 29518 4956 29518 0 /usr/libexec/qemu-kvm -m 2048 -smp 2 -boot order=cd -hda /root/kvm/rhel65.img -vnc 192.168.137.188:1
root 29518 4956 29524 0 /usr/libexec/qemu-kvm -m 2048 -smp 2 -boot order=cd -hda /root/kvm/rhel65.img -vnc 192.168.137.188:1
root 29518 4956 29525 0 /usr/libexec/qemu-kvm -m 2048 -smp 2 -boot order=cd -hda /root/kvm/rhel65.img -vnc 192.168.137.188:1
root 29518 4956 29842 0 /usr/libexec/qemu-kvm -m 2048 -smp 2 -boot order=cd -hda /root/kvm/rhel65.img -vnc 192.168.137.188:1
#
[/code]
注意第五列,都是0

把id绑定到1的核上
注意,第一个核实0x1 第二个是0x2,第三个是0x4,第四个是0x8
[code="java"]
# taskset -p 0x2 29524
pid 29524's current affinity mask: 1
pid 29524's new affinity mask: 2
#
#
# taskset -p 0x2 29525
pid 29525's current affinity mask: 1
pid 29525's new affinity mask: 2
#
#
# ps -eLo ruser,pid,ppid,lwp,psr,args |grep qemu|grep -v grep
root 29518 4956 29518 1 /usr/libexec/qemu-kvm -m 2048 -smp 2 -boot order=cd -hda /root/kvm/rhel65.img -vnc 192.168.137.188:1
root 29518 4956 29524 1 /usr/libexec/qemu-kvm -m 2048 -smp 2 -boot order=cd -hda /root/kvm/rhel65.img -vnc 192.168.137.188:1
root 29518 4956 29525 1 /usr/libexec/qemu-kvm -m 2048 -smp 2 -boot order=cd -hda /root/kvm/rhel65.img -vnc 192.168.137.188:1
root 29518 4956 29862 1 /usr/libexec/qemu-kvm -m 2048 -smp 2 -boot order=cd -hda /root/kvm/rhel65.img -vnc 192.168.137.188:1
#
[/code]
发现第五列的核的编号都变成1了
ps -eLo ruser,pid,ppid,lwp,psr,args |awk '{if($5==1) print $0}'
再对比一下,第二个核上,除了linux基本的进程,多qemu相关的进程
除了开始的基本的linux进程,又多了这几个qemu的进程
实现了,把qemu绑定到特殊的核上,进行了qemu独享某个核,资源的合理分配和高校利用


cpu的其他相关的

/usr/libexec/qemu-kvm -m 2048 -smp 8,sockets=2,cores=2,threads=2 -hda /root/kvm/rhel65.img -vnc 192.168.137.188:1
(1)socket就是主板上插cpu的槽的数目,也即管理员说的"路"
(2)core就是我们平时说的”核“,即双核,4核等
(3)thread就是每个core的硬件线程数,即超线程
http://labs.chinamobile.com/mblog/854855_199265

其他的调用

/usr/libexec/qemu-kvm -name http1 -S -M rhel6.5.0 -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 0e4189c4-4006-6ee7-d1e5-fa03c8cf0130 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/http1.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/opt/zhangjl/pacemaker/http1.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=24,id=hostnet0,vhost=on,vhostfd=26 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:8f:ab:fd,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0 -vnc 0.0.0.0:4109 -vga cirrus -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6

qemu-system-x86_64 -name http1 -S -machine rhel6.5.0 -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 0e4189c4-4006-6ee7-d1e5-fa03c8cf0130 -nodefconfig -nodefaults -chardev socket,id=charmonitor -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=cirros-0.3.1-x86_64-disk.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=24,id=hostnet0,vhost=on,vhostfd=26 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:8f:ab:fd,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0 -vnc 0.0.0.0:4109 -vga cirrus -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6

qemu-kvm虚拟机性能优化 在KVM虚拟机中运行mysql,发现与ESX虚拟机中比较,性能有些差。用sysbench测试KVM虚拟机中的mysql,TPS刚刚到1500级别。性能如图: 使用perf命令跟踪KVM虚拟机对应的进程,情况如下: 从图中可以看出,这台虚拟机的page_fault占比较高,其次是__GI__ioctl,而sys_poll虽然占比高,却无需关注,因为即使虚拟机是空闲状态,s 阅读详情

相关推荐

基于NXP Layerscape平台的OVS-DPDK与KVM虚拟机高性能网络部署实战

在数据中心与边缘计算场景中,网络虚拟化是提升资源利用率和业务灵活性的关键技术。其核心原理是通过软件定义网络(SDN)和用户态数据平面,绕过传统内核协议栈,实现低延迟、高吞吐的数据包处理。DPDK(数据平面开发套件)通过用户态轮询驱动与巨页内存技术,为这一目标提供了基础框架。而Open vSwitch(OVS)结合DPDK形成的OVS-DPDK方案,则将高性能数据平面能力引入虚拟交换机,成为构建云网融合基础设施的关键组件。该技术的核心价值在于为NFV(网络功能虚拟化)、5G用户面功能(UPF)及边缘计算网关等

weixin_30411819的博客 344

linux虚拟化cpu的绑定,kvm虚拟化技术中虚拟机vcpu与物理cpu绑定

在qemu/kvm中,qemu提供对cpu的模拟,每个虚拟机都是一个标准的linux进程,每个vcpu在宿主机中都是qemu进程派生的一个普通线程,其实就是对线程进行绑定与限制kvm虚拟机绑定1、查找所有虚拟机的进程跟线程#ps -eLo pid,lwp,psr,args|grep qemu-kvm |grep -v grep |grep cgroups-test(VMname)2、查看出线程,一...

weixin_30380991的博客 952

虚拟化性能优化:CPU绑核与NUMA本地化实战指南

在虚拟化与云计算环境中,CPU调度和内存访问效率是影响应用性能的关键因素。虚拟化层默认的资源调度机制可能导致虚拟CPU(vCPU)在物理核心间频繁迁移,引发缓存失效和上下文切换开销,同时非统一内存访问(NUMA)架构下的远程内存访问会显著增加延迟。CPU绑核(CPU Pinning)技术通过将vCPU线程固定到指定的物理核心,结合内存NUMA节点绑定,可以有效减少缓存抖动、确保内存访问的本地性,从而为对延迟敏感的应用提供确定性的性能保障。这项技术在高性能计算、金融交易、实时音视频处理及边缘计算等场景中价值显

weixin_27251469的博客 519

KVM绑核操作

virsh list --all 查看虚机名字。virsh edit kvm08 编辑并绑核。

szdx1043的博客 534

UnRaid硬件直通进阶指南:从VFIO到SR-IOV与GVT-g实战

硬件直通是虚拟化技术中的核心概念,它允许虚拟机直接访问物理硬件设备,从而大幅提升I/O性能。其原理基于IOMMU(输入输出内存管理单元)和VFIO驱动框架,将PCIe设备的所有权从宿主机安全移交至虚拟机。这项技术的价值在于能够为虚拟机提供接近物理机的性能表现,尤其适用于对图形处理、网络吞吐和存储延迟有高要求的应用场景,如游戏串流、媒体转码和高频交易等。在UnRaid这类基于Linux与KVM的NAS/服务器系统中,硬件直通是实现高性能虚拟化的关键。本文深入探讨了包括传统VFIO直通、SR-IOV(单根I/O

anjichan4261的博客 370

如何优化Windows虚拟机性能(KVM/QEMU)

最近自己在家搭建了一个局域网的云桌面,起中host端的虚拟化方案用的是kvm+qemu,在搭建过程中有很多心得,特别是关于如何优化windows虚拟机的性能在KVM/QEMU平台下.如果你想你的win10,win11虚拟机接近裸金属的体验,那么必须针对kvm+qemu做一系列的特殊化调整,不然可能会遇到卡顿,cpu使用率高,中断和I/O缓慢的情况.

tianxilink的博客 7113

虚拟化之CPU

一 cpu1 如何查看内核版本:uname -r 2 如何查看操作系统的发行版本:cat /etc/redhat-release3 计算机系统子的系统4 进程模式如图为vcpu在kvmz中的三种执行模式:如果想要对虚拟机执行shutdown操作就需要空间的转换,用户空间输入交互命令virsh 来执行”shutdown“--调用libvirtd服务--交换到内核空间,调用内核空间的kvm--由kvm对虚拟机shutdown操作--返回用户空间5 虚拟机对于物理主机来说就相当于物理主机的一个进程(虚拟机的一个

weixin_42795092的博客 1689

KVM虚拟机CPU绑定性能调优

关于linux 进程的处理器亲和性的vCPU 隔离和绑定之前已经做过测试,查考 ubuntu中测试进程的处理器亲和性和vCPU的绑定 那么KVM 虚拟化下如何直接为虚拟机绑定CPU 呢,KVM 提供了很方便的方法 利用 virsh vcpuinfo instance-00000146 查看每个vCPU 对应物理核心

GIS+=地理信息+云计算+大数据+容器+物联网+... 3834

实战案例:使用aarch64构建嵌入式虚拟化系统

手把手带你用aarch64架构搭建轻量、可控的嵌入式虚拟化环境,涵盖QEMU/KVM配置、设备直通与实时性调优。全程基于aarch64平台实操,适配国产化硬件与边缘计算场景。

weixin_42601608的博客 1056

KVM CPU配置与管理详解

ps命令显示当前系统的进程信息的状态,它的"-e"参数用于显示所有的进程,"-L"参数用于将线程(LWP,light-weight process)也显示出来,"-o"参数表示以用户自定义的格式输出(其中"psr"这列表示当前分配给进程运行的处理器编号,"lwp"列表示线程的ID,"ruser"表示运行进程的用户,"pid"表示进程的ID,"ppid"表示父进程的ID,"args"表示运行的命令及其参数)。在QEMU/KVM中,QEMU提供对CPU的模拟,展现给客户机一定的CPU数目和CPU的特性;

悦分享 485

KVM — CPU 虚拟化

目录 文章目录目录

烟云的计算 5880

kvm虚拟化技术中虚拟机vcpu与物理cpu绑定

在qemu/kvm中,qemu提供对cpu的模拟,每个虚拟机都是一个标准的linux进程,每个vcpu在宿主机中都是qemu进程派生的一个普通线程,其实就是对线程进行绑定与限制kvm虚拟机绑定1、查找所有虚拟机的进程跟线程#ps -eLo pid,lwp,psr,args|grep qemu-kvm |grep -v grep |grep cgroups-test(VMnam...

weixin_33836223的博客 706

28 KVM管理系统资源-绑定QEMU进程至物理CPU

QEMU主进程绑定特性是将QEMU主进程绑定到特定的物理CPU范围内,从而保证了运行不同业务的虚拟机不会干扰到邻位虚拟机。例如在一个典型的云计算场景中,一台物理机上会运行多台虚拟机,而每台虚拟机的业务不同,造成了不同程度的资源占用,为了避免存储IO密集的虚拟机对邻位虚拟机的干扰,需要将不同虚拟机处理IO的存储进程完全隔离,由于QEMU主进程是处理前后端的主要服务进程,故需要实现隔离。

超哥的博客 926

KVM性能优化之CPU优化

KVM性能优化之CPU优化 2 1、查看kvm虚拟机vCPU的QEMU线程 2 2、CPU绑定操作 3

beck_li的博客 1847

虚拟化技术 — QEMU-KVM 基于内核的虚拟机

例如:在执行 GuestOS 代码的过程中,GuestOS 发出了一个 I/O 请求,该事件会被 VMM 捕获,然后执行 VM Exit 执行,CPU 会自动将 GuestOS 的上下文加载到 VMCS Guest State Area 中,挂起 GuestOS,并从 VMCS Host State Area 中加载 VMM 的通用事件处理函数的入口地址,开始执行 VMM 的代码。自定义 VM 的 CPU 模型,-cpu 选项除了可以指定 GuestOS 的 CPU 模型,还可以指定附加的 CPU 特性。

烟云的计算 2013

sap外币重估流程图_SAP 外币评估方法(Valuation Method,评估方法)

在FI-GL模块评估外币时(T-code:F.05),需要输入ValuationMethod。下面分解一下评估方法是如何定义的。IMG -> FI -> General LedgerAccounting ->Business Transactions ->Closing ->Valuating -> ForeignCurrency Valuation ->...

weixin_39640543的博客 2355

KVM环境下vCPU绑定到物理CPU

KVM环境下vCPU绑定到物理CPU 在KVM环境中测试虚拟系统性能时,如果宿主机是有两个CPU socket的硬件,会碰到由于vCPU在不同物理CPU上浮动导致测试RFC2544时出现少量丢包的现象,测试结果非常不稳定。可以将vCPU绑定到物理CPU来优化这个问题(不能完全避免),本章仅介绍单vCPU绑定到单物理CPU上的情况。绑定到单物理CPU上可以暂时规避少量丢包的问题,但是也存在宿主机上单个物理CPU满载后实际虚拟系统未到达性能上限的情况,本章也暂不深入。 1查看当前运行的虚拟系统名称 [root@

jingemperor的博客 1752

嵌入式开发实战:LWIP中PPP协议配置全流程(含CHAP认证避坑指南)

本文是一份嵌入式开发实战指南,详细解析了如何在STM32平台上配置LWIP协议栈中的PPP协议,实现从串口到IP网络的完整连接。内容涵盖工程搭建、源码整合、关键配置、串口驱动绑定、状态管理以及CHAP认证等核心流程,并重点提供了CHAP认证失败的排查与避坑指南,帮助开发者高效打通嵌入式设备的网络连接。

plant的博客 461

KVM虚拟化- KVM 虚机CPU管理

kvm模块的基础功能就是,虚化、超配计算机资源,包括:CPU 处理器、Memory 内存、Storage 存储、Network 网络、Display 显示。 1 几个概念 1)在lscpu命令结果中sockets就代表物理CPU个数,CPU(s)就是逻辑CPU(vCPUvirtualCPU)个数。核指的就是独立的处理单元,超线程就是指开了几个控制器,控制器能将核分割开,使被分...

鬼刺 3026

CFD-POST中建立变量的方法

本文以测量文丘里管中全压为例阐述CFD_POST中建立变量的方式 点击进入CFD-POST界面的expressions栏中 2.与expression栏中空白处右键,new-输入新建的表达式名称 3. 在下方的空白栏中右键-varible选择需要的变量,并根据公式进行修改 4.点击进入varibles栏,空白处右击-new-输入变量名totalpressure,在下拉框中找到之前定义的totalpressure 完成后可以在varibles栏中看到新建的...

sidxi的博客 1万+

C#串口通信上位机开发实战:轻松实现硬件控制与数据交互

摘要:本文介绍如何使用C#开发串口通信上位机应用,实现与硬件设备(如传感器、PLC等)的数据交互。文章涵盖串口通信原理、开发环境配置、功能实现(串口连接管理、数据收发、实时显示)及UI设计,重点讲解SerialPort类的应用、多线程数据接收处理和错误优化。通过Windows Forms构建直观界面,帮助开发者快速掌握工业控制和自动化系统中的串口通信技术,为物联网和智能设备开发提供实用解决方案。全文约150字。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3029

浅入浅出 kvm qemu libvirt

KVM KVM是linux内核的模块,它需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT,AMD-V,内存的相关如Intel的EPT和AMD的RVI技术,Guest OS的CPU指令不用再经过Qemu转译,直接运行,大大提高了速度,KVM通过/dev/kvm暴露接口,用户态程序可以通过ioctl函数来访问这个接口。见如下伪代码 open("/dev/kvm") ioctl(KVM_CREATE_VM) ioctl(KVM_CREATE_VCPU) for (;;) { ioctl(KVM_

weixin_42752248的博客 1326

华为OD机试 - 末世分配资源包 - 二分查找 + 贪心(Python/JS/C/C++ 新系统 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。末世时代,政府为各地方配资源,现有资源分配表 nums[n],要求按如下规则分配给 k 个营地:在最优平均分配情况下,得到最大团队所获得的资源数4,3,6,9,7 216最佳划分之一:[4,3,6] -> 13 [9,7] -> 16最大

学Java,找哪吒 223
上一篇: openstack 安装
下一篇: qemu-kvm 使用内存的大页
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值