kvm cpu的亲和性绑定配置

简介:

1.CPU的绑定配置


进程的处理器亲和性(process affinity):指将进程绑定到特定的一个或多个cpu上去执行,而不允许将进程调度到其他cpu上。

物理cpu:表示真实的cpu个数

逻辑cpu:表示所有拥有一个完整真实cpu功能的单元,一般等于所有真实cpu的核心或超线程数(ht技术)之和

例子:一个主板有cpu1,cpu2,cpu1双核不开超线程,cpu2四核其中某个核心开两个超线程,那么它有2个真实cpu,和2+(2*1+3)=7个逻辑cpu


实现:

(1)在grub.conf上使用”isolcpus=[num1],[num2]... “参数,进行cpu的隔离,使得系统启动后普通进程默认不会调度到被隔离的cpu上执行。(注:num表示逻辑cpu号码)

例子:

title CentOS (3.2.84)

        root (hd0,0)        kernel /vmlinuz-3.2.84 ro root=/dev/mapper/VolGroup-lv_root isolcups=4,5 rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=en rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet 

        initrd /initramfs-3.2.84.img

注:isolcups要紧跟在root后面,放在最后不行(个人测试,具体原因有待查明)


(2)查看是否隔离成功:

[root@localhost ~]# ps -eLo psr,args|awk '{if ($1==3) print $0}'

  3 [kworker/u:0]

  3 [migration/3]

  3 [kworker/3:0]

  3 [ksoftirqd/3]

  3 [watchdog/3]

  3 [kworker/3:1]

  3 auditd

  3 rpcbind

  3 [flush-253:0]

  3 /usr/sbin/modem-manager

  3 hald-runner

  3 /usr/libexec/postfix/master

[root@localhost ~]# ps -eLo psr,args|awk '{if ($1==4) print $0}'

  4 [migration/4]

  4 [kworker/4:0]

  4 [ksoftirqd/4]

  4 [watchdog/4]

  4 [kworker/4:1]

[root@localhost ~]# ps -eLo psr,args|awk '{if ($1==5) print $0}'

  5 [migration/5]

  5 [kworker/5:0]

  5 [ksoftirqd/5]

  5 [watchdog/5]

  5 [kworker/5:1]

[root@localhost ~]# ps -eLo psr,args|awk '{if ($1==2) print $0}'

  2 [kthreadd]

  2 [migration/2]

  2 [kworker/2:0]

  2 [ksoftirqd/2]

  2 [watchdog/2]

  2 [khubd]

  2 [kworker/2:1]

  2 [kworker/2:2]

  2 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5

  2 pcscd

  2 /sbin/mingetty /dev/tty6


ps(process status):

-e:显示所有进程

-L:用于将线程(LWP,lightweight process)也显示出来,(这里我忽略这个结果了)

-o:以用户自定义格式输出(可选参数有psr、pid、ppid等)

-o参数里面: 

psr:当前分配给进程运行的处理器编号

args:表示运行进程的命令和参数


这里我们看到进程编号2、3都有很多进程,而4、5都只有5个带[]号的系统进程,所以隔离成功。


(3)启动客户机

 qemu-system-x86_64 -m  2048 -smp 2 rhel6u5.img  &


(4)查看vcpu线程

[root@localhost kvm_vhost]# ps -eLo pid,lwp,psr,args|grep qemu|grep  -v grep

 1612  1612   6 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img

 1612  1614   1 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img

 1612  1615   6 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img

 1612  1617  11 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img


(5)绑定代表整个客户机的进程,使其运行在cpu4上

[root@localhost kvm_vhost]# taskset -p 0x10 1612

pid 1612's current affinity mask: ffcf

pid 1612's new affinity mask: 10

[root@localhost kvm_vhost]# ps -eLo pid,lwp,psr,args|grep qemu|grep  -v grep

 1612  1612   4 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img

 1612  1614   3 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img

 1612  1615   6 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img

 1612  1617  11 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img

(6)绑定第一个vcpu线程,使其运行在cpu5上

[root@localhost kvm_vhost]# taskset -p 0x20 1614

pid 1614's current affinity mask: ffcf

pid 1614's new affinity mask: 10

[root@localhost kvm_vhost]# ps -eLo pid,lwp,psr,args|grep qemu|grep  -v grep

 1612  1612   4 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img

 1612  1614   5 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img

 1612  1615   6 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img

 1612  1617  11 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img

 

 同理绑定另外一个vcpu,这里taskset的语法是taskset -p [mask] pid 

mask是代表处理器亲和性的掩码数字,转化为二进制,其值从最低位到最高位分别代表第一个逻辑cpu到最后一个逻辑cpu

0001 0000=0x10

0010 0000=0x20

0011 0000=0x30

所以如果使用taskset -p 0x30 1614则表示把vcpu线程运行在cpu4和cpu5上

