ABD optimized page allocation code

* Convert ABD to use the Linux Kernel scatterlist implementation
  instead of the hand rolled one from illumos.

* Scatter ABDs are preferentially populated with higher order
  compound pages from a single zone.  Allocation size is
  progressively decreased until it can be satisfied without
  performing reclaim or compaction.

* An alternate page allocator is provided for kernels older
  than 3.6 and for CONFIG_HIGHMEM systems.  This allocator
  is designed as a fallback for maximum compatibility.

* Extended abdstats to provide visibility in the the allocator.

* Add cached value for PAGESIZE in userspace.

Contributions-by:
Chunwei Chen <david.chen@osnexus.com>
Gvozden Neskovic <neskovic@gmail.com>
Jinshan Xiong <jinshan.xiong@intel.com>
Isaac Huang <he.huang@intel.com>
David Quigley <david.quigley@intel.com>
Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
Chunwei Chen
2016-10-26 00:32:23 -04:00
committed by Brian Behlendorf
parent 4f60152910
commit 9829574834
5 changed files with 465 additions and 144 deletions
+5 -2
View File
@@ -57,8 +57,11 @@
#define MAXUID UINT32_MAX /* max user id */
#define MAXPROJID MAXUID /* max project id */
#ifndef PAGESIZE
#define PAGESIZE (sysconf(_SC_PAGESIZE))
#ifdef PAGESIZE
#undef PAGESIZE
#endif /* PAGESIZE */
extern size_t spl_pagesize(void);
#define PAGESIZE (spl_pagesize())
#endif