You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2013/04/29 18:17:22 UTC

git commit: TS-1843: detect and link libhwloc on Ubuntu

Updated Branches:
  refs/heads/master 54e9a1efa -> 7e417c471


TS-1843: detect and link libhwloc on Ubuntu

Fix the hwloc-enabled build on current and older Ubuntu releases.
This requires explicitly testing for the HWLOC_OBJ_PU symbol, and
using pkg-cofig to find the correct build options.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/7e417c47
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/7e417c47
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/7e417c47

Branch: refs/heads/master
Commit: 7e417c4712e36c9c38cf60b98783b24ad2a1c4f3
Parents: 54e9a1e
Author: James Peach <jp...@apache.org>
Authored: Mon Apr 22 13:16:23 2013 -0700
Committer: James Peach <jp...@apache.org>
Committed: Mon Apr 29 09:15:56 2013 -0700

----------------------------------------------------------------------
 CHANGES                                  |    4 ++-
 configure.ac                             |   32 +++++++++++++-----------
 iocore/cluster/ClusterHandlerBase.cc     |    6 +----
 iocore/eventsystem/UnixEventProcessor.cc |    8 +++++-
 lib/ts/Makefile.am                       |   13 +++++++++-
 lib/ts/ink_defs.cc                       |   27 ++++++++++++--------
 proxy/Makefile.am                        |    3 +-
 7 files changed, 58 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7e417c47/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index dbb5fd0..b99556e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,7 +2,9 @@
   Changes with Apache Traffic Server 3.3.3
 
 
-  *) [TS-1858] Fix redefinition of timersub on Solaris
+  *) [TS-1843] Detect and link libhwloc on Ubuntu.
+
+  *) [TS-1858] Fix redefinition of timersub on Solaris.
 
   *) [TS-1861] Build fails with reclaimable freelist enabled.
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7e417c47/configure.ac
----------------------------------------------------------------------
diff --git a/configure.ac b/configure.ac
index 6e7549a..8d48401 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1235,14 +1235,24 @@ AC_SUBST(use_linux_native_aio)
 # Check for hwloc library.
 # If we don't find it, disable checking for header.
 use_hwloc=0
-AS_IF([test "x$enable_hwloc" = "xyes"],
-  AC_CHECK_LIB([hwloc],[hwloc_topology_init],
-    [AC_SUBST([LIBHWLOC], ["-lhwloc"])
-     use_hwloc=1
-    ],
-    [enable_hwloc=no]
+
+AS_IF([test "x$enable_hwloc" = "xyes"], [
+  AC_CHECK_HEADERS([hwloc.h], [],
+    [AC_MSG_WARN([hwloc.h header not found, try --disable-hwloc])], []
   )
-)
+
+  # Old versions of libhwloc don't have HWLOC_OBJ_PU.
+  AC_CHECK_DECL(HWLOC_OBJ_PU,
+    [AC_DEFINE(HAVE_HWLOC_OBJ_PU, 1, [Whether HWLOC_OBJ_PU is available])], [],
+    [#include <hwloc.h>]
+  )
+
+  # Use pkg-config, because some distros (*cough* Ubuntu) put hwloc in unusual places.
+  PKG_CHECK_MODULES([hwloc], [hwloc], [use_hwloc=yes], [use_hwloc=no])
+  AC_SUBST([hwloc_CFLAGS])
+  AC_SUBST([hwloc_LIBS])
+])
+
 AC_SUBST(use_hwloc)
 
 #
@@ -1489,14 +1499,6 @@ if test "x${enable_posix_cap}" != "xno"; then
   )
 fi
 
-if test "x${enable_hwloc}" = "xyes"; then
-  AC_CHECK_HEADERS([hwloc.h],
-    [],
-    [AC_MSG_FAILURE([hwloc header not found. Try --disable-hwloc])],
-    []
-  )
-fi
-
 # Check for high-resolution timestamps in struct stat
 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec])
 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec])

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7e417c47/iocore/cluster/ClusterHandlerBase.cc
----------------------------------------------------------------------
diff --git a/iocore/cluster/ClusterHandlerBase.cc b/iocore/cluster/ClusterHandlerBase.cc
index 19a9747..b245db6 100644
--- a/iocore/cluster/ClusterHandlerBase.cc
+++ b/iocore/cluster/ClusterHandlerBase.cc
@@ -1152,11 +1152,7 @@ failed:
         // Startup the periodic events to process entries in
         //  external_incoming_control.
 
