⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xenstat.c

📁 xen 3.2.2 源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	return domain->num_vcpus;}xenstat_vcpu *xenstat_domain_vcpu(xenstat_domain * domain, unsigned int vcpu){	if (0 <= vcpu && vcpu < domain->num_vcpus)		return &(domain->vcpus[vcpu]);	return NULL;}/* Find the current memory reservation for this domain */unsigned long long xenstat_domain_cur_mem(xenstat_domain * domain){	return domain->cur_mem;}/* Find the maximum memory reservation for this domain */unsigned long long xenstat_domain_max_mem(xenstat_domain * domain){	return domain->max_mem;}/* Find the domain's SSID */unsigned int xenstat_domain_ssid(xenstat_domain * domain){	return domain->ssid;}/* Get domain states */unsigned int xenstat_domain_dying(xenstat_domain * domain){	return (domain->state & XEN_DOMINF_dying) == XEN_DOMINF_dying;}unsigned int xenstat_domain_crashed(xenstat_domain * domain){	return ((domain->state & XEN_DOMINF_shutdown) == XEN_DOMINF_shutdown)	    && (((domain->state >> XEN_DOMINF_shutdownshift)		 & XEN_DOMINF_shutdownmask) == SHUTDOWN_crash);}unsigned int xenstat_domain_shutdown(xenstat_domain * domain){	return ((domain->state & XEN_DOMINF_shutdown) == XEN_DOMINF_shutdown)	    && (((domain->state >> XEN_DOMINF_shutdownshift)		 & XEN_DOMINF_shutdownmask) != SHUTDOWN_crash);}unsigned int xenstat_domain_paused(xenstat_domain * domain){	return (domain->state & XEN_DOMINF_paused) == XEN_DOMINF_paused;}unsigned int xenstat_domain_blocked(xenstat_domain * domain){	return (domain->state & XEN_DOMINF_blocked) == XEN_DOMINF_blocked;}unsigned int xenstat_domain_running(xenstat_domain * domain){	return (domain->state & XEN_DOMINF_running) == XEN_DOMINF_running;}/* Get the number of networks for a given domain */unsigned int xenstat_domain_num_networks(xenstat_domain * domain){	return domain->num_networks;}/* Get the network handle to obtain network stats */xenstat_network *xenstat_domain_network(xenstat_domain * domain,					unsigned int network){	if (domain->networks && 0 <= network && network < domain->num_networks)		return &(domain->networks[network]);	return NULL;}/* Get the number of VBDs for a given domain */unsigned int xenstat_domain_num_vbds(xenstat_domain * domain){	return domain->num_vbds;}/* Get the VBD handle to obtain VBD stats */xenstat_vbd *xenstat_domain_vbd(xenstat_domain * domain,				unsigned int vbd){	if (domain->vbds && 0 <= vbd && vbd < domain->num_vbds)		return &(domain->vbds[vbd]);	return NULL;}/* * VCPU functions *//* Collect information about VCPUs */static int xenstat_collect_vcpus(xenstat_node * node){	unsigned int i, vcpu, inc_index;	/* Fill in VCPU information */	for (i = 0; i < node->num_domains; i+=inc_index) {		inc_index = 1; /* default is to increment to next domain */		node->domains[i].vcpus = malloc(node->domains[i].num_vcpus						* sizeof(xenstat_vcpu));		if (node->domains[i].vcpus == NULL)			return 0;			for (vcpu = 0; vcpu < node->domains[i].num_vcpus; vcpu++) {			/* FIXME: need to be using a more efficient mechanism*/			xc_vcpuinfo_t info;			if (xc_vcpu_getinfo(node->handle->xc_handle,					    node->domains[i].id, vcpu, &info) != 0) {				if (errno == ENOMEM) {					/* fatal error */ 					return 0;				}				else {					/* domain is in transition - remove					   from list */					xenstat_prune_domain(node, i);					/* remember not to increment index! */					inc_index = 0;					break;				}			}			else {				node->domains[i].vcpus[vcpu].online = info.online;				node->domains[i].vcpus[vcpu].ns = info.cpu_time;			}		}	}	return 1;}/* Free VCPU information */static void xenstat_free_vcpus(xenstat_node * node){	unsigned int i;	for (i = 0; i < node->num_domains; i++)		free(node->domains[i].vcpus);}/* Free VCPU information in handle - nothing to do */static void xenstat_uninit_vcpus(xenstat_handle * handle){}/* Get VCPU online status */unsigned int xenstat_vcpu_online(xenstat_vcpu * vcpu){	return vcpu->online;}/* Get VCPU usage */unsigned long long xenstat_vcpu_ns(xenstat_vcpu * vcpu){	return vcpu->ns;}/* * Network functions *//* Free network information */static void xenstat_free_networks(xenstat_node * node){	unsigned int i;	for (i = 0; i < node->num_domains; i++)		free(node->domains[i].networks);}/* Get the network ID */unsigned int xenstat_network_id(xenstat_network * network){	return network->id;}/* Get the number of receive bytes */unsigned long long xenstat_network_rbytes(xenstat_network * network){	return network->rbytes;}/* Get the number of receive packets */unsigned long long xenstat_network_rpackets(xenstat_network * network){	return network->rpackets;}/* Get the number of receive errors */unsigned long long xenstat_network_rerrs(xenstat_network * network){	return network->rerrs;}/* Get the number of receive drops */unsigned long long xenstat_network_rdrop(xenstat_network * network){	return network->rdrop;}/* Get the number of transmit bytes */unsigned long long xenstat_network_tbytes(xenstat_network * network){	return network->tbytes;}/* Get the number of transmit packets */unsigned long long xenstat_network_tpackets(xenstat_network * network){	return network->tpackets;}/* Get the number of transmit errors */unsigned long long xenstat_network_terrs(xenstat_network * network){	return network->terrs;}/* Get the number of transmit dropped packets */unsigned long long xenstat_network_tdrop(xenstat_network * network){	return network->tdrop;}/* * Xen version functions *//* Collect Xen version information */static int xenstat_collect_xen_version(xenstat_node * node){	long vnum = 0;	xen_extraversion_t version;	/* Collect Xen version information if not already collected */	if (node->handle->xen_version[0] == '\0') {		/* Get the Xen version number and extraversion string */		vnum = xc_version(node->handle->xc_handle,			XENVER_version, NULL);		if (vnum < 0)			return 0;		if (xc_version(node->handle->xc_handle, XENVER_extraversion,			&version) < 0)			return 0;		/* Format the version information as a string and store it */		snprintf(node->handle->xen_version, VERSION_SIZE, "%ld.%ld%s",			 ((vnum >> 16) & 0xFFFF), vnum & 0xFFFF, version);	}	return 1;}/* Free Xen version information in node - nothing to do */static void xenstat_free_xen_version(xenstat_node * node){}/* Free Xen version information in handle - nothing to do */static void xenstat_uninit_xen_version(xenstat_handle * handle){}/* * VBD functions *//* Free VBD information */static void xenstat_free_vbds(xenstat_node * node){	unsigned int i;	for (i = 0; i < node->num_domains; i++)		free(node->domains[i].vbds);}/* Get the back driver type  for Virtual Block Device */unsigned int xenstat_vbd_type(xenstat_vbd * vbd){	return vbd->back_type;}/* Get the major number of VBD device */unsigned int xenstat_vbd_dev(xenstat_vbd * vbd){	return vbd->dev;}/* Get the number of OO(Out of) requests */unsigned long long xenstat_vbd_oo_reqs(xenstat_vbd * vbd){	return vbd->oo_reqs;}/* Get the number of READ requests */unsigned long long xenstat_vbd_rd_reqs(xenstat_vbd * vbd){	return vbd->rd_reqs;}/* Get the number of WRITE requests */unsigned long long xenstat_vbd_wr_reqs(xenstat_vbd * vbd){	return vbd->wr_reqs;}static char *xenstat_get_domain_name(xenstat_handle *handle, unsigned int domain_id){	char path[80];	snprintf(path, sizeof(path),"/local/domain/%i/name", domain_id);		return xs_read(handle->xshandle, XBT_NULL, path, NULL);}	/* Remove specified entry from list of domains */static void xenstat_prune_domain(xenstat_node *node, unsigned int entry){	/* nothing to do if array is empty or entry is beyond end */	if (node->num_domains == 0 || entry >= node->num_domains)		return;	/* decrement count of domains */	node->num_domains--;	/* shift entries following specified entry up by one */	if (entry < node->num_domains) {		xenstat_domain *domain = &node->domains[entry];		memmove(domain,domain+1,(node->num_domains - entry) * sizeof(xenstat_domain) );	}	/* zero out original last entry from node -- not	   strictly necessary but safer! */	memset(&node->domains[node->num_domains], 0, sizeof(xenstat_domain)); }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -