Using TMPFS for /tmp and /var/run?

Gleb Kurtsou gleb.kurtsou at gmail.com
Mon Apr 2 21:03:31 UTC 2012


On (02/04/2012 06:26), David Wolfskill wrote:
> On Mon, Apr 02, 2012 at 01:31:19PM +0300, Gleb Kurtsou wrote:
> > ...
> > You could try the patch attached. It adds support for size option suffixes
> > (like 1g) and introduces swap limit (part of the older patch, not sure
> > if it's any use).
> > 
> > Patch is against 10-CURRENT.
> > Older version: https://github.com/glk/freebsd-head/commit/3bd8f7d
> > ....
> 
> OK; here's a summary of what I found so far, now running:
> 
> FreeBSD g1-227.catwhisker.org 10.0-CURRENT FreeBSD 10.0-CURRENT #0 233772M: Mon Apr  2 05:42:48 PDT 2012     root at g1-227.catwhisker.org:/usr/obj/usr/src/sys/CANARY  i386
> 
> * First, the patch applied cleanly (via "patch -p1").
> 
> * Resulting sources build with no issues.
> 
> * Prior specification I had in /etc/fstab:
> 
>   tmpfs    /tmp    tmpfs    rw,size=2147483648	0    0
> 
>   worked same as before the patch; "df -h /tmp" reported a size of 2.0G.
> 
> * Changing the above to read:
> 
>   tmpfs    /tmp    tmpfs    rw,size=2g	0    0
> 
>   also provided the same result, so the unit-specification code looks
>   as if it's working as expected.
> 
> * I have 20G specified for swap, and 4G RAM (and, as above, I'm running
>   i386).  Changing the above tmpfs line in /etc/fstab to
> 
>   tmpfs    /tmp    tmpfs    rw,size=8g	0    0
> 
>   (still) yields:
> 
> g1-227(10.0-C)[3] df -h /tmp
> Filesystem    Size    Used   Avail Capacity  Mounted on
> tmpfs          23G     12k     23G     0%    /tmp
> g1-227(10.0-C)[4] 

tmpfs-32bit-size_max.patch.txt should fix the problem. I don't have i386
installations to test it myself.

Do you run PAE kernel? Could you try filling up /tmp at least to 10g.

> 
> (Yes, I'm using a whopping total of 12kB while running X.  I know of
> *very* few folks who use the window manager I prefer. :-})
> 
> I'll try exercising it a bit during the day at work & report anything
> noteworthy.  But so far, I see no evidence of regression, and there is
> some measure of usability improvement (IMO).  So it's looking
> encouraging.  :-)
> 
> Peace,
> david
> -- 
> David H. Wolfskill				david at catwhisker.org
> Depriving a girl or boy of an opportunity for education is evil.
> 
> See http://www.catwhisker.org/~david/publickey.gpg for my public key.


-------------- next part --------------
commit 44f68235e23ab4bababeafe07d31e07feabb84ba
Author: Gleb Kurtsou <gleb.kurtsou at gmail.com>
Date:   Tue Apr 3 00:02:33 2012 +0300

    tmpfs: Support file system sizes up to 4GB*PAGE_SIZE on 32 bit archs

diff --git a/sys/fs/tmpfs/tmpfs_vfsops.c b/sys/fs/tmpfs/tmpfs_vfsops.c
index 29f2ca4..6b3ecc0 100644
--- a/sys/fs/tmpfs/tmpfs_vfsops.c
+++ b/sys/fs/tmpfs/tmpfs_vfsops.c
@@ -233,17 +233,13 @@ tmpfs_mount(struct mount *mp)
 	 * allowed to use, based on the maximum size the user passed in
 	 * the mount structure.  A value of zero is treated as if the
 	 * maximum available space was requested. */
-	if (size_max < PAGE_SIZE || size_max > SIZE_MAX - PAGE_SIZE)
+	if (size_max < PAGE_SIZE || size_max > UINT64_MAX - PAGE_SIZE ||
+	    (SIZE_MAX < UINT64_MAX && size_max / PAGE_SIZE >= SIZE_MAX))
 		pages = SIZE_MAX;
 	else
 		pages = howmany(size_max, PAGE_SIZE);
 	MPASS(pages > 0);
 
-	if (pages < SIZE_MAX / PAGE_SIZE)
-		size_max = pages * PAGE_SIZE;
-	else
-		size_max = SIZE_MAX;
-
 	if (nodes_max <= 3) {
 		if (pages < INT_MAX / nodes_per_page)
 			nodes_max = pages * nodes_per_page;


More information about the freebsd-current mailing list