|
 |
df4b1e |
From a008448efb2b1d45c432867caf08f0bcf2b4b9b0 Mon Sep 17 00:00:00 2001
|
|
 |
df4b1e |
From: Jan Friesse <jfriesse@redhat.com>
|
|
 |
df4b1e |
Date: Fri, 7 Jul 2017 17:49:46 +0200
|
|
 |
df4b1e |
Subject: [PATCH] main: Add option to set priority
|
|
 |
df4b1e |
|
|
 |
df4b1e |
Option -P takes numeric value with same meaning
|
|
 |
df4b1e |
as nice or values min / max, meaning maximal / minimal priority (so
|
|
 |
df4b1e |
minimal / maximal nice value).
|
|
 |
df4b1e |
|
|
 |
df4b1e |
Scheduler / priority setting is moved in code so it is now executed
|
|
 |
df4b1e |
after logsys is configured so errors are logged.
|
|
 |
df4b1e |
|
|
 |
df4b1e |
Setting maximal priority is also used as fallback when realtime
|
|
 |
df4b1e |
scheduling is requested and sched_setscheduler fails.
|
|
 |
df4b1e |
|
|
 |
df4b1e |
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
|
|
 |
df4b1e |
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
|
|
 |
df4b1e |
---
|
|
 |
df4b1e |
exec/main.c | 71 ++++++++++++++++++++++++++++++++++++++++++++------------
|
|
 |
df4b1e |
man/corosync.8 | 22 +++++++++++++----
|
|
 |
df4b1e |
2 files changed, 73 insertions(+), 20 deletions(-)
|
|
 |
df4b1e |
|
|
 |
df4b1e |
diff --git a/exec/main.c b/exec/main.c
|
|
 |
df4b1e |
index 0d381c2..60c01a4 100644
|
|
 |
df4b1e |
--- a/exec/main.c
|
|
 |
df4b1e |
+++ b/exec/main.c
|
|
 |
df4b1e |
@@ -862,8 +862,10 @@ static void timer_function_scheduler_timeout (void *data)
|
|
 |
df4b1e |
}
|
|
 |
df4b1e |
|
|
 |
df4b1e |
|
|
 |
df4b1e |
-static void corosync_setscheduler (void)
|
|
 |
df4b1e |
+static int corosync_set_rr_scheduler (void)
|
|
 |
