[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] xentop: Add two more VBD statistics



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1257422458 0
# Node ID ac9d4ba48b8334f0adc3a928be4e48d2e6fdebd1
# Parent  23b43708aad602ce5c24222ef4321c6c65078187
xentop: Add two more VBD statistics

In addition to VBD read/write request#, add VBD read/write sector#
also. It makes VBD throughput observation easier. As the method to get
such info is OS dependent, just Linux version code is added.

Signed-off-by: Yang Xiaowei <xiaowei.yang@xxxxxxxxx>
---
 tools/xenstat/libxenstat/src/xenstat.c       |   12 +++
 tools/xenstat/libxenstat/src/xenstat.h       |    2 
 tools/xenstat/libxenstat/src/xenstat_linux.c |   12 +++
 tools/xenstat/libxenstat/src/xenstat_priv.h  |    2 
 tools/xenstat/xentop/xentop.c                |   97 ++++++++++++++++++++-------
 5 files changed, 100 insertions(+), 25 deletions(-)

diff -r 23b43708aad6 -r ac9d4ba48b83 tools/xenstat/libxenstat/src/xenstat.c
--- a/tools/xenstat/libxenstat/src/xenstat.c    Wed Nov 04 22:32:01 2009 +0000
+++ b/tools/xenstat/libxenstat/src/xenstat.c    Thu Nov 05 12:00:58 2009 +0000
@@ -653,6 +653,18 @@ unsigned long long xenstat_vbd_wr_reqs(x
        return vbd->wr_reqs;
 }
 
