Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/testing/selftests/damon/damos_tried_regions.py
29268 views
1
#!/usr/bin/env python3
2
# SPDX-License-Identifier: GPL-2.0
3
4
import subprocess
5
import time
6
7
import _damon_sysfs
8
9
def main():
10
# repeatedly access even-numbered ones in 14 regions of 10 MiB size
11
sz_region = 10 * 1024 * 1024
12
proc = subprocess.Popen(['./access_memory_even', '14', '%d' % sz_region])
13
14
# stat every monitored regions
15
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
)] # schemes
21
)] # contexts
22
)]) # kdamonds
23
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
break
53
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
64
if __name__ == '__main__':
65
main()
66
67