Ejemplo n.º 1
0
    def add_host_CPU_live(self, cpu_ref):
        """ Add cpu to pool, if it is currently not assigned to a pool.
            @param cpu_ref: reference of host_cpu instance to add
            @type  cpu_ref: str
        """
        if not self.get_activated():
            raise PoolError(XEND_ERROR_BAD_POOL_STATE, 'deactivated')
        node = XendNode.instance()
        number = node.get_host_cpu_field(cpu_ref, 'number')

        self.pool_lock.acquire()
        try:
            pool_id = self.query_pool_id()
            other_pool_ref = self.get_cpu_pool_by_cpu_ref(cpu_ref)
            if len(other_pool_ref) != 0:
                raise PoolError(XEND_ERROR_INVALID_CPU,
                            'cpu already assigned to pool "%s"' % other_pool_ref[0])
            xc.cpupool_addcpu(pool_id, number)
        finally:
            self.pool_lock.release()

        if number not in self.proposed_cpus:
            self.proposed_cpus.append(number)
        self._update_ncpu(pool_id)
        if self._managed:
            XendNode.instance().save_cpu_pools()
Ejemplo n.º 2
0
    def add_host_CPU_live(self, cpu_ref):
        """ Add cpu to pool, if it is currently not assigned to a pool.
            @param cpu_ref: reference of host_cpu instance to add
            @type  cpu_ref: str
        """
        if not self.get_activated():
            raise PoolError(XEND_ERROR_BAD_POOL_STATE, 'deactivated')
        node = XendNode.instance()
        number = node.get_host_cpu_field(cpu_ref, 'number')

        self.pool_lock.acquire()
        try:
            pool_id = self.query_pool_id()
            other_pool_ref = self.get_cpu_pool_by_cpu_ref(cpu_ref)
            if len(other_pool_ref) != 0:
                raise PoolError(
                    XEND_ERROR_INVALID_CPU,
                    'cpu already assigned to pool "%s"' % other_pool_ref[0])
            xc.cpupool_addcpu(pool_id, number)
        finally:
            self.pool_lock.release()

        if number not in self.proposed_cpus:
            self.proposed_cpus.append(number)
        self._update_ncpu(pool_id)
        if self._managed:
            XendNode.instance().save_cpu_pools()
Ejemplo n.º 3
0
    def activate(self):
        """ Create pool in hypervisor and add cpus.
            Preconditions:
            - pool not already active
            - enough unbound cpus available
            Actions:
            - create pool in hypervisor
            - select free cpus (preferred from proposed_CPUs list) and bind it to
              the pool
            - create entries in Xenstore
        """
        self.pool_lock.acquire()
        try:
            if self.get_activated():
                raise PoolError(XEND_ERROR_BAD_POOL_STATE, 'activated')
            sched_policy = self.get_sched_policy()
            if sched_policy not in XEN_SCHEDULER_TO_ID.keys():
                raise PoolError(XEND_ERROR_UNKOWN_SCHED_POLICY)
            unbound_cpus = set(self.unbound_cpus())
            if len(unbound_cpus) < self.ncpu:
                raise PoolError(
                    XEND_ERROR_INSUFFICIENT_CPUS,
                    [str(self.ncpu), str(len(unbound_cpus))])

            # build list of cpu numbers to bind to pool
            cpu_set = set(self.proposed_cpus).intersection(unbound_cpus)
            if len(cpu_set) < self.ncpu:
                pool_cpus = (list(cpu_set) +
                             list(unbound_cpus.difference(cpu_set)))
            else:
                pool_cpus = list(cpu_set)
            pool_cpus = pool_cpus[0:self.ncpu]

            # create pool in hypervisor
            pool_id = xc.cpupool_create(
                sched=XEN_SCHEDULER_TO_ID.get(sched_policy, 0))

            self.update_XS(pool_id)
            # add cpus
            for cpu in pool_cpus:
                xc.cpupool_addcpu(pool_id, cpu)

        finally:
            self.pool_lock.release()
Ejemplo n.º 4
0
    def activate(self):
        """ Create pool in hypervisor and add cpus.
            Preconditions:
            - pool not already active
            - enough unbound cpus available
            Actions:
            - create pool in hypervisor
            - select free cpus (preferred from proposed_CPUs list) and bind it to
              the pool
            - create entries in Xenstore
        """
        self.pool_lock.acquire()
        try:
            if self.get_activated():
                raise PoolError(XEND_ERROR_BAD_POOL_STATE, 'activated')
            sched_policy = self.get_sched_policy()
            if sched_policy not in XEN_SCHEDULER_TO_ID.keys():
                raise PoolError(XEND_ERROR_UNKOWN_SCHED_POLICY)
            unbound_cpus = set(self.unbound_cpus())
            if len(unbound_cpus) < self.ncpu:
                raise PoolError(XEND_ERROR_INSUFFICIENT_CPUS,
                                [str(self.ncpu), str(len(unbound_cpus))])

            # build list of cpu numbers to bind to pool
            cpu_set = set(self.proposed_cpus).intersection(unbound_cpus)
            if len(cpu_set) < self.ncpu:
                pool_cpus = (list(cpu_set) +
                             list(unbound_cpus.difference(cpu_set)))
            else:
                pool_cpus = list(cpu_set)
            pool_cpus = pool_cpus[0:self.ncpu]

            # create pool in hypervisor
            pool_id = xc.cpupool_create(
                sched = XEN_SCHEDULER_TO_ID.get(sched_policy, 0))

            self.update_XS(pool_id)
            # add cpus
            for cpu in pool_cpus:
                xc.cpupool_addcpu(pool_id, cpu)

        finally:
            self.pool_lock.release()