pid表示线程的id,这里我们有三个线程怎么知道哪个是vcpu的id呢?答案是按ctrl+alt+2 到qemu monitor中使用info cpus进行查看

wKiom1g2tdeCkj_CAAAQlf4_uzk411.png-wh_50


(7)绑定后查看在cpu4上运行的线程

[root@localhost kvm_vhost]# ps -eLo psr,args|awk '{if ($1==4) print $0}'

  4 [migration/4]

  4 [kworker/4:0]

  4 [ksoftirqd/4]

  4 [watchdog/4]

  4 [kworker/4:1]

  4 qemu-system-x86_64 -m 2048 -smp 2 rhel6u5.img


我们看到多了一个且仅有一个用户空间qemu进程,绑定成功。














本文转自biao007h51CTO博客,原文链接: http://blog.51cto.com/linzb/1876316,如需转载请自行联系原作者




相关文章
|
3月前
|
Linux 调度
linux中进程与cpu核的绑定
linux中进程与cpu核的绑定
67 0
|
3月前
|
监控 关系型数据库 MySQL
innodb_buffer_pool_instances 如何根据cpu和内存进行配置
`innodb_buffer_pool_instances` 是用于配置 InnoDB 缓冲池实例数的参数。每个实例都管理缓冲池的一部分,这有助于提高并发性能。通常,你可以根据系统的 CPU 和内存来调整这个参数,以获得更好的性能。 以下是一些建议和步骤,帮助你根据 CPU 和内存进行 `innodb_buffer_pool_instances` 的配置: 1. **了解系统资源:** 首先,了解系统的硬件资源,特别是内存和CPU。检查系统上可用的物理内存和 CPU 核心数量。 2. **考虑每个实例的大小:** 在配置 `innodb_buffer_pool_instances` 时,
|
1月前
|
弹性计算 固态存储 调度
阿里云服务器部署配置选择全攻略,ECS实例规格、CPU内存配置
阿里云服务器部署配置选择全攻略,ECS实例规格、CPU内存配置,CPU内存、公网带宽和系统盘怎么选择?个人用户选择轻量应用服务器或ECS通用算力型u1云服务器,企业用户选择ECS计算型c7、通用型g7云服务器,阿里云百科分享阿里云服务器配置选择方法
|
1月前
|
弹性计算 固态存储 调度
阿里云配置服务器详细指南_2024新版CPU内存带宽系统盘选择
阿里云配置服务器详细指南_2024新版CPU内存带宽系统盘选择,阿里云服务器配置怎么选择?CPU内存、公网带宽和系统盘怎么选择?个人用户选择轻量应用服务器或ECS通用算力型u1云服务器,企业用户选择ECS计算型c7、通用型g7云服务器,阿里云百科分享阿里云服务器配置选择方法
|
1月前
|
Unix 应用服务中间件 Linux
nginx的CPU亲和性设置和优先级设置
nginx的CPU亲和性设置和优先级设置
|
1月前
|
弹性计算 数据挖掘 大数据
阿里云4核8G云服务器怎么样?2024年阿里云4核8G云服务器测评:价格配置、CPU性能
在数字化时代,数据成为驱动业务发展的核心力量。因此,无论是个人站长还是企业用户,都对云服务器的性能和价格提出了更高要求。阿里云作为国内云服务市场的领军者,始终致力于为用户提供卓越性能和极具竞争力的价格。阿里云4核8G通用算力型u1实例云服务器ECS备受瞩目。这款服务器凭借强大的4核CPU和8GB内存,能够轻松应对搭建网站、应用服务器以及进行数据分析和计算等多重任务。而其年度价格仅为955.58元,换算下来每月仅需80元,这一价格无疑在同类产品中极具竞争力。对于那些寻求高性能服务器以支持业务发展的用户来说,阿里云这款4核8G服务器无疑是一个理想选择。它不仅提供了出色的性能,还通过优惠活动大大降低
56 0
|
3月前
|
NoSQL
【线程绑定cpu核心】
【线程绑定cpu核心】
|
4月前
|
并行计算 TensorFlow 算法框架/工具
Linux Ubuntu配置CPU与GPU版本tensorflow库的方法
Linux Ubuntu配置CPU与GPU版本tensorflow库的方法
|
4月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
Anaconda配置Python新版本tensorflow库(CPU、GPU通用)的方法
Anaconda配置Python新版本tensorflow库(CPU、GPU通用)的方法
|
4月前
|
JavaScript C# Windows
【傻瓜级JS-DLL-WINCC-PLC交互】5.​用西门子TIA Portal 博途配置PLC(SIMATIC S7-1200CPU 1215C AC/DC/RLY)
【傻瓜级JS-DLL-WINCC-PLC交互】5.​用西门子TIA Portal 博途配置PLC(SIMATIC S7-1200CPU 1215C AC/DC/RLY)
74 0