.\" SPDX-License-Identifier: BSD-2-Clause .\" Copyright (C) 2014 - 2020 Intel Corporation. .\" .TH "AUTOHBW" 7 "2016-07-28" "Intel Corporation" "AUTOHBW" \" -*- nroff -*- .SH "NAME" libautohbw.so \- An interposer library for redirecting heap allocations .SH "SYNOPSIS" .BR LD_PRELOAD=libautohbw.so command {arguments ...} .SH "DESCRIPTION" .B AutoHBW library .BR (libautohbw.so) is an interposer library for redirecting heap allocations .B (malloc, calloc, realloc, valloc, posix_memalign, memlign) to high-bandwidth .B (HBW) memory. Consequently, AutoHBW library can be used to automatically allocate high-bandwidth memory without any modification to source code of an application. .br For instance, the following command-line runs existing binary /bin/ls with AutoHBW library, automatically redirecting heap allocations (larger than a given threshold) to high-bandwidth memory. .IP .B LD_PRELOAD=libautohbw.so /bin/ls .SH "ENVIRONMENT" The behavior of AutoHBW library is controlled by the following environment variables. .PP .B AUTO_HBW_SIZE=x:[y] .br Indicates that any allocation larger than .I x and smaller than .I y should be allocated in HBW memory. .I x and .I y can be followed by a K, M, or G to indicate the size in Kilo/Memga/Giga bytes (e.g., 4K, 3M, 2G). .br Examples: .IP AUTO_HBW_SIZE=4K # allocations larger than 4K allocated in HBW .IP AUTO_HBW_SIZE=1M:5M # allocations between 1M and 5M allocated in HBW .PP .B AUTO_HBW_LOG=level .br Sets the value of logging (printing) .I level. If .I level is: .br .IP -1 no messages are printed .br .IP 0 no allocations messages are printed but INFO messages are printed .br .IP 1 a log message is printed for each allocation (Default) .br .IP 2 a log message is printed for each allocation with a backtrace. Redirect this output and use .B autohbw_get_src_lines.pl to find source lines for each allocation. Your application must be compiled with .B -g to see source lines. .PP Notes: .IP 1. Logging adds extra overhead. Therefore, for performance critical runs, logging level should be 0 .IP 2. The amount of free memory printed with log messages is only approximate -- e.g. pages that are not touched yet are excluded .PP Examples: .IP AUTO_HBW_LOG=1 .PP .B AUTO_HBW_MEM_TYPE=memory_type .br Sets the type of memory type that should be automatically allocated. By default, this type is MEMKIND_HBW_PREFERRED, if MCDRAM is found in your system; otherwise, the default is MEMKIND_DEFAULT. The names of memory types are defined in .B memkind(3) man page. .B memory_type has to be one of .B MEMKIND_DEFAULT, MEMKIND_HUGETLB, MEMKIND_INTERLEAVE, MEMKIND_HBW, .B MEMKIND_HBW_PREFERRED, MEMKIND_HBW_HUGETLB, MEMKIND_HBW_PREFERRED_HUGETLB, .B MEMKIND_HBW_GBTLB (DEPRECATED), MEMKIND_HBW_PREFERRED_GBTLB (DEPRECATED), MEMKIND_GBTLB (DEPRECATED), .B MEMKIND_HBW_INTERLEAVE If you are requesting any huge TLB pages, please make sure that the requested type is currently enabled in your OS. Examples: .IP AUTO_HBW_MEM_TYPE=MEMKIND_HBW_PREFERRED # (default, if MCDRAM present) .IP AUTO_HBW_MEM_TYPE=MEMKIND_DEFAULT # (default, if MCDRAM absent) .IP AUTO_HBW_MEM_TYPE=MEMKIND_HBW_HUGETLB .IP AUTO_HBW_MEM_TYPE=MEMKIND_HUGETLB .PP .B AUTO_HBW_DEBUG=0|1|2 .br Set the debug message printing level. Default is 0. This is mainly for development. .SH "NOTES" It is possible to temporarily disable/enable automatic HBW allocations by calling disableAutoHBW() and enableAutoHBW() in source code. To call these routines, please include .B autohbw_api.h header file and link with -lautohbw. .br If high-bandwidth memory is not physically present in your system, the environment variable .B MEMKIND_HBW_NODES must be set to indicate the high-bandwidth node as indicated in .B memkind(3). .SH "EXAMPLES" .br The following will run /bin/ls with AutoHBW library. Make sure that paths to both libautohbw.so and libmemkind.so are included in .B LD_LIBRARY_PATH. .IP .B LD_PRELOAD=libautohbw.so /bin/ls -l .PP To run with MPI, a shell script must be created, with the correct LD_PRELOAD command for each rank. For example, if we put .B LD_PRELOAD=libautohbw.so /bin/ls in a shell script named autohbw_test.sh, it can be executed with 2 MPI ranks as: .br .IP .B mpirun -n 2 ./autohbw_test.sh .SH "COPYRIGHT" Copyright (C) 2014 - 2020 Intel Corporation. All rights reserved. .SH "SEE ALSO" .BR memkind(3) .BR malloc (3), .BR numactl (8),