The commit is pushed to "branch-rh7-3.10.0-693.21.1.vz7.47.x-ovz" and will 
appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-693.21.1.vz7.46.7
------>
commit 36b1455dfe00c44327fd78a4850cb627586f96b8
Author: Alexey Kuznetsov <[email protected]>
Date:   Fri Apr 27 12:07:53 2018 +0300

    fuse/kio_pcs: adapt prometheus statistics to current vstorage state
    
    Signed-off-by: Alexey Kuznetsov <[email protected]>
    Signed-off-by: Dmitry Monakhov <[email protected]>
---
 fs/fuse/kio/pcs/fuse_prometheus_prot.h | 25 ++++++++++++++++---------
 fs/fuse/kio/pcs/pcs_cs.c               | 14 ++++----------
 fs/fuse/kio/pcs/pcs_fuse_kdirect.c     | 34 ++++++++++++++++------------------
 3 files changed, 36 insertions(+), 37 deletions(-)

diff --git a/fs/fuse/kio/pcs/fuse_prometheus_prot.h 
b/fs/fuse/kio/pcs/fuse_prometheus_prot.h
index 254fae3ad1eb..e39f2337268f 100644
--- a/fs/fuse/kio/pcs/fuse_prometheus_prot.h
+++ b/fs/fuse/kio/pcs/fuse_prometheus_prot.h
@@ -1,23 +1,30 @@
 #ifndef __FUSE_PROMETHEUS_PROT__
 #define __FUSE_PROMETHEUS_PROT__ 1
 
-#define KFUSE_OP_READ          0
-#define KFUSE_OP_WRITE         1
-#define KFUSE_OP_FSYNC         2
-#define KFUSE_OP_FALLOCATE     3
-#define KFUSE_OP_MAX           4
+#define KFUSE_OP_CS_READ       0
+#define KFUSE_OP_CS_WRITE      1
+#define KFUSE_OP_CS_SYNC       2
+#define KFUSE_OP_CS_WRITE_HOLE 3
+#define KFUSE_OP_CS_WRITE_ZERO 4
+#define KFUSE_OP_CS_FIEMAP     5
 
-#define KFUSE_PROM_MAX         (9*5 + 1)
+#define KFUSE_OP_READ          6
+#define KFUSE_OP_WRITE         7
+#define KFUSE_OP_FSYNC         8
+#define KFUSE_OP_FALLOCATE     9
+#define KFUSE_OP_MAX           10
+
+#define KFUSE_PROM_MAX         (9*5 + 2)
 
 struct kfuse_stat_rec
 {
-       u64     value;
-       u64     count;
+       u64     buckets[KFUSE_PROM_MAX];
+       u64     sum;
 };
 
 struct kfuse_histogram
 {
-       struct kfuse_stat_rec   buckets[KFUSE_OP_MAX][KFUSE_PROM_MAX+1];
+       struct kfuse_stat_rec   metrics[KFUSE_OP_MAX];
 };
 
 #endif /* __FUSE_PROMETHEUS_PROT__ */
diff --git a/fs/fuse/kio/pcs/pcs_cs.c b/fs/fuse/kio/pcs/pcs_cs.c
index d6324d9a90f4..2752658bedab 100644
--- a/fs/fuse/kio/pcs/pcs_cs.c
+++ b/fs/fuse/kio/pcs/pcs_cs.c
@@ -234,21 +234,15 @@ struct pcs_cs *pcs_cs_find_create(struct pcs_cs_set 
*csset, PCS_NODE_ID_T *id, P
        return cs;
 }
 
