Path: blob/master/tools/testing/selftests/damon/damos_tried_regions.py
29268 views
#!/usr/bin/env python31# SPDX-License-Identifier: GPL-2.023import subprocess4import time56import _damon_sysfs78def main():9# repeatedly access even-numbered ones in 14 regions of 10 MiB size10sz_region = 10 * 1024 * 102411proc = subprocess.Popen(['./access_memory_even', '14', '%d' % sz_region])1213# stat every monitored regions14kdamonds = _damon_sysfs.Kdamonds([_damon_sysfs.Kdamond(15contexts=[_damon_sysfs.DamonCtx(16ops='vaddr',17targets=[_damon_sysfs.DamonTarget(pid=proc.pid)],18schemes=[_damon_sysfs.Damos(action='stat',19)] # schemes20)] # contexts21)]) # kdamonds2223err = kdamonds.start()24if err is not None:25proc.terminate()26print('kdamond start failed: %s' % err)27exit(1)2829collected_nr_regions = []30while proc.poll() is None:31time.sleep(0.1)32err = kdamonds.kdamonds[0].update_schemes_tried_regions()33if err is not None:34proc.terminate()35print('tried regions update failed: %s' % err)36exit(1)3738scheme = kdamonds.kdamonds[0].contexts[0].schemes[0]39if scheme.tried_regions is None:40proc.terminate()41print('tried regions is not collected')42exit(1)4344nr_tried_regions = len(scheme.tried_regions)45if nr_tried_regions <= 0:46proc.terminate()47print('tried regions is not created')48exit(1)49collected_nr_regions.append(nr_tried_regions)50if len(collected_nr_regions) > 10:51break52proc.terminate()5354collected_nr_regions.sort()55sample = collected_nr_regions[4]56print('50-th percentile nr_regions: %d' % sample)57print('expectation (>= 14) is %s' % 'met' if sample >= 14 else 'not met')58if collected_nr_regions[4] < 14:59print('full nr_regions:')60print('\n'.join(collected_nr_regions))61exit(1)6263if __name__ == '__main__':64main()656667