通过libvirt 控制vCPU使用,为了缓解CPU资源争抢

#!/usr/bin/env python
#-*-coding:UTF-8-*-
"""
@Item   :  IO Ctl
@Author :  Villiam Sheng
@Group  :  Python DEV Group
@Date   :  2013-05-29
@Funtion:
        CPU control:
                To control for CPU
"""
import os,sys,time , libvirt , traceback,commands
‘‘‘
    Func : Record error message
        path :  Message save path
        formats : Record message time formata
        log_name : Message file name
        itme :  function error
        info :  Error / info information
‘‘‘
def oper_log(log_name,item,info):
    path  = ‘/tmp/‘
    stime = time.strftime(‘%Y-%m-%d %H:%M:%S‘)
    formats= ‘[%s] %s:: %s \n‘ % (stime,item,info)
    if not os.path.exists(path):
        os.mkdir(path)
    try:
        if log_name.split(‘.‘)[1] == ‘log‘:
            fp = open(path + log_name,‘a‘)
        elif log_name.split(‘.‘)[1] == ‘info‘:
            fp = open(path + log_name,‘w‘)
        else:
            fp = open(path + log_name,‘a‘)
        fp.write(formats)
        fp.close()
    except Exception,e:
        pass
class cpuctl(object):
    def __init__(self):
        self.conn = libvirt.open(None)
    def _VmsCPUPercent(self,uuid):
        ‘‘‘
        Func info : Calculation virtual machine of CPU percentage , if error , return 0
            uuid : instance uuid
            cycle_time : 10s
            cpuTimeStart:  virtual machine cpu running time
            nr_cores :  CPU number all
            Formula to calculate:
                    %CPU = 100 × cpu_time_diff / (t × nr_cores × 1e9)
        ‘‘‘
        try:
            nr_cores =  self.conn.getInfo()[2]
            cpuTimeStart =  self.conn.lookupByID(uuid).info()[-1]
            sysTimeStart = time.time()
            time.sleep(1)
            cpuTimeEnd = self.conn.lookupByID(uuid).info()[-1]
            sysTimeEnd = time.time()
            cpuTimeDiff = cpuTimeEnd - cpuTimeStart
            sysTimeDiff = sysTimeEnd - sysTimeStart
            return 100 * cpuTimeDiff / ( sysTimeDiff * 1 * 1e9)
        except Exception,e:
            oper_log(‘cpuctl.log‘,‘_cpuPercent‘,‘ID : %s Error : %s‘%(uuid,e))
            return 0
    def _isHostUpload(self):
        ‘‘‘
        Func info : Return kvm host the current system load every 1 minute
            if error , return 0
        ‘‘‘
        try:
            return float(os.popen(‘uptime‘).read().split(‘:‘)[-1].strip()[:4])
        except:
            oper_log(‘cpuctl.log‘,‘_isUpload‘,traceback.format_exc())
            return 0
    def _operRate(uuid):
        try:
            x,y  = commands.getstatusoutput(‘virsh dumpxml %s‘ %uuid)
            print x,y
        except:
            LOG.error(traceback.format_exc())
    def _isHostCPUFreePercent(self):
        ‘‘‘‘
        Func info : Return kvm host CPU free percent . Go to 2 times every 3 seconds, get the average CPU idle percentage
            if error , return 0
        ‘‘‘
        try:
            return float(os.popen(‘sar 3 3 ‘).readlines()[-1].split()[-1])
        except:
            oper_log(‘cpuctl.log‘,‘_isCPUFreePercent‘,traceback.format_exc())
            return 0
    def _isHostCPUNum(self):
        try:
            pass
        except:
            return 0
    def _isVMScpuNum(self,uuid):
        ‘‘‘
        Func info : Return virtual machine cpu number
            if error ,return 1
        ‘‘‘
        try:
            return self.conn.lookupByID(uuid).info()[-2]
        except:
            oper_log(‘cpuctl.log‘,‘isVMScpuNum‘,traceback.format_exc())
            return 1
    def work(self):
        ‘‘‘
        Working func :  .....
            vms_list : Getting all virtual machine ID
            self._VmsCPUPercent() : Return cpu percent ...
            self._isUpload()   : Return kvm host loads one s
            sefl._isCPUFreePercent: Return kvm host cpu free percent
            loadValues : KVM HOST Default load values
        ‘‘‘
        hostPercen = self._isHostCPUFreePercent()
        loadValues = 49
        print hostPercen
        vms_list = self.conn.listDomainsID()
        if  self._isHostUpload() <= loadValues:
            for i in vms_list:
                if  self._VmsCPUPercent(i) <= 99.0:
                    print self.conn.lookupByID(i).name()
                    print self._isVMScpuNum(i)
                else:
                    print ‘ot‘
        else:
            print ‘no upload‘
if __name__ == "__main__":
    st = cpuctl()
    st.work()

通过libvirt 控制vCPU使用,为了缓解CPU资源争抢,布布扣,bubuko.com

时间: 2024-10-12 17:16:25

