[dm-devel] [PATCH] multipath-tools: beautify path_latency.c code
Xose Vazquez Perez
xose.vazquez at gmail.com
Thu Jun 22 16:46:23 UTC 2017
Mainly running scripts/Lindent, from kernel dir, to replace indent spaces
by tabs.
Cc: Yang Feng <philip.yang at huawei.com>
Cc: Christophe Varoqui <christophe.varoqui at opensvc.com>
Cc: device-mapper development <dm-devel at redhat.com>
Signed-off-by: Xose Vazquez Perez <xose.vazquez at gmail.com>
---
libmultipath/prioritizers/path_latency.c | 354 +++++++++++++++----------------
1 file changed, 177 insertions(+), 177 deletions(-)
diff --git a/libmultipath/prioritizers/path_latency.c b/libmultipath/prioritizers/path_latency.c
index 34b734b..9fc2dfc 100644
--- a/libmultipath/prioritizers/path_latency.c
+++ b/libmultipath/prioritizers/path_latency.c
@@ -17,8 +17,8 @@
* Author(s): Yang Feng <philip.yang at huawei.com>
*
* This file is released under the GPL version 2, or any later version.
- *
*/
+
#include <stdio.h>
#include <math.h>
#include <ctype.h>
@@ -31,27 +31,28 @@
#define pp_pl_log(prio, fmt, args...) condlog(prio, "path_latency prio: " fmt, ##args)
-#define MAX_IO_NUM 200
-#define MIN_IO_NUM 2
+#define MAX_IO_NUM 200
+#define MIN_IO_NUM 2
-#define MAX_BASE_NUM 10
-#define MIN_BASE_NUM 2
+#define MAX_BASE_NUM 10
+#define MIN_BASE_NUM 2
-#define MAX_AVG_LATENCY 100000000. /*Unit: us*/
-#define MIN_AVG_LATENCY 1. /*Unit: us*/
+#define MAX_AVG_LATENCY 100000000. /* Unit: us */
+#define MIN_AVG_LATENCY 1. /* Unit: us */
-#define DEFAULT_PRIORITY 0
+#define DEFAULT_PRIORITY 0
-#define MAX_CHAR_SIZE 30
+#define MAX_CHAR_SIZE 30
-#define USEC_PER_SEC 1000000LL
-#define NSEC_PER_USEC 1000LL
+#define USEC_PER_SEC 1000000LL
+#define NSEC_PER_USEC 1000LL
static long long path_latency[MAX_IO_NUM];
static inline long long timeval_to_us(const struct timespec *tv)
{
- return ((long long) tv->tv_sec * USEC_PER_SEC) + (tv->tv_nsec / NSEC_PER_USEC);
+ return ((long long)tv->tv_sec * USEC_PER_SEC) +
+ (tv->tv_nsec / NSEC_PER_USEC);
}
static int do_readsector0(int fd, unsigned int timeout)
@@ -60,198 +61,197 @@ static int do_readsector0(int fd, unsigned int timeout)
unsigned char sbuf[SENSE_BUFF_LEN];
int ret;
- ret = sg_read(fd, &buf[0], 4096, &sbuf[0],
- SENSE_BUFF_LEN, timeout);
+ ret = sg_read(fd, &buf[0], 4096, &sbuf[0], SENSE_BUFF_LEN, timeout);
return ret;
}
int check_args_valid(int io_num, int base_num)
{
- if ((io_num < MIN_IO_NUM) || (io_num > MAX_IO_NUM))
- {
- pp_pl_log(0, "args io_num is outside the valid range");
- return 0;
- }
-
- if ((base_num < MIN_BASE_NUM) || (base_num > MAX_BASE_NUM))
- {
- pp_pl_log(0, "args base_num is outside the valid range");
- return 0;
- }
-
- return 1;
+ if ((io_num < MIN_IO_NUM) || (io_num > MAX_IO_NUM)) {
+ pp_pl_log(0, "args io_num is outside the valid range");
+ return 0;
+ }
+
+ if ((base_num < MIN_BASE_NUM) || (base_num > MAX_BASE_NUM)) {
+ pp_pl_log(0, "args base_num is outside the valid range");
+ return 0;
+ }
+
+ return 1;
}
-/* In multipath.conf, args form: io_num|base_num. For example,
-* args is "20|10", this function can get io_num value 20, and
- base_num value 10.
-*/
-static int get_ionum_and_basenum(char *args,
- int *ionum,
- int *basenum)
+/*
+ * In multipath.conf, args form: io_num|base_num. For example,
+ * args is "20|10", this function can get io_num value 20, and
+ * base_num value 10.
+ */
+static int get_ionum_and_basenum(char *args, int *ionum, int *basenum)
{
- char source[MAX_CHAR_SIZE];
- char vertica = '|';
- char *endstrbefore = NULL;
- char *endstrafter = NULL;
- unsigned int size = strlen(args);
-
- if ((args == NULL) || (ionum == NULL) || (basenum == NULL))
- {
- pp_pl_log(0, "args string is NULL");
- return 0;
- }
-
- if ((size < 1) || (size > MAX_CHAR_SIZE-1))
- {
- pp_pl_log(0, "args string's size is too long");
- return 0;
- }
-
- memcpy(source, args, size+1);
-
- if (!isdigit(source[0]))
- {
- pp_pl_log(0, "invalid prio_args format: %s", source);
- return 0;
- }
-
- *ionum = (int)strtoul(source, &endstrbefore, 10);
- if (endstrbefore[0] != vertica)
- {
- pp_pl_log(0, "invalid prio_args format: %s", source);
- return 0;
- }
-
- if (!isdigit(endstrbefore[1]))
- {
- pp_pl_log(0, "invalid prio_args format: %s", source);
- return 0;
- }
-
- *basenum = (long long)strtol(&endstrbefore[1], &endstrafter, 10);
- if (check_args_valid(*ionum, *basenum) == 0)
- {
- return 0;
- }
-
- return 1;
+ char source[MAX_CHAR_SIZE];
+ char vertica = '|';
+ char *endstrbefore = NULL;
+ char *endstrafter = NULL;
+ unsigned int size = strlen(args);
+
+ if ((args == NULL) || (ionum == NULL) || (basenum == NULL)) {
+ pp_pl_log(0, "args string is NULL");
+ return 0;
+ }
+
+ if ((size < 1) || (size > MAX_CHAR_SIZE - 1)) {
+ pp_pl_log(0, "args string's size is too long");
+ return 0;
+ }
+
+ memcpy(source, args, size + 1);
+
+ if (!isdigit(source[0])) {
+ pp_pl_log(0, "invalid prio_args format: %s", source);
+ return 0;
+ }
+
+ *ionum = (int)strtoul(source, &endstrbefore, 10);
+ if (endstrbefore[0] != vertica) {
+ pp_pl_log(0, "invalid prio_args format: %s", source);
+ return 0;
+ }
+
+ if (!isdigit(endstrbefore[1])) {
+ pp_pl_log(0, "invalid prio_args format: %s", source);
+ return 0;
+ }
+
+ *basenum = (long long)strtol(&endstrbefore[1], &endstrafter, 10);
+ if (check_args_valid(*ionum, *basenum) == 0) {
+ return 0;
+ }
+
+ return 1;
}
-long long calc_standard_deviation(long long *path_latency, int size, long long avglatency)
+long long calc_standard_deviation(long long *path_latency, int size,
+ long long avglatency)
{
- int index;
- long long total = 0;
+ int index;
+ long long total = 0;
- for (index = 0; index < size; index++)
- {
- total += (path_latency[index] - avglatency) * (path_latency[index] - avglatency);
- }
+ for (index = 0; index < size; index++) {
+ total +=
+ (path_latency[index] - avglatency) * (path_latency[index] -
+ avglatency);
+ }
- total /= (size-1);
+ total /= (size - 1);
- return (long long)sqrt((double)total);
+ return (long long)sqrt((double)total);
}
-int calcPrio(double avglatency, double max_avglatency, double min_avglatency, double base_num)
+int calcPrio(double avglatency, double max_avglatency, double min_avglatency,
+ double base_num)
{
- double lavglatency = log(avglatency)/log(base_num);
- double lmax_avglatency = log(max_avglatency)/log(base_num);
- double lmin_avglatency = log(min_avglatency)/log(base_num);
+ double lavglatency = log(avglatency) / log(base_num);
+ double lmax_avglatency = log(max_avglatency) / log(base_num);
+ double lmin_avglatency = log(min_avglatency) / log(base_num);
- if (lavglatency <= lmin_avglatency)
- return (int)(lmax_avglatency + 1.);
+ if (lavglatency <= lmin_avglatency)
+ return (int)(lmax_avglatency + 1.);
- if (lavglatency > lmax_avglatency)
- return 0;
+ if (lavglatency > lmax_avglatency)
+ return 0;
- return (int)(lmax_avglatency - lavglatency + 1.);
+ return (int)(lmax_avglatency - lavglatency + 1.);
}
/* Calc the latency interval corresponding to the average latency */
long long calc_latency_interval(double avglatency, double max_avglatency,
- double min_avglatency, double base_num)
+ double min_avglatency, double base_num)
{
- double lavglatency = log(avglatency)/log(base_num);
- double lmax_avglatency = log(max_avglatency)/log(base_num);
- double lmin_avglatency = log(min_avglatency)/log(base_num);
-
- if ((lavglatency <= lmin_avglatency)
- || (lavglatency > lmax_avglatency))
- return 0;/* Invalid value */
-
- if ((double)((int)lavglatency) == lavglatency)
- return (long long)(avglatency - (avglatency / base_num));
- else
- return (long long)(pow(base_num, (double)((int)lavglatency + 1))
- - pow(base_num, (double)((int)lavglatency)));
+ double lavglatency = log(avglatency) / log(base_num);
+ double lmax_avglatency = log(max_avglatency) / log(base_num);
+ double lmin_avglatency = log(min_avglatency) / log(base_num);
+
+ if ((lavglatency <= lmin_avglatency)
+ || (lavglatency > lmax_avglatency))
+ return 0; /* Invalid value */
+
+ if ((double)((int)lavglatency) == lavglatency)
+ return (long long)(avglatency - (avglatency / base_num));
+ else
+ return (long long)(pow(base_num, (double)((int)lavglatency + 1))
+ - pow(base_num, (double)((int)lavglatency)));
}
-int getprio (struct path *pp, char *args, unsigned int timeout)
+int getprio(struct path *pp, char *args, unsigned int timeout)
{
- int rc, temp;
- int index = 0;
- int io_num;
- int base_num;
- long long avglatency;
- long long latency_interval;
- long long standard_deviation;
- long long toldelay = 0;
- long long before, after;
- struct timespec tv;
-
- if (pp->fd < 0)
- return -1;
-
- if (get_ionum_and_basenum(args, &io_num, &base_num) == 0)
- {
- pp_pl_log(0, "%s: get path_latency args fail", pp->dev);
- return DEFAULT_PRIORITY;
- }
-
- memset(path_latency, 0, sizeof(path_latency));
-
- temp = io_num;
- while (temp-- > 0)
- {
- (void)clock_gettime(CLOCK_MONOTONIC, &tv);
- before = timeval_to_us(&tv);
-
- if (do_readsector0(pp->fd, timeout) == 2)
- {
- pp_pl_log(0, "%s: path down", pp->dev);
- return -1;
- }
-
- (void)clock_gettime(CLOCK_MONOTONIC, &tv);
- after = timeval_to_us(&tv);
-
- path_latency[index] = after - before;
- toldelay += path_latency[index++];
- }
-
- avglatency = toldelay/(long long)io_num;
- pp_pl_log(4, "%s: average latency is (%lld us)", pp->dev, avglatency);
-
- if (avglatency > MAX_AVG_LATENCY)
- {
- pp_pl_log(0, "%s: average latency (%lld us) is outside the thresold (%lld us)",
- pp->dev, avglatency, (long long)MAX_AVG_LATENCY);
- return DEFAULT_PRIORITY;
- }
-
- /* Min average latency and max average latency are constant, the args base_num
- set can change latency_interval value corresponding to avglatency and is not constant.
- Warn the user if latency_interval is smaller than (2 * standard_deviation), or equal */
- standard_deviation = calc_standard_deviation(path_latency, index, avglatency);
- latency_interval = calc_latency_interval(avglatency, MAX_AVG_LATENCY, MIN_AVG_LATENCY, base_num);
- if ((latency_interval!= 0)
- && (latency_interval <= (2 * standard_deviation)))
- pp_pl_log(3, "%s: latency interval (%lld) according to average latency (%lld us) is smaller than "
- "2 * standard deviation (%lld us), or equal, args base_num (%d) needs to be set bigger value",
- pp->dev, latency_interval, avglatency, standard_deviation, base_num);
-
- rc = calcPrio(avglatency, MAX_AVG_LATENCY, MIN_AVG_LATENCY, base_num);
- return rc;
+ int rc, temp;
+ int index = 0;
+ int io_num;
+ int base_num;
+ long long avglatency;
+ long long latency_interval;
+ long long standard_deviation;
+ long long toldelay = 0;
+ long long before, after;
+ struct timespec tv;
+
+ if (pp->fd < 0)
+ return -1;
+
+ if (get_ionum_and_basenum(args, &io_num, &base_num) == 0) {
+ pp_pl_log(0, "%s: get path_latency args fail", pp->dev);
+ return DEFAULT_PRIORITY;
+ }
+
+ memset(path_latency, 0, sizeof(path_latency));
+
+ temp = io_num;
+ while (temp-- > 0) {
+ (void)clock_gettime(CLOCK_MONOTONIC, &tv);
+ before = timeval_to_us(&tv);
+
+ if (do_readsector0(pp->fd, timeout) == 2) {
+ pp_pl_log(0, "%s: path down", pp->dev);
+ return -1;
+ }
+
+ (void)clock_gettime(CLOCK_MONOTONIC, &tv);
+ after = timeval_to_us(&tv);
+
+ path_latency[index] = after - before;
+ toldelay += path_latency[index++];
+ }
+
+ avglatency = toldelay / (long long)io_num;
+ pp_pl_log(4, "%s: average latency is (%lld us)", pp->dev, avglatency);
+
+ if (avglatency > MAX_AVG_LATENCY) {
+ pp_pl_log(0,
+ "%s: average latency (%lld us) is outside the thresold (%lld us)",
+ pp->dev, avglatency, (long long)MAX_AVG_LATENCY);
+ return DEFAULT_PRIORITY;
+ }
+
+ /*
+ * Min average latency and max average latency are constant, the args
+ * base_num set can change latency_interval value corresponding to
+ * avglatency and is not constant.
+ * Warn the user if latency_interval is smaller than (2 * standard_deviation),
+ * or equal.
+ */
+ standard_deviation =
+ calc_standard_deviation(path_latency, index, avglatency);
+ latency_interval =
+ calc_latency_interval(avglatency, MAX_AVG_LATENCY, MIN_AVG_LATENCY,
+ base_num);
+ if ((latency_interval != 0)
+ && (latency_interval <= (2 * standard_deviation)))
+ pp_pl_log(3,
+ "%s: latency interval (%lld) according to average latency (%lld us) is smaller than "
+ "2 * standard deviation (%lld us), or equal, args base_num (%d) needs to be set bigger value",
+ pp->dev, latency_interval, avglatency,
+ standard_deviation, base_num);
+
+ rc = calcPrio(avglatency, MAX_AVG_LATENCY, MIN_AVG_LATENCY, base_num);
+ return rc;
}
--
2.13.1
More information about the dm-devel
mailing list