Skip site navigation (1)Skip section navigation (2)
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>