1 /* libxenstat: statistics-collection library for Xen 2 * Copyright (C) International Business Machines Corp., 2005 3 * Authors: Josh Triplett <josh@kernel.org> 4 * Judy Fischbach <jfisch@cs.pdx.edu> 5 * David Hendricks <cro_marmot@comcast.net> 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 */ 17 18 /* libxenstat API */ 19 20 #ifndef XENSTAT_H 21 #define XENSTAT_H 22 23 #include <stdbool.h> 24 25 /* Opaque handles */ 26 typedef struct xenstat_handle xenstat_handle; 27 typedef struct xenstat_domain xenstat_domain; 28 typedef struct xenstat_node xenstat_node; 29 typedef struct xenstat_vcpu xenstat_vcpu; 30 typedef struct xenstat_network xenstat_network; 31 typedef struct xenstat_vbd xenstat_vbd; 32 33 /* Initialize the xenstat library. Returns a handle to be used with 34 * subsequent calls to the xenstat library, or NULL if an error occurs. */ 35 xenstat_handle *xenstat_init(void); 36 37 /* Release the handle to libxc, free resources, etc. */ 38 void xenstat_uninit(xenstat_handle * handle); 39 40 /* Flags for types of information to collect in xenstat_get_node */ 41 #define XENSTAT_VCPU 0x1 42 #define XENSTAT_NETWORK 0x2 43 #define XENSTAT_XEN_VERSION 0x4 44 #define XENSTAT_VBD 0x8 45 #define XENSTAT_ALL (XENSTAT_VCPU|XENSTAT_NETWORK|XENSTAT_XEN_VERSION|XENSTAT_VBD) 46 47 /* Get all available information about a node */ 48 xenstat_node *xenstat_get_node(xenstat_handle * handle, unsigned int flags); 49 50 /* Free the information */ 51 void xenstat_free_node(xenstat_node * node); 52 53 /* 54 * Node functions - extract information from a xenstat_node 55 */ 56 57 /* Get information about the domain with the given domain ID */ 58 xenstat_domain *xenstat_node_domain(xenstat_node * node, 59 unsigned int domid); 60 61 /* Get the domain with the given index; used to loop over all domains. */ 62 xenstat_domain *xenstat_node_domain_by_index(xenstat_node * node, 63 unsigned index); 64 65 /* Get xen version of the node */ 66 const char *xenstat_node_xen_version(xenstat_node * node); 67 68 /* Get amount of total memory on a node */ 69 unsigned long long xenstat_node_tot_mem(xenstat_node * node); 70 71 /* Get amount of free memory on a node */ 72 unsigned long long xenstat_node_free_mem(xenstat_node * node); 73 74 /* Find the number of domains existing on a node */ 75 unsigned int xenstat_node_num_domains(xenstat_node * node); 76 77 /* Find the number of CPUs existing on a node */ 78 unsigned int xenstat_node_num_cpus(xenstat_node * node); 79 80 /* Get information about the CPU speed */ 81 unsigned long long xenstat_node_cpu_hz(xenstat_node * node); 82 83 /* 84 * Domain functions - extract information from a xenstat_domain 85 */ 86 87 /* Get the domain ID for this domain */ 88 unsigned xenstat_domain_id(xenstat_domain * domain); 89 90 /* Set the domain name for the domain */ 91 char *xenstat_domain_name(xenstat_domain * domain); 92 93 /* Get information about how much CPU time has been used */ 94 unsigned long long xenstat_domain_cpu_ns(xenstat_domain * domain); 95 96 /* Find the number of VCPUs allocated to a domain */ 97 unsigned int xenstat_domain_num_vcpus(xenstat_domain * domain); 98 99 /* Get the VCPU handle to obtain VCPU stats */ 100 xenstat_vcpu *xenstat_domain_vcpu(xenstat_domain * domain, 101 unsigned int vcpu); 102 103 /* Find the current memory reservation for this domain */ 104 unsigned long long xenstat_domain_cur_mem(xenstat_domain * domain); 105 106 /* Find the maximum memory reservation for this domain */ 107 unsigned long long xenstat_domain_max_mem(xenstat_domain * domain); 108 109 /* Find the domain's SSID */ 110 unsigned int xenstat_domain_ssid(xenstat_domain * domain); 111 112 /* Get domain states */ 113 unsigned int xenstat_domain_dying(xenstat_domain * domain); 114 unsigned int xenstat_domain_crashed(xenstat_domain * domain); 115 unsigned int xenstat_domain_shutdown(xenstat_domain * domain); 116 unsigned int xenstat_domain_paused(xenstat_domain * domain); 117 unsigned int xenstat_domain_blocked(xenstat_domain * domain); 118 unsigned int xenstat_domain_running(xenstat_domain * domain); 119 120 /* Get the number of networks for a given domain */ 121 unsigned int xenstat_domain_num_networks(xenstat_domain *); 122 123 /* Get the network handle to obtain network stats */ 124 xenstat_network *xenstat_domain_network(xenstat_domain * domain, 125 unsigned int network); 126 127 /* Get the number of VBDs for a given domain */ 128 unsigned int xenstat_domain_num_vbds(xenstat_domain *); 129 130 /* Get the VBD handle to obtain VBD stats */ 131 xenstat_vbd *xenstat_domain_vbd(xenstat_domain * domain, 132 unsigned int vbd); 133 134 /* 135 * VCPU functions - extract information from a xenstat_vcpu 136 */ 137 138 /* Get VCPU usage */ 139 unsigned int xenstat_vcpu_online(xenstat_vcpu * vcpu); 140 unsigned long long xenstat_vcpu_ns(xenstat_vcpu * vcpu); 141 142 143 /* 144 * Network functions - extract information from a xenstat_network 145 */ 146 147 /* Get the ID for this network */ 148 unsigned int xenstat_network_id(xenstat_network * network); 149 150 /* Get the number of receive bytes for this network */ 151 unsigned long long xenstat_network_rbytes(xenstat_network * network); 152 153 /* Get the number of receive packets for this network */ 154 unsigned long long xenstat_network_rpackets(xenstat_network * network); 155 156 /* Get the number of receive errors for this network */ 157 unsigned long long xenstat_network_rerrs(xenstat_network * network); 158 159 /* Get the number of receive drops for this network */ 160 unsigned long long xenstat_network_rdrop(xenstat_network * network); 161 162 /* Get the number of transmit bytes for this network */ 163 unsigned long long xenstat_network_tbytes(xenstat_network * network); 164 165 /* Get the number of transmit packets for this network */ 166 unsigned long long xenstat_network_tpackets(xenstat_network * network); 167 168 /* Get the number of transmit errors for this network */ 169 unsigned long long xenstat_network_terrs(xenstat_network * network); 170 171 /* Get the number of transmit drops for this network */ 172 unsigned long long xenstat_network_tdrop(xenstat_network * network); 173 174 /* 175 * VBD functions - extract information from a xen_vbd 176 */ 177 178 /* Get the back driver type for Virtual Block Device */ 179 unsigned int xenstat_vbd_type(xenstat_vbd * vbd); 180 181 /* Get the device number for Virtual Block Device */ 182 unsigned int xenstat_vbd_dev(xenstat_vbd * vbd); 183 184 /* Get the number of OO/RD/WR requests for vbd */ 185 unsigned long long xenstat_vbd_oo_reqs(xenstat_vbd * vbd); 186 unsigned long long xenstat_vbd_rd_reqs(xenstat_vbd * vbd); 187 unsigned long long xenstat_vbd_wr_reqs(xenstat_vbd * vbd); 188 unsigned long long xenstat_vbd_rd_sects(xenstat_vbd * vbd); 189 unsigned long long xenstat_vbd_wr_sects(xenstat_vbd * vbd); 190 191 /* Returns error while getting stats (1 if error happened, 0 otherwise) */ 192 bool xenstat_vbd_error(xenstat_vbd * vbd); 193 194 #endif /* XENSTAT_H */ 195