[torquedev] TORQUE on FreeBSD

trasz at pin.if.uz.zgora.pl trasz at pin.if.uz.zgora.pl
Thu Sep 14 11:37:34 MDT 2006


I've made a patch that makes it possible to compile TORQUE on FreeBSD 6.1.
It seems to work - resources reported by 'qstat -f' seem right - but I'd
like someone to review it.  Patch follows:

--- src/resmom/freebsd/mom_mach.c.orig	Tue Jun 20 02:23:04 2006
+++ src/resmom/freebsd/mom_mach.c	Thu Sep 14 19:09:58 2006
@@ -370,40 +370,10 @@
 			continue;
 
 		nps++;
-		cputime += tvk(pp->kp_proc.p_rtime);
 
-		if (pp->kp_proc.p_ru == NULL) {
-			struct	pstats	ps;
-
-			DBPRT(("%s: p_stats 0x%lx\n", id,
-				(u_long)pp->kp_proc.p_stats))
-			if (pp->kp_proc.p_stats == NULL)
-				continue;
-
-			if (kvm_read(kd, (u_long)pp->kp_proc.p_stats, &ps,
-					sizeof(ps)) != sizeof(ps)) {
-				log_err(errno, id, "kvm_read(pstats)");
-				continue;
-			}
-			cputime += tv(ps.p_ru.ru_utime) +
-				tv(ps.p_ru.ru_stime) +
-				tv(ps.p_cru.ru_utime) +
-				tv(ps.p_cru.ru_stime);
-		}
-		else {
-			struct	rusage	ru;
-
-			DBPRT(("%s: p_ru 0x%lx\n", id,
-				(u_long)pp->kp_proc.p_ru))
-			if (kvm_read(kd, (u_long)pp->kp_proc.p_ru, &ru,
-					sizeof(ru)) != sizeof(ru)) {
-				log_err(errno, id, "kvm_read(session)");
-				continue;
-			}
-			cputime += tv(ru.ru_utime) + tv(ru.ru_stime);
-		}
+		cputime += pp->ki_runtime / 1000000;
 		DBPRT(("%s: ses %d pid %d cputime %d\n", id,
-				sess_tbl[i], pp->kp_proc.p_pid, cputime))
+				sess_tbl[i], pp->ki_pid,  pp->ki_runtime / 1000000))
 	}
 
 	if (nps == 0)
@@ -434,11 +404,9 @@
 		if (!injob(pjob, sess_tbl[i]))
 			continue;
 
-		memsize += ctob(pp->kp_eproc.e_vm.vm_tsize +
-			pp->kp_eproc.e_vm.vm_dsize +
-			pp->kp_eproc.e_vm.vm_ssize);
+		memsize += pp->ki_size;
 		DBPRT(("%s: ses %d pid=%d totmem=%lu\n", id,
-		       sess_tbl[i], pp->kp_proc.p_pid, memsize))
+		       sess_tbl[i], pp->ki_pid, pp->ki_size))
 	}
 
 	return (memsize);
@@ -461,10 +429,10 @@
 		if (!injob(pjob, sess_tbl[i]))
 			continue;
 
-		memsize += ctob(pp->kp_eproc.e_vm.vm_rssize);
+		memsize += pp->ki_rssize * PAGE_SIZE;
 		DBPRT(("%s: pid=%d ses=%d mem=%d totmem=%d\n", id,
-			pp->kp_proc.p_pid, sess_tbl[i],
-			pp->kp_eproc.e_vm.vm_rssize, memsize))
+			pp->ki_pid, sess_tbl[i],
+			pp->ki_rssize * PAGE_SIZE, memsize))
 	}
 
 	return (memsize);
@@ -485,9 +453,7 @@
 		if (!injob(pjob, sess_tbl[i]))
 			continue;
 
-		if (ctob(pp->kp_eproc.e_vm.vm_tsize +
-				pp->kp_eproc.e_vm.vm_dsize +
-				pp->kp_eproc.e_vm.vm_ssize) > limit)
+		if (pp->ki_size > limit)
 			return (TRUE);
 	}
 
@@ -732,7 +698,7 @@
   const void *b)
 
   {
-  return((int)((struct kinfo_proc *)a)->kp_eproc.e_paddr - (int)((struct kinfo_proc *)b)->kp_eproc.e_paddr);
+  return((int)((struct kinfo_proc *)a)->ki_paddr - (int)((struct kinfo_proc *)b)->ki_paddr);
   }
 
 int bs_cmp(
@@ -741,7 +707,7 @@
   const void *member)
 
   {
-  return((int)((struct session *)key)->s_leader - (int)((struct kinfo_proc *)member)->kp_eproc.e_paddr);
+  return((int)((struct session *)key)->s_leader - (int)((struct kinfo_proc *)member)->ki_paddr);
   }
 
 
@@ -786,24 +752,10 @@
 
 	qsort(proc_tbl, nproc, sizeof(struct kinfo_proc), qs_cmp);
 
