| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #!/usr/bin/env python3
- # SPDX-License-Identifier: GPL-2.0
- import subprocess
- import time
- import _damon_sysfs
- def main():
- # repeatedly access even-numbered ones in 14 regions of 10 MiB size
- sz_region = 10 * 1024 * 1024
- proc = subprocess.Popen(['./access_memory_even', '14', '%d' % sz_region])
- # stat every monitored regions
- kdamonds = _damon_sysfs.Kdamonds([_damon_sysfs.Kdamond(
- contexts=[_damon_sysfs.DamonCtx(
- ops='vaddr',
- targets=[_damon_sysfs.DamonTarget(pid=proc.pid)],
- schemes=[_damon_sysfs.Damos(action='stat',
- )] # schemes
- )] # contexts
- )]) # kdamonds
- err = kdamonds.start()
- if err is not None:
- proc.terminate()
- print('kdamond start failed: %s' % err)
- exit(1)
- collected_nr_regions = []
- while proc.poll() is None:
- time.sleep(0.1)
- err = kdamonds.kdamonds[0].update_schemes_tried_regions()
- if err is not None:
- proc.terminate()
- print('tried regions update failed: %s' % err)
- exit(1)
- scheme = kdamonds.kdamonds[0].contexts[0].schemes[0]
- if scheme.tried_regions is None:
- proc.terminate()
- print('tried regions is not collected')
- exit(1)
- nr_tried_regions = len(scheme.tried_regions)
- if nr_tried_regions <= 0:
- proc.terminate()
- print('tried regions is not created')
- exit(1)
- collected_nr_regions.append(nr_tried_regions)
- if len(collected_nr_regions) > 10:
- break
- proc.terminate()
- collected_nr_regions.sort()
- sample = collected_nr_regions[4]
- print('50-th percentile nr_regions: %d' % sample)
- print('expectation (>= 14) is %s' % 'met' if sample >= 14 else 'not met')
- if collected_nr_regions[4] < 14:
- print('full nr_regions:')
- print('\n'.join(collected_nr_regions))
- exit(1)
- if __name__ == '__main__':
- main()
|