df4b1e |
{
|
|
 |
df4b1e |
+ int ret_val = 0;
|
|
 |
df4b1e |
+
|
|
 |
df4b1e |
#if defined(HAVE_PTHREAD_SETSCHEDPARAM) && defined(HAVE_SCHED_GET_PRIORITY_MAX) && defined(HAVE_SCHED_SETSCHEDULER)
|
|
 |
df4b1e |
int res;
|
|
 |
df4b1e |
|
|
 |
df4b1e |
@@ -880,6 +882,7 @@ static void corosync_setscheduler (void)
|
|
 |
df4b1e |
#ifdef HAVE_QB_LOG_THREAD_PRIORITY_SET
|
|
 |
df4b1e |
qb_log_thread_priority_set (SCHED_OTHER, 0);
|
|
 |
df4b1e |
#endif
|
|
 |
df4b1e |
+ ret_val = -1;
|
|
 |
df4b1e |
} else {
|
|
 |
df4b1e |
|
|
 |
df4b1e |
/*
|
|
 |
df4b1e |
@@ -901,11 +904,15 @@ static void corosync_setscheduler (void)
|
|
 |
df4b1e |
LOGSYS_PERROR (errno, LOGSYS_LEVEL_WARNING,
|
|
 |
df4b1e |
"Could not get maximum scheduler priority");
|
|
 |
df4b1e |
sched_priority = 0;
|
|
 |
df4b1e |
+ ret_val = -1;
|
|
 |
df4b1e |
}
|
|
 |
df4b1e |
#else
|
|
 |
df4b1e |
log_printf(LOGSYS_LEVEL_WARNING,
|
|
 |
df4b1e |
"The Platform is missing process priority setting features. Leaving at default.");
|
|
 |
df4b1e |
+ ret_val = -1;
|
|
 |
df4b1e |
#endif
|
|
 |
df4b1e |
+
|
|
 |
df4b1e |
+ return (ret_val);
|
|
 |
df4b1e |
}
|
|
 |
df4b1e |
|
|
 |
df4b1e |
|
|
 |
df4b1e |
@@ -1132,29 +1139,48 @@ int main (int argc, char **argv, char **envp)
|
|
 |
df4b1e |
const char *error_string;
|
|
 |
df4b1e |
struct totem_config totem_config;
|
|
 |
df4b1e |
int res, ch;
|
|
 |
df4b1e |
- int background, setprio, testonly;
|
|
 |
df4b1e |
+ int background, sched_rr, prio, testonly;
|
|
 |
df4b1e |
struct stat stat_out;
|
|
 |
df4b1e |
enum e_corosync_done flock_err;
|
|
 |
df4b1e |
uint64_t totem_config_warnings;
|
|
 |
df4b1e |
struct scheduler_pause_timeout_data scheduler_pause_timeout_data;
|
|
 |
df4b1e |
+ long int tmpli;
|
|
 |
df4b1e |
+ char *ep;
|
|
 |
df4b1e |
|
|
 |
df4b1e |
/* default configuration
|
|
 |
df4b1e |
*/
|
|
 |
df4b1e |
background = 1;
|
|
 |
df4b1e |
- setprio = 1;
|
|
 |
df4b1e |
+ sched_rr = 1;
|
|
 |
df4b1e |
+ prio = 0;
|
|
 |
df4b1e |
testonly = 0;
|
|
 |
df4b1e |
|
|
 |
df4b1e |
- while ((ch = getopt (argc, argv, "fprtv")) != EOF) {
|
|
 |
df4b1e |
+ while ((ch = getopt (argc, argv, "fP:prtv")) != EOF) {
|
|
 |
df4b1e |
|
|
 |
df4b1e |
switch (ch) {
|
|
 |
df4b1e |
case 'f':
|
|
 |
df4b1e |
background = 0;
|
|
 |
df4b1e |
break;
|
|
 |
df4b1e |
case 'p':
|
|
 |
df4b1e |
- setprio = 0;
|
|
 |
df4b1e |
+ sched_rr = 0;
|
|
 |
df4b1e |
+ break;
|
|
 |
df4b1e |
+ case 'P':
|
|
 |
df4b1e |
+ if (strcmp(optarg, "max") == 0) {
|
|
 |
df4b1e |
+ prio = INT_MIN;
|
|
 |
df4b1e |
+ } else if (strcmp(optarg, "min") == 0) {
|
|
 |
df4b1e |
+ prio = INT_MAX;
|
|
 |
df4b1e |
+ } else {
|
|
 |
df4b1e |
+ tmpli = strtol(optarg, &ep, 10);
|
|
 |
df4b1e |
+ if (errno != 0 || *ep != '\0' || tmpli > INT_MAX || tmpli < INT_MIN) {
|
|
 |
df4b1e |
+ fprintf(stderr, "Priority value %s is invalid", optarg);
|
|
 |
df4b1e |
+ logsys_system_fini();
|
|
 |
df4b1e |
+ return EXIT_FAILURE;
|
|
 |
df4b1e |
+ }
|
|
 |
df4b1e |
+
|
|
 |
df4b1e |
+ prio = tmpli;
|
|
 |
df4b1e |
+ }
|
|
 |
df4b1e |
break;
|
|
 |
df4b1e |
case 'r':
|
|
 |
df4b1e |
- setprio = 1;
|
|
 |
df4b1e |
+ sched_rr = 1;
|
|
 |
df4b1e |
break;
|
|
 |
df4b1e |
case 't':
|
|
 |
df4b1e |
testonly = 1;
|
|
 |
df4b1e |
@@ -1170,8 +1196,9 @@ int main (int argc, char **argv, char **envp)
|
|
 |
df4b1e |
fprintf(stderr, \
|
|
 |
df4b1e |
"usage:\n"\
|
|
 |
df4b1e |
" -f : Start application in foreground.\n"\
|
|
 |
df4b1e |
- " -p : Do not set process priority.\n"\
|
|
 |
df4b1e |
+ " -p : Do not set realtime scheduling.\n"\
|
|
 |
df4b1e |
" -r : Set round robin realtime scheduling (default).\n"\
|
|
 |
df4b1e |
+ " -P num : Set priority of process (no effect when -r is used)\n"\
|
|
 |
df4b1e |
" -t : Test configuration and exit.\n"\
|
|
 |
df4b1e |
" -v : Display version and SVN revision of Corosync and exit.\n");
|
|
 |
df4b1e |
logsys_system_fini();
|
|
 |
df4b1e |
@@ -1179,14 +1206,6 @@ int main (int argc, char **argv, char **envp)
|
|
 |
df4b1e |
}
|
|
 |
df4b1e |
}
|
|
 |
df4b1e |
|
|
 |
df4b1e |
- /*
|
|
 |
df4b1e |
- * Set round robin realtime scheduling with priority 99
|
|
 |
df4b1e |
- * Lock all memory to avoid page faults which may interrupt
|
|
 |
df4b1e |
- * application healthchecking
|
|
 |
df4b1e |
- */
|
|
 |
df4b1e |
- if (setprio) {
|
|
 |
df4b1e |
- corosync_setscheduler ();
|
|
 |
df4b1e |
- }
|
|
 |
df4b1e |
|
|
 |
df4b1e |
/*
|
|
 |
df4b1e |
* Other signals are registered later via qb_loop_signal_add
|
|
 |
df4b1e |
@@ -1293,6 +1312,24 @@ int main (int argc, char **argv, char **envp)
|
|
 |
df4b1e |
corosync_exit_error (COROSYNC_DONE_EXIT);
|
|
 |
df4b1e |
}
|
|
 |
df4b1e |
|
|
 |
df4b1e |
+ /*
|
|
 |
df4b1e |
+ * Set round robin realtime scheduling with priority 99
|
|
 |
df4b1e |
+ */
|
|
 |
df4b1e |
+ if (sched_rr) {
|
|
 |
df4b1e |
+ if (corosync_set_rr_scheduler () != 0) {
|
|
 |
df4b1e |
+ prio = INT_MIN;
|
|
 |
df4b1e |
+ } else {
|
|
 |
df4b1e |
+ prio = 0;
|
|
 |
df4b1e |
+ }
|
|
 |
df4b1e |
+ }
|
|
 |
df4b1e |
+
|
|
 |
df4b1e |
+ if (prio != 0) {
|
|
 |
df4b1e |
+ if (setpriority(PRIO_PGRP, 0, prio) != 0) {
|
|
 |
df4b1e |
+ LOGSYS_PERROR(errno, LOGSYS_LEVEL_WARNING,
|
|
 |
df4b1e |
+ "Could not set priority %d", prio);
|
|
 |
df4b1e |
+ }
|
|
 |
df4b1e |
+ }
|
|
 |
df4b1e |
+
|
|
 |
df4b1e |
ip_version = totem_config.ip_version;
|
|
 |
df4b1e |
|
|
 |
df4b1e |
totem_config.totem_memb_ring_id_create_or_load = corosync_ring_id_create_or_load;
|
|
 |
df4b1e |
@@ -1319,6 +1356,10 @@ int main (int argc, char **argv, char **envp)
|
|
 |
df4b1e |
corosync_tty_detach ();
|
|
 |
df4b1e |
}
|
|
 |
df4b1e |
|
|
 |
df4b1e |
+ /*
|
|
 |
df4b1e |
+ * Lock all memory to avoid page faults which may interrupt
|
|
 |
df4b1e |
+ * application healthchecking
|
|
 |
df4b1e |
+ */
|
|
 |
df4b1e |
corosync_mlockall ();
|
|
 |
df4b1e |
|
|
 |
df4b1e |
corosync_poll_handle = qb_loop_create ();
|
|
 |
df4b1e |
diff --git a/man/corosync.8 b/man/corosync.8
|
|
 |
df4b1e |
index 89ab771..dc596d1 100644
|
|
 |
df4b1e |
--- a/man/corosync.8
|
|
 |
df4b1e |
+++ b/man/corosync.8
|
|
 |
df4b1e |
@@ -1,5 +1,5 @@
|
|
 |
df4b1e |
.\"/*
|
|
 |
df4b1e |
-.\" * Copyright (C) 2010 Red Hat, Inc.
|
|
 |
df4b1e |
+.\" * Copyright (C) 2010-2017 Red Hat, Inc.
|
|
 |
df4b1e |
.\" *
|
|
 |
df4b1e |
.\" * All rights reserved.
|
|
 |
df4b1e |
.\" *
|
|
 |
df4b1e |
@@ -31,11 +31,11 @@
|
|
 |
df4b1e |
.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
 |
df4b1e |
.\" * THE POSSIBILITY OF SUCH DAMAGE.
|
|
 |
df4b1e |
.\" */
|
|
 |
df4b1e |
-.TH COROSYNC 8 2010-05-30
|
|
 |
df4b1e |
+.TH COROSYNC 8 2017-07-07
|
|
 |
df4b1e |
.SH NAME
|
|
 |
df4b1e |
corosync \- The Corosync Cluster Engine.
|
|
 |
df4b1e |
.SH SYNOPSIS
|
|
 |
df4b1e |
-.B "corosync [\-f] [\-p] [\-r] [\-t] [\-v]"
|
|
 |
df4b1e |
+.B "corosync [\-f] [\-P num] [\-p] [\-r] [\-t] [\-v]"
|
|
 |
df4b1e |
.SH DESCRIPTION
|
|
 |
df4b1e |
.B corosync
|
|
 |
df4b1e |
Corosync provides clustering infrastructure such as membership, messaging and quorum.
|
|
 |
df4b1e |
@@ -45,10 +45,22 @@ Corosync provides clustering infrastructure such as membership, messaging and qu
|
|
 |
df4b1e |
Start application in foreground.
|
|
 |
df4b1e |
.TP
|
|
 |
df4b1e |
.B -p
|
|
 |
df4b1e |
-Do not set process priority.
|
|
 |
df4b1e |
+Do not set realtime scheduling.
|
|
 |
df4b1e |
.TP
|
|
 |
df4b1e |
+.B -P
|
|
 |
df4b1e |
+Set priority of process. Has effect only when
|
|
 |
df4b1e |
.B -r
|
|
 |
df4b1e |
-Set round robin realtime scheduling (default).
|
|
 |
df4b1e |
+is not used. Can be ether numeric value with similar meaning as
|
|
 |
df4b1e |
+.BR nice (1)
|
|
 |
df4b1e |
+or
|
|
 |
df4b1e |
+.B max
|
|
 |
df4b1e |
+/
|
|
 |
df4b1e |
+.B min
|
|
 |
df4b1e |
+meaning maximal / minimal priority (so minimal / maximal nice value).
|
|
 |
df4b1e |
+.TP
|
|
 |
df4b1e |
+.B -r
|
|
 |
df4b1e |
+Set round robin realtime scheduling with maximal priority (default). When setting
|
|
 |
df4b1e |
+of scheduler fails, fallback to set maximal priority.
|
|
 |
df4b1e |
.TP
|
|
 |
df4b1e |
.B -t
|
|
 |
df4b1e |
Test configuration and then exit.
|
|
 |
df4b1e |
--
|
|
 |
df4b1e |
1.7.1
|
|
 |
df4b1e |
|