mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
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:
committed by
Brian Behlendorf
parent
4f60152910
commit
9829574834
@@ -24,6 +24,7 @@ USER_C = \
|
||||
getmntany.c \
|
||||
list.c \
|
||||
mkdirp.c \
|
||||
page.c \
|
||||
strlcat.c \
|
||||
strlcpy.c \
|
||||
strnlen.c \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
size_t pagesize = 0;
|
||||
|
||||
size_t
|
||||
spl_pagesize(void)
|
||||
{
|
||||
if (pagesize == 0)
|
||||
pagesize = sysconf(_SC_PAGESIZE);
|
||||
|
||||
return (pagesize);
|
||||
}
|
||||
Reference in New Issue
Block a user