Enable configurable sm process priority through sm-configure

In some cases sm will need to adjust its process priority. This
change enables the configuring sm priority as part of sm at runtime

Partial-Bug: 1816764
Change-Id: I860759621c0d1389ca5a3c947d7973c185274bdd
Signed-off-by: Bin Qian <bin.qian@windriver.com>
This commit is contained in:
Bin Qian 2019-02-21 14:43:32 -05:00
parent fca5d91299
commit 720232befe
2 changed files with 56 additions and 10 deletions

View File

@ -68,6 +68,11 @@ def main():
help='port mtce receives sm commands from'
)
sys_parser.add_argument(
"--sm_process_priority",
help='sm process nice value, range from -2 to -20, default -2.'
)
sg_parser = subparsers.add_parser('service_group',
help='Service Group '
'Configuration')
@ -94,6 +99,15 @@ def main():
if args.sm_client_port:
configure_system_opt("sm_client_port", args.sm_client_port)
if args.sm_process_priority:
if int(args.sm_process_priority) in range(-20, -1):
configure_system_opt("sm_process_priority",
args.sm_process_priority)
else:
print("Invalid sm_process_priority value. "
"Must be between -2 to -20")
sys.exit(-1)
else:
database = sqlite3.connect(database_name)
_dispatch_config_action(args, database)
@ -243,8 +257,9 @@ def configure_system_opt(key, value):
database = sqlite3.connect(database_name)
cursor = database.cursor()
sql = "UPDATE CONFIGURATION SET VALUE='%s' " \
"WHERE KEY = '%s'" % (value, key)
sql = 'INSERT OR REPLACE INTO CONFIGURATION ( ID, "KEY", "VALUE" ) ' \
'VALUES((SELECT ID FROM CONFIGURATION WHERE KEY = "%s"), ' \
'"%s", "%s");' % (key, key, value)
cursor.execute(sql)
database.commit()

View File

@ -53,6 +53,7 @@
#include "sm_failover.h"
#include "sm_task_affining_thread.h"
#include "sm_worker_thread.h"
#include "sm_configuration_table.h"
#define SM_PROCESS_DB_CHECKPOINT_INTERVAL_IN_MS 30000
#define SM_PROCESS_TICK_INTERVAL_IN_MS 200
@ -569,6 +570,34 @@ static SmErrorT sm_process_wait_node_configuration( void )
}
// ****************************************************************************
// ****************************************************************************
// Process - get process priority setting
// ==============
static int get_process_nice_val()
{
char buf[SM_CONFIGURATION_VALUE_MAX_CHAR + 1];
int nice_val = -2;
if( SM_OKAY == sm_configuration_table_get("sm_process_priority", buf, sizeof(buf) - 1) )
{
if(buf[0] != '\0')
{
nice_val = atoi(buf);
}
}
if(nice_val > -2 || nice_val < -20)
{
DPRINTFE("Invalid sm_process_priority value %d, reset to default (-2)", nice_val);
nice_val = -2;
}
else
{
DPRINTFI("sm_process_priority value is set to %d", nice_val);
}
return nice_val;
}
// ****************************************************************************
// ****************************************************************************
// Process - Main
// ==============
@ -607,14 +636,6 @@ SmErrorT sm_process_main( int argc, char *argv[], char *envp[] )
return( SM_FAILED );
}
result = setpriority( PRIO_PROCESS, getpid(), -2 );
if( 0 > result )
{
DPRINTFE( "Failed to set priority of process, error=%s.",
strerror( errno ) );
return( SM_FAILED );
}
if( 0 > mkdir( SM_RUN_DIRECTORY, 0700 ) )
{
if( EEXIST == errno )
@ -710,6 +731,16 @@ SmErrorT sm_process_main( int argc, char *argv[], char *envp[] )
return( error );
}
int process_nice_val = get_process_nice_val();
result = setpriority( PRIO_PROCESS, getpid(), process_nice_val);
if( 0 > result )
{
DPRINTFE( "Failed to set priority of process, error=%s.",
strerror( errno ) );
return( SM_FAILED );
}
error = sm_utils_set_boot_complete();
if( SM_OKAY != error )
{