]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Bump /tmp size back to 50% of RAM
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 24 Jul 2020 20:05:21 +0000 (22:05 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 29 Jul 2020 09:07:04 +0000 (11:07 +0200)
This should be enough to fix https://bugzilla.redhat.com/show_bug.cgi?id=1856514.
But the limit should be significantly higher than 10% anyway. By setting a
limit on /tmp at 10% we'll break many reasonable use cases, even though the
machine would deal fine with a much larger fraction devoted to /tmp.
(In the first version of this patch I made it 25% with the comment that
"Even 25% might be too low.". The kernel default is 50%, and we have been using
that seemingly without trouble since https://fedoraproject.org/wiki/Features/tmp-on-tmpfs.
So let's just make it 50% again.)

See 7d85383edbab73274dc81cc888d884bb01070bc2.

(Another consideration is that we learned from from the whole initiative with
zram in Fedora that a reasonable size for zram is 0.5-1.5 of RAM, and that pretty
much all systems benefit from having zram or zswap enabled. Thus it is reasonable
to assume that it'll become widely used. Taking the usual compression effectiveness
of 0.2 into account, machines have effective memory available of between
1.0 - 0.2*0.5 + 0.5 = 1.4 (for zram sized to 0.5 of RAM) and
1.0 - 0.2*1.5 + 1.5 = 2.2 (for zram 1.5 sized to 1.5 of RAM) times RAM size.
This means that the 10% was really like 7-4% of effective memory.)

A comment is added to mount-util.h to clarify that tmp.mount is separate.

src/shared/mount-util.h
units/tmp.mount

index 5934d716786e5ec8e745236d10723f35db3cfe23..7bad3743e0de5ec963c4f443f8839efcb1ca26ab 100644 (file)
@@ -8,21 +8,27 @@
 #include "errno-util.h"
 #include "macro.h"
 
-/* 4MB for contents of regular files, 64k inodes for directories, symbolic links and device specials,
  using large storage array systems as a baseline */
+/* 4MB for contents of regular files, 64k inodes for directories, symbolic links and device specials, using
* large storage array systems as a baseline */
 #define TMPFS_LIMITS_DEV             ",size=4m,nr_inodes=64k"
+
 /* Very little, if any use expected */
 #define TMPFS_LIMITS_EMPTY_OR_ALMOST ",size=4m,nr_inodes=1k"
 #define TMPFS_LIMITS_SYS             TMPFS_LIMITS_EMPTY_OR_ALMOST
 #define TMPFS_LIMITS_SYS_FS_CGROUP   TMPFS_LIMITS_EMPTY_OR_ALMOST
-/* On an extremely small device with only 256MB of RAM, 20% of RAM for /run should be enough for re-exec of
-   PID1 because 16MB of free space is required. */
+
+/* On an extremely small device with only 256MB of RAM, 20% of RAM should be enough for the re-execution of
+ * PID1 because 16MB of free space is required. */
 #define TMPFS_LIMITS_RUN             ",size=20%,nr_inodes=800k"
-/* 10% of RAM (using 16GB of RAM as a baseline) translates to 400k inodes (assuming 4k each) and 25%
-   translates to 1M inodes */
+
+/* The limit used for various tmpfs mounts, but not /tmp itself.
+ * 10% of RAM (using 16GB of RAM as a baseline) translates to 400k inodes (assuming 4k each) and 25%
+ * translates to 1M inodes.
+ * /tmp is configured through a .mount unit file. */
 #define TMPFS_LIMITS_TMP             ",size=10%,nr_inodes=400k"
 #define TMPFS_LIMITS_DEV_SHM         TMPFS_LIMITS_TMP
 #define TMPFS_LIMITS_TEMPORARY_FS    TMPFS_LIMITS_TMP
+
 /* More space for volatile root and /var */
 #define TMPFS_LIMITS_VAR             ",size=25%,nr_inodes=1m"
 #define TMPFS_LIMITS_ROOTFS          TMPFS_LIMITS_VAR
index 7066e522612514c1ad0dc92f71953fee1e322d50..cf6837852fc2f930ed50e0fe339ecdcf513c9e3a 100644 (file)
@@ -22,4 +22,4 @@ After=swap.target
 What=tmpfs
 Where=/tmp
 Type=tmpfs
-Options=mode=1777,strictatime,nosuid,nodev,size=10%,nr_inodes=400k
+Options=mode=1777,strictatime,nosuid,nodev,size=50%,nr_inodes=400k