- def get_huge_page_size(node):
- """Get default size of huge pages in system.
-
- :param node: Node in the topology.
- :type node: dict
- :returns: Default size of free huge pages in system.
- :rtype: int
- :raises RuntimeError: If reading failed for three times.
- """
- ssh = SSH()
- ssh.connect(node)
-
- for _ in range(3):
- ret_code, stdout, _ = ssh.exec_command_sudo(
- "grep Hugepagesize /proc/meminfo | awk '{ print $2 }'")
- if ret_code == 0:
- try:
- huge_size = int(stdout)
- except ValueError:
- logger.trace('Reading huge page size information failed')
- else:
- break
- else:
- raise RuntimeError('Getting huge page size information failed.')
- return huge_size
-
- @staticmethod
- def get_huge_page_free(node, huge_size):
- """Get number of free huge pages in system.
-
- :param node: Node in the topology.
- :param huge_size: Size of hugepages.
- :type node: dict
- :type huge_size: int
- :returns: Number of free huge pages in system.
- :rtype: int
- :raises RuntimeError: If reading failed for three times.
- """
- # TODO: add numa aware option
- ssh = SSH()
- ssh.connect(node)
-
- for _ in range(3):
- ret_code, stdout, _ = ssh.exec_command_sudo(
- 'cat /sys/kernel/mm/hugepages/hugepages-{0}kB/free_hugepages'.
- format(huge_size))
- if ret_code == 0:
- try:
- huge_free = int(stdout)
- except ValueError:
- logger.trace('Reading free huge pages information failed')
- else:
- break
- else:
- raise RuntimeError('Getting free huge pages information failed.')
- return huge_free
-
- @staticmethod
- def get_huge_page_total(node, huge_size):
- """Get total number of huge pages in system.