-	for (i=0, kp=proc_tbl; i<nproc; i++, kp++) {
-		if (kvm_read(kd, (u_long)kp->kp_eproc.e_sess, &ss, sizeof(ss))
-				!= sizeof(ss)) {
-			sprintf(log_buffer,
-				"kvm_read: %s", kvm_geterr(kd));
-			log_err(errno, id, log_buffer);
-			return (PBSE_SYSTEM);
-		}
-		if (ss.s_leader == kp->kp_eproc.e_paddr ||
-				ss.s_leader == NULL) {
-			sid = kp->kp_proc.p_pid;
-		}
-		else {
-			leader = bsearch(&ss, proc_tbl, nproc,
-				sizeof(struct kinfo_proc), bs_cmp);
-			sid = leader ? leader->kp_proc.p_pid : 0;
-		}
-		sess_tbl[i] = sid;
+	for (i=0; i<nproc; i++) {
+		struct kinfo_proc	*pp = &proc_tbl[i];
+
+		sess_tbl[i] = pp->ki_sid;
 	}
 
 	return (PBSE_NONE);
@@ -1012,8 +964,8 @@
 			continue;
 
 		DBPRT(("%s: send signal %d to pid %d\n", id,
-				sig, pp->kp_proc.p_pid))
-		(void)kill(pp->kp_proc.p_pid, sig);
+				sig, pp->ki_pid))
+		(void)kill(pp->ki_pid, sig);
 		++ct;
 	}
 	return ct;
@@ -1118,36 +1070,10 @@
 		if (jobid != sess_tbl[i])
 			continue;
 
-		cputime += tvk(pp->kp_proc.p_rtime);
-
-		if (pp->kp_proc.p_ru == NULL) {
-			struct	pstats	ps;
-
-			if (pp->kp_proc.p_stats == NULL)
-				continue;
-
-			if (kvm_read(kd, (u_long)pp->kp_proc.p_stats, &ps,
-					sizeof(ps)) != sizeof(ps)) {
-				log_err(errno, id, "kvm_read(pstats)");
-				continue;
-			}
-			cputime += tv(ps.p_ru.ru_utime) +
-				tv(ps.p_ru.ru_stime) +
-				tv(ps.p_cru.ru_utime) +
-				tv(ps.p_cru.ru_stime);
-		}
-		else {
-			struct	rusage	ru;
+		cputime += pp->ki_runtime / 1000000;
 
-			if (kvm_read(kd, (u_long)pp->kp_proc.p_ru, &ru,
-					sizeof(ru)) != sizeof(ru)) {
-				log_err(errno, id, "kvm_read(session)");
-				continue;
-			}
-			cputime += tv(ru.ru_utime) + tv(ru.ru_stime);
-		}
 		DBPRT(("%s: ses %d pid %d cputime %d\n", id,
-				jobid, pp->kp_proc.p_pid, cputime))
+				jobid, pp->ki_pid, cputime))
 
 	}
 
@@ -1166,37 +1092,11 @@
 	for (i=0; i<nproc; i++) {
 		struct kinfo_proc	*pp = &proc_tbl[i];
 
-		if (pid != pp->kp_proc.p_pid)
+		if (pid != pp->ki_pid)
 			continue;
 
-		cputime = tvk(pp->kp_proc.p_rtime);
-
-		if (pp->kp_proc.p_ru == NULL) {
-			struct	pstats	ps;
-
-			if (pp->kp_proc.p_stats == NULL)
-				break;
-
-			if (kvm_read(kd, (u_long)pp->kp_proc.p_stats, &ps,
-					sizeof(ps)) != sizeof(ps)) {
-				log_err(errno, id, "kvm_read(pstats)");
-				break;
-			}
-			cputime += tv(ps.p_ru.ru_utime) +
-				tv(ps.p_ru.ru_stime) +
-				tv(ps.p_cru.ru_utime) +
-				tv(ps.p_cru.ru_stime);
-		}
-		else {
-			struct	rusage	ru;
+       		cputime = pp->ki_runtime / 1000000;
 
-			if (kvm_read(kd, (u_long)pp->kp_proc.p_ru, &ru,
-					sizeof(ru)) != sizeof(ru)) {
-				log_err(errno, id, "kvm_read(session)");
-				break;
-			}
-			cputime += tv(ru.ru_utime) + tv(ru.ru_stime);
-		}
 		DBPRT(("%s: pid %d cputime %d\n", id, pid, cputime))
 
 		sprintf(ret_string, "%.2f", (double)cputime * cputfactor);
@@ -1261,13 +1161,11 @@
 			continue;
 
 		found = 1;
-		addmem = pp->kp_eproc.e_vm.vm_tsize +
-				pp->kp_eproc.e_vm.vm_dsize +
-				pp->kp_eproc.e_vm.vm_ssize;
+		addmem = pp->ki_size;
 		memsize += addmem;
 	}
 	if (found) {
-		sprintf(ret_string, "%ukb", ctob(memsize) >> 10); /* KB */
+		sprintf(ret_string, "%ukb", memsize / 1024); /* KB */
 		return ret_string;
 	}
 
