forked from awslabs/damo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
damo
executable file
·116 lines (100 loc) · 4.23 KB
/
damo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0
import argparse
import os
os.sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import sys
import _damo_subcmds
import damo_adjust
import damo_convert_record_format
import damo_features
import damo_fmt_json
import damo_lru_sort
import damo_monitor
import damo_reclaim
import damo_record
import damo_record_info
import damo_report
import damo_schemes
import damo_show
import damo_start
import damo_status
import damo_stop
import damo_translate_damos
import damo_tune
import damo_validate
import damo_version
def pr_damo_version(args_not_use):
print(damo_version.__version__)
subcmds = [
# DAMON control
_damo_subcmds.DamoSubCmd(name='start', module=damo_start,
msg='start DAMON with given parameters'),
_damo_subcmds.DamoSubCmd(name='tune', module=damo_tune,
msg='update input parameters of ongoing DAMON'),
_damo_subcmds.DamoSubCmd(name='stop', module=damo_stop,
msg='stop running DAMON'),
# DAMON result/status snapshot
_damo_subcmds.DamoSubCmd(name='show', module=damo_show,
msg='show monitored access pattern'),
_damo_subcmds.DamoSubCmd(name='status',
module=damo_status,
msg='show DAMON status'),
# DAMON result recording and reporting
_damo_subcmds.DamoSubCmd(name='record', module=damo_record,
msg='record data accesses'),
_damo_subcmds.DamoSubCmd(name='report', module=damo_report,
msg='report the recorded data accesses in the specified form'),
# DAMON modules control
_damo_subcmds.DamoSubCmd(name='reclaim', module=damo_reclaim,
msg='control DAMON_RECLAIM'),
_damo_subcmds.DamoSubCmd(name='lru_sort', module=damo_lru_sort,
msg='control DAMON_LRU_SORT'),
# For convenient use of damo and DAMON
_damo_subcmds.DamoSubCmd(name='version',
module=_damo_subcmds.DamoSubCmdModule(None, pr_damo_version),
msg='print the version number'),
_damo_subcmds.DamoSubCmd(name='fmt_json', module=damo_fmt_json,
msg='convert damo-start cmdline option to DAMON json input'),
_damo_subcmds.DamoSubCmd(name='schemes', module=damo_schemes,
msg='apply operation schemes'),
_damo_subcmds.DamoSubCmd(name='monitor', module=damo_monitor,
msg='repeat the recording and the reporting of data accesses'),
_damo_subcmds.DamoSubCmd(name='features', module=damo_features,
msg='list supported DAMON features in the kernel'),
_damo_subcmds.DamoSubCmd(name='validate', module=damo_validate,
msg='validate a given record result file'),
_damo_subcmds.DamoSubCmd(name='adjust', module=damo_adjust,
msg='adjust the record results with different monitoring attributes'),
_damo_subcmds.DamoSubCmd(name='translate_damos',
module=damo_translate_damos,
msg='translate old .damos to the new json format (WILL BE DEPRECATED BY 2023-Q4)'),
_damo_subcmds.DamoSubCmd(name='convert_record_format',
module=damo_convert_record_format,
msg='convert DAMON result record file\'s format'),
_damo_subcmds.DamoSubCmd(name='record_info',
module=damo_record_info,
msg='print basic information of a data accesses record file'),
]
class SubCmdHelpFormatter(argparse.RawDescriptionHelpFormatter):
def _format_action(self, action):
parts = super(argparse.RawDescriptionHelpFormatter,
self)._format_action(action)
# skip sub parsers help
if action.nargs == argparse.PARSER:
parts = '\n'.join(parts.split('\n')[1:])
return parts
def main():
parser = argparse.ArgumentParser(formatter_class=SubCmdHelpFormatter)
parser.description = 'Control DAMON and show its results'
subparser = parser.add_subparsers(title='command', dest='command',
metavar='<command>')
subparser.required = True
for subcmd in subcmds:
subcmd.add_parser(subparser)
args = parser.parse_args()
for subcmd in subcmds:
if subcmd.name == args.command:
subcmd.execute(args)
if __name__ == '__main__':
main()