Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use pages for emergency allocations when possible
A concept of an emergency allocation was introduced last year to permit allocations that took excessive periods of time to switch to physical memory to make forward progress. Unfortunately, the Linux kernel's physical memory allocator does SLAB allocation for all allocations less than or equal to 8192. It is possible for Linux's SLAB allocator to invoke direct reclaim when allocating new slabs. This can cause swap to deadlock. Additionally, memory fragmentation is able to cause allocations to hang whenever an allocation is made from a cache that uses slabs that span multiple pages. In specific, whenever the allocation is greater than 256-bytes. Whenever an emergency object is small enough to fit into a single page and we allocate a page for the emergency allocation instead of going through kmalloc(). If the object and its ske header cannot fit together in a single page, we allocate two non-contiguous pages. Larger object sizes are still at risk, but there is little we can do for them. Signed-off-by: Richard Yao <[email protected]>
- Loading branch information