Remove --with-lg-tiny-min.
This option isn't useful in practice. This partially resolves #580.
This commit is contained in:
parent
b54530020f
commit
af76f0e5d2
37
INSTALL
37
INSTALL
@ -233,38 +233,17 @@ any of the following arguments (not a definitive list) to 'configure':
|
|||||||
This setting is architecture-specific, and although jemalloc includes known
|
This setting is architecture-specific, and although jemalloc includes known
|
||||||
safe values for the most commonly used modern architectures, there is a
|
safe values for the most commonly used modern architectures, there is a
|
||||||
wrinkle related to GNU libc (glibc) that may impact your choice of
|
wrinkle related to GNU libc (glibc) that may impact your choice of
|
||||||
<lg-quantum>. On most modern architectures, this mandates 16-byte alignment
|
<lg-quantum>. On most modern architectures, this mandates 16-byte
|
||||||
(<lg-quantum>=4), but the glibc developers chose not to meet this
|
alignment (<lg-quantum>=4), but the glibc developers chose not to meet this
|
||||||
requirement for performance reasons. An old discussion can be found at
|
requirement for performance reasons. An old discussion can be found at
|
||||||
https://sourceware.org/bugzilla/show_bug.cgi?id=206 . Unlike glibc,
|
https://sourceware.org/bugzilla/show_bug.cgi?id=206 . Unlike glibc,
|
||||||
jemalloc does follow the C standard by default (caveat: jemalloc
|
jemalloc does follow the C standard by default (caveat: jemalloc
|
||||||
technically cheats if --with-lg-tiny-min is smaller than
|
technically cheats for size classes smaller than the quantum), but the fact
|
||||||
--with-lg-quantum), but the fact that Linux systems already work around
|
that Linux systems already work around this allocator noncompliance means
|
||||||
this allocator noncompliance means that it is generally safe in practice to
|
that it is generally safe in practice to let jemalloc's minimum alignment
|
||||||
let jemalloc's minimum alignment follow glibc's lead. If you specify
|
follow glibc's lead. If you specify --with-lg-quantum=3 during
|
||||||
--with-lg-quantum=3 during configuration, jemalloc will provide additional
|
configuration, jemalloc will provide additional size classes that are not
|
||||||
size classes that are not 16-byte-aligned (24, 40, and 56).
|
16-byte-aligned (24, 40, and 56).
|
||||||
|
|
||||||
--with-lg-tiny-min=<lg-tiny-min>
|
|
||||||
Specify the base 2 log of the minimum tiny size class to support. Tiny
|
|
||||||
size classes are powers of 2 less than the quantum, and are only
|
|
||||||
incorporated if <lg-tiny-min> is less than <lg-quantum> (see
|
|
||||||
--with-lg-quantum). Tiny size classes technically violate the C standard
|
|
||||||
requirement for minimum alignment, and crashes could conceivably result if
|
|
||||||
the compiler were to generate instructions that made alignment assumptions,
|
|
||||||
both because illegal instruction traps could result, and because accesses
|
|
||||||
could straddle page boundaries and cause segmentation faults due to
|
|
||||||
accessing unmapped addresses.
|
|
||||||
|
|
||||||
The default of <lg-tiny-min>=3 works well in practice even on architectures
|
|
||||||
that technically require 16-byte alignment, probably for the same reason
|
|
||||||
--with-lg-quantum=3 works. Smaller tiny size classes can, and will, cause
|
|
||||||
crashes (see https://bugzilla.mozilla.org/show_bug.cgi?id=691003 for an
|
|
||||||
example).
|
|
||||||
|
|
||||||
This option is rarely useful, and is mainly provided as documentation of a
|
|
||||||
subtle implementation detail. If you do use this option, specify a
|
|
||||||
value in [3, ..., <lg-quantum>].
|
|
||||||
|
|
||||||
The following environment variables (not a definitive list) impact configure's
|
The following environment variables (not a definitive list) impact configure's
|
||||||
behavior:
|
behavior:
|
||||||
|
10
configure.ac
10
configure.ac
@ -1296,13 +1296,6 @@ else
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_WITH([lg_tiny_min],
|
|
||||||
[AS_HELP_STRING([--with-lg-tiny-min=<lg-tiny-min>],
|
|
||||||
[Base 2 log of minimum tiny size class to support])],
|
|
||||||
[LG_TINY_MIN="$with_lg_tiny_min"],
|
|
||||||
[LG_TINY_MIN="3"])
|
|
||||||
AC_DEFINE_UNQUOTED([LG_TINY_MIN], [$LG_TINY_MIN])
|
|
||||||
|
|
||||||
AC_ARG_WITH([lg_quantum],
|
AC_ARG_WITH([lg_quantum],
|
||||||
[AS_HELP_STRING([--with-lg-quantum=<lg-quantum>],
|
[AS_HELP_STRING([--with-lg-quantum=<lg-quantum>],
|
||||||
[Base 2 log of minimum allocation alignment])],
|
[Base 2 log of minimum allocation alignment])],
|
||||||
@ -2016,13 +2009,12 @@ AC_CONFIG_COMMANDS([include/jemalloc/internal/public_unnamespace.h], [
|
|||||||
])
|
])
|
||||||
AC_CONFIG_COMMANDS([include/jemalloc/internal/size_classes.h], [
|
AC_CONFIG_COMMANDS([include/jemalloc/internal/size_classes.h], [
|
||||||
mkdir -p "${objroot}include/jemalloc/internal"
|
mkdir -p "${objroot}include/jemalloc/internal"
|
||||||
"${SHELL}" "${srcdir}/include/jemalloc/internal/size_classes.sh" "${LG_QUANTA}" ${LG_TINY_MIN} "${LG_PAGE_SIZES}" 2 > "${objroot}include/jemalloc/internal/size_classes.h"
|
"${SHELL}" "${srcdir}/include/jemalloc/internal/size_classes.sh" "${LG_QUANTA}" 3 "${LG_PAGE_SIZES}" 2 > "${objroot}include/jemalloc/internal/size_classes.h"
|
||||||
], [
|
], [
|
||||||
SHELL="${SHELL}"
|
SHELL="${SHELL}"
|
||||||
srcdir="${srcdir}"
|
srcdir="${srcdir}"
|
||||||
objroot="${objroot}"
|
objroot="${objroot}"
|
||||||
LG_QUANTA="${LG_QUANTA}"
|
LG_QUANTA="${LG_QUANTA}"
|
||||||
LG_TINY_MIN=${LG_TINY_MIN}
|
|
||||||
LG_PAGE_SIZES="${LG_PAGE_SIZES}"
|
LG_PAGE_SIZES="${LG_PAGE_SIZES}"
|
||||||
])
|
])
|
||||||
AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_protos_jet.h], [
|
AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_protos_jet.h], [
|
||||||
|
@ -172,9 +172,6 @@
|
|||||||
/* Support lazy locking (avoid locking unless a second thread is launched). */
|
/* Support lazy locking (avoid locking unless a second thread is launched). */
|
||||||
#undef JEMALLOC_LAZY_LOCK
|
#undef JEMALLOC_LAZY_LOCK
|
||||||
|
|
||||||
/* Minimum size class to support is 2^LG_TINY_MIN bytes. */
|
|
||||||
#undef LG_TINY_MIN
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Minimum allocation alignment is 2^LG_QUANTUM bytes (ignoring tiny size
|
* Minimum allocation alignment is 2^LG_QUANTUM bytes (ignoring tiny size
|
||||||
* classes).
|
* classes).
|
||||||
|
@ -285,6 +285,7 @@ cat <<EOF
|
|||||||
* This header file defines:
|
* This header file defines:
|
||||||
*
|
*
|
||||||
* LG_SIZE_CLASS_GROUP: Lg of size class count for each size doubling.
|
* LG_SIZE_CLASS_GROUP: Lg of size class count for each size doubling.
|
||||||
|
* LG_TINY_MIN: Lg of minimum size class to support.
|
||||||
* SIZE_CLASSES: Complete table of SC(index, lg_grp, lg_delta, ndelta, psz,
|
* SIZE_CLASSES: Complete table of SC(index, lg_grp, lg_delta, ndelta, psz,
|
||||||
* bin, pgs, lg_delta_lookup) tuples.
|
* bin, pgs, lg_delta_lookup) tuples.
|
||||||
* index: Size class index.
|
* index: Size class index.
|
||||||
@ -310,6 +311,7 @@ cat <<EOF
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define LG_SIZE_CLASS_GROUP ${lg_g}
|
#define LG_SIZE_CLASS_GROUP ${lg_g}
|
||||||
|
#define LG_TINY_MIN ${lg_tmin}
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user