summaryrefslogtreecommitdiffstats
path: root/libglusterfs
diff options
context:
space:
mode:
authorRaghavendra Talur <rtalur@redhat.com>2017-07-18 11:36:19 +0530
committerJeff Darcy <jeff@pl.atyp.us>2017-07-19 14:16:19 +0000
commit33db9aff1deaa028f30516e49fdb1e8d6e31bb73 (patch)
tree36d88c93e1e83e4253b154199b0b12531d0edb39 /libglusterfs
parent5ccf0922208c368873120e235be0fd2975a589c1 (diff)
libglusterfs: Name threads on creation
Set names to threads on creation for easier debugging. Output of top -H -p <PID-OF-GLUSTERFSD> Before: 19773 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19774 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19775 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19776 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19777 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19778 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19779 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19780 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19781 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19782 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19783 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19784 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19785 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.01 glusterfsd 19786 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.01 glusterfsd 19787 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.01 glusterfsd 19789 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19790 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 25178 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 5398 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 7881 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd After: 19773 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19774 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glustertimer 19775 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterfsd 19776 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glustermemsweep 19777 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glustersproc0 19778 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glustersproc1 19779 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterepoll0 19780 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusteridxwrker 19781 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusteriotwr0 19782 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterbrssign 19783 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterbrswrker 19784 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterclogecon 19785 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.01 glusterclogd0 19786 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.01 glusterclogd1 19787 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.01 glusterclogd2 19789 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterposixjan 19790 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterposixfsy 25178 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterepoll1 5398 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterepoll2 7881 root 20 0 1301.3m 12.6m 8.4m S 0.0 0.1 0:00.00 glusterposixhc Change-Id: Id5f333755c1ba168a2ffaa4fce6e71c375e10703 BUG: 1254002 Updates: #271 Signed-off-by: Raghavendra Talur <rtalur@redhat.com> Reviewed-on: https://review.gluster.org/11926 Reviewed-by: Prashanth Pai <ppai@redhat.com> Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Niels de Vos <ndevos@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'libglusterfs')
-rw-r--r--libglusterfs/src/common-utils.c27
-rw-r--r--libglusterfs/src/common-utils.h11
-rw-r--r--libglusterfs/src/event-epoll.c18
-rw-r--r--libglusterfs/src/libglusterfs-messages.h11
-rw-r--r--libglusterfs/src/mem-pool.c5
-rw-r--r--libglusterfs/src/syncop.c12
-rw-r--r--libglusterfs/src/throttle-tbf.c2
-rw-r--r--libglusterfs/src/timer.c2
8 files changed, 71 insertions, 17 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c
index 1adb0bd5a81..ec1d5c4823c 100644
--- a/libglusterfs/src/common-utils.c
+++ b/libglusterfs/src/common-utils.c
@@ -3725,10 +3725,15 @@ gf_thread_cleanup_xint (pthread_t thread)
int
gf_thread_create (pthread_t *thread, const pthread_attr_t *attr,
- void *(*start_routine)(void *), void *arg)
+ void *(*start_routine)(void *), void *arg, const char *name)
{
sigset_t set, old;
int ret;
+ char thread_name[GF_THREAD_NAMEMAX+GF_THREAD_NAME_PREFIX_LEN] = {0,};
+ /* Max name on Linux is 16 and on NetBSD is 32
+ * All Gluster threads have a set prefix of gluster and hence the limit
+ * of 9 on GF_THREAD_NAMEMAX including the null character.
+ */
sigemptyset (&old);
sigfillset (&set);
@@ -3742,6 +3747,21 @@ gf_thread_create (pthread_t *thread, const pthread_attr_t *attr,
pthread_sigmask (SIG_BLOCK, &set, &old);
ret = pthread_create (thread, attr, start_routine, arg);
+ snprintf (thread_name, sizeof(thread_name), "%s%s",
+ GF_THREAD_NAME_PREFIX, name);
+
+ if (0 == ret && name) {
+ #ifdef GF_LINUX_HOST_OS
+ pthread_setname_np(*thread, thread_name);
+ #elif defined(__NetBSD__)
+ pthread_setname_np(*thread, thread_name, NULL);
+ #else
+ gf_msg (THIS->name, GF_LOG_WARNING, 0,
+ LG_MSG_PTHREAD_NAMING_FAILED,
+ "Thread names not implemented on this ",
+ "platform");
+ #endif
+ }
pthread_sigmask (SIG_SETMASK, &old, NULL);
@@ -3750,7 +3770,8 @@ gf_thread_create (pthread_t *thread, const pthread_attr_t *attr,
int
gf_thread_create_detached (pthread_t *thread,
- void *(*start_routine)(void *), void *arg)
+ void *(*start_routine)(void *), void *arg,
+ const char *name)
{
pthread_attr_t attr;
int ret = -1;
@@ -3765,7 +3786,7 @@ gf_thread_create_detached (pthread_t *thread,
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
- ret = gf_thread_create (thread, &attr, start_routine, arg);
+ ret = gf_thread_create (thread, &attr, start_routine, arg, name);
if (ret) {
gf_msg (THIS->name, GF_LOG_ERROR, ret,
LG_MSG_PTHREAD_FAILED,
diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h
index f1625e446cb..1d7f09dbc82 100644
--- a/libglusterfs/src/common-utils.h
+++ b/libglusterfs/src/common-utils.h
@@ -130,6 +130,11 @@ void trap (void);
#define GF_PERCENTAGE(val, total) (((val)*100)/(total))
+/* pthread related */
+#define GF_THREAD_NAMEMAX 9
+#define GF_THREAD_NAME_PREFIX "gluster"
+#define GF_THREAD_NAME_PREFIX_LEN 7
+
enum _gf_boolean
{
_gf_false = 0,
@@ -832,9 +837,11 @@ void gf_xxh64_wrapper(const unsigned char *data, size_t len,
int gf_set_timestamp (const char *src, const char* dest);
int gf_thread_create (pthread_t *thread, const pthread_attr_t *attr,
- void *(*start_routine)(void *), void *arg);
+ void *(*start_routine)(void *), void *arg,
+ const char *name);
int gf_thread_create_detached (pthread_t *thread,
- void *(*start_routine)(void *), void *arg);
+ void *(*start_routine)(void *), void *arg,
+ const char *name);
gf_boolean_t
gf_is_pid_running (int pid);
gf_boolean_t
diff --git a/libglusterfs/src/event-epoll.c b/libglusterfs/src/event-epoll.c
index eac1f058b15..d32f1dda9d0 100644
--- a/libglusterfs/src/event-epoll.c
+++ b/libglusterfs/src/event-epoll.c
@@ -663,6 +663,7 @@ event_dispatch_epoll (struct event_pool *event_pool)
int pollercount = 0;
int ret = -1;
struct event_thread_data *ev_data = NULL;
+ char thread_name[GF_THREAD_NAMEMAX] = {0,};
/* Start the configured number of pollers */
pthread_mutex_lock (&event_pool->mutex);
@@ -697,9 +698,11 @@ event_dispatch_epoll (struct event_pool *event_pool)
ev_data->event_pool = event_pool;
ev_data->event_index = i + 1;
- ret = pthread_create (&t_id, NULL,
- event_dispatch_epoll_worker,
- ev_data);
+ snprintf (thread_name, sizeof(thread_name),
+ "%s%d", "epoll", i);
+ ret = gf_thread_create (&t_id, NULL,
+ event_dispatch_epoll_worker,
+ ev_data, thread_name);
if (!ret) {
event_pool->pollers[i] = t_id;
@@ -765,6 +768,7 @@ event_reconfigure_threads_epoll (struct event_pool *event_pool, int value)
pthread_t t_id;
int oldthreadcount;
struct event_thread_data *ev_data = NULL;
+ char thread_name[GF_THREAD_NAMEMAX] = {0,};
pthread_mutex_lock (&event_pool->mutex);
{
@@ -805,9 +809,13 @@ event_reconfigure_threads_epoll (struct event_pool *event_pool, int value)
ev_data->event_pool = event_pool;
ev_data->event_index = i + 1;
- ret = pthread_create (&t_id, NULL,
+ snprintf (thread_name,
+ sizeof(thread_name),
+ "%s%d",
+ "epoll", i);
+ ret = gf_thread_create (&t_id, NULL,
event_dispatch_epoll_worker,
- ev_data);
+ ev_data, thread_name);
if (ret) {
gf_msg ("epoll", GF_LOG_WARNING,
0,
diff --git a/libglusterfs/src/libglusterfs-messages.h b/libglusterfs/src/libglusterfs-messages.h
index 23ed7b727d3..dd657013257 100644
--- a/libglusterfs/src/libglusterfs-messages.h
+++ b/libglusterfs/src/libglusterfs-messages.h
@@ -37,7 +37,7 @@
#define GLFS_LG_BASE GLFS_MSGID_COMP_LIBGLUSTERFS
-#define GLFS_LG_NUM_MESSAGES 210
+#define GLFS_LG_NUM_MESSAGES 211
#define GLFS_LG_MSGID_END (GLFS_LG_BASE + GLFS_LG_NUM_MESSAGES + 1)
/* Messaged with message IDs */
@@ -1800,6 +1800,15 @@
* @recommendedaction
*
*/
+
+#define LG_MSG_PTHREAD_NAMING_FAILED (GLFS_LG_BASE + 211)
+
+/*!
+ * @messageid
+ * @diagnosis
+ * @recommendedaction
+ *
+ */
/*------------*/
#define glfs_msg_end_lg GLFS_LG_MSGID_END, "Invalid: End of messages"
diff --git a/libglusterfs/src/mem-pool.c b/libglusterfs/src/mem-pool.c
index 456eb68c060..343771e38a1 100644
--- a/libglusterfs/src/mem-pool.c
+++ b/libglusterfs/src/mem-pool.c
@@ -551,7 +551,8 @@ mem_pools_init (void)
{
pthread_mutex_lock (&init_mutex);
if ((init_count++) == 0) {
- (void) pthread_create (&sweeper_tid, NULL, pool_sweeper, NULL);
+ (void) gf_thread_create (&sweeper_tid, NULL, pool_sweeper,
+ NULL, "memsweep");
}
pthread_mutex_unlock (&init_mutex);
}
@@ -586,7 +587,7 @@ mem_pools_fini (void)
void mem_pools_init (void) {}
void mem_pools_fini (void) {}
#endif
-
+
struct mem_pool *
mem_pool_new_fn (unsigned long sizeof_type,
unsigned long count, char *name)
diff --git a/libglusterfs/src/syncop.c b/libglusterfs/src/syncop.c
index 544cfdc011a..b36c88dc829 100644
--- a/libglusterfs/src/syncop.c
+++ b/libglusterfs/src/syncop.c
@@ -712,6 +712,7 @@ syncenv_scale (struct syncenv *env)
int scale = 0;
int i = 0;
int ret = 0;
+ char thread_name[GF_THREAD_NAMEMAX] = {0,};
pthread_mutex_lock (&env->mutex);
{
@@ -731,8 +732,11 @@ syncenv_scale (struct syncenv *env)
}
env->proc[i].env = env;
+ snprintf (thread_name, sizeof(thread_name),
+ "%s%d", "sproc", env->procs);
ret = gf_thread_create (&env->proc[i].processor, NULL,
- syncenv_processor, &env->proc[i]);
+ syncenv_processor,
+ &env->proc[i], thread_name);
if (ret)
break;
env->procs++;
@@ -796,6 +800,7 @@ syncenv_new (size_t stacksize, int procmin, int procmax)
struct syncenv *newenv = NULL;
int ret = 0;
int i = 0;
+ char thread_name[GF_THREAD_NAMEMAX] = {0,};
if (!procmin || procmin < 0)
procmin = SYNCENV_PROC_MIN;
@@ -824,8 +829,11 @@ syncenv_new (size_t stacksize, int procmin, int procmax)
for (i = 0; i < newenv->procmin; i++) {
newenv->proc[i].env = newenv;
+ snprintf (thread_name, sizeof(thread_name),
+ "%s%d", "sproc", (newenv->procs));
ret = gf_thread_create (&newenv->proc[i].processor, NULL,
- syncenv_processor, &newenv->proc[i]);
+ syncenv_processor, &newenv->proc[i],
+ thread_name);
if (ret)
break;
newenv->procs++;
diff --git a/libglusterfs/src/throttle-tbf.c b/libglusterfs/src/throttle-tbf.c
index 16630a243c2..a425166b681 100644
--- a/libglusterfs/src/throttle-tbf.c
+++ b/libglusterfs/src/throttle-tbf.c
@@ -150,7 +150,7 @@ tbf_init_bucket (tbf_t *tbf, tbf_opspec_t *spec)
curr->token_gen_interval = spec->token_gen_interval;
ret = gf_thread_create (&curr->tokener,
- NULL, tbf_tokengenerator, curr);
+ NULL, tbf_tokengenerator, curr, "tbfclock");
if (ret != 0)
goto freemem;
diff --git a/libglusterfs/src/timer.c b/libglusterfs/src/timer.c
index a24a07804a8..3d69a9f7160 100644
--- a/libglusterfs/src/timer.c
+++ b/libglusterfs/src/timer.c
@@ -217,7 +217,7 @@ gf_timer_registry_init (glusterfs_ctx_t *ctx)
INIT_LIST_HEAD (&reg->active);
}
UNLOCK (&ctx->lock);
- gf_thread_create (&reg->th, NULL, gf_timer_proc, reg);
+ gf_thread_create (&reg->th, NULL, gf_timer_proc, reg, "timer");
out:
return reg;
}