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:
parent
fca5d91299
commit
720232befe
|
@ -68,6 +68,11 @@ def main():
|
||||||
help='port mtce receives sm commands from'
|
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',
|
sg_parser = subparsers.add_parser('service_group',
|
||||||
help='Service Group '
|
help='Service Group '
|
||||||
'Configuration')
|
'Configuration')
|
||||||
|
@ -94,6 +99,15 @@ def main():
|
||||||
|
|
||||||
if args.sm_client_port:
|
if args.sm_client_port:
|
||||||
configure_system_opt("sm_client_port", 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:
|
else:
|
||||||
database = sqlite3.connect(database_name)
|
database = sqlite3.connect(database_name)
|
||||||
_dispatch_config_action(args, database)
|
_dispatch_config_action(args, database)
|
||||||
|
@ -243,8 +257,9 @@ def configure_system_opt(key, value):
|
||||||
database = sqlite3.connect(database_name)
|
database = sqlite3.connect(database_name)
|
||||||
|
|
||||||
cursor = database.cursor()
|
cursor = database.cursor()
|
||||||
sql = "UPDATE CONFIGURATION SET VALUE='%s' " \
|
sql = 'INSERT OR REPLACE INTO CONFIGURATION ( ID, "KEY", "VALUE" ) ' \
|
||||||
"WHERE KEY = '%s'" % (value, key)
|
'VALUES((SELECT ID FROM CONFIGURATION WHERE KEY = "%s"), ' \
|
||||||
|
'"%s", "%s");' % (key, key, value)
|
||||||
|
|
||||||
cursor.execute(sql)
|
cursor.execute(sql)
|
||||||
database.commit()
|
database.commit()
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
#include "sm_failover.h"
|
#include "sm_failover.h"
|
||||||
#include "sm_task_affining_thread.h"
|
#include "sm_task_affining_thread.h"
|
||||||
#include "sm_worker_thread.h"
|
#include "sm_worker_thread.h"
|
||||||
|
#include "sm_configuration_table.h"
|
||||||
|
|
||||||
#define SM_PROCESS_DB_CHECKPOINT_INTERVAL_IN_MS 30000
|
#define SM_PROCESS_DB_CHECKPOINT_INTERVAL_IN_MS 30000
|
||||||
#define SM_PROCESS_TICK_INTERVAL_IN_MS 200
|
#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
|
// Process - Main
|
||||||
// ==============
|
// ==============
|
||||||
|
@ -607,14 +636,6 @@ SmErrorT sm_process_main( int argc, char *argv[], char *envp[] )
|
||||||
return( SM_FAILED );
|
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( 0 > mkdir( SM_RUN_DIRECTORY, 0700 ) )
|
||||||
{
|
{
|
||||||
if( EEXIST == errno )
|
if( EEXIST == errno )
|
||||||
|
@ -710,6 +731,16 @@ SmErrorT sm_process_main( int argc, char *argv[], char *envp[] )
|
||||||
return( error );
|
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();
|
error = sm_utils_set_boot_complete();
|
||||||
if( SM_OKAY != error )
|
if( SM_OKAY != error )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue