Copyright © 2009 CNRS Copyright © 2009-2011 inria. All rights reserved. Copyright © 2009-2012 Université Bordeaux 1 Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved. $COPYRIGHT$ Additional copyrights may follow $HEADER$ =========================================================================== This file contains the main features as well as overviews of specific bug fixes (and other actions) for each version of hwloc since version 0.9 (as initially released as "libtopology", then re-branded to "hwloc" in v0.9.1). Version 1.4.3 ------------- * This release is only meant to fix the pciutils license issue when upgrading to hwloc v1.5 or later is not possible. It contains several other minor fixes but ignores many of them that are only in v1.5 or later. * Use libpciaccess instead of pciutils/libpci by default for I/O discovery. pciutils/libpci is only used if --enable-libpci is given to configure because its GPL license may taint hwloc. See the Installation section in the documentation for details. * Fix PCIe 3.0 link speed computation. * Fix importing of escaped characters with the minimalistic XML backend. * Fix a memory leak in the x86 backend. Version 1.4.2 ------------- * Fix build on Solaris 9 and earlier when fabsf() is not a compiler built-in. Thanks to Igor Galić for reporting the problem. * Fix support for more than 32 processors on Windows. Thanks to Hartmut Kaiser for reporting the problem. * Fix process-wide binding and cpulocation routines on Linux when some threads disappear in the meantime. Thanks to Vlad Roubtsov for reporting the issue. * Make installed scripts executable. Thanks to Jirka Hladky for reporting the problem. * Fix libtool revision management when building for Windows. This fix was also released as hwloc v1.4.1.1 Windows builds. Thanks to Hartmut Kaiser for reporting the problem. * Fix the __hwloc_inline keyword in public headers when compiling with a C++ compiler. * Add Port info attribute to network OS devices inside OpenFabrics PCI devices so as to identify which interface corresponds to which port. * Document requirements for interoperability helpers: I/O devices discovery is required for some of them; the topology must match the current host for most of them. Version 1.4.1 ------------- * This release contains all changes from v1.3.2. * Fix hwloc_alloc_membind, thanks Karl Napf for reporting the issue. * Fix memory leaks in some get_membind() functions. * Fix helpers converting from Linux libnuma to hwloc (hwloc/linux-libnuma.h) in case of out-of-order NUMA node ids. * Fix some overzealous assertions in the distance grouping code. * Workaround BIOS reporting empty I/O locality in cuda and openfabrics helpers on Linux. Thanks to Albert Solernou for reporting the problem. * Install a valgrind suppressions file hwloc-valgrind.supp (see the FAQ). * Fix memory binding documentation. Thanks to Karl Napf for reporting the issues. Version 1.4.0 (does not contain all v1.3.2 changes) ------------- * Major features + Add "custom" interface and "assembler" tools to build multi-node topology. See the Multi-node Topologies section in the documentation for details. * Interface improvements + Add symmetric_subtree object attribute to ease assumptions when consulting regular symmetric topologies. + Add a CPUModel and CPUType info attribute to Socket objects on Linux and Solaris. + Add hwloc_get_obj_index_inside_cpuset() to retrieve the "logical" index of an object within a subtree of the topology. + Add more NVIDIA CUDA helpers in cuda.h and cudart.h to find hwloc objects corresponding to CUDA devices. * Discovery improvements + Add a group object above partial distance matrices to make sure the matrices are available in the final topology, except when this new object would contradict the existing hierarchy. + Grouping by distances now also works when loading from XML. + Fix some corner cases in object insertion, for instance when dealing with NUMA nodes without any CPU. * Backends + Implement hwloc_get_area_membind() on Linux. + Honor I/O topology flags when importing from XML. + Further improve XML-related error checking and reporting. + Hide synthetic topology error messages unless HWLOC_SYNTHETIC_VERBOSE=1. * Tools + Add synthetic exporting of symmetric topologies to lstopo. + lstopo --horiz and --vert can now be applied to some specific object types. + lstopo -v -p now displays distance matrices with physical indexes. + Add hwloc-distances utility to list distances. * Documentation + Fix and/or document the behavior of most inline functions in hwloc/helper.h when the topology contains some I/O or Misc objects. + Backend documentation enhancements. * Bug fixes + Fix missing last bit in hwloc_linux_get_thread_cpubind(). Thanks to Carolina Gómez-Tostón Gutiérrez for reporting the issue. + Fix FreeBSD build without cpuid support. + Fix several Windows build issues. + Fix inline keyword definition in public headers. + Fix dependencies in the embedded library. + Improve visibility support detection. Thanks to Dave Love for providing the patch. + Remove references to internal symbols in the tools. Version 1.3.2 ------------- * Fix missing last bit in hwloc_linux_get_thread_cpubind(). Thanks to Carolina Gómez-Tostón Gutiérrez for reporting the issue. * Fix build with -mcmodel=medium. Thanks to Devendar Bureddy for reporting the issue. * Fix build with Solaris Studio 12 compiler when XML is disabled. Thanks to Paul H. Hargrove for reporting the problem. * Fix installation with old GNU sed, for instance on Red Hat 8. Thanks to Paul H. Hargrove for reporting the problem. * Fix PCI locality when Linux cgroups restrict the available CPUs. * Fix floating point issue when grouping by distance on mips64 architecture. Thanks to Paul H. Hargrove for reporting the problem. * Fix conversion from/to Linux libnuma when some NUMA nodes have no memory. * Fix support for gccfss compilers with broken ffs() support. Thanks to Paul H. Hargrove for reporting the problem and providing a patch. * Fix FreeBSD build without cpuid support. * Fix several Windows build issues. * Fix inline keyword definition in public headers. * Fix dependencies in the embedded library. * Detect when a compiler such as xlc may not report compile errors properly, causing some configure checks to be wrong. Thanks to Paul H. Hargrove for reporting the problem and providing a patch. * Improve visibility support detection. Thanks to Dave Love for providing the patch. * Remove references to internal symbols in the tools. * Fix installation on systems with limited command-line size. Thanks to Paul H. Hargrove for reporting the problem. * Further improve XML-related error checking and reporting. Version 1.3.1 ------------- * Fix pciutils detection with pkg-config when not installed in standard directories. * Fix visibility options detection with the Solaris Studio compiler. Thanks to Igor Galić and Terry Dontje for reporting the problems. * Fix support for old Linux sched.h headers such as those found on Red Hat 8. Thanks to Paul H. Hargrove for reporting the problems. * Fix inline and attribute support for Solaris compilers. Thanks to Dave Love for reporting the problems. * Print a short summary at the end of the configure output. Thanks to Stefan Eilemann for the suggestion. * Add --disable-libnuma configure option to disable libnuma-based memory binding support on Linux. Thanks to Rayson Ho for the suggestion. * Make hwloc's configure script properly obey $PKG_CONFIG. Thanks to Nathan Phillip Brink for raising the issue. * Silence some harmless pciutils warnings, thanks to Paul H. Hargrove for reporting the problem. * Fix the documentation with respect to hwloc_pid_t and hwloc_thread_t being either pid_t and pthread_t on Unix, or HANDLE on Windows. Version 1.3.0 ------------- * Major features + Add I/O devices and bridges to the topology using the pciutils library. Only enabled after setting the relevant flag with hwloc_topology_set_flags() before hwloc_topology_load(). See the I/O Devices section in the documentation for details. * Discovery improvements + Add associativity to the cache attributes. + Add support for s390/z11 "books" on Linux. + Add the HWLOC_GROUPING_ACCURACY environment variable to relax distance-based grouping constraints. See the Environment Variables section in the documentation for details about grouping behavior and configuration. + Allow user-given distance matrices to remove or replace those discovered by the OS backend. * XML improvements + XML is now always supported: a minimalistic custom import/export code is used when libxml2 is not available. It is only guaranteed to read XML files generated by hwloc. + hwloc_topology_export_xml() and export_xmlbuffer() now return an integer. + Add hwloc_free_xmlbuffer() to free the buffer allocated by hwloc_topology_export_xmlbuffer(). + Hide XML topology error messages unless HWLOC_XML_VERBOSE=1. * Minor API updates + Add hwloc_obj_add_info to customize object info attributes. * Tools + lstopo now displays I/O devices by default. Several options are added to configure the I/O discovery. + hwloc-calc and hwloc-bind now accept I/O devices as input. + Add --restrict option to hwloc-calc and hwloc-distribute. + Add --sep option to change the output field separator in hwloc-calc. + Add --whole-system option to hwloc-ps. Version 1.2.2 ------------- * Fix build on AIX 5.2, thanks Utpal Kumar Ray for the report. * Fix XML import of very large page sizes or counts on 32bits platform, thanks to Karsten Hopp for the RedHat ticket. * Fix crash when administrator limitations such as Linux cgroup require to restrict distance matrices. Thanks to Ake Sandgren for reporting the problem. * Fix the removal of objects such as AMD Magny-Cours dual-node sockets in case of administrator restrictions. * Improve error reporting and messages in case of wrong synthetic topology description. * Several other minor internal fixes and documentation improvements. Version 1.2.1 ------------- * Improve support of AMD Bulldozer "Compute-Unit" modules by detecting logical processors with different core IDs on Linux. * Fix hwloc-ps crash when listing processes from another Linux cpuset. Thanks to Carl Smith for reporting the problem. * Fix build on AIX and Solaris. Thanks to Carl Smith and Andreas Kupries for reporting the problems. * Fix cache size detection on Darwin. Thanks to Erkcan Özcan for reporting the problem. * Make configure fail if --enable-xml or --enable-cairo is given and proper support cannot be found. Thanks to Andreas Kupries for reporting the XML problem. * Fix spurious L1 cache detection on AIX. Thanks to Hendryk Bockelmann for reporting the problem. * Fix hwloc_get_last_cpu_location(THREAD) on Linux. Thanks to Gabriele Fatigati for reporting the problem. * Fix object distance detection on Solaris. * Add pthread_self weak symbol to ease static linking. * Minor documentation fixes. Version 1.2.0 ------------- * Major features + Expose latency matrices in the API as an array of distance structures within objects. Add several helpers to find distances. + Add hwloc_topology_set_distance_matrix() and environment variables to provide a matrix of distances between a given set of objects. + Add hwloc_get_last_cpu_location() and hwloc_get_proc_last_cpu_location() to retrieve the processors where a process or thread recently ran. - Add the corresponding --get-last-cpu-location option to hwloc-bind. + Add hwloc_topology_restrict() to restrict an existing topology to a given cpuset. - Add the corresponding --restrict option to lstopo. * Minor API updates + Add hwloc_bitmap_list_sscanf/snprintf/asprintf to convert between bitmaps and strings such as 4-5,7-9,12,15- + hwloc_bitmap_set/clr_range() now support infinite ranges. + Clarify the difference between inserting Misc objects by cpuset or by parent. + hwloc_insert_misc_object_by_cpuset() now returns NULL in case of error. * Discovery improvements + x86 backend (for freebsd): add x2APIC support + Support standard device-tree phandle, to get better support on e.g. ARM systems providing it. + Detect cache size on AIX. Thanks Christopher and IBM. + Improve grouping to support asymmetric topologies. * Tools + Command-line tools now support "all" and "root" special locations consisting in the entire topology, as well as type names with depth attributes such as L2 or Group4. + hwloc-calc improvements: - Add --number-of/-N option to report the number of objects of a given type or depth. - -I is now equivalent to --intersect for listing the indexes of objects of a given type or depth that intersects the input. - Add -H to report the output as a hierarchical combination of types and depths. + Add --thissystem to lstopo. + Add lstopo-win, a console-less lstopo variant on Windows. * Miscellaneous + Remove C99 usage from code base. + Rename hwloc-gather-topology.sh into hwloc-gather-topology + Fix AMD cache discovery on freebsd when there is no L3 cache, thanks Andriy Gapon for the fix. Version 1.1.2 ------------- * Fix a segfault in the distance-based grouping code when some objects are not placed in any group. Thanks to Bernd Kallies for reporting the problem and providing a patch. * Fix the command-line parsing of hwloc-bind --mempolicy interleave. Thanks to Guy Streeter for reporting the problem. * Stop truncating the output in hwloc_obj_attr_snprintf() and in the corresponding lstopo output. Thanks to Guy Streeter for reporting the problem. * Fix object levels ordering in synthetic topologies. * Fix potential incoherency between device tree and kernel information, when SMT is disabled on Power machines. * Fix and document the behavior of hwloc_topology_set_synthetic() in case of invalid argument. Thanks to Guy Streeter for reporting the problem. * Add some verbose error message reporting when it looks like the OS gives erroneous information. * Do not include unistd.h and stdint.h in public headers on Windows. * Move config.h files into their own subdirectories to avoid name conflicts when AC_CONFIG_HEADERS adds -I's for them. * Remove the use of declaring variables inside "for" loops. * Some other minor fixes. * Many minor documentation fixes. Version 1.1.1 ------------- * Add hwloc_get_api_version() which returns the version of hwloc used at runtime. Thanks to Guy Streeter for the suggestion. * Fix the number of hugepages reported for NUMA nodes on Linux. * Fix hwloc_bitmap_to_ulong() right after allocating the bitmap. Thanks to Bernd Kallies for reporting the problem. * Fix hwloc_bitmap_from_ith_ulong() to properly zero the first ulong. Thanks to Guy Streeter for reporting the problem. * Fix hwloc_get_membind_nodeset() on Linux. Thanks to Bernd Kallies for reporting the problem and providing a patch. * Fix some file descriptor leaks in the Linux discovery. * Fix the minimum width of NUMA nodes, caches and the legend in the graphical lstopo output. Thanks to Jirka Hladky for reporting the problem. * Various fixes to bitmap conversion from/to taskset-strings. * Fix and document snprintf functions behavior when the buffer size is too small or zero. Thanks to Guy Streeter for reporting the problem. * Fix configure to avoid spurious enabling of the cpuid backend. Thanks to Tim Anderson for reporting the problem. * Cleanup error management in hwloc-gather-topology.sh. Thanks to Jirka Hladky for reporting the problem and providing a patch. * Add a manpage and usage for hwloc-gather-topology.sh on Linux. Thanks to Jirka Hladky for providing a patch. * Memory binding documentation enhancements. Version 1.1.0 ------------- * API + Increase HWLOC_API_VERSION to 0x00010100 so that API changes may be detected at build-time. + Add a memory binding interface. + The cpuset API (hwloc/cpuset.h) is now deprecated. It is replaced by the bitmap API (hwloc/bitmap.h) which offers the same features with more generic names since it applies to CPU sets, node sets and more. Backward compatibility with the cpuset API and ABI is still provided but it will be removed in a future release. Old types (hwloc_cpuset_t, ...) are still available as a way to clarify what kind of hwloc_bitmap_t each API function manipulates. Upgrading to the new API only requires to replace hwloc_cpuset_ function calls with the corresponding hwloc_bitmap_ calls, with the following renaming exceptions: - hwloc_cpuset_cpu -> hwloc_bitmap_only - hwloc_cpuset_all_but_cpu -> hwloc_bitmap_allbut - hwloc_cpuset_from_string -> hwloc_bitmap_sscanf + Add an `infos' array in each object to store couples of info names and values. It enables generic storage of things like the old dmi board infos that were previously stored in machine specific attributes. + Add linesize cache attribute. * Features + Bitmaps (and thus CPU sets and node sets) are dynamically (re-)allocated, the maximal number of CPUs (HWLOC_NBMAXCPUS) has been removed. + Improve the distance-based grouping code to better support irregular distance matrices. + Add support for device-tree to get cache information (useful on Power architectures). * Helpers + Add NVIDIA CUDA helpers in cuda.h and cudart.h to ease interoperability with CUDA Runtime and Driver APIs. + Add Myrinet Express helper in myriexpress.h to ease interoperability. * Tools + lstopo now displays physical/OS indexes by default in graphical mode (use -l to switch back to logical indexes). The textual output still uses logical by default (use -p to switch to physical indexes). + lstopo prefixes logical indexes with `L#' and physical indexes with `P#'. Physical indexes are also printed as `P#N' instead of `phys=N' within object attributes (in parentheses). + Add a legend at the bottom of the lstopo graphical output, use --no-legend to remove it. + Add hwloc-ps to list process' bindings. + Add --membind and --mempolicy options to hwloc-bind. + Improve tools command-line options by adding a generic --input option (and more) which replaces the old --xml, --synthetic and --fsys-root. + Cleanup lstopo output configuration by adding --output-format. + Add --intersect in hwloc-calc, and replace --objects with --largest. + Add the ability to work on standard input in hwloc-calc. + Add --from, --to and --at in hwloc-distrib. + Add taskset-specific functions and command-line tools options to manipulate CPU set strings in the format of the taskset program. + Install hwloc-gather-topology.sh on Linux. Version 1.0.3 ------------- * Fix support for Linux cpuset when emulated by a cgroup mount point. * Remove unneeded runtime dependency on libibverbs.so in the library and all utils programs. * Fix hwloc_cpuset_to_linux_libnuma_ulongs in case of non-linear OS-indexes for NUMA nodes. * lstopo now displays physical/OS indexes by default in graphical mode (use -l to switch back to logical indexes). The textual output still uses logical by default (use -p to switch to physical indexes). Version 1.0.2 ------------- * Public headers can now be included directly from C++ programs. * Solaris fix for non-contiguous cpu numbers. Thanks to Rolf vandeVaart for reporting the issue. * Darwin 10.4 fix. Thanks to Olivier Cessenat for reporting the issue. * Revert 1.0.1 patch that ignored sockets with unknown ID values since it only slightly helped POWER7 machines with old Linux kernels while it prevents recent kernels from getting the complete POWER7 topology. * Fix hwloc_get_common_ancestor_obj(). * Remove arch-specific bits in public headers. * Some fixes in the lstopo graphical output. * Various man page clarifications and minor updates. Version 1.0.1 ------------- * Various Solaris fixes. Thanks to Yannick Martin for reporting the issue. * Fix "non-native" builds on x86 platforms (e.g., when building 32 bit executables with compilers that natively build 64 bit). * Ignore sockets with unknown ID values (which fixes issues on POWER7 machines). Thanks to Greg Bauer for reporting the issue. * Various man page clarifications and minor updates. * Fixed memory leaks in hwloc_setup_group_from_min_distance_clique(). * Fix cache type filtering on MS Windows 7. Thanks to Αλέξανδρος Παπαδογιαννάκ for reporting the issue. * Fixed warnings when compiling with -DNDEBUG. Version 1.0.0 ------------- * The ABI of the library has changed. * Backend updates + Add FreeBSD support. + Add x86 cpuid based backend. + Add Linux cgroup support to the Linux cpuset code. + Support binding of entire multithreaded process on Linux. + Fix and enable Group support in Windows. + Cleanup XML export/import. * Objects + HWLOC_OBJ_PROC is renamed into HWLOC_OBJ_PU for "Processing Unit", its stringified type name is now "PU". + Use new HWLOC_OBJ_GROUP objects instead of MISC when grouping objects according to NUMA distances or arbitrary OS aggregation. + Rework memory attributes. + Add different cpusets in each object to specify processors that are offline, unavailable, ... + Cleanup the storage of object names and DMI infos. * Features + Add support for looking up specific PID topology information. + Add hwloc_topology_export_xml() to export the topology in a XML file. + Add hwloc_topology_get_support() to retrieve the supported features for the current topology context. + Support non-SYSTEM object as the root of the tree, use MACHINE in most common cases. + Add hwloc_get_*cpubind() routines to retrieve the current binding of processes and threads. * API + Add HWLOC_API_VERSION to help detect the currently used API version. + Add missing ending "e" to *compare* functions. + Add several routines to emulate PLPA functions. + Rename and rework the cpuset and/or/xor/not/clear operators to output their result in a dedicated argument instead of modifying one input. + Deprecate hwloc_obj_snprintf() in favor of hwloc_obj_type/attr_snprintf(). + Clarify the use of parent and ancestor in the API, do not use father. + Replace hwloc_get_system_obj() with hwloc_get_root_obj(). + Return -1 instead of HWLOC_OBJ_TYPE_MAX in the API since the latter isn't public. + Relax constraints in hwloc_obj_type_of_string(). + Improve displaying of memory sizes. + Add 0x prefix to cpuset strings. * Tools + lstopo now displays logical indexes by default, use --physical to revert back to OS/physical indexes. + Add colors in the lstopo graphical outputs to distinguish between online, offline, reserved, ... objects. + Extend lstopo to show cpusets, filter objects by type, ... + Renamed hwloc-mask into hwloc-calc which supports many new options. * Documentation + Add a hwloc(7) manpage containing general information. + Add documentation about how to switch from PLPA to hwloc. + Cleanup the distributed documentation files. * Miscellaneous + Many compilers warning fixes. + Cleanup the ABI by using the visibility attribute. + Add project embedding support. Version 0.9.4 (unreleased) -------------------------- * Fix reseting colors to normal in lstopo -.txt output. * Fix Linux pthread_t binding error report. Version 0.9.3 ------------- * Fix autogen.sh to work with Autoconf 2.63. * Fix various crashes in particular conditions: - xml files with root attributes - offline CPUs - partial sysfs support - unparseable /proc/cpuinfo - ignoring NUMA level while Misc level have been generated * Tweak documentation a bit * Do not require the pthread library for binding the current thread on Linux * Do not erroneously consider the sched_setaffinity prototype is the old version when there is actually none. * Fix _syscall3 compilation on archs for which we do not have the sched_setaffinity system call number. * Fix AIX binding. * Fix libraries dependencies: now only lstopo depends on libtermcap, fix binutils-gold link * Have make check always build and run hwloc-hello.c * Do not limit size of a cpuset. Version 0.9.2 ------------- * Trivial documentation changes. Version 0.9.1 ------------- * Re-branded to "hwloc" and moved to the Open MPI project, relicensed under the BSD license. * The prefix of all functions and tools is now hwloc, and some public functions were also renamed for real. * Group NUMA nodes into Misc objects according to their physical distance that may be reported by the OS/BIOS. May be ignored by setting HWLOC_IGNORE_DISTANCES=1 in the environment. * Ignore offline CPUs on Solaris. * Improved binding support on AIX. * Add HP-UX support. * CPU sets are now allocated/freed dynamically. * Add command line options to tune the lstopo graphical output, add semi-graphical textual output * Extend topobind to support multiple cpusets or objects on the command line as topomask does. * Add an Infiniband-specific helper hwloc/openfabrics-verbs.h to retrieve the physical location of IB devices. Version 0.9 (libtopology) ------------------------- * First release.