]> Git Repo - linux.git/blob - tools/testing/selftests/damon/damos_tried_regions.py
x86/kaslr: Expose and use the end of the physical memory address space
[linux.git] / tools / testing / selftests / damon / damos_tried_regions.py
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()
This page took 0.036295 seconds and 4 git commands to generate.