• Daniel Jordan's avatar
    padata: remove exit routine · 305dacf7
    Daniel Jordan authored
    Patch series "padata: parallelize deferred page init", v3.
    
    Deferred struct page init is a bottleneck in kernel boot--the biggest for
    us and probably others.  Optimizing it maximizes availability for
    large-memory systems and allows spinning up short-lived VMs as needed
    without having to leave them running.  It also benefits bare metal
    machines hosting VMs that are sensitive to downtime.  In projects such as
    VMM Fast Restart[1], where guest state is preserved across kexec reboot,
    it helps prevent application and network timeouts in the guests.
    
    So, multithread deferred init to take full advantage of system memory
    bandwidth.
    
    Extend padata, a framework that handles many parallel singlethreaded jobs,
    to handle multithreaded jobs as well by adding support for splitting up
    the work evenly, specifying a minimum amount of work that's appropriate
    for one helper thread to do, load balancing between helpers, and
    coordinating them.  More documentation in patches 4 and 8.
    
    This series is the first step in a project to address other memory
    proportional bottlenecks in the kernel such as pmem struct page init, vfio
    page pinning, hugetlb fallocate, and munmap.  Deferred page init doesn't
    require concurrency limits, resource control, or priority adjustments like
    these other users will because it happens during boot when the system is
    otherwise idle and waiting for page init to finish.
    
    This has been run on a variety of x86 systems and speeds up kernel boot by
    4% to 49%, saving up to 1.6 out of 4 seconds.  Patch 6 has more numbers.
    
    This patch (of 8):
    
    padata_driver_exit() is unnecessary because padata isn't built as a module
    and doesn't exit.
    
    padata's init routine will soon allocate memory, so getting rid of the
    exit function now avoids pointless code to free it.
    Signed-off-by: default avatarDaniel Jordan <daniel.m.jordan@oracle.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Tested-by: default avatarJosh Triplett <josh@joshtriplett.org>
    Cc: Alexander Duyck <alexander.h.duyck@linux.intel.com>
    Cc: Alex Williamson <alex.williamson@redhat.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Kirill Tkhai <ktkhai@virtuozzo.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Pavel Machek <pavel@ucw.cz>
    Cc: Pavel Tatashin <pasha.tatashin@soleen.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: Robert Elliott <elliott@hpe.com>
    Cc: Shile Zhang <shile.zhang@linux.alibaba.com>
    Cc: Steffen Klassert <steffen.klassert@secunet.com>
    Cc: Steven Sistare <steven.sistare@oracle.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Zi Yan <ziy@nvidia.com>
    Link: http://lkml.kernel.org/r/20200527173608.2885243-1-daniel.m.jordan@oracle.com
    Link: http://lkml.kernel.org/r/20200527173608.2885243-2-daniel.m.jordan@oracle.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    305dacf7
padata.c 26 KB