66 lines · python
1#!/usr/bin/env python32# SPDX-License-Identifier: GPL-2.03 4import subprocess5import time6 7import _damon_sysfs8 9def main():10 # repeatedly access even-numbered ones in 14 regions of 10 MiB size11 sz_region = 10 * 1024 * 102412 proc = subprocess.Popen(['./access_memory_even', '14', '%d' % sz_region])13 14 # stat every monitored regions15 kdamonds = _damon_sysfs.Kdamonds([_damon_sysfs.Kdamond(16 contexts=[_damon_sysfs.DamonCtx(17 ops='vaddr',18 targets=[_damon_sysfs.DamonTarget(pid=proc.pid)],19 schemes=[_damon_sysfs.Damos(action='stat',20 )] # schemes21 )] # contexts22 )]) # kdamonds23 24 err = kdamonds.start()25 if err is not None:26 proc.terminate()27 print('kdamond start failed: %s' % err)28 exit(1)29 30 collected_nr_regions = []31 while proc.poll() is None:32 time.sleep(0.1)33 err = kdamonds.kdamonds[0].update_schemes_tried_regions()34 if err is not None:35 proc.terminate()36 print('tried regions update failed: %s' % err)37 exit(1)38 39 scheme = kdamonds.kdamonds[0].contexts[0].schemes[0]40 if scheme.tried_regions is None:41 proc.terminate()42 print('tried regions is not collected')43 exit(1)44 45 nr_tried_regions = len(scheme.tried_regions)46 if nr_tried_regions <= 0:47 proc.terminate()48 print('tried regions is not created')49 exit(1)50 collected_nr_regions.append(nr_tried_regions)51 if len(collected_nr_regions) > 10:52 break53 proc.terminate()54 55 collected_nr_regions.sort()56 sample = collected_nr_regions[4]57 print('50-th percentile nr_regions: %d' % sample)58 print('expectation (>= 14) is %s' % 'met' if sample >= 14 else 'not met')59 if collected_nr_regions[4] < 14:60 print('full nr_regions:')61 print('\n'.join(collected_nr_regions))62 exit(1)63 64if __name__ == '__main__':65 main()66