Skip to content

Commit

Permalink
Merge pull request avocado-framework-tests#1506 from harish-24/libh_c…
Browse files Browse the repository at this point in the history
…onfig_fixes

Enable libhugetlbfs test to run with available pages
  • Loading branch information
PraveenPenguin authored Jan 13, 2020
2 parents 27770c6 + 974fb45 commit 7c915dc
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 17 deletions.
52 changes: 35 additions & 17 deletions memory/libhugetlbfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import os
import glob
import tempfile

from avocado import Test
from avocado import main, skipUnless
Expand Down Expand Up @@ -74,7 +75,6 @@ def setUp(self):
self.page_sizes = [str(each // 1024) for each in page_sizes]

# Get arguments:
self.hugetlbfs_dir = self.params.get('hugetlbfs_dir', default=None)
pages_requested = self.params.get('pages_requested',
default=20)

Expand All @@ -89,24 +89,38 @@ def setUp(self):
else:
self.cancel("Kernel does not support hugepages")

if not self.hugetlbfs_dir:
self.hugetlbfs_dir = os.path.join(self.teststmpdir, 'hugetlbfs')
os.makedirs(self.hugetlbfs_dir)
self.configured_page_sizes = []
self.hugetlbfs_dir = {}

for hp_size in self.page_sizes:
if process.system('mount -t hugetlbfs -o pagesize=%sM none %s' %
(hp_size, self.hugetlbfs_dir), sudo=True,
ignore_status=True):
self.cancel("hugetlbfs mount failed")
genio.write_file(
'/sys/kernel/mm/hugepages/hugepages-%skB/nr_hugepages' %
str(int(hp_size) * 1024), str(pages_requested))
try:
genio.write_file(
'/sys/kernel/mm/hugepages/hugepages-%skB/nr_hugepages' %
str(int(hp_size) * 1024), str(pages_requested))
except OSError:
if (int(hp_size) * 1024) == 16777216:
self.log.warn('Running 16GB hugepages')
else:
self.cancel('Writing to hugepage file failed')
pages_available = int(genio.read_file(
'/sys/kernel/mm/hugepages/huge'
'pages-%skB/nr_hugepages' % str(int(hp_size) * 1024).strip()))
if pages_available < pages_requested:
self.cancel('%d pages available, < %d pages requested'
% (pages_available, pages_requested))
self.log.warn('%d pages available, < %d pages '
'requested', pages_available, pages_requested)

if pages_available:
self.hugetlbfs_dir.update(
{hp_size: tempfile.mkdtemp(dir=self.teststmpdir,
prefix='avocado_' + __name__)})
if process.system('mount -t hugetlbfs -o pagesize=%sM none %s' %
(hp_size, self.hugetlbfs_dir[hp_size]), sudo=True,
ignore_status=True):
self.cancel("hugetlbfs mount failed")
self.configured_page_sizes.append(hp_size)

if not self.configured_page_sizes:
self.cancel("No hugepage size configured")

git.get_repo('https://github.com/libhugetlbfs/libhugetlbfs.git',
destination_dir=self.workdir)
Expand Down Expand Up @@ -176,12 +190,16 @@ def _log_parser(log, column):
def test(self):
os.chdir(self.workdir)

functional_test = self.params.get('functional_test', default=False)
test_type = 'check'
if functional_test:
test_type = 'func'
run_log = build.run_make(
self.workdir, extra_args='BUILDTYPE=NATIVEONLY check',
self.workdir, extra_args='BUILDTYPE=NATIVEONLY %s' % test_type,
process_kwargs={'ignore_status': True}).stdout.decode('utf-8')
parsed_results = []
error = ""
for idx, hp_size in enumerate(self.page_sizes):
for idx, hp_size in enumerate(self.configured_page_sizes):
parsed_results.append(self._log_parser(run_log, idx * 2))

if parsed_results[idx][32]['FAIL']:
Expand All @@ -196,9 +214,9 @@ def test(self):
self.fail(error)

def tearDown(self):
for _ in range(0, len(self.page_sizes)):
for hp_size in self.configured_page_sizes:
if process.system('umount %s' %
self.hugetlbfs_dir, ignore_status=True):
self.hugetlbfs_dir[hp_size], ignore_status=True):
self.log.warn("umount of hugetlbfs dir failed")


Expand Down
1 change: 1 addition & 0 deletions memory/libhugetlbfs.py.data/libhugetlbfs.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
setup:
functional_test: True
mount_dir: !mux
default:
hugetlbfs_dir: null
Expand Down

0 comments on commit 7c915dc

Please sign in to comment.