+/* Get the number of READ sectors */
+unsigned long long xenstat_vbd_rd_sects(xenstat_vbd * vbd)
+{
+       return vbd->rd_sects;
+}
+
+/* Get the number of WRITE sectors */
+unsigned long long xenstat_vbd_wr_sects(xenstat_vbd * vbd)
+{
+       return vbd->wr_sects;
+}
+
 static char *xenstat_get_domain_name(xenstat_handle *handle, unsigned int 
domain_id)
 {
        char path[80], *vmpath;
diff -r 23b43708aad6 -r ac9d4ba48b83 tools/xenstat/libxenstat/src/xenstat.h
--- a/tools/xenstat/libxenstat/src/xenstat.h    Wed Nov 04 22:32:01 2009 +0000
+++ b/tools/xenstat/libxenstat/src/xenstat.h    Thu Nov 05 12:00:58 2009 +0000
@@ -183,5 +183,7 @@ unsigned long long xenstat_vbd_oo_reqs(x
 unsigned long long xenstat_vbd_oo_reqs(xenstat_vbd * vbd);
 unsigned long long xenstat_vbd_rd_reqs(xenstat_vbd * vbd);
 unsigned long long xenstat_vbd_wr_reqs(xenstat_vbd * vbd);
+unsigned long long xenstat_vbd_rd_sects(xenstat_vbd * vbd);
+unsigned long long xenstat_vbd_wr_sects(xenstat_vbd * vbd);
 
 #endif /* XENSTAT_H */
diff -r 23b43708aad6 -r ac9d4ba48b83 
tools/xenstat/libxenstat/src/xenstat_linux.c
--- a/tools/xenstat/libxenstat/src/xenstat_linux.c      Wed Nov 04 22:32:01 
2009 +0000
+++ b/tools/xenstat/libxenstat/src/xenstat_linux.c      Thu Nov 05 12:00:58 
2009 +0000
@@ -243,6 +243,18 @@ int xenstat_collect_vbds(xenstat_node * 
                        continue;
                }
 
+               if((read_attributes_vbd(dp->d_name, "statistics/rd_sect", buf, 
256)<=0)
+                  || ((ret = sscanf(buf, "%llu", &vbd.rd_sects)) != 1))
+               {
+                       continue;
+               }
+
+               if((read_attributes_vbd(dp->d_name, "statistics/wr_sect", buf, 
256)<=0)
+                  || ((ret = sscanf(buf, "%llu", &vbd.wr_sects)) != 1))
+               {
+                       continue;
+               }
+
                if (domain->vbds == NULL) {
                        domain->num_vbds = 1;
                        domain->vbds = malloc(sizeof(xenstat_vbd));
diff -r 23b43708aad6 -r ac9d4ba48b83 tools/xenstat/libxenstat/src/xenstat_priv.h
--- a/tools/xenstat/libxenstat/src/xenstat_priv.h       Wed Nov 04 22:32:01 
2009 +0000
+++ b/tools/xenstat/libxenstat/src/xenstat_priv.h       Thu Nov 05 12:00:58 
2009 +0000
@@ -92,6 +92,8 @@ struct xenstat_vbd {
        unsigned long long oo_reqs;
        unsigned long long rd_reqs;
        unsigned long long wr_reqs;
+       unsigned long long rd_sects;
+       unsigned long long wr_sects;
 };
 
 extern int xenstat_collect_networks(xenstat_node * node);
diff -r 23b43708aad6 -r ac9d4ba48b83 tools/xenstat/xentop/xentop.c
--- a/tools/xenstat/xentop/xentop.c     Wed Nov 04 22:32:01 2009 +0000
+++ b/tools/xenstat/xentop/xentop.c     Thu Nov 05 12:00:58 2009 +0000
@@ -116,6 +116,10 @@ static void print_vbd_rd(xenstat_domain 
 static void print_vbd_rd(xenstat_domain *domain);
 static int compare_vbd_wr(xenstat_domain *domain1, xenstat_domain *domain2);
 static void print_vbd_wr(xenstat_domain *domain);
+static int compare_vbd_rsect(xenstat_domain *domain1, xenstat_domain *domain2);
+static void print_vbd_rsect(xenstat_domain *domain);
+static int compare_vbd_wsect(xenstat_domain *domain1, xenstat_domain *domain2);
+static void print_vbd_wsect(xenstat_domain *domain);
 
 
 /* Section printing functions */
@@ -147,6 +151,8 @@ typedef enum field_id {
        FIELD_VBD_OO,
        FIELD_VBD_RD,
        FIELD_VBD_WR,
+       FIELD_VBD_RSECT,
+       FIELD_VBD_WSECT,
        FIELD_SSID
 } field_id;
 
@@ -159,23 +165,25 @@ typedef struct field {
 } field;
 
 field fields[] = {
-       { FIELD_NAME,    "NAME",      10, compare_name,    print_name    },
-       { FIELD_STATE,   "STATE",      6, compare_state,   print_state   },
-       { FIELD_CPU,     "CPU(sec)",  10, compare_cpu,     print_cpu     },
-       { FIELD_CPU_PCT, "CPU(%)",     6, compare_cpu_pct, print_cpu_pct },
-       { FIELD_MEM,     "MEM(k)",    10, compare_mem,     print_mem     },
-       { FIELD_MEM_PCT, "MEM(%)",     6, compare_mem,     print_mem_pct },
-       { FIELD_MAXMEM,  "MAXMEM(k)", 10, compare_maxmem,  print_maxmem  },
-       { FIELD_MAX_PCT, "MAXMEM(%)",  9, compare_maxmem,  print_max_pct },
-       { FIELD_VCPUS,   "VCPUS",      5, compare_vcpus,   print_vcpus   },
-       { FIELD_NETS,    "NETS",       4, compare_nets,    print_nets    },
-       { FIELD_NET_TX,  "NETTX(k)",   8, compare_net_tx,  print_net_tx  },
-       { FIELD_NET_RX,  "NETRX(k)",   8, compare_net_rx,  print_net_rx  },
-       { FIELD_VBDS,    "VBDS",       4, compare_vbds,    print_vbds    },
-       { FIELD_VBD_OO,  "VBD_OO",     8, compare_vbd_oo,  print_vbd_oo  },
-       { FIELD_VBD_RD,  "VBD_RD",     8, compare_vbd_rd,  print_vbd_rd  },
-       { FIELD_VBD_WR,  "VBD_WR",     8, compare_vbd_wr,  print_vbd_wr  },
-       { FIELD_SSID,    "SSID",       4, compare_ssid,    print_ssid    }
+       { FIELD_NAME,      "NAME",      10, compare_name,      print_name    },
+       { FIELD_STATE,     "STATE",      6, compare_state,     print_state   },
+       { FIELD_CPU,       "CPU(sec)",  10, compare_cpu,       print_cpu     },
+       { FIELD_CPU_PCT,   "CPU(%)",     6, compare_cpu_pct,   print_cpu_pct },
+       { FIELD_MEM,       "MEM(k)",    10, compare_mem,       print_mem     },
+       { FIELD_MEM_PCT,   "MEM(%)",     6, compare_mem,       print_mem_pct },
+       { FIELD_MAXMEM,    "MAXMEM(k)", 10, compare_maxmem,    print_maxmem  },
+       { FIELD_MAX_PCT,   "MAXMEM(%)",  9, compare_maxmem,    print_max_pct },
+       { FIELD_VCPUS,     "VCPUS",      5, compare_vcpus,     print_vcpus   },
+       { FIELD_NETS,      "NETS",       4, compare_nets,      print_nets    },
+       { FIELD_NET_TX,    "NETTX(k)",   8, compare_net_tx,    print_net_tx  },
+       { FIELD_NET_RX,    "NETRX(k)",   8, compare_net_rx,    print_net_rx  },
+       { FIELD_VBDS,      "VBDS",       4, compare_vbds,      print_vbds    },
+       { FIELD_VBD_OO,    "VBD_OO",     8, compare_vbd_oo,    print_vbd_oo  },
+       { FIELD_VBD_RD,    "VBD_RD",     8, compare_vbd_rd,    print_vbd_rd  },
+       { FIELD_VBD_WR,    "VBD_WR",     8, compare_vbd_wr,    print_vbd_wr  },
+       { FIELD_VBD_RSECT, "VBD_RSECT", 10, compare_vbd_rsect, print_vbd_rsect  
},
+       { FIELD_VBD_WSECT, "VBD_WSECT", 10, compare_vbd_wsect, print_vbd_wsect  
},
+       { FIELD_SSID,      "SSID",       4, compare_ssid,      print_ssid    }
 };
 
 const unsigned int NUM_FIELDS = sizeof(fields)/sizeof(field);
@@ -685,20 +693,51 @@ static void print_vbd_rd(xenstat_domain 
    returning -1,0,1 * for <,=,> */
 static int compare_vbd_wr(xenstat_domain *domain1, xenstat_domain *domain2)
 {
-       return -compare(tot_vbd_reqs(domain1,FIELD_VBD_WR),
-                       tot_vbd_reqs(domain2,FIELD_VBD_WR));
+       return -compare(tot_vbd_reqs(domain1, FIELD_VBD_WR),
+                       tot_vbd_reqs(domain2, FIELD_VBD_WR));
 }
 
 /* Prints number of total VBD WRITE requests statistic */
 static void print_vbd_wr(xenstat_domain *domain)
 {
-       print("%8llu", tot_vbd_reqs(domain,FIELD_VBD_WR));
-}
+       print("%8llu", tot_vbd_reqs(domain, FIELD_VBD_WR));
+}
+
+/* Compares number of total VBD READ sectors of two domains,
+   returning -1,0,1 * for <,=,> */
+static int compare_vbd_rsect(xenstat_domain *domain1, xenstat_domain *domain2)
+{
+       return -compare(tot_vbd_reqs(domain1, FIELD_VBD_RSECT),
+                       tot_vbd_reqs(domain2, FIELD_VBD_RSECT));
+}
+
+/* Prints number of total VBD READ sectors statistic */
+static void print_vbd_rsect(xenstat_domain *domain)
+{
+       print("%10llu", tot_vbd_reqs(domain, FIELD_VBD_RSECT));
+}
+
+/* Compares number of total VBD WRITE sectors of two domains,
+   returning -1,0,1 * for <,=,> */
+static int compare_vbd_wsect(xenstat_domain *domain1, xenstat_domain *domain2)
+{
+       return -compare(tot_vbd_reqs(domain1, FIELD_VBD_WSECT),
+                       tot_vbd_reqs(domain2, FIELD_VBD_WSECT));
+}
+
+/* Prints number of total VBD WRITE sectors statistic */
+static void print_vbd_wsect(xenstat_domain *domain)
+{
+       print("%10llu", tot_vbd_reqs(domain, FIELD_VBD_WSECT));
+}
+
 
 /* Gets number of total VBD requests statistic, 
  *   if flag is FIELD_VBD_OO, then OO requests,
- *   if flag is FIELD_VBD_RD, then READ requests and
- *   if flag is FIELD_VBD_WR, then WRITE requests.
+ *   if flag is FIELD_VBD_RD, then READ requests,
+ *   if flag is FIELD_VBD_WR, then WRITE requests,
+ *   if flag is FIELD_VBD_RSECT, then READ sectors,
+ *   if flag is FIELD_VBD_WSECT, then WRITE sectors.
  */
 static unsigned long long tot_vbd_reqs(xenstat_domain *domain, int flag)
 {
@@ -721,6 +760,12 @@ static unsigned long long tot_vbd_reqs(x
                case FIELD_VBD_WR:
                        total += xenstat_vbd_wr_reqs(vbd);
                        break;
+               case FIELD_VBD_RSECT:
+                       total += xenstat_vbd_rd_sects(vbd);
+                       break;
+               case FIELD_VBD_WSECT:
+                       total += xenstat_vbd_wr_sects(vbd);
+                       break;
                default:
                        break;
                }
@@ -950,12 +995,14 @@ void do_vbd(xenstat_domain *domain)
                         MINOR(xenstat_vbd_dev(vbd)));
 #endif
 
-               print("VBD %s %4d %s OO: %8llu   RD: %8llu   WR: %8llu\n",
+               print("VBD %s %4d %s OO: %8llu   RD: %8llu   WR: %8llu   RSECT: 
%10llu   WSECT: %10llu\n",
                      vbd_type[xenstat_vbd_type(vbd)],
                      xenstat_vbd_dev(vbd), details,
                      xenstat_vbd_oo_reqs(vbd),
                      xenstat_vbd_rd_reqs(vbd),
-                     xenstat_vbd_wr_reqs(vbd));
+                     xenstat_vbd_wr_reqs(vbd),
+                     xenstat_vbd_rd_sects(vbd),
+                     xenstat_vbd_wr_sects(vbd));
        }
 }
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.