-#if defined(freebsd)
-        int procs_online = 1;
-#else
-        int procs_online = sysconf(_SC_NPROCESSORS_ONLN);
-#endif
+        int procs_online = ink_number_of_processors();
         int total_callbacks = min(procs_online, MAX_COMPLETION_CALLBACK_EVENTS);
         for (int n = 0; n < total_callbacks; ++n) {
           callout_cont[n] = NEW(new ClusterCalloutContinuation(this));

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7e417c47/iocore/eventsystem/UnixEventProcessor.cc
----------------------------------------------------------------------
diff --git a/iocore/eventsystem/UnixEventProcessor.cc b/iocore/eventsystem/UnixEventProcessor.cc
index 1821809..8613cd3 100644
--- a/iocore/eventsystem/UnixEventProcessor.cc
+++ b/iocore/eventsystem/UnixEventProcessor.cc
@@ -169,7 +169,13 @@ EventProcessor::start(int n_event_threads)
   ink_cpuset_t cpuset;
   int socket = hwloc_get_nbobjs_by_type(ink_get_topology(), HWLOC_OBJ_SOCKET);
   int cu = hwloc_get_nbobjs_by_type(ink_get_topology(), HWLOC_OBJ_CORE);
-  int pu = hwloc_get_nbobjs_by_type(ink_get_topology(), HWLOC_OBJ_PU);
+  int pu = cu;
+
+  // Older versions of libhwloc (eg. Ubuntu 10.04) don't have pHWLOC_OBJ_PU.
+#if HAVE_HWLOC_OBJ_PU
+  pu = hwloc_get_nbobjs_by_type(ink_get_topology(), HWLOC_OBJ_PU);
+#endif
+
   Debug("iocore_thread", "socket: %d core: %d logical processor: %d affinity: %d", socket, cu, pu, affinity);
 #endif
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7e417c47/lib/ts/Makefile.am
----------------------------------------------------------------------
diff --git a/lib/ts/Makefile.am b/lib/ts/Makefile.am
index 689df2f..2b6692d 100644
--- a/lib/ts/Makefile.am
+++ b/lib/ts/Makefile.am
@@ -25,7 +25,18 @@ AM_CPPFLAGS = -I$(top_srcdir)/lib
 lib_LTLIBRARIES = libtsutil.la
 
 libtsutil_la_LDFLAGS = -no-undefined -version-info @TS_LIBTOOL_VERSION@
-libtsutil_la_LIBADD = @LIBOBJS@ @LIBPCRE@ @LIBSSL@ @LIBTCL@ @LIBRESOLV@ @LIBRT@ @LIBSOCKET@ @LIBNSL@ @LIBCAP@ @LIBHWLOC@ -lc
+libtsutil_la_LIBADD = \
+  @hwloc_LIBS@ \
+  @LIBOBJS@ \
+  @LIBPCRE@ \
+  @LIBSSL@ \
+  @LIBTCL@ \
+  @LIBRESOLV@ \
+  @LIBRT@ \
+  @LIBSOCKET@ \
+  @LIBNSL@ \
+  @LIBCAP@ \
+  -lc
 
 libtsutil_la_SOURCES = \
   Allocator.h \

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7e417c47/lib/ts/ink_defs.cc
----------------------------------------------------------------------
diff --git a/lib/ts/ink_defs.cc b/lib/ts/ink_defs.cc
index a327bbb..dc68183 100644
--- a/lib/ts/ink_defs.cc
+++ b/lib/ts/ink_defs.cc
@@ -119,17 +119,21 @@ int
 ink_number_of_processors()
 {
 #if TS_USE_HWLOC
-  int cu;
-  int pu;
 
-  cu = hwloc_get_nbobjs_by_type(ink_get_topology(), HWLOC_OBJ_CORE);
-  pu = hwloc_get_nbobjs_by_type(ink_get_topology(), HWLOC_OBJ_PU);
-  if (pu > cu)
+  int cu = hwloc_get_nbobjs_by_type(ink_get_topology(), HWLOC_OBJ_CORE);
+
+#if HAVE_HWLOC_OBJ_PU
+  int pu = hwloc_get_nbobjs_by_type(ink_get_topology(), HWLOC_OBJ_PU);
+
+  if (pu > cu) {
     return cu + (pu - cu)/4;
-  else
-    return cu;
-#else
-#if defined(freebsd)
+  }
+#endif
+
+  return cu;
+
+#elif defined(freebsd)
+
   int mib[2], n;
   mib[0] = CTL_HW;
   mib[1] = HW_NCPU;
@@ -137,9 +141,10 @@ ink_number_of_processors()
   if (sysctl(mib, 2, &n, &len, NULL, 0) == -1)
     return 1;
   return n;
+
 #else
+
   return sysconf(_SC_NPROCESSORS_ONLN); // number of processing units (includes Hyper Threading)
-#endif /* freebsd */
 
-#endif /* TS_HAVE_HWLOC_H */
+#endif
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7e417c47/proxy/Makefile.am
----------------------------------------------------------------------
diff --git a/proxy/Makefile.am b/proxy/Makefile.am
index d68e6d8..3975db9 100644
--- a/proxy/Makefile.am
+++ b/proxy/Makefile.am
@@ -161,9 +161,10 @@ traffic_server_LDADD = \
   $(top_builddir)/lib/records/librecprocess.a \
   $(top_builddir)/iocore/eventsystem/libinkevent.a \
   $(which_libts) \
+  @hwloc_LIBS@ \
   @LIBTHREAD@ @LIBSOCKET@ @LIBNSL@ @LIBRESOLV@ @LIBRT@ \
   @LIBPCRE@ @LIBSSL@ @LIBTCL@ @LIBDL@ \
-  @LIBEXPAT@ @LIBDEMANGLE@ @LIBCAP@ @LIBHWLOC@ \
+  @LIBEXPAT@ @LIBDEMANGLE@ @LIBCAP@ \
   @LIBZ@ @LIBLZMA@ \
   @LIBMLD@ @LIBEXC@ -lm @LIBPROFILER@ @LIBEXECINFO@