brintos

brintos / linux-shallow public Read only

0
0
Text · 2.0 KiB · 3b347eb Raw
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