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

📄 getrsrcs.c

📁 openPBS的开放源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	goto bail;    }    /* Receive AVAILMEM response from resource monitor. */    response = getreq(rm);    if (response != NULL) {	new_rsrcs->freemem = schd_val2byte(response);	new_rsrcs->freemem *= schd_FAKE_MACH_MULT;	(void)free(response);    } else {	(void)sprintf(log_buffer, "bad return from getreq(freemem), %d, %d", 		      pbs_errno, errno);	log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);	badreply = 1;	goto bail;    }    /* Receive PHYSMEM response from resource monitor. */    response = getreq(rm);    if (response != NULL) {	pmem_avail = schd_val2byte(response);	pmem_avail *= schd_FAKE_MACH_MULT;	(void)free(response);    } else {	(void)sprintf(log_buffer, "bad return from getreq(realmem), %d, %d", 		      pbs_errno, errno);	log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);	badreply = 1;	goto bail;    }    /* Receive NCPUS response from resource monitor. */    response = getreq(rm);    if (response != NULL) {	cpus_avail = atoi(response) * schd_FAKE_MACH_MULT;	(void)free(response);    } else {	(void)sprintf(log_buffer, "bad return from getreq(ncpus), %d, %d", 		      pbs_errno, errno);	log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);	badreply = 1;	goto bail;    }#ifdef NODEMASK    /* Receive available nodes from resource monitor. */    response = getreq(rm);    if (response == NULL) {	(void)sprintf(log_buffer, "bad return from getreq(availmask), %d, %d", 	    pbs_errno, errno);	log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);	badreply = 1;	goto bail;    } else {	if (schd_bits2mask(response, &new_rsrcs->availmask) != 0) {	    if (schd_str2mask(response, &new_rsrcs->availmask) != 0) {		(void)sprintf(log_buffer, "can't parse availmask '%s'", response);		log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);		badreply = 1;		goto bail;	    }	}	(void)free(response);    }#endif	/* NODEMASK */    if (schd_MANAGE_HPM) {	/* Receive HPM_CTL response from resource monitor. */	response = getreq(rm);	if (response != NULL) {	    if (strcmp(response, HPM_CTL_USERMODE_STR) == 0)		new_rsrcs->flags |= RSRCS_FLAGS_HPM_USER;	    else if (strcmp(response, HPM_CTL_GLOBALMODE_STR) == 0)		new_rsrcs->flags &= ~RSRCS_FLAGS_HPM_USER;	    else {		(void)sprintf(log_buffer, "bad response '%s' for '%s@%s'", 		    response, hpm_ctl, exechost);		log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, 		    log_buffer);		badreply = 1;		goto bail;	    }	} else {	    (void)sprintf(log_buffer, "bad return from getreq(%s), %d, %d", 		hpm_ctl, pbs_errno, errno);	    log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);	    badreply = 1;	    goto bail;	}    }    /*      * NOTE: response will be free()'d in bail.  Be sure to explicitly free()     * response if more getreq() calls are added before the code below.     */bail:    if (response != NULL)	(void)free(response);    /* Disconnect from the resource monitor. */    if (rm >= 0)		/* resmom handle "0" is valid in RPP. */	closerm(rm);    /* And unset the alarm and handler. */    alarm(0);    sigaction(SIGALRM, &oact, &act);    /* Reset the old alarm, taking into account how much time has passed. */    if (remain) {	DBPRT(("%s: old alarm had %d secs remaining, %d elapsed, ", id,		remain, (time(NULL) - then)));	/* How much time remains even after the time spent above? */	remain -= (time(NULL) - then);	/* 	 * Would the previous time have already expired?  If so, schedule	 * an alarm call in 1 second (close enough, hopefully).	 */	if (remain < 1)	    remain = 1;	DBPRT(("reset to %d secs\n", remain));	alarm (remain);    }    /*     * Verify all the data came back as expected; if not, abort this      * iteration of the scheduler.     */    if (badreply) {	(void)sprintf(log_buffer, 	    "Got bad info from mom@%s - aborting sched run", exechost);	log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);	DBPRT(("%s: %s\n", id, log_buffer));	free(new_rsrcs);	return (NULL);    }    /* Make a copy of the hostname for the resources struct. */    new_rsrcs->exechost = schd_strdup(exechost);    if (new_rsrcs->exechost == NULL) {	(void)sprintf(log_buffer, "Unable to copy exechost %s to rsrcs",	    exechost);	log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);	DBPRT(("%s: %s\n", id, log_buffer));	free(new_rsrcs);	return (NULL);    }    new_rsrcs->nodes_total = NODES_REQD(cpus_avail, pmem_avail);#ifdef NODEMASK    /* Copy the availmask schd_FAKE_MACH_MULT times to match avail cpus. */    BITFIELD_CPY(&cpy, &(new_rsrcs->availmask));    for (i = 2; i <= schd_FAKE_MACH_MULT; i++) {	for (j = 0; j < (cpus_avail / schd_FAKE_MACH_MULT / 2); j++)	    BITFIELD_SHIFTL(&cpy);	BITFIELD_SETM(&(new_rsrcs->availmask), &cpy);    }#endif	/* NODEMASK */    if (schd_RsrcsList == NULL) {	schd_RsrcsList  = new_rsrcs;	/* Start the list. */    } else {	for (rptr = schd_RsrcsList; rptr->next != NULL; rptr = rptr->next)	    /* Find the last element in the list. */ ;	rptr->next = new_rsrcs;    }    /* Next pointer for the tail of the list points to nothing. */    new_rsrcs->next = NULL;    return (new_rsrcs);}voidschd_dump_rsrclist(void){    Resources *rsrcs;    for (rsrcs = schd_RsrcsList; rsrcs != NULL; rsrcs = rsrcs->next)	dump_resources(rsrcs);}static voiddump_resources(Resources *rsrcs){    char   *id = "dump_resources";    /* Log the system's status */#if 0    (void)sprintf(log_buffer, " %d%% usr, %d%% sys, %d%% idl",	rsrcs->usrtime,rsrcs->systime,rsrcs->idltime);    log_record(PBSEVENT_SYSTEM,PBS_EVENTCLASS_SERVER,id,log_buffer);#endif /* 0 */    (void)sprintf(log_buffer,		  "Resources for host %s", rsrcs->exechost);    log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);    (void)sprintf(log_buffer, " :: %-24s = %s", "Memory (free):",	schd_byte2val(rsrcs->freemem));    log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);    (void)sprintf(log_buffer, " :: %-24s = %d / %d (%.2f%% utilization)", 	"Nodes allocated:", rsrcs->nodes_alloc, rsrcs->nodes_total,	(rsrcs->nodes_alloc * 100.0) / rsrcs->nodes_total);    log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);#ifdef NODEMASK    (void)sprintf(log_buffer, " :: %-24s = %s", "Nodes configured:",	schd_format_nodemask(&(rsrcs->availmask), &(rsrcs->availmask)));    log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);    (void)sprintf(log_buffer, " :: %-24s = %s", "Nodes in use:",	schd_format_nodemask(&(rsrcs->availmask), &(rsrcs->nodes_used)));    log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);#endif	/* NODEMASK */    (void)sprintf(log_buffer, " :: %-24s = %0.2f", "CPU Load average:", 	rsrcs->loadave);    log_record(PBSEVENT_SYSTEM, PBS_EVENTCLASS_SERVER, id, log_buffer);    (void)sprintf(log_buffer, " :: %-24s = %d", "Running jobs:",	rsrcs->njobs);    log_record(PBSEVENT_SYSTEM,PBS_EVENTCLASS_SERVER,id,log_buffer);    if (schd_MANAGE_HPM) {	(void)sprintf(log_buffer, " :: %-24s = %s mode, %sin use", 	    "HPM Counters:",	    rsrcs->flags & RSRCS_FLAGS_HPM_USER ? "user" : "global",	    rsrcs->flags & RSRCS_FLAGS_HPM_IN_USE ? "" : "not ");	log_record(PBSEVENT_SYSTEM,PBS_EVENTCLASS_SERVER,id,log_buffer);    }}

⌨️ 快捷键说明

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