-static void (*io_times_logger_cb)(struct pcs_int_request *ireq, struct pcs_msg 
*resp, u32 max_iolat, void *ctx) = NULL;
-static void *io_times_logger_ctx = NULL;
-
-void cs_set_io_times_logger(void (*logger)(struct pcs_int_request *ireq, 
struct pcs_msg *resp, u32 max_iolat, void *ctx), void *ctx)
-{
-       io_times_logger_cb = logger;
-       io_times_logger_ctx = ctx;
-}
-
 void cs_log_io_times(struct pcs_int_request * ireq, struct pcs_msg * resp, 
unsigned int max_iolat)
 {
        /* Ugly. Need to move fc ref to get rid of pcs_cluster_core */
        struct fuse_conn * fc = container_of(ireq->cc, struct pcs_fuse_cluster, 
cc)->fc;
+       struct pcs_cs_iohdr * h = (struct pcs_cs_iohdr *)msg_inline_head(resp);
+       int reqt = h->hdr.type != PCS_CS_SYNC_RESP ? ireq->iochunk.direction : 
PCS_REQ_T_SYNC;
+
+       fuse_stat_account(fc, reqt, ktime_sub(ktime_get(), ireq->ts_sent));
        if (fc->ktrace && fc->ktrace_level >= LOG_TRACE) {
-               struct pcs_cs_iohdr * h = (struct pcs_cs_iohdr 
*)msg_inline_head(resp);
                int n = 1;
                struct fuse_trace_hdr * t;
 
diff --git a/fs/fuse/kio/pcs/pcs_fuse_kdirect.c 
b/fs/fuse/kio/pcs/pcs_fuse_kdirect.c
index f35b8975a19b..bae89deffde2 100644
--- a/fs/fuse/kio/pcs/pcs_fuse_kdirect.c
+++ b/fs/fuse/kio/pcs/pcs_fuse_kdirect.c
@@ -1033,27 +1033,25 @@ void fuse_stat_account(struct fuse_conn * fc, int op, 
ktime_t val)
                cpu = get_cpu();
                histp = per_cpu_ptr(tr->prometheus_hist, cpu);
                if (histp && *histp) {
-                       struct kfuse_stat_rec * buckets = (*histp)->buckets[op];
-                       struct kfuse_stat_rec * bucket;
+                       struct kfuse_stat_rec * rec = (*histp)->metrics + op;
+                       int bucket;
                        unsigned long long lat = ktime_to_ns(val)/1000;
 
                        if (lat < 1000)
-                               bucket = buckets + (lat/100);
+                               bucket = (lat/100);
                        else if (lat < 10000)
-                               bucket = buckets + 9*1 + (lat/1000);
+                               bucket = 9*1 + (lat/1000);
                        else if (lat < 100000)
-                               bucket = buckets + 9*2 + (lat/10000);
+                               bucket = 9*2 + (lat/10000);
                        else if (lat < 1000000)
-                               bucket = buckets + 9*3 + (lat/100000);
+                               bucket = 9*3 + (lat/100000);
                        else if (lat < 10000000)
-                               bucket = buckets + 9*4 + (lat/1000000);
+                               bucket = 9*4 + (lat/1000000);
                        else
-                               bucket = buckets + 9*5;
+                               bucket = 9*5 + 1;
 
-                       bucket->value += lat;
-                       bucket->count++;
-                       buckets[KFUSE_PROM_MAX].value += lat;
-                       buckets[KFUSE_PROM_MAX].count++;
+                       rec->buckets[bucket]++;
+                       rec->sum += lat;
                }
                put_cpu();
        }
@@ -1088,10 +1086,10 @@ static ssize_t prometheus_file_read(struct file *filp,
        struct kfuse_histogram * hist;
        int cpu;
 
-       if (*ppos >= KFUSE_PROM_MAX*KFUSE_OP_MAX*sizeof(struct kfuse_stat_rec))
+       if (*ppos >= sizeof(struct kfuse_histogram))
                return 0;
-       if (*ppos + count > KFUSE_PROM_MAX*KFUSE_OP_MAX*sizeof(struct 
kfuse_stat_rec))
-               count = KFUSE_PROM_MAX*KFUSE_OP_MAX*sizeof(struct 
kfuse_stat_rec) - *ppos;
+       if (*ppos + count > sizeof(struct kfuse_histogram))
+               count = sizeof(struct kfuse_histogram) - *ppos;
 
        hist = (void*)get_zeroed_page(GFP_KERNEL);
        if (!hist)
@@ -1107,10 +1105,10 @@ static ssize_t prometheus_file_read(struct file *filp,
                if (histp && *histp) {
                        int i, k;
                        for (i = 0; i < KFUSE_OP_MAX; i++) {
-                               for (k = 0; k < KFUSE_PROM_MAX + 1; k++) {
-                                       hist->buckets[i][k].value += 
(*histp)->buckets[i][k].value;
-                                       hist->buckets[i][k].count += 
(*histp)->buckets[i][k].count;
+                               for (k = 0; k < KFUSE_PROM_MAX; k++) {
+                                       hist->metrics[i].buckets[k] += 
(*histp)->metrics[i].buckets[k];
                                }
+                               hist->metrics[i].sum += 
(*histp)->metrics[i].sum;
                        }
                }
        }
_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to