debuginfod: Set child thread names via pthread_setname_np()
authorFrank Ch. Eigler <fche@redhat.com>
Tue, 30 Mar 2021 17:22:43 +0000 (13:22 -0400)
committerFrank Ch. Eigler <fche@redhat.com>
Tue, 30 Mar 2021 17:22:43 +0000 (13:22 -0400)
In order to assist problem diagnosis / monitoring, use this
gnu-flavoured pthread function to set purpose names to the various
child threads debuginfod starts.  libmicrohttpd already sets this for
its threads.

Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
ChangeLog
configure.ac
debuginfod/ChangeLog
debuginfod/debuginfod.cxx
tests/ChangeLog
tests/run-debuginfod-find.sh

index fe7e849..e18746f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2021-03-30  Frank Ch. Eigler  <fche@redhat.com>
+
+       * configure.ac: Look for pthread_setname_np.
+
 2021-02-17  Timm Bäder  <tbaeder@redhat.com>
 
        * configure.ac: Add -Wno-packed-not-aligned check.
index aa8439e..ad046bc 100644 (file)
@@ -747,6 +747,9 @@ AS_IF([test "x$enable_libdebuginfod" != "xno"], [
     fi
 ])
 
+AC_CHECK_LIB(pthread, pthread_setname_np, [
+                      AC_DEFINE([HAVE_PTHREAD_SETNAME_NP],[1],[Enable pthread_setname_np])])
+
 AS_IF([test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" = "xdummy"],
       [AC_DEFINE([ENABLE_LIBDEBUGINFOD], [1], [Enable libdebuginfod])])
 AS_IF([test "x$enable_libdebuginfod" = "xdummy"],
index 56c2ec2..c98a837 100644 (file)
@@ -1,3 +1,7 @@
+2021-03-30  Frank Ch. Eigler <fche@redhat.com>
+
+       * debuginfod.cxx (main): Set child thread names.
+
 2021-03-07  Timm Bäder <tbaeder@redhat.com>
 
        * debuginfod-client.c (debuginfod_query_server): Tweak
index 2aecc04..473511e 100644 (file)
@@ -3473,23 +3473,35 @@ main (int argc, char *argv[])
   if (rc)
     error (EXIT_FAILURE, rc, "cannot spawn thread to groom database\n");
   else
-    all_threads.push_back(pt);
+    {
+#ifdef HAVE_PTHREAD_SETNAME_NP
+      (void) pthread_setname_np (pt, "groom");
+#endif
+      all_threads.push_back(pt);
+    }
 
   if (scan_files || scan_archives.size() > 0)
     {
       rc = pthread_create (& pt, NULL, thread_main_fts_source_paths, NULL);
       if (rc)
         error (EXIT_FAILURE, rc, "cannot spawn thread to traverse source paths\n");
+#ifdef HAVE_PTHREAD_SETNAME_NP
+      (void) pthread_setname_np (pt, "traverse");
+#endif
       all_threads.push_back(pt);
+
       for (unsigned i=0; i<concurrency; i++)
         {
           rc = pthread_create (& pt, NULL, thread_main_scanner, NULL);
           if (rc)
             error (EXIT_FAILURE, rc, "cannot spawn thread to scan source files / archives\n");
+#ifdef HAVE_PTHREAD_SETNAME_NP
+          (void) pthread_setname_np (pt, "scan");          
+#endif
           all_threads.push_back(pt);
         }
     }
-
+  
   /* Trivial main loop! */
   set_metric("ready", 1);
   while (! interrupted)
index bb842cb..ea44d20 100644 (file)
@@ -1,3 +1,7 @@
+2021-03-30  Frank Ch. Eigler  <fche@redhat.com>
+
+       * run-debuginfod-find.sh: Add thread comm checks.
+
 2021-02-17  Timm Bäder  <tbaeder@redhat.com>
 
        * elfstrmerge.c (main): Move new_data_buf function to...
index bcca613..8213c8a 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 #
-# Copyright (C) 2019-2020 Red Hat, Inc.
+# Copyright (C) 2019-2021 Red Hat, Inc.
 # This file is part of elfutils.
 #
 # This file is free software; you can redistribute it and/or modify
@@ -113,6 +113,11 @@ export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/   # or without trailing /
 # Be patient when run on a busy machine things might take a bit.
 export DEBUGINFOD_TIMEOUT=10
 
+# Check thread comm names
+ps -q $PID1 -e -L -o '%p %c %a' | grep groom
+ps -q $PID1 -e -L -o '%p %c %a' | grep scan
+ps -q $PID1 -e -L -o '%p %c %a' | grep traverse
+
 # We use -t0 and -g0 here to turn off time-based scanning & grooming.
 # For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process.