PERFORCE change 183048 for review

Edward Tomasz Napierala trasz at FreeBSD.org
Sun Aug 29 20:53:03 UTC 2010


http://p4web.freebsd.org/@@183048?ac=10

Change 183048 by trasz at trasz_victim on 2010/08/29 20:52:43

	RUSAGE_NTHR.

Affected files ...

.. //depot/projects/soc2009/trasz_limits/TODO#28 edit
.. //depot/projects/soc2009/trasz_limits/sys/kern/kern_container.c#27 edit
.. //depot/projects/soc2009/trasz_limits/sys/kern/kern_exit.c#25 edit
.. //depot/projects/soc2009/trasz_limits/sys/kern/kern_fork.c#20 edit
.. //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#92 edit
.. //depot/projects/soc2009/trasz_limits/sys/kern/kern_thr.c#7 edit
.. //depot/projects/soc2009/trasz_limits/sys/sys/container.h#12 edit

Differences ...

==== //depot/projects/soc2009/trasz_limits/TODO#28 (text+ko) ====

@@ -12,12 +12,12 @@
  - number of file descriptors (RUSAGE_NOFILE)
  - swap usage (RUSAGE_SWAP), in megabytes
  - amount of memory consumed by socket buffers (RUSAGE_SBSIZE), in megabytes
+ - number of kernel-visible threads (RUSAGE_NTHR)
 
 Limits to do:
 
 Milestone 2:
 
- - number of kernel-visible threads (RUSAGE_NTHR)
  - number of vnodes (RUSAGE_NVNODE)
  - number of sockets (RUSAGE_NSOCK)
  - number of queued SysV messages (RUSAGE_MSGQQUEUED)

==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_container.c#27 (text+ko) ====

@@ -91,6 +91,7 @@
 	case RUSAGE_CORE:
 	case RUSAGE_MEMLOCK:
 	case RUSAGE_NPROC:
+	case RUSAGE_NTHR:
 		return (0);
 	default:
 		return (1);

==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_exit.c#25 (text+ko) ====

@@ -181,6 +181,9 @@
 	}
 	KASSERT(p->p_numthreads == 1,
 	    ("exit1: proc %p exiting with %d threads", p, p->p_numthreads));
+#ifdef CONTAINERS
+	rusage_sub(p, RUSAGE_NTHR, 1);
+#endif
 	/*
 	 * Wakeup anyone in procfs' PIOCWAIT.  They should have a hold
 	 * on our vmspace, so we should block below until they have

==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_fork.c#20 (text+ko) ====

@@ -365,6 +365,11 @@
 		error = EAGAIN;
 		goto fail;
 	}
+	error = rusage_add(newproc, RUSAGE_NTHR, 1);
+	if (error) {
+		error = EAGAIN;
+		goto fail;
+	}
 #endif
 
 	/*

==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#92 (text+ko) ====

@@ -103,6 +103,16 @@
 	{ "vmem", RUSAGE_VMEM },
 	{ "npts", RUSAGE_NPTS },
 	{ "swap", RUSAGE_SWAP },
+	{ "nthr", RUSAGE_NTHR },
+	{ "nvnode", RUSAGE_NVNODE },
+	{ "nsock", RUSAGE_NSOCK },
+	{ "msgqqueued", RUSAGE_MSGQQUEUED },
+	{ "msgqsize", RUSAGE_MSGQSIZE },
+	{ "nmsgq", RUSAGE_NMSGQ },
+	{ "nsem", RUSAGE_NSEM },
+	{ "nsemop", RUSAGE_NSEMOP },
+	{ "nshm", RUSAGE_NSHM },
+	{ "shmsize", RUSAGE_SHMSIZE },
 	{ NULL, -1 }};
 
 static struct dict actionnames[] = {

==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_thr.c#7 (text+ko) ====

@@ -29,6 +29,7 @@
 
 #include "opt_compat.h"
 #include "opt_posix.h"
+#include <sys/container.h>
 #include <sys/param.h>
 #include <sys/kernel.h>
 #include <sys/lock.h>
@@ -174,11 +175,17 @@
 			return (EINVAL);
 		}
 	}
+#ifdef CONTAINERS
+	if (rusage_add(p, RUSAGE_NTHR, 1))
+		return (EPROCLIM);
+#endif
 
 	/* Initialize our td */
 	newtd = thread_alloc(0);
-	if (newtd == NULL)
-		return (ENOMEM);
+	if (newtd == NULL) {
+		error = ENOMEM;
+		goto fail;
+	}
 
 	/*
 	 * Try the copyout as soon as we allocate the td so we don't
@@ -194,7 +201,8 @@
 	    (parent_tid != NULL &&
 	    suword_lwpid(parent_tid, newtd->td_tid))) {
 		thread_free(newtd);
-		return (EFAULT);
+		error = EFAULT;
+		goto fail;
 	}
 
 	bzero(&newtd->td_startzero,
@@ -211,7 +219,7 @@
 		if (error != 0) {
 			thread_free(newtd);
 			crfree(td->td_ucred);
-			return (error);
+			goto fail;
 		}
 	} else {
 		/* Set up our machine context. */
@@ -224,7 +232,7 @@
 		if (error != 0) {
 			thread_free(newtd);
 			crfree(td->td_ucred);
-			return (error);
+			goto fail;
 		}
 	}
 
@@ -253,6 +261,12 @@
 	thread_unlock(newtd);
 
 	return (0);
+
+fail:
+#ifdef CONTAINERS
+	rusage_sub(p, RUSAGE_NTHR, 1);
+#endif
+	return (error);
 }
 
 int
@@ -296,6 +310,9 @@
 	}
 	PROC_SUNLOCK(p);
 	PROC_UNLOCK(p);
+#ifdef CONTAINERS
+	rusage_sub(p, RUSAGE_NTHR, 1);
+#endif
 	return (0);
 }
 

==== //depot/projects/soc2009/trasz_limits/sys/sys/container.h#12 (text+ko) ====

@@ -65,7 +65,17 @@
 #define	RUSAGE_VMEM		10
 #define	RUSAGE_NPTS		11
 #define	RUSAGE_SWAP		12
-#define	RUSAGE_MAX		RUSAGE_SWAP
+#define	RUSAGE_NTHR		13
+#define	RUSAGE_NVNODE		14
+#define	RUSAGE_NSOCK		15
+#define	RUSAGE_MSGQQUEUED	16
+#define	RUSAGE_MSGQSIZE		17
+#define	RUSAGE_NMSGQ		18
+#define	RUSAGE_NSEM		19
+#define	RUSAGE_NSEMOP		20
+#define	RUSAGE_NSHM		21
+#define	RUSAGE_SHMSIZE		22
+#define	RUSAGE_MAX		RUSAGE_SHMSIZE
 
 /*
  * 'container' defines resource consumption for a particular


More information about the p4-projects mailing list