Exemplo n.º 1
0
 def get_buddy_info(sleep=False):
     """Get buddy info"""
     if sleep:
         time.sleep(10)
     buddy_info = utils_memory.get_buddy_info('0', session=session)['0']
     logging.info('Checked buddy info, value is %s', buddy_info)
     return buddy_info
Exemplo n.º 2
0
    def get_target_hugepages(self):
        """
        Calculate the target number of hugepages for testing purposes.
        """
        if self.vms < self.max_vms:
            self.vms = self.max_vms
        # memory of all VMs plus qemu overhead of 128MB per guest
        # (this value can be overriden in your cartesian config)
        vmsm = self.vms * (self.mem + self.qemu_overhead)
        target_hugepages = int(vmsm * 1024 / self.hugepage_size)

        # FIXME Now the buddyinfo can not get chunk info which is bigger
        # than 4M. So this will only fit for 2M size hugepages. Can not work
        # when hugepage size is 1G.
        # And sometimes huge page can not get all pages so decrease the page
        # for about 10 huge page to make sure the allocate can success

        decreased_pages = 10
        if self.hugepage_size > 2048:
            self.hugepage_force_allocate = "yes"

        if self.hugepage_force_allocate == "no":
            hugepage_allocated = open(self.kernel_hp_file, "r")
            available_hugepages = int(hugepage_allocated.read().strip())
            hugepage_allocated.close()
            chunk_bottom = int(math.log(self.hugepage_size / 4, 2))
            chunk_info = utils_memory.get_buddy_info(">=%s" % chunk_bottom,
                                                     zones="DMA32 Normal")
            for size in chunk_info:
                available_hugepages += int(
                    chunk_info[size] *
                    math.pow(2, int(int(size) - chunk_bottom)))

            available_hugepages = available_hugepages - decreased_pages
            if target_hugepages > available_hugepages:
                logging.warn("This test requires more huge pages than we"
                             " currently have, we'll try to allocate the"
                             " biggest number the system can support.")
                target_hugepages = available_hugepages
                available_mem = available_hugepages * self.hugepage_size
                self.suggest_mem = int(available_mem / self.vms / 1024 -
                                       self.qemu_overhead)
                if self.suggest_mem < self.lowest_mem_per_vm:
                    raise MemoryError("Sugguest memory %sM is too small for"
                                      " guest to boot up. Please check your"
                                      " host memory "
                                      "status." % self.suggest_mem)

        return target_hugepages
Exemplo n.º 3
0
    def get_target_hugepages(self):
        """
        Calculate the target number of hugepages for testing purposes.
        """
        if self.vms < self.max_vms:
            self.vms = self.max_vms
        # memory of all VMs plus qemu overhead of 128MB per guest
        # (this value can be overriden in your cartesian config)
        vmsm = self.vms * (self.mem + self.qemu_overhead)
        target_hugepages = int(vmsm * 1024 / self.hugepage_size)

        # FIXME Now the buddyinfo can not get chunk info which is bigger
        # than 4M. So this will only fit for 2M size hugepages. Can not work
        # when hugepage size is 1G.
        # And sometimes huge page can not get all pages so decrease the page
        # for about 10 huge page to make sure the allocate can success

        decreased_pages = 10
        if self.hugepage_size > 2048:
            self.hugepage_force_allocate = "yes"

        if self.hugepage_force_allocate == "no":
            hugepage_allocated = open(self.kernel_hp_file, "r")
            available_hugepages = int(hugepage_allocated.read().strip())
            hugepage_allocated.close()
            chunk_bottom = int(math.log(self.hugepage_size / 4, 2))
            chunk_info = utils_memory.get_buddy_info(">=%s" % chunk_bottom, zones="DMA32 Normal")
            for size in chunk_info:
                available_hugepages += int(chunk_info[size] * math.pow(2, int(int(size) - chunk_bottom)))

            available_hugepages = available_hugepages - decreased_pages
            if target_hugepages > available_hugepages:
                logging.warn(
                    "This test requires more huge pages than we"
                    " currently have, we'll try to allocate the"
                    " biggest number the system can support."
                )
                target_hugepages = available_hugepages
                available_mem = available_hugepages * self.hugepage_size
                self.suggest_mem = int(available_mem / self.vms / 1024 - self.qemu_overhead)
                if self.suggest_mem < self.lowest_mem_per_vm:
                    raise MemoryError(
                        "This host doesn't have enough free "
                        "large memory pages for this test to "
                        "run (only %s MB memory available for "
                        "each guest)" % self.suggest_mem
                    )

        return target_hugepages