Date: Fri, 18 Mar 2005 20:41:00 +1100 (EST) From: Bruce Evans <bde@zeta.org.au> To: David Xu <davidxu@freebsd.org> Cc: freebsd-arch@freebsd.org Subject: Re: System processes recognition. Message-ID: <20050318201454.Q1050@epsplex.bde.org> In-Reply-To: <4239829D.5030202@freebsd.org> References: <20050315125136.GH9291@darkness.comp.waw.pl> <200503161748.02353.jhb@FreeBSD.org><4239829D.5030202@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 17 Mar 2005, David Xu wrote:
> Bruce Evans wrote:
>> 
>> P_SYSTEM for init is bogus since it breaks at least procfs for init.
>> procfs may need to be disabled for init for security reasons, but it
>> shouldn't be disabled unconditionally.  I mainly noticed /proc/1/map
>> not existing.
>> 
>> There should be flags like P_KTHREAD as needed to make the properties
>> of init independent.
>
> Removing P_SYSTEM for init will cause it to be swapped out under heavy
> memory pressure, we unlikely want to swap out init, otherwise it results 
> zoombies
> can not be recycled immediately, does anyone know that init is already be
> locked into memory, e.g, by PHOLD ?
As I said, there should be flags like PKTHREAD to control this
independently.  Perhaps 2 flags to control swapouts and pageouts.
Only the stack pages are swapped out and the stack is a small part
of the process, so for init it is more important to prevent pageouts.
I think PHOLD() only affects swapouts.  The comment about it in proc.h
doesn't say what it does -- the comment says that PHOLD() holds the U-area
in memory, but now there isn't even a U-area.
There is an explicit test for init in the pageout daemon.  I think this
prevents init being paged out, so with my removal of P_SYSTEM for init,
init has the strange property of being swappable but not being pageable.
The test for init has the same hard-coded assumption on init's pid that
I fixed in kern_sig.c in my previous patch in this thread, and there is
a worse hard-coded assumptions on pids in the same expression:
%%%
Index: vm_pageout.c
===================================================================
RCS file: /home/ncvs/src/sys/vm/vm_pageout.c,v
retrieving revision 1.268
diff -u -2 -r1.268 vm_pageout.c
--- vm_pageout.c	7 Jan 2005 02:29:27 -0000	1.268
+++ vm_pageout.c	18 Mar 2005 09:15:09 -0000
@@ -1193,6 +1237,7 @@
  			/*
  			 * If this is a system or protected process, skip it.
+			 * XXX: unfixed: all style bugs, some pid magic (48).
  			 */
-			if ((p->p_flag & P_SYSTEM) || (p->p_pid == 1) ||
+			if ((p->p_flag & P_SYSTEM) || (p == initproc) ||
  			    (p->p_flag & P_PROTECTED) ||
  			    ((p->p_pid < 48) && (swap_pager_avail != 0))) {
%%%
Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050318201454.Q1050>
