1
0
Fork 0
linux/tools/testing/selftests/damon/damos_tried_regions.py
Daniel Baumann 79d69e5050
Adding upstream version 6.12.33.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 12:14:28 +02:00

65 lines
2 KiB
Python
Executable file

#!/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()