libhugetlbfs man page on SuSE

Man page or keyword search:  
man Server   14857 pages
apropos Keyword Search (all sections)
Output format
SuSE logo
[printable version]

LIBHUGETLBFS(7)						       LIBHUGETLBFS(7)

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,  mal‐
       loc()  and shared memory with hugepages. This is of benefit to applica‐
       tions 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 appli‐
       cation 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/lib‐
       hugetlbfs/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 Hugepage‐
       size displayed in /proc/meminfo. The size can be specified in bytes  or
       in  kilobytes,  megabytes, or gigabytes by appending K, M, or G respec‐
       tively. 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 applica‐
       tion.  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  fea‐
       ture 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 lib‐
	      hugetlbfs to override glibc's normal morecore() function with  a
	      hugepage	version and use it for malloc().  All application mal‐
	      loc() 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 neces‐
	      sary 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 instruc‐
	      tions), 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	 guar‐
	      anteed  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  lib‐
	      hugetlbfs'  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  con‐
	      sume  hugepages.	 There	is  no	obvious benefit to causing the
	      script interpreters to use hugepages, and there is a clear  dis‐
	      advantage:  fewer hugepages are available to the actual applica‐
	      tion.

	      To address this scenario, set HUGETLB_RESTRICT_EXE to  a	colon-
	      separated list of programs to which the other libhugetlbfs envi‐
	      ronment 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 cre‐
	      ate  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 happen‐
	      ing 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),  gethugepage‐
       size(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)
[top]

List of man pages available for SuSE

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net