You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2011/06/17 19:04:48 UTC

svn commit: r1136939 - in /trafficserver/traffic/trunk: CHANGES configure.ac lib/ts/Makefile.am lib/ts/ink_config.h.in lib/ts/ink_defs.cc proxy/Initialize.cc proxy/Makefile.am

Author: zwoop
Date: Fri Jun 17 17:04:48 2011
New Revision: 1136939

URL: http://svn.apache.org/viewvc?rev=1136939&view=rev
Log:
TS-648 Use hwloc library when available. This can be disabled
with --disable-hwloc.

TS-398 Autoscaling threads vs Hyper Threading. This requires support
for hwloc as well.

Modified:
    trafficserver/traffic/trunk/CHANGES
    trafficserver/traffic/trunk/configure.ac
    trafficserver/traffic/trunk/lib/ts/Makefile.am
    trafficserver/traffic/trunk/lib/ts/ink_config.h.in
    trafficserver/traffic/trunk/lib/ts/ink_defs.cc
    trafficserver/traffic/trunk/proxy/Initialize.cc
    trafficserver/traffic/trunk/proxy/Makefile.am

Modified: trafficserver/traffic/trunk/CHANGES
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/CHANGES?rev=1136939&r1=1136938&r2=1136939&view=diff
==============================================================================
--- trafficserver/traffic/trunk/CHANGES (original)
+++ trafficserver/traffic/trunk/CHANGES Fri Jun 17 17:04:48 2011
@@ -1,6 +1,12 @@
                                                          -*- coding: utf-8 -*-
 
 Changes with Apache Traffic Server 3.1.0
+  *) [TS-648] Use hwloc library when available. This can be disabled
+   with --disable-hwloc.
+
+  *) [TS-398] Autoscaling threads vs Hyper Threading. This requires
+   support for hwloc as well.
+
   *) [TS-760] Cleanup mgmt types.
 
   *) [TS-359] Remove DIR_SEP and use slash directly.

Modified: trafficserver/traffic/trunk/configure.ac
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/configure.ac?rev=1136939&r1=1136938&r2=1136939&view=diff
==============================================================================
--- trafficserver/traffic/trunk/configure.ac (original)
+++ trafficserver/traffic/trunk/configure.ac Fri Jun 17 17:04:48 2011
@@ -343,6 +343,17 @@ AC_ARG_ENABLE([posix-cap],
 AC_MSG_RESULT([$enable_posix_cap])
 
 #
+# use hwloc library when possible (can be disabled)
+#
+AC_MSG_CHECKING([whether to use hwloc library])
+AC_ARG_ENABLE([hwloc],
+  [AS_HELP_STRING([--disable-hwloc],[Don't use the hwloc library])],
+  [],
+  [enable_hwloc="yes"]
+)
+AC_MSG_RESULT([$enable_hwloc])
+
+#
 # Enble ccache explicitly (it's disabled by default, because of build problems in some cases)
 #
 AC_MSG_CHECKING([whether to enable ccache])
@@ -938,6 +949,21 @@ AS_IF([test "x$enable_posix_cap" = "xyes
   )
 )
 AC_SUBST(use_posix_cap)
+
+# 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]
+  )
+)
+AC_SUBST(use_hwloc)
+
+
 # -----------------------------------------------------------------------------
 # 5. CHECK FOR HEADER FILES
 
@@ -1052,6 +1078,14 @@ if test "x${enable_posix_cap}" = "xyes";
   )
 fi
 
+if test "x${enable_hwloc}" = "xyes"; then
+  AC_CHECK_HEADERS([hwloc.h],
+    [],
+    [AC_MSG_FAILURE([hwloc header not found. Try --disable-hwloc])],
+    []
+  )
+fi
+
 #
 # Configure sockopt value for TPROXY. Look at the enable flag.
 # Value 'no' means user forced disable, don't check anything else.

Modified: trafficserver/traffic/trunk/lib/ts/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/Makefile.am?rev=1136939&r1=1136938&r2=1136939&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/Makefile.am (original)
+++ trafficserver/traffic/trunk/lib/ts/Makefile.am Fri Jun 17 17:04:48 2011
@@ -23,7 +23,7 @@ TESTS = $(check_PROGRAMS)
 lib_LTLIBRARIES = libtsutil.la
 
 libtsutil_la_LDFLAGS = -no-undefined -version-info @TS_LIBTOOL_VERSION@
-libtsutil_la_LIBADD = @LIBOBJS@ @LIBPCRE@ @LIBSSL@ @LIBTCL@ @LIBRESOLV@ @LIBRT@ @LIBICONV@ @LIBSOCKET@ @LIBNSL@ @LIBCAP@ -lc
+libtsutil_la_LIBADD = @LIBOBJS@ @LIBPCRE@ @LIBSSL@ @LIBTCL@ @LIBRESOLV@ @LIBRT@ @LIBICONV@ @LIBSOCKET@ @LIBNSL@ @LIBCAP@ @LIBHWLOC@ -lc
 
 libtsutil_la_SOURCES = \
   Allocator.cc \

Modified: trafficserver/traffic/trunk/lib/ts/ink_config.h.in
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_config.h.in?rev=1136939&r1=1136938&r2=1136939&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_config.h.in (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_config.h.in Fri Jun 17 17:04:48 2011
@@ -106,6 +106,7 @@
 #define TS_USE_PORT                    @use_port@
 #define TS_USE_POSIX_CAP               @use_posix_cap@
 #define TS_USE_TPROXY                  @use_tproxy@
+#define TS_USE_HWLOC                   @use_hwloc@
 
 /* OS API definitions */
 #define GETHOSTBYNAME_R_HOSTENT_DATA    @gethostbyname_r_hostent_data@

Modified: trafficserver/traffic/trunk/lib/ts/ink_defs.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_defs.cc?rev=1136939&r1=1136938&r2=1136939&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_defs.cc (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_defs.cc Fri Jun 17 17:04:48 2011
@@ -43,6 +43,25 @@
 int off = 0;
 int on = 1;
 
+#if TS_USE_HWLOC
+#include <hwloc.h>
+static hwloc_topology_t gTopology;
+static bool hwloc_setup = false;
+
+// Little helper to initialize the hwloc topology, once.
+void static inline
+setup_hwloc()
+{
+  if (hwloc_setup)
+    return;
+
+  hwloc_topology_init(&gTopology);
+  hwloc_topology_load(gTopology);
+
+  hwloc_setup = true;
+}
+#endif
+
 int
 ink_sys_name_release(char *name, int namelen, char *release, int releaselen)
 {
@@ -93,6 +112,18 @@ ink_sys_name_release(char *name, int nam
 int
 ink_number_of_processors()
 {
+#if TS_USE_HWLOC
+  int cu;
+  int pu;
+
+  setup_hwloc();
+  cu = hwloc_get_nbobjs_by_type(gTopology, HWLOC_OBJ_CORE);
+  pu = hwloc_get_nbobjs_by_type(gTopology, HWLOC_OBJ_PU);
+  if (pu > cu)
+    return cu + (pu - cu)/4;
+  else
+    return cu;
+#else
 #if defined(freebsd)
   int mib[2], n;
   mib[0] = CTL_HW;
@@ -102,6 +133,8 @@ ink_number_of_processors()
     return 1;
   return n;
 #else
-  return sysconf(_SC_NPROCESSORS_ONLN); // number of Net threads
-#endif
+  return sysconf(_SC_NPROCESSORS_ONLN); // number of processing units (includes Hyper Threading)
+#endif /* freebsd */
+
+#endif /* TS_HAVE_HWLOC_H */
 }

Modified: trafficserver/traffic/trunk/proxy/Initialize.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/Initialize.cc?rev=1136939&r1=1136938&r2=1136939&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/Initialize.cc (original)
+++ trafficserver/traffic/trunk/proxy/Initialize.cc Fri Jun 17 17:04:48 2011
@@ -27,8 +27,6 @@
    Created On      : Fri Feb  5 18:22:05 1999
 
    Description:
-
-
  ****************************************************************************/
 #include "libts.h"
 
@@ -179,15 +177,6 @@ init_system_syslog_log_configure(void)
 }
 
 
-/*
-void
-init_system_logging()
-{
-  //  iObject::Init();
-  //  iLogBufferBuffer::Init();
-}
-*/
-
 void
 init_system_adjust_num_of_net_threads(void)
 {

Modified: trafficserver/traffic/trunk/proxy/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/Makefile.am?rev=1136939&r1=1136938&r2=1136939&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/Makefile.am (original)
+++ trafficserver/traffic/trunk/proxy/Makefile.am Fri Jun 17 17:04:48 2011
@@ -162,7 +162,7 @@ traffic_server_LDADD = \
   $(which_libts) \
   @LIBTHREAD@ @LIBSOCKET@ @LIBNSL@ @LIBRESOLV@ @LIBRT@ \
   @LIBPCRE@ @LIBSSL@ @LIBTCL@ @LIBDL@ \
-  @LIBEXPAT@ @LIBDEMANGLE@ @LIBICONV@ @LIBCAP@ \
+  @LIBEXPAT@ @LIBDEMANGLE@ @LIBICONV@ @LIBCAP@ @LIBHWLOC@ \
   @LIBMLD@ @LIBEXC@ -lm @LIBEV@ @LIBPROFILER@ @LIBEXECINFO@
 
 traffic_logcat_SOURCES = logcat.cc