| Introduction |
| ============ |
| |
| libmlx4 is a userspace driver for Mellanox ConnectX InfiniBand HCAs. |
| It is a plug-in module for libibverbs that allows programs to use |
| Mellanox hardware directly from userspace. See the libibverbs package |
| for more information. |
| |
| Using libmlx4 |
| ============== |
| |
| libmlx4 will be loaded and used automatically by programs linked with |
| libibverbs. The mlx4_ib kernel module must be loaded for HCA devices |
| to be detected and used. |
| |
| Supported Hardware |
| ================== |
| |
| libmlx4 currently supports HCAs based on the following Mellanox chip: |
| |
| MT25408 ConnectX (PCI Express) |
| |
| These HCAs use the mlx4_ib kernel driver. Support for other Mellanox |
| HCAs, which use the ib_mthca kernel driver, is provided by the |
| libmthca userspace driver. |
| |
| Valgrind Support |
| ================ |
| |
| When running applications that use libibverbs under the Valgrind |
| memory-checking debugger, Valgrind will falsely report "read from |
| uninitialized" for memory that was initialized by the kernel drivers |
| or HCA hardware. Specifically, Valgrind cannot see when kernel |
| drivers or HCA hardware write to userspace memory, so when the process |
| reads from that memory, Valgrind incorrectly assumes that the memory |
| contents are uninitialized, and therefore raises a warning. |
| |
| libmlx4 can be built with specific support for the Valgrind |
| memory-checking debugger by specifying the --with-valgrind command |
| line argument to configure. This flag enables code in libibverbs to |
| tell Valgrind "this memory may look uninitialized, but it's really |
| OK," which therefore suppresses the incorrect "read from |
| uninitialized" warnings. This code adds trivial overhead to the |
| critical performance path, so it is disabled by default. The intent |
| is that production users can use a "normal" build of libmlx4 and |
| developers can use the "valgrind debug" build by simply switching |
| their OPENIB_DRIVER_PATH environment variables. |
| |
| Libmlx4 needs some header files from Valgrind in order to compile this |
| support; it is important to use the header files from the same version |
| of Valgrind that will be used at run time. You may need to specify |
| the directory where Valgrind's header files are installed as an |
| argument to --with-valgrind. For example |
| |
| ./configure --with-valgrind=/opt/valgrind |
| |
| will make the libmlx4 build look for valgrind headers in |
| /opt/valgrind/include |