Provided by: libhugetlbfs0_2.17-0ubuntu2_amd64 

NAME
libhugetlbfs - preload library to back text, data, malloc() or shared memory with hugepages
SYNOPSIS
export [environment options]
[LD_PRELOAD=libhugetlbfs.so] target_application
DESCRIPTION
libhugetlbfs is a library that can back application text, data, malloc() and shared memory with
hugepages. This is of benefit to applications that use large amounts of address space and suffer a
performance hit due to TLB misses. Wall-clock time or oprofile can be used to determine if there is a
performance benefit from using libhugetlbfs or not. In all cases but shared memory, a hugetlbfs mount
must exist and a hugepage pool defined for hugepages to be used.
Some limited functionality is available for unmodified dynamically linked applications. By preloading the
library, the library can back malloc() and shared memory, and text and data segments can be partially
backed if they are large enough.
For the effective backing of text and data with huge pages, the application must be linked to the library
and the ELF segments correctly aligned using the ld helpers. Once linked, malloc or shared memory can
still be backed but no pre-loading is required. See /usr/share/doc/libhugetlbfs/HOWTO and ld.hugetlbfs(1)
for detailed instructions on relinking applications.
For applications that are hugepage-aware and linked to the library get_huge_pages() can be used for the
direct allocation of hugepage-backed regions.
Unless otherwise specified, libhugetlbfs will use the default hugepage size to back memory regions. The
default size is the value of Hugepagesize displayed in /proc/meminfo. The size can be specified in bytes
or in kilobytes, megabytes, or gigabytes by appending K, M, or G respectively. It is an error to specify
a invalid, unsupported, or otherwise unconfigured huge page size. Kernel 2.6.27 or later is required to
specify any pagesize other than the default.
See /usr/share/docs/libhugetlbfs/HOWTO for detailed instructions on how the library should be used,
particularly when relinking the application. This manual page provides a brief synopsis of the
environment variables as a quick reference.
The following variables affect what memory regions are backed by hugepages. In all cases, the environment
being unset implies the feature should remain disabled.
HUGETLB_DEFAULT_PAGE_SIZE=<pagesize>
This sets the default hugepage size to be used by libhugetlbfs. If not set, libhugetlbfs will use
the kernel's default hugepage size.
HUGETLB_MORECORE=[yes|<pagesize>]
This enables the hugepage malloc() feature, instructing libhugetlbfs to override glibc's normal
morecore() function with a hugepage version and use it for malloc(). All application malloc()
memory should come from hugepage memory until it runs out, it will then fallback to base pages.
Note that applications that use custom allocators may not be able to back their heaps using
hugepages and this environment variable. It may be necessary to modify the custom allocator to use
get_huge_pages().
HUGETLB_SHM=yes
When this environment variable is set, the SHM_HUGETLB flag is added to the shmget() call and the
size parameter is aligned to back the shared memory segment with hugepages. In the event hugepages
cannot be used, base pages will be used instead and a warning will be printed to explain the
failure. The pagesize cannot be specified with this parameter. To change the kernels default
hugepage size, use the pagesize= kernel boot parameter (2.6.26 or later required).
HUGETLB_ELFMAP=[no|[R[<=pagesize>]:[W[<=pagesize>]]]
If the application has been relinked (see the HOWTO for instructions), this environment variable
determines whether read-only, read-write, both or no segments are backed by hugepages and what
pagesize should be used. If the recommended relinking method has been used, then hugeedit can be
used to automatically back the text or data by default.
HUGETLB_FORCE_ELFMAP=yes
Force the use of hugepages for text and data segments even if the application has not been
relinked to align the ELF segments on a hugepage boundary. Partial segment remapping is not
guaranteed to work and the segments must be large enough to contain at least one hugepage for the
remapping to occur.
The following options affect how libhugetlbfs behaves.
HUGETLB_RESTRICT_EXE=e1:e2:...:eN
By default, libhugetlbfs will act on any program that it is loaded with, either via LD_PRELOAD or
by explicitly linking with -lhugetlbfs.
There are situations in which it is desirable to restrict libhugetlbfs' actions to specific
programs. For example, some ISV applications are wrapped in a series of scripts that invoke bash,
python, and/or perl. It is more convenient to set the environment variables related to
libhugetlbfs before invoking the wrapper scripts, yet this has the unintended and undesirable
consequence of causing the script interpreters to use and consume hugepages. There is no obvious
benefit to causing the script interpreters to use hugepages, and there is a clear disadvantage:
fewer hugepages are available to the actual application.
To address this scenario, set HUGETLB_RESTRICT_EXE to a colon-separated list of programs to which
the other libhugetlbfs environment variables should apply. (If not set, libhugetlbfs will attempt
to apply the requested actions to all programs.) For example,
HUGETLB_RESTRICT_EXE=hpcc:long_hpcc
will restrict libhugetlbfs' actions to programs named /home/fred/hpcc and /bench/long_hpcc but not
/bin/hpcc_no.
HUGETLB_MORECORE_SHRINK=yes
By default, the hugepage heap does not shrink. Shrinking is enabled by setting this environment
variable. It is disabled by default as glibc occasionally exhibits strange behaviour if it
mistakes the heap returned by libhugetlbfs as a foreign brk().
HUGETLB_NO_PREFAULT
By default libhugetlbfs will prefault regions it creates to ensure they can be referenced without
receiving a SIGKILL. On kernels older than 2.6.27, this was necessary as the system did not
guarantee that future faults would succeed on regions mapped MAP_PRIVATE. Prefaulting impacts the
performance of malloc() and can result in poor placement on NUMA systems. If it is known the
hugepage pool is large enough to run the application or the kernel is 2.6.27 or later, this
environment variable should be set.
HUGETLB_NO_RESERVE=yes
By default, the kernel will reserve huge pages at mmap() time to ensure that future faults will
succeed. This avoids unexpected application failure at fault time but some applications depend on
memory overcommit to create large sparse mappings. For this type of application, setting this
environment variable will create huge page backed mappings without a reservation. Use this option
with extreme care as in the event huge pages are not available when the mapping is used, the
application will be killed. On older kernels, the use of this feature can trigger the OOM killer.
Hence, even with this variable set, reservations may still be used for safety.
HUGETLB_MORECORE_HEAPBASE=address
libhugetlbfs normally picks an address to use as the base of the heap for malloc() automatically.
This environment variable fixes which address is used.
HUGETLB_PATH=<path>
The path to the hugetlbfs mount is automatically determined at run-time. In the event there are
multiple mounts and the wrong one is being selected, use this option to select the correct one.
This may be the case if an application-specific mount with a fixed quota has been created for
example.
HUGETLB_SHARE=1
By default, libhugetlbfs uses unlinked hugetlbfs files to store remapped program segment data. If
the same program is started multiple times using hugepage segments, multiple hugepages will be
used to store the same program data. The reduce this wastage, setting this environment variable
will share read-only segments between multiple invocations of a program at the cost of the memory
being used whether the applications are running or not. It is also possible that a malicious
application inferfere with other applications executable code. See the HOWTO for more detailed
information on this topic.
The following options control the verbosity of libhugetlbfs.
HUGETLB_VERBOSE=<level>
The default value for this is 1 and the range of the value is from 0 to 99. The higher the value,
the more verbose the output is. 0 is quiet and 3 will output much debugging information.
HUGETLB_DEBUG
Once set, this will give very detailed output on what is happening in the library and run extra
diagnostics.
FILES
[DESTDIR|/usr/share]/doc/libhugetlbfs/HOWTO
SEE ALSO
oprofile(1), ld.hugetlbfs(1), hugectl(8), hugeedit(8), gethugepagesize(3), gethugepagesizes(3),
getpagesizes(3), hugetlbfs_test_path(3), hugetlbfs_find_path(3), hugetlbfs_find_path_for_size(3),
hugetlbfs_test_path(3), hugetlbfs_test_path_for_size(3), hugetlbfs_unlinked_fd(3),
hugetlbfs_unlinked_fd_for_size(3), get_huge_pages(3), free_huge_pages(3)
AUTHORS
libhugetlbfs was written by various people on the libhugetlbfs-devel mailing list.
September 27, 2008 LIBHUGETLBFS(7)