On Thu, Aug 27, 2020 at 10:18 PM Vivek Goyal <vgoyal@xxxxxxxxxx> wrote: > > Container folks are complaining that dnf/yum issues too many sync while > installing packages and this slows down the image build. Build > requirement is such that they don't care if a node goes down while > build was still going on. In that case, they will simply throw away > unfinished layer and start new build. So they don't care about syncing > intermediate state to the disk and hence don't want to pay the price > associated with sync. > > So they are asking for mount options where they can disable sync on overlay > mount point. > > They primarily seem to have two use cases. > > - For building images, they will mount overlay with nosync and then sync > upper layer after unmounting overlay and reuse upper as lower for next > layer. > > - For running containers, they don't seem to care about syncing upper > layer because if node goes down, they will simply throw away upper > layer and create a fresh one. > > So this patch provides a mount option "volatile" which disables all forms > of sync. Now it is caller's responsibility to throw away upper if > system crashes or shuts down and start fresh. > > With "volatile", I am seeing roughly 20% speed up in my VM where I am just > installing emacs in an image. Installation time drops from 31 seconds to > 25 seconds when nosync option is used. This is for the case of building on top > of an image where all packages are already cached. That way I take > out the network operations latency out of the measurement. > > Giuseppe is also looking to cut down on number of iops done on the > disk. He is complaining that often in cloud their VMs are throttled > if they cross the limit. This option can help them where they reduce > number of iops (by cutting down on frequent sync and writebacks). > > Changes from v5: > - Added support to detect that previous overlay was mounted with > "volatile" option and fail mount. (Miklos and Amir). > > Changes from v4: > - Dropped support for sync=fs (Miklos) > - Renamed "sync=off" to "volatile". (Miklos) > > Changes from v3: > - Used only enums and dropped bit flags (Amir Goldstein) > - Dropped error when conflicting sync options provided. (Amir Goldstein) > > Changes from v2: > - Added helper functions (Amir Goldstein) > - Used enums to keep sync state (Amir Goldstein) > > Signed-off-by: Giuseppe Scrivano <gscrivan@xxxxxxxxxx> > Signed-off-by: Miklos Szeredi <mszeredi@xxxxxxxxxx> ??? > Signed-off-by: Vivek Goyal <vgoyal@xxxxxxxxxx> > --- > Documentation/filesystems/overlayfs.rst | 17 ++++ > fs/overlayfs/copy_up.c | 12 ++- > fs/overlayfs/file.c | 10 +- > fs/overlayfs/ovl_entry.h | 6 ++ > fs/overlayfs/readdir.c | 3 + > fs/overlayfs/super.c | 128 +++++++++++++++++++++++- > 6 files changed, 168 insertions(+), 8 deletions(-) > > diff --git a/Documentation/filesystems/overlayfs.rst b/Documentation/filesystems/overlayfs.rst > index 8ea83a51c266..438add193166 100644 > --- a/Documentation/filesystems/overlayfs.rst > +++ b/Documentation/filesystems/overlayfs.rst > @@ -563,6 +563,23 @@ This verification may cause significant overhead in some cases. > Note: the mount options index=off,nfs_export=on are conflicting for a > read-write mount and will result in an error. > > +Disable sync > +------------ > +By default, overlay skips sync on files residing on a lower layer. It > +is possible to skip sync operations for files on the upper layer as well > +with the "volatile" mount option. > + > +"volatile" mount option disables all forms of sync from overlay, including > +the one done at umount/remount. If system crashes or shuts down, user > +should throw away upper directory and start fresh. > + > +When overlay is mounted with "volatile" option, overlay creates an internal > +file "$workdir/work/incompat/volatile/dirty". During next mount, overlay > +checks for dirty file and refuses to mount if present. This is a strong > +indicator that user should throw away upper and work directories and > +create fresh one. In very limited cases where user knows system has not > +crashed and contents in upperdir are intact, one can remove "dirty" file and > +retry mount. Just in case my comment about documentation wasn't clear: +When overlay is mounted with "volatile" option, overlay creates an internal +directory "$workdir/work/incompat/volatile". During next mount, overlay +checks for this directory and refuses to mount if present. This is a strong +indicator that user should throw away upper and work directories and +create fresh one. In very limited cases where user knows system has not +crashed and contents in upperdir are intact, one can remove the "volatile" +directory and retry mount. Thanks, Amir.