brintos

brintos / linux-shallow public Read only

0
0
Text · 2.6 KiB · 18246f3 Raw
78 lines · python
1#!/usr/bin/env python32# SPDX-License-Identifier: GPL-2.03 4import subprocess5import time6 7import _damon_sysfs8 9def main():10    # access two 10 MiB memory regions, 2 second per each11    sz_region = 10 * 1024 * 102412    proc = subprocess.Popen(['./access_memory', '2', '%d' % sz_region, '2000'])13 14    goal = _damon_sysfs.DamosQuotaGoal(15            metric=_damon_sysfs.qgoal_metric_user_input, target_value=10000)16    kdamonds = _damon_sysfs.Kdamonds([_damon_sysfs.Kdamond(17            contexts=[_damon_sysfs.DamonCtx(18                ops='vaddr',19                targets=[_damon_sysfs.DamonTarget(pid=proc.pid)],20                schemes=[_damon_sysfs.Damos(21                    action='stat',22                    quota=_damon_sysfs.DamosQuota(23                        goals=[goal], reset_interval_ms=100),24                    )] # schemes25                )] # contexts26            )]) # kdamonds27 28    err = kdamonds.start()29    if err != None:30        print('kdamond start failed: %s' % err)31        exit(1)32 33    score_values_to_test = [0, 15000, 5000, 18000]34    while proc.poll() == None:35        if len(score_values_to_test) == 0:36            time.sleep(0.1)37            continue38 39        goal.current_value = score_values_to_test.pop(0)40        expect_increase = goal.current_value < goal.target_value41 42        err = kdamonds.kdamonds[0].commit_schemes_quota_goals()43        if err is not None:44            print('commit_schemes_quota_goals failed: %s' % err)45            exit(1)46 47        err = kdamonds.kdamonds[0].update_schemes_effective_quotas()48        if err is not None:49            print('before-update_schemes_effective_quotas failed: %s' % err)50            exit(1)51        last_effective_bytes = goal.effective_bytes52 53        time.sleep(0.5)54 55        err = kdamonds.kdamonds[0].update_schemes_effective_quotas()56        if err is not None:57            print('after-update_schemes_effective_quotas failed: %s' % err)58            exit(1)59 60        print('score: %s, effective quota: %d -> %d (%.3fx)' % (61            goal.current_value, last_effective_bytes, goal.effective_bytes,62            goal.effective_bytes / last_effective_bytes63            if last_effective_bytes != 0 else -1.0))64 65        if last_effective_bytes == goal.effective_bytes:66            print('efective bytes not changed: %d' % goal.effective_bytes)67            exit(1)68 69        increased = last_effective_bytes < goal.effective_bytes70        if expect_increase != increased:71            print('expectation of increase (%s) != increased (%s)' %72                  (expect_increase, increased))73            exit(1)74        last_effective_bytes = goal.effective_bytes75 76if __name__ == '__main__':77    main()78