设为首页 收藏本站
查看: 2804|回复: 0

[经验分享] kvm cpu的亲和性绑定配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-25 08:40:09 | 显示全部楼层 |阅读模式
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)查看是否隔离成功:
[iyunv@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
[iyunv@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]
[iyunv@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]
[iyunv@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线程
[iyunv@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上
[iyunv@localhost kvm_vhost]# taskset -p 0x10 1612
pid 1612's current affinity mask: ffcf
pid 1612's new affinity mask: 10
[iyunv@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上
[iyunv@localhost kvm_vhost]# taskset -p 0x20 1614
pid 1614's current affinity mask: ffcf
pid 1614's new affinity mask: 10
[iyunv@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进行查看



(7)绑定后查看在cpu4上运行的线程
[iyunv@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进程,绑定成功。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305195-1-1.html 上篇帖子: kvm一键shell自动生成 windows 虚拟机,无人值守操作方案(ste... 下篇帖子: kvm.huge页、常用命令和桥接设置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表