From 362a55fc14a8933e0184fb79114fc91d54d1bb40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 24 Jul 2020 22:05:21 +0200 Subject: [PATCH] Bump /tmp size back to 50% of RAM 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 | 18 ++++++++++++------ units/tmp.mount | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/shared/mount-util.h b/src/shared/mount-util.h index 5934d716786..7bad3743e0d 100644 --- a/src/shared/mount-util.h +++ b/src/shared/mount-util.h @@ -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 diff --git a/units/tmp.mount b/units/tmp.mount index 7066e522612..cf6837852fc 100644 --- a/units/tmp.mount +++ b/units/tmp.mount @@ -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