Path: blob/master/tools/testing/selftests/damon/damon_nr_regions.py
29268 views
#!/usr/bin/env python31# SPDX-License-Identifier: GPL-2.023import subprocess4import time56import _damon_sysfs78def test_nr_regions(real_nr_regions, min_nr_regions, max_nr_regions):9'''10Create process of the given 'real_nr_regions' regions, monitor it using11DAMON with given '{min,max}_nr_regions' monitoring parameter.1213Exit with non-zero return code if the given {min,max}_nr_regions is not14kept.15'''16sz_region = 10 * 1024 * 102417proc = subprocess.Popen(['./access_memory_even', '%d' % real_nr_regions,18'%d' % sz_region])1920# stat every monitored regions21kdamonds = _damon_sysfs.Kdamonds([_damon_sysfs.Kdamond(22contexts=[_damon_sysfs.DamonCtx(23monitoring_attrs=_damon_sysfs.DamonAttrs(24min_nr_regions=min_nr_regions,25max_nr_regions=max_nr_regions),26ops='vaddr',27targets=[_damon_sysfs.DamonTarget(pid=proc.pid)],28schemes=[_damon_sysfs.Damos(action='stat',29)] # schemes30)] # contexts31)]) # kdamonds3233err = kdamonds.start()34if err is not None:35proc.terminate()36print('kdamond start failed: %s' % err)37exit(1)3839collected_nr_regions = []40while proc.poll() is None:41time.sleep(0.1)42err = kdamonds.kdamonds[0].update_schemes_tried_regions()43if err is not None:44proc.terminate()45print('tried regions update failed: %s' % err)46exit(1)4748scheme = kdamonds.kdamonds[0].contexts[0].schemes[0]49if scheme.tried_regions is None:50proc.terminate()51print('tried regions is not collected')52exit(1)5354nr_tried_regions = len(scheme.tried_regions)55if nr_tried_regions <= 0:56proc.terminate()57print('tried regions is not created')58exit(1)59collected_nr_regions.append(nr_tried_regions)60if len(collected_nr_regions) > 10:61break62proc.terminate()63kdamonds.stop()6465test_name = 'nr_regions test with %d/%d/%d real/min/max nr_regions' % (66real_nr_regions, min_nr_regions, max_nr_regions)67collected_nr_regions.sort()68if (collected_nr_regions[0] < min_nr_regions or69collected_nr_regions[-1] > max_nr_regions):70print('fail %s' % test_name)71print('number of regions that collected are:')72for nr in collected_nr_regions:73print(nr)74exit(1)75print('pass %s ' % test_name)7677def main():78# test min_nr_regions larger than real nr regions79test_nr_regions(10, 20, 100)8081# test max_nr_regions smaller than real nr regions82test_nr_regions(15, 3, 10)8384# test online-tuned max_nr_regions that smaller than real nr regions85sz_region = 10 * 1024 * 102486proc = subprocess.Popen(['./access_memory_even', '14', '%d' % sz_region])8788# stat every monitored regions89kdamonds = _damon_sysfs.Kdamonds([_damon_sysfs.Kdamond(90contexts=[_damon_sysfs.DamonCtx(91monitoring_attrs=_damon_sysfs.DamonAttrs(92min_nr_regions=10, max_nr_regions=1000),93ops='vaddr',94targets=[_damon_sysfs.DamonTarget(pid=proc.pid)],95schemes=[_damon_sysfs.Damos(action='stat',96)] # schemes97)] # contexts98)]) # kdamonds99100err = kdamonds.start()101if err is not None:102proc.terminate()103print('kdamond start failed: %s' % err)104exit(1)105106# wait until the real regions are found107time.sleep(3)108109attrs = kdamonds.kdamonds[0].contexts[0].monitoring_attrs110attrs.min_nr_regions = 3111attrs.max_nr_regions = 7112attrs.update_us = 100000113err = kdamonds.kdamonds[0].commit()114if err is not None:115proc.terminate()116print('commit failed: %s' % err)117exit(1)118# wait for next merge operation is executed119time.sleep(0.3)120121err = kdamonds.kdamonds[0].update_schemes_tried_regions()122if err is not None:123proc.terminate()124print('tried regions update failed: %s' % err)125exit(1)126127scheme = kdamonds.kdamonds[0].contexts[0].schemes[0]128if scheme.tried_regions is None:129proc.terminate()130print('tried regions is not collected')131exit(1)132133nr_tried_regions = len(scheme.tried_regions)134if nr_tried_regions <= 0:135proc.terminate()136print('tried regions is not created')137exit(1)138proc.terminate()139140if nr_tried_regions > 7:141print('fail online-tuned max_nr_regions: %d > 7' % nr_tried_regions)142exit(1)143print('pass online-tuned max_nr_regions')144145if __name__ == '__main__':146main()147148149