def do_balloon(self, memsize): self.log.info('do_balloon(memsize={!r})'.format(memsize)) MAX_TRIES = 20 niter = 0 prev_memory_actual = None for i in self.domdict.keys(): self.domdict[i].no_progress = False while True: self.log.debug('niter={:2d}/{:2d}'.format(niter, MAX_TRIES)) self.refresh_memactual() xenfree = self.get_free_xen_memory() self.log.info('xenfree={!r}'.format(xenfree)) if xenfree >= memsize + self.XEN_FREE_MEM_MIN: self.inhibit_balloon_up() return True if prev_memory_actual is not None: for i in prev_memory_actual.keys(): if prev_memory_actual[i] == self.domdict[i].memory_actual: #domain not responding to memset requests, remove it from donors self.domdict[i].no_progress = True self.log.info('domain {} stuck at {}'.format(i, self.domdict[i].memory_actual)) memset_reqs = qmemman_algo.balloon(memsize + self.XEN_FREE_MEM_LEFT - xenfree, self.domdict) self.log.info('memset_reqs={!r}'.format(memset_reqs)) if niter > MAX_TRIES or len(memset_reqs) == 0: return False prev_memory_actual = {} for i in memset_reqs: dom, mem = i self.mem_set(dom, mem) prev_memory_actual[dom] = self.domdict[dom].memory_actual self.log.debug('sleeping for {} s'.format(self.BALOON_DELAY)) time.sleep(self.BALOON_DELAY) niter = niter + 1
def do_balloon(self, memsize): MAX_TRIES = 20 niter = 0 prev_memory_actual = None for i in self.domdict.keys(): self.domdict[i].no_progress = False print "do_balloon start" while True: self.refresh_memactual() xenfree = self.get_free_xen_memory() print 'got xenfree=', xenfree if xenfree >= memsize + self.XEN_FREE_MEM_MIN: self.inhibit_balloon_up() return True if prev_memory_actual is not None: for i in prev_memory_actual.keys(): if prev_memory_actual[i] == self.domdict[i].memory_actual: #domain not responding to memset requests, remove it from donors self.domdict[i].no_progress = True print 'domain', i, 'stuck at', self.domdict[i].memory_actual memset_reqs = qmemman_algo.balloon(memsize + self.XEN_FREE_MEM_LEFT - xenfree, self.domdict) print 'requests:', memset_reqs if niter > MAX_TRIES or len(memset_reqs) == 0: return False prev_memory_actual = {} for i in memset_reqs: dom, mem = i self.mem_set(dom, mem) prev_memory_actual[dom] = self.domdict[dom].memory_actual time.sleep(self.BALOON_DELAY) niter = niter + 1
def do_balloon(self, memsize): MAX_TRIES = 20 niter = 0 prev_memory_actual = None for i in self.domdict.keys(): self.domdict[i].no_progress = False print "do_balloon start" while True: self.refresh_memactual() xenfree = self.get_free_xen_memory() print 'got xenfree=', xenfree if xenfree >= memsize + self.XEN_FREE_MEM_MIN: self.inhibit_balloon_up() return True if prev_memory_actual is not None: for i in prev_memory_actual.keys(): if prev_memory_actual[i] == self.domdict[i].memory_actual: #domain not responding to memset requests, remove it from donors self.domdict[i].no_progress = True print 'domain', i, 'stuck at', self.domdict[ i].memory_actual memset_reqs = qmemman_algo.balloon( memsize + self.XEN_FREE_MEM_LEFT - xenfree, self.domdict) print 'requests:', memset_reqs if niter > MAX_TRIES or len(memset_reqs) == 0: return False prev_memory_actual = {} for i in memset_reqs: dom, mem = i self.mem_set(dom, mem) prev_memory_actual[dom] = self.domdict[dom].memory_actual time.sleep(self.BALOON_DELAY) niter = niter + 1
def do_balloon(self, memsize): self.log.info('do_balloon(memsize={!r})'.format(memsize)) CHECK_PERIOD_S = 3 CHECK_MB_S = 100 niter = 0 prev_memory_actual = None for i in self.domdict.keys(): self.domdict[i].no_progress = False #: number of loop iterations for CHECK_PERIOD_S seconds check_period = max(1, int((CHECK_PERIOD_S + 0.0) / self.BALOON_DELAY)) #: number of free memory bytes expected to get during CHECK_PERIOD_S #: seconds check_delta = CHECK_PERIOD_S * CHECK_MB_S * 1024 * 1024 #: helper array for holding free memory size, CHECK_PERIOD_S seconds #: ago, at every loop iteration xenfree_ring = [0] * check_period while True: self.log.debug('niter={:2d}'.format(niter)) self.refresh_memactual() xenfree = self.get_free_xen_memory() self.log.info('xenfree={!r}'.format(xenfree)) if xenfree >= memsize + self.XEN_FREE_MEM_MIN: self.inhibit_balloon_up() return True # fail the request if over past CHECK_PERIOD_S seconds, # we got less than CHECK_MB_S MB/s on average ring_slot = niter % check_period if niter >= check_period and xenfree < xenfree_ring[ ring_slot] + check_delta: return False xenfree_ring[ring_slot] = xenfree if prev_memory_actual is not None: for i in prev_memory_actual.keys(): if prev_memory_actual[i] == self.domdict[i].memory_actual: #domain not responding to memset requests, remove it from donors self.domdict[i].no_progress = True self.log.info('domain {} stuck at {}'.format( i, self.domdict[i].memory_actual)) memset_reqs = qmemman_algo.balloon( memsize + self.XEN_FREE_MEM_LEFT - xenfree, self.domdict) self.log.info('memset_reqs={!r}'.format(memset_reqs)) if len(memset_reqs) == 0: return False prev_memory_actual = {} for i in memset_reqs: dom, mem = i self.mem_set(dom, mem) prev_memory_actual[dom] = self.domdict[dom].memory_actual self.log.debug('sleeping for {} s'.format(self.BALOON_DELAY)) time.sleep(self.BALOON_DELAY) niter = niter + 1
def do_balloon(self, memsize): self.log.info('do_balloon(memsize={!r})'.format(memsize)) CHECK_PERIOD_S = 3 CHECK_MB_S = 100 niter = 0 prev_memory_actual = None for i in self.domdict.keys(): self.domdict[i].no_progress = False #: number of loop iterations for CHECK_PERIOD_S seconds check_period = max(1, int((CHECK_PERIOD_S + 0.0) / self.BALOON_DELAY)) #: number of free memory bytes expected to get during CHECK_PERIOD_S #: seconds check_delta = CHECK_PERIOD_S * CHECK_MB_S * 1024 * 1024 #: helper array for holding free memory size, CHECK_PERIOD_S seconds #: ago, at every loop iteration xenfree_ring = [0] * check_period while True: self.log.debug('niter={:2d}'.format(niter)) self.refresh_memactual() xenfree = self.get_free_xen_memory() self.log.info('xenfree={!r}'.format(xenfree)) if xenfree >= memsize + self.XEN_FREE_MEM_MIN: self.inhibit_balloon_up() return True # fail the request if over past CHECK_PERIOD_S seconds, # we got less than CHECK_MB_S MB/s on average ring_slot = niter % check_period if niter >= check_period and xenfree < xenfree_ring[ring_slot] + check_delta: return False xenfree_ring[ring_slot] = xenfree if prev_memory_actual is not None: for i in prev_memory_actual.keys(): if prev_memory_actual[i] == self.domdict[i].memory_actual: #domain not responding to memset requests, remove it from donors self.domdict[i].no_progress = True self.log.info('domain {} stuck at {}'.format(i, self.domdict[i].memory_actual)) memset_reqs = qmemman_algo.balloon(memsize + self.XEN_FREE_MEM_LEFT - xenfree, self.domdict) self.log.info('memset_reqs={!r}'.format(memset_reqs)) if len(memset_reqs) == 0: return False prev_memory_actual = {} for i in memset_reqs: dom, mem = i self.mem_set(dom, mem) prev_memory_actual[dom] = self.domdict[dom].memory_actual self.log.debug('sleeping for {} s'.format(self.BALOON_DELAY)) time.sleep(self.BALOON_DELAY) niter = niter + 1
def do_balloon(self, memsize): self.log.info('do_balloon(memsize={!r})'.format(memsize)) MAX_TRIES = 20 niter = 0 prev_memory_actual = None for i in self.domdict.keys(): self.domdict[i].no_progress = False while True: self.log.debug('niter={:2d}/{:2d}'.format(niter, MAX_TRIES)) self.refresh_memactual() xenfree = self.get_free_xen_memory() self.log.info('xenfree={!r}'.format(xenfree)) if xenfree >= memsize + self.XEN_FREE_MEM_MIN: self.inhibit_balloon_up() return True if prev_memory_actual is not None: for i in prev_memory_actual.keys(): if prev_memory_actual[i] == self.domdict[i].memory_actual: #domain not responding to memset requests, remove it from donors self.domdict[i].no_progress = True self.log.info('domain {} stuck at {}'.format( i, self.domdict[i].memory_actual)) memset_reqs = qmemman_algo.balloon( memsize + self.XEN_FREE_MEM_LEFT - xenfree, self.domdict) self.log.info('memset_reqs={!r}'.format(memset_reqs)) if niter > MAX_TRIES or len(memset_reqs) == 0: return False prev_memory_actual = {} for i in memset_reqs: dom, mem = i self.mem_set(dom, mem) prev_memory_actual[dom] = self.domdict[dom].memory_actual self.log.debug('sleeping for {} s'.format(self.BALOON_DELAY)) time.sleep(self.BALOON_DELAY) niter = niter + 1