@@ -1289,13 +1187,11 @@
 	for (i=0; i<nproc; i++) {
 		struct kinfo_proc	*pp = &proc_tbl[i];
 
-		if (pid != pp->kp_proc.p_pid)
+		if (pid != pp->ki_pid)
 			continue;
 
-		memsize = pp->kp_eproc.e_vm.vm_tsize +
-				pp->kp_eproc.e_vm.vm_dsize +
-				pp->kp_eproc.e_vm.vm_ssize;
-		sprintf(ret_string, "%ukb", ctob(memsize) >> 10); /* KB */
+		memsize = pp->ki_size;
+		sprintf(ret_string, "%ukb", memsize / 1024); /* KB */
 		return ret_string;
 	}
 
@@ -1358,10 +1254,10 @@
 			continue;
 
 		found = 1;
-		resisize += pp->kp_eproc.e_vm.vm_rssize;
+		resisize += pp->ki_rssize * PAGE_SIZE;
 	}
 	if (found) {
-		sprintf(ret_string, "%ukb", ctob(resisize) >> 10); /* KB */
+		sprintf(ret_string, "%ukb", resisize / 1024); /* KB */
 		return ret_string;
 	}
 
@@ -1385,11 +1281,11 @@
 	for (i=0; i<nproc; i++) {
 		struct kinfo_proc	*pp = &proc_tbl[i];
 
-		if (pid != pp->kp_proc.p_pid)
+		if (pid != pp->ki_pid)
 			continue;
 
-		resisize = pp->kp_eproc.e_vm.vm_rssize;
-		sprintf(ret_string, "%ukb", ctob(resisize) >> 10); /* KB */
+		resisize = pp->ki_rssize * PAGE_SIZE;
+		sprintf(ret_string, "%ukb", resisize / 1024); /* KB */
 		return ret_string;
 	}
 
@@ -1462,12 +1358,12 @@
 	for (i=0; i<nproc; i++) {
 		struct kinfo_proc	*pp = &proc_tbl[i];
 
-		if (pp->kp_eproc.e_pcred.p_ruid == 0)
+		if (pp->ki_ruid == 0)
 			continue;
 
 		jobid = sess_tbl[i];
 		DBPRT(("%s: pid %d sid %u\n",
-		       id, (int)pp->kp_proc.p_pid, jobid))
+		       id, (int)pp->ki_pid, jobid))
 		for (j=0; j<njids; j++) {
 			if (jids[j] == jobid)
 				break;
@@ -1548,12 +1444,12 @@
 		struct kinfo_proc	*pp = &proc_tbl[i];
 
 		DBPRT(("%s[%d]: pid %d sid %u\n",
-		       id, num_pids, pp->kp_proc.p_pid, sess_tbl[i]))
+		       id, num_pids, pp->ki_pid, sess_tbl[i]))
 		if (jobid != sess_tbl[i])
 			continue;
 
 		checkret(&fmt, 100);
-		sprintf(fmt, " %d", pp->kp_proc.p_pid);
+		sprintf(fmt, " %d", pp->ki_pid);
 		fmt += strlen(fmt);
 		num_pids++;
 	}
@@ -1591,11 +1487,11 @@
 	for (i=0; i<nproc; i++) {
 		struct kinfo_proc	*pp = &proc_tbl[i];
 
-		if ((uid = pp->kp_eproc.e_pcred.p_ruid) == 0)
+		if ((uid = pp->ki_ruid) == 0)
 			continue;
 
 		DBPRT(("%s: pid %d uid %u\n",
-		       id, (int)pp->kp_proc.p_pid, uid))
+		       id, (int)pp->ki_pid, uid))
 		for (j=0; j<nuids; j++) {
 			if (uids[j] == uid)
 				break;
@@ -1884,23 +1780,12 @@
 				continue;
 		}
 		else {
-			if (value != pp->kp_proc.p_pid)
+			if (value != pp->ki_pid)
 				continue;
 		}
 
-		if (pp->kp_proc.p_stats == NULL) {
-			rm_errno = RM_ERR_SYSTEM;
-			return NULL;
-		}
-
-		if (kvm_read(kd, (u_long)pp->kp_proc.p_stats, &ps,
-				sizeof(ps)) != sizeof(ps)) {
-			log_err(errno, id, "kvm_read(pstats)");
-			rm_errno = RM_ERR_SYSTEM;
-			return NULL;
-		}
 		found = 1;
-		start = MIN(start, ps.p_start.tv_sec);
+		start = MIN(start, pp->ki_start.tv_sec);
 	}
 	if (found) {
 		sprintf(ret_string, "%ld", (long)((double)(now - start) * wallfactor));
@@ -2035,7 +1920,7 @@
 	dirdev = sb.st_dev;
 	DBPRT(("dir has devnum %d\n", dirdev))
 
-	if (setfsent() == NULL) {
+	if (setfsent() == 0) {
 		log_err(errno, id, "setfsent");
 		rm_errno = RM_ERR_SYSTEM;
                 return NULL;



More information about the torquedev mailing list