def can_fit_hugepages(self, pagesize, memory): """Returns whether memory can fit into hugepages size :param pagesize: a page size in KibB :param memory: a memory size asked to fit in KiB :returns: whether memory can fit in hugepages :raises: MemoryPageSizeNotSupported if page size not supported """ for pages in self.mempages: if pages.size_kb == pagesize: return (memory <= pages.free_kb and (memory % pages.size_kb) == 0) raise exception.MemoryPageSizeNotSupported(pagesize=pagesize)
def can_fit_pagesize(self, pagesize, memory, use_free=True): """Returns whether memory can fit into a given pagesize. :param pagesize: a page size in KibB :param memory: a memory size asked to fit in KiB :param use_free: if true, assess based on free memory rather than total memory. This means overcommit is not allowed, which should be the case for hugepages since these are memlocked by the kernel and can't be swapped out. :returns: whether memory can fit in hugepages :raises: MemoryPageSizeNotSupported if page size not supported """ for pages in self.mempages: avail_kb = pages.free_kb if use_free else pages.total_kb if pages.size_kb == pagesize: return memory <= avail_kb and (memory % pages.size_kb) == 0 raise exception.MemoryPageSizeNotSupported(pagesize=pagesize)