blob: 7beac9ae18e2a0109a2f40907739ac87e079ad4a [file] [log] [blame]
# SPDX-License-Identifier: GPL-2.0
"""
Start DAMON with given parameters.
"""
import os
import signal
import time
import _damo_records
import _damon
import _damon_args
def module_running(module_name):
param_dir = os.path.join('/sys/module', module_name, 'parameters')
for param_name in ['enabled', 'enable']:
param_file = os.path.join(param_dir, param_name)
if os.path.isfile(param_file):
with open(param_file, 'r') as f:
return f.read().strip() == 'Y'
return False
def module_disable(module_name):
param_dir = os.path.join('/sys/module', module_name, 'parameters')
for param_name in ['enabled', 'enable']:
param_file = os.path.join(param_dir, param_name)
if os.path.isfile(param_file):
with open(param_file, 'w') as f:
f.write('N')
return
def handle_modules():
for module in os.listdir('/sys/module'):
if not module.startswith('damon_'):
continue
if not module_running(module):
continue
print('Cannot turn on damon since %s is running. '
'You should disable it first.' % module)
answer = input('May I disable it for you? [Y/n] ')
if answer.lower() == 'n':
print('Ok, see you later')
exit(1)
print('Ok, disabling it')
module_disable(module)
print('Disabled it. Continue starting DAMON')
def sighandler(signum, frame):
print('\nsingal %s received' % signum)
exit(0)
def main(args):
_damon.ensure_root_and_initialized(args)
handle_modules()
err, kdamonds = _damon_args.turn_damon_on(args)
if err:
print('could not turn on damon (%s)' % err)
exit(1)
if args.include_child_tasks is True:
signal.signal(signal.SIGINT, sighandler)
signal.signal(signal.SIGTERM, sighandler)
print('Continue monitoring child tasks and updating DAMON targets')
print('Press Ctrl+C to stop')
while True:
_damon.add_commit_vaddr_child_targets(kdamonds)
time.sleep(3)
def set_argparser(parser):
_damon_args.set_argparser(parser, add_record_options=False, min_help=True)
parser.add_argument('--include_child_tasks', action='store_true',
help='add child tasks as monitoring target')
parser.description = 'Start DAMON with specified parameters'
return parser