Message ID | 20190308041426.16654-1-tobin@kernel.org (mailing list archive) |
---|---|
Headers | show |
Series | mm: Implement Slab Movable Objects (SMO) | expand |
On Fri, Mar 08, 2019 at 03:14:11PM +1100, Tobin C. Harding wrote: > Hi, > > Here is a patch set implementing movable objects within the SLUB > allocator. This is work based on Christopher's patch set: > > https://lore.kernel.org/patchwork/project/lkml/list/?series=377335 > > The original code logic is from that set and implemented by Christopher. > Clean up, refactoring, documentation, and additional features by myself. > Blame for any bugs remaining falls solely with myself. Patches using > Christopher's code use the Co-developed-by tag. > > After movable objects are implemented a number of useful features become > possible. Some of these are implemented in this series, including: > > - Cache defragmentation. > > Currently the SLUB allocator is susceptible to internal > fragmentation. This occurs when a large number of cached objects > are allocated and then freed in an arbitrary order. As the cache > fragments the number of pages used by the partial slabs list > increases. This wastes memory. > > Patch set implements the machinery to facilitate conditional cache > defragmentation (via kmem_cache_defrag()) and unconditional > defragmentation (via kmem_cache_shrink()). Various sysfs knobs are > provided to interact with and configure this. > > Patch set implements movable objects and cache defragmentation for > the XArray. > > - Moving objects to and from a specific NUMA node. > > - Balancing objects across all NUMA nodes. > > We add a test module to facilitate playing around with movable objects > and a python test suite that uses the module. > > Everything except the NUMA stuff was tested on bare metal, the NUMA > stuff was tested with Qemu NUMA emulation. > > Possible further work: > > 1. Implementing movable objects for the inode and dentry caches. > > 2. Tying into the page migration and page defragmentation logic so that > so far unmovable pages that are in the way of creating a contiguous > block of memory will become movable. This would mean checking for > slab pages in the migration logic and calling slab to see if it can > move the page by migrating all objects. Hi Tobin! Very interesting and promising patchset! Looking forward for inode/dentry moving support, might be a big deal for allocating huge pages dynamically. Thanks!
On Tue, Mar 12, 2019 at 12:09:31AM +0000, Roman Gushchin wrote: > On Fri, Mar 08, 2019 at 03:14:11PM +1100, Tobin C. Harding wrote: > > Hi, > > > > Here is a patch set implementing movable objects within the SLUB > > allocator. This is work based on Christopher's patch set: > > > > https://lore.kernel.org/patchwork/project/lkml/list/?series=377335 > > > > The original code logic is from that set and implemented by Christopher. > > Clean up, refactoring, documentation, and additional features by myself. > > Blame for any bugs remaining falls solely with myself. Patches using > > Christopher's code use the Co-developed-by tag. > > > > After movable objects are implemented a number of useful features become > > possible. Some of these are implemented in this series, including: > > > > - Cache defragmentation. > > > > Currently the SLUB allocator is susceptible to internal > > fragmentation. This occurs when a large number of cached objects > > are allocated and then freed in an arbitrary order. As the cache > > fragments the number of pages used by the partial slabs list > > increases. This wastes memory. > > > > Patch set implements the machinery to facilitate conditional cache > > defragmentation (via kmem_cache_defrag()) and unconditional > > defragmentation (via kmem_cache_shrink()). Various sysfs knobs are > > provided to interact with and configure this. > > > > Patch set implements movable objects and cache defragmentation for > > the XArray. > > > > - Moving objects to and from a specific NUMA node. > > > > - Balancing objects across all NUMA nodes. > > > > We add a test module to facilitate playing around with movable objects > > and a python test suite that uses the module. > > > > Everything except the NUMA stuff was tested on bare metal, the NUMA > > stuff was tested with Qemu NUMA emulation. > > > > Possible further work: > > > > 1. Implementing movable objects for the inode and dentry caches. > > > > 2. Tying into the page migration and page defragmentation logic so that > > so far unmovable pages that are in the way of creating a contiguous > > block of memory will become movable. This would mean checking for > > slab pages in the migration logic and calling slab to see if it can > > move the page by migrating all objects. > > > Hi Tobin! > > Very interesting and promising patchset! Looking forward for inode/dentry > moving support, might be a big deal for allocating huge pages dynamically. Thanks Roman, appreciate the support. I'm working on inode and dentry now. Tobin