通过libvirt 控制vCPU使用,为了缓解CPU资源争抢的相关文章

控制 Memory 和 CPU 资源的使用

Resource Governor的出现,解决了在一台SQL Server实例上,管理多用户工作负载和资源隔离的需求,它允许管理员限制系统处理Requsts时所耗费的CPU 和 Memory资源的数量,在一定程度上,限制和隔离了runaway查询.对于SQL Server 2012,用户能够基于工作负载,实现CPU资源的完全隔离,并能设置CPU资源使用量的硬上限(CAP Usage,Hard Limit).在一个多用户,高并发的SQL Server实例上,管理员使用Resource Govern

脚本应用之十五: 消耗cpu资源

作用:控制消耗cpu的百分比,配合某些测试项目使用 实现:设计包含死循环的函数,放入后台运行,通过控制个数实现控制消耗CPU资源的百分比 演示: 直接输入进程个数, 通过top指令查看cpu消耗百分比,不输入数字直接回车则表示清除所有后台函数 代码专区: #/bin/bash   #  LY #  ------------------ #  Copyright 2016.04.17 LingYi ([email protected]) QQ:1519952564 cpu_(){  while :

用 cgroups 管理 cpu 资源

这回说说怎样通过 cgroups 来管理 cpu 资源.先说控制进程的 cpu 使用.在一个机器上运行多个可能消耗大量资源的程序时,我们不希望出现某个程序占据了所有的资源,导致其他程序无法正常运行,或者造成系统假死无法维护.这时候用 cgroups 就可以很好地控制进程的资源占用.这里单说 cpu 资源. cgroups 里,可以用 cpu.cfs_period_us 和 cpu.cfs_quota_us 来限制该组中的所有进程在单位时间里可以使用的 cpu 时间.这里的 cfs 是完全公平调度

汇编语言从入门到精通-CPU资源和存储器

CPU资源和存储器 在汇编语言中,需要访问的硬件资源主要有:CPU内部资源.存储器和I/O端口.本章将着重讲解CPU内部寄存器的命名.功能及其常见的用途,还要介绍存储器的分段管理模式.存储单元地址的表示法以及其物理地址的形成方式. 2.1 寄存器组 寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一.由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能. 寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结

汇编语言--CPU资源和存储器(二)

二.CPU资源和存储器 需要访问的硬件资源主要有:CPU内部资源.存储器和I/O端口. 1.寄存器组 (1)16位寄存器组 16位CPU所含有的寄存器有(见图2.1中16位寄存器部分): 4个数据寄存器(AX.BX.CX和DX) 2个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP) 4个段寄存器(ES.CS.SS和DS) 1个指令指针寄存器(IP) 1个标志寄存器(Flags) (2)32位寄存器组 32位CPU除了包含了先前CPU的所有寄存器,并把通用寄存器.指令指针和标志寄存器从

配置Pods和containers--为Containers和Pods分配CPU资源

指定CPU请求和CPU限制 要为容器指定CPU请求,在容器资源清单中使用resources:requests字段.要指定CPU限制,使用resources:limits. cpu-request-limit.yaml 1 apiVersion: v1 2 kind: Pod 3 metadata: 4 name: cpu-demo 5 namespace: cpu-example 6 spec: 7 containers: 8 - name: cpu-demo-ctr 9 image: vish

连接postgres特别消耗cpu资源而引发的PostgreSQL性能优化考虑

由于是开发阶段,所以并没有配置postgres的参数,都是使用安装时的默认配置,以前运行也不见得有什么不正常,可是前几天我的cpu资源占用突然升高.查看进程,发现有一个postgres的进程占用CPU都是80%以上,而且居高不下: 刚开始以为是配置上需要修改,但事实上,默认配置基本上是很优化的,而且是开发阶段,数据量也并不大.后来通过分析,得出结论,解决问题应该从以下几个方面来逐一考虑: 1,SQL查询方面检查数据检索的索引是否建立,凡是需要查找的字段尽量建立索引,甚至是联合索引:创建索引,包括

一个表缺失索引发的CPU资源瓶颈案例

背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶颈. 分析和追踪问题的根源 首先:通过工具追踪服务器的性能,主要定位什么资源.在什么时候出现瓶颈. 这样的工具很多,可以网上搜搜工具和使用方法如PerMon和PAL等,最终得到结果是在业务高峰期(中午12点到23点前)如下图,CPU资源使用率一直很高,初步可以判断是CPU资源紧张.那真的“资源”不够

android系统cpu资源相关查询

android系统cpu资源相关查询 我们都知道android是基于linux系统内核的,在linux系统中我们查看系统资源消耗情况,一个可以直接通过命令行的top命令来看,里面有cpu具体的使用情况,当然在android系统上也还是保留了的.top还是很有用,那在android应用上怎么表现出来呢? 在[设置]应用中,在开发者选项里面就有一项现成的看cpu使用情况的,具体情况的显示是显示在ui的系统层,而不是activities,是始终高于activities的,保障在任何应用界面里都可以显示