svn commit: r187607 - head/usr.bin/truss

Bruce Evans brde at optusnet.com.au
Wed Jan 28 03:27:15 PST 2009


On Mon, 26 Jan 2009, Kostik Belousov wrote:

> On Mon, Jan 26, 2009 at 02:03:10PM -0500, David Schultz wrote:
>> On Mon, Jan 26, 2009, Bruce Evans wrote:
>>> - P_SYSTEM has something to do with swapping, and I also removed the
>>>   PS_INMEM setting for init.  I have always used NO_SWAPPING and haven't
>>>   used a swap partition since memory sizes reached 64MB, so I wouldn't
>>>   have noticed problems with this.  init doesn't run often so it is
>>>   quite likely to be swapped (if allowed to) if real memory runs out.
>>
>> Process kstack swapping was removed several years ago, so
>> "swapping out" a process just deactivates all of its pages.
>> In principle this could be safe to do with init, but it's probably
>> a bad idea, and perhaps could lead to deadlock in the
>> out-of-swap-space -> kill a process -> reparent the zombie to init
>> path. PS_INMEM will prevent init from being swapped out.
>
> Process kernel stacks swapping, or more explicitely, allowance to page out
> threads kernel stacks, is in the kernel. It is performed by vmdaemon,
> look for the call to swapout_procs().
>
> Kernel stack contains pcb, but not the struct thread. Notifying the target
> process about raised signal requires only struct proc and referenced
> structures (p_sigact, p_sigqueue etc) that cannot be paged out.
>
> More interesting propery of the P_SYSTEM process is the immunity to the
> oom killer. But vm_pageout_oom() explicitely cares to not kill pid 1
> or pid < 48.

Anyway, I now think my removal of the explicit setting of PS_INMEM is
just a style fix (removal of dead code).  PS_INMEM is set for process
0 and should be inherited on fork for all processes including init;
it should only be cleared for any process long after the fork of init,
if swapping occurs, as part of swapping out (mainly to indicate that
the swapout has occurred).  If swapping out of init is to be prevented,
then it should be done of init should be prevented using a flag different
from P_SYSTEM, since P_SYSTEM has too much scope and the pid hacks are
ugly, but the pid hacks work for now.

Bruce


More information about the svn-src-head mailing list