From: Kirill Tkhai <ktk...@virtuozzo.com> Patchset description: Shrink big fdtable on criu restore
This patchset allows to avoid memory overuse introduced by service fds on criu restore. The solution is simple: smartly check for closed fd number, and shrink fdtable if this could be made. The checks are happen in is_pseudosuper mode, so we do not affect performance on normal work mode. The problem is we can't solve this for 100% case in userspace. Kernel allows to fix that completely. https://jira.sw.ru/browse/PSBM-78827 Eric Dumazet (1): ms/fs/file.c: don't acquire files->file_lock in fd_install() Kirill Tkhai (3): files: Add new argument to expand_files() files: Add fdtable_align() helper files: Shrink big fdtable on close in is_pseudosuper mode Mateusz Guzik (1): ms/vfs: grab the lock instead of blocking in __fd_install during resizing ============================================================ This patch description: Move alignment functionality from expand_fdtable() to separate function. This will be used in next patch. Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com> Reviewed-by: Cyrill Gorcunov <gorcu...@openvz.org> (cherry picked from vz7 commit 2437df57ec6e ("ve/fs/files: Add fdtable_align() helper")) Signed-off-by: Andrey Zhadchenko <andrey.zhadche...@virtuozzo.com> (cherry picked from vz8 commit 4ea6b522d53a51f6af307a7deacc6c1d6e215b30) Signed-off-by: Andrey Zhadchenko <andrey.zhadche...@virtuozzo.com> --- fs/file.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/fs/file.c b/fs/file.c index 3a17945..2163301 100644 --- a/fs/file.c +++ b/fs/file.c @@ -87,11 +87,8 @@ static void copy_fdtable(struct fdtable *nfdt, struct fdtable *ofdt, bool shrink copy_fd_bitmaps(nfdt, ofdt, ofdt->max_fds); } -static struct fdtable * alloc_fdtable(unsigned int nr) +static unsigned int fdtable_align(unsigned int nr) { - struct fdtable *fdt; - void *data; - /* * Figure out how many fds we actually want to support in this fdtable. * Allocation steps are keyed to the size of the fdarray, since it @@ -113,6 +110,16 @@ static struct fdtable * alloc_fdtable(unsigned int nr) if (unlikely(nr > sysctl_nr_open)) nr = ((sysctl_nr_open - 1) | (BITS_PER_LONG - 1)) + 1; + return nr; +} + +static struct fdtable * alloc_fdtable(unsigned int nr) +{ + struct fdtable *fdt; + void *data; + + nr = fdtable_align(nr); + fdt = kmalloc(sizeof(struct fdtable), GFP_KERNEL_ACCOUNT); if (!fdt) goto out; -- 1.8.3.1 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel