Re: [RFC] [PATCH] VM & VFS changes

From: Alexander Leidinger <Alexander_at_Leidinger.net>
Date: Thu, 02 Jun 2005 15:39:09 +0200
Don Lewis <truckman_at_FreeBSD.org> wrote:

>> What am I overlooking?
>
> Create a large, but nearly empty file system, /a
                                  ^
                          memory/swap based

> Mount a file system backed by a physical disk on /a/b
> Create the file /a/b/c and configure it to be used as swap
> Write a large amount of data to the file /a/d, which will overflow RAM
> and be paged out to /a/b/c
>
> It won't be possible to disable swapping to /a/b/c because there is not
> sufficient RAM to page in the data stored there.  It won't be possible
> to unmount /a/b because /a/b/c is busy.  It won't be possible to unmount
> /a because it is busy because /a/b is mounted on it.

Ah! Yes! I tend to forget this is possible. In my mind a memory/swap based FS
as a "leaf" in the directory tree... or more correctly, the subtree below the
memory/swap based FS isn't allowed to contain a mointpoint of a non
memory/swap based FS. Any other use which may require to break this rule has
to use symlinks instead and isn't allowed to break the rule.

This helps to avoid some pitfalls.

> If the dependencies are tracked so that this configuration (swapping to
> anything that is directly or indirectly dependent on a swap-backed file
> system) can be forbidden, then either the algorithm that I suggested, or

I'm not sure if we should enforce this policy... I like it, but I think such
a restriction should be configurable via sysctl (enabled by default).

> your iterative algorithm should work. Your algorithm could even be
> simplified by pulling the swap-off out of the loop.
>
> unconfigure md's that are not busy
> do {
> 	foreach filesystem in reverse(mountlist) {
> 		unmount filesystem
> 		if (success and backed by md)
> 			unconfigure md /* either swap or vnode backed */
> 	}
> } while (progress)
> swap-off
> do {
> 	foreach filesystem in reverse(mountlist) {
> 		unmount filesystem
> 		if (success and backed by md)
> 			unconfigure md /* only vnode backed remain */
> 	}
> } while (progress)
>
> Removing the swap-off from the loop may avoid a lot of paging activity
> because all the paged-out data from swap backed md's will be discarded
> before swap is disabled.

Sounds even better.

Bye,
Alexander.

-- 
http://www.Leidinger.net  Alexander _at_ Leidinger.net: PGP ID = B0063FE7
http://www.FreeBSD.org     netchild _at_ FreeBSD.org  : PGP ID = 72077137
Get forgiveness now -- tomorrow you may no longer feel guilty.
Received on Thu Jun 02 2005 - 11:39:17 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:35 UTC