Merge branch 'master' into benchmark
authorDavid Goulet <dgoulet@efficios.com>
Wed, 22 Feb 2012 22:40:58 +0000 (17:40 -0500)
committerDavid Goulet <dgoulet@efficios.com>
Wed, 22 Feb 2012 22:40:58 +0000 (17:40 -0500)
Signed-off-by: David Goulet <dgoulet@efficios.com>
1  2 
Makefile.am
configure.ac
src/bin/lttng-sessiond/main.c

diff --combined Makefile.am
index bab695466d212894d07d9416e20bfda017e67342,b16632a4a33732e4bee372227c7eca7c80f08311..a02a1d1d35ce0b62c3a809551daa7b532c222885
@@@ -1,13 -1,11 +1,16 @@@
  ACLOCAL_AMFLAGS = -I config
  
 -SUBDIRS = src \
 +SUBDIRS = src/common/ \
 +                benchmark \
 +                src \
                  tests \
                  include \
                  doc
  
- dist_doc_DATA = ChangeLog
+ dist_doc_DATA = LICENSE \
+                 ChangeLog
+ EXTRA_DIST = extras/lttng-bash_completion
++
 +bench:
 +      ./benchmark/runall.sh
diff --combined configure.ac
index 0a1cc319c7a3fc474f1d3d116798f004685d9115,c07052a0f0f0d63677d86bdf297904926af40e40..322d9f21e17df45608054eda6ae04f4f9b244679
@@@ -1,4 -1,4 +1,4 @@@
- AC_INIT([lttng-tools],[2.0-pre20],[dgoulet@efficios.com],[],[http://lttng.org])
+ AC_INIT([lttng-tools],[2.0.0-rc1],[dgoulet@efficios.com],[],[http://lttng.org])
  AC_CONFIG_AUX_DIR([config])
  AC_CANONICAL_TARGET
  AC_CANONICAL_HOST
@@@ -51,7 -51,7 +51,7 @@@ AC_ARG_WITH([consumerd32-libdir]
        [CONSUMERD32_LIBDIR=''])
  AC_SUBST([CONSUMERD32_LIBDIR])
  
- AC_ARG_WITH([consumer64d-libdir],
+ AC_ARG_WITH([consumerd64-libdir],
        AS_HELP_STRING([--with-consumerd64-libdir],
        [Directory containing the 64-bit consumerd libraries]),
        [CONSUMERD64_LIBDIR="$withval"],
@@@ -75,11 -75,6 +75,11 @@@ AC_CHECK_LIB([popt], [poptGetContext], 
        [AC_MSG_ERROR([Cannot find libpopt. Use [LDFLAGS]=-Ldir to specify its location.])]
  )
  
 +# Needed for benchmark time
 +AC_CHECK_DECL([caa_get_cycles], [],
 +      [AC_MSG_ERROR([liburcu liburcu_version or newer is needed])], [[#include <urcu/arch.h>]]
 +)
 +
  # URCU library version needed or newer
  liburcu_version=">= 0.6.7"
  
@@@ -157,7 -152,6 +157,7 @@@ AC_CONFIG_FILES(
        doc/Makefile
        doc/man/Makefile
        include/Makefile
 +      benchmark/Makefile
        src/Makefile
        src/common/Makefile
        src/common/kernel-ctl/Makefile
index a2f342c3aeaa9a586d0d251465240d494af10262,283868970f74e9eb2317e9a7e883c99d3b55f8bf..cb4dd25e94f73159d7e9bb1e6f1660060450b30f
@@@ -75,8 -75,6 +75,8 @@@ struct consumer_data 
        char cmd_unix_sock_path[PATH_MAX];
  };
  
 +#include "benchmark.h"
 +
  /* Const values */
  const char default_home_dir[] = DEFAULT_HOME_DIR;
  const char default_tracing_group[] = DEFAULT_TRACING_GROUP;
@@@ -429,25 -427,6 +429,25 @@@ static void cleanup(void
        close(thread_quit_pipe[0]);
        close(thread_quit_pipe[1]);
  
 +      /* OUTPUT BENCHMARK RESULTS */
 +      bench_init();
 +
 +      if (getenv("BENCH_UST_NOTIFY")) {
 +              bench_print_ust_notification();
 +      }
 +
 +      if (getenv("BENCH_UST_REGISTER")) {
 +              bench_print_ust_register();
 +              bench_print_ust_unregister();
 +      }
 +
 +      if (getenv("BENCH_BOOT_PROCESS")) {
 +              bench_print_boot_process();
 +      }
 +
 +      bench_close();
 +      /* END BENCHMARK */
 +
        /* <fun> */
        DBG("%c[%d;%dm*** assert failed :-) *** ==> %c[%dm%c[%d;%dm"
                        "Matthew, BEET driven development works!%c[%dm",
@@@ -630,8 -609,6 +630,8 @@@ static int notify_ust_apps(int active
  
        DBG("Notifying applications of session daemon state: %d", active);
  
 +      tracepoint(ust_notify_apps_start);
 +
        /* See shm.c for this call implying mmap, shm and futex calls */
        wait_shm_mmap = shm_ust_get_mmap(wait_shm_path, is_root);
        if (wait_shm_mmap == NULL) {
        /* Wake waiting process */
        futex_wait_update((int32_t *) wait_shm_mmap, active);
  
 +      tracepoint(ust_notify_apps_stop);
 +
        /* Apps notified successfully */
        return 0;
  
@@@ -794,12 -769,18 +794,18 @@@ static void update_ust_app(int app_sock
  {
        struct ltt_session *sess, *stmp;
  
+       session_lock_list();
        /* For all tracing session(s) */
        cds_list_for_each_entry_safe(sess, stmp, &session_list_ptr->head, list) {
+               session_lock(sess);
                if (sess->ust_session) {
                        ust_app_global_update(sess->ust_session, app_sock);
                }
+               session_unlock(sess);
        }
+       session_unlock_list();
  }
  
  /*
@@@ -815,8 -796,6 +821,8 @@@ static void *thread_manage_kernel(void 
        char tmp;
        struct lttng_poll_event events;
  
 +      tracepoint(sessiond_th_kern_start);
 +
        DBG("Thread manage kernel started");
  
        ret = create_thread_poll_set(&events, 2);
                /* Zeroed the poll events */
                lttng_poll_reset(&events);
  
 +              tracepoint(sessiond_th_kern_poll);
 +
                /* Poll infinite value of time */
                ret = lttng_poll_wait(&events, -1);
                if (ret < 0) {
@@@ -921,8 -898,6 +927,8 @@@ static void *thread_manage_consumer(voi
        struct lttng_poll_event events;
        struct consumer_data *consumer_data = data;
  
 +      tracepoint(sessiond_th_kcon_start);
 +
        DBG("[thread] Manage consumer started");
  
        ret = lttcomm_listen_unix_sock(consumer_data->err_sock);
  
        nb_fd = LTTNG_POLL_GETNB(&events);
  
 +      tracepoint(sessiond_th_kcon_poll);
 +
        /* Inifinite blocking call, waiting for transmission */
        ret = lttng_poll_wait(&events, -1);
        if (ret < 0) {
@@@ -1080,8 -1053,6 +1086,8 @@@ static void *thread_manage_apps(void *d
        struct ust_command ust_cmd;
        struct lttng_poll_event events;
  
 +      tracepoint(sessiond_th_apps_start);
 +
        DBG("[thread] Manage application started");
  
        rcu_register_thread();
  
                DBG("Apps thread polling on %d fds", nb_fd);
  
 +              tracepoint(sessiond_th_apps_poll);
 +
                /* Inifinite blocking call, waiting for transmission */
                ret = lttng_poll_wait(&events, -1);
                if (ret < 0) {
                                        ERR("Apps command pipe error");
                                        goto error;
                                } else if (revents & LPOLLIN) {
 +                                      tracepoint(ust_register_read_start);
                                        /* Empty pipe */
                                        ret = read(apps_cmd_pipe[0], &ust_cmd, sizeof(ust_cmd));
                                        if (ret < 0 || ret < sizeof(ust_cmd)) {
                                                perror("read apps cmd pipe");
                                                goto error;
                                        }
 +                                      tracepoint(ust_register_read_stop);
  
 +                                      tracepoint(ust_register_add_start);
                                        /* Register applicaton to the session daemon */
                                        ret = ust_app_register(&ust_cmd.reg_msg,
                                                        ust_cmd.sock);
                                        } else if (ret < 0) {
                                                break;
                                        }
 +                                      tracepoint(ust_register_add_stop);
  
 +                                      tracepoint(ust_register_done_start);
                                        /*
                                         * Validate UST version compatibility.
                                         */
                                                DBG("Apps with sock %d added to poll set",
                                                                ust_cmd.sock);
                                        }
 -
 +                                      tracepoint(ust_register_done_stop);
                                        break;
                                }
                        } else {
                                 * the event at poll_wait.
                                 */
                                if (revents & (LPOLLERR | LPOLLHUP | LPOLLRDHUP)) {
 +                                      tracepoint(ust_unregister_start);
 +
                                        /* Removing from the poll set */
                                        ret = lttng_poll_del(&events, pollfd);
                                        if (ret < 0) {
  
                                        /* Socket closed on remote end. */
                                        ust_app_unregister(pollfd);
 +
 +                                      tracepoint(ust_unregister_stop);
                                        break;
                                }
                        }
@@@ -1232,8 -1192,6 +1238,8 @@@ static void *thread_dispatch_ust_regist
        struct cds_wfq_node *node;
        struct ust_command *ust_cmd = NULL;
  
 +      tracepoint(sessiond_th_dispatch_start);
 +
        DBG("[thread] Dispatch UST command started");
  
        while (!dispatch_thread_exit) {
                futex_nto1_prepare(&ust_cmd_queue.futex);
  
                do {
 +                      tracepoint(sessiond_th_dispatch_block);
 +
                        /* Dequeue command for registration */
                        node = cds_wfq_dequeue_blocking(&ust_cmd_queue.queue);
                        if (node == NULL) {
                                break;
                        }
  
 +                      tracepoint(ust_dispatch_register_start);
 +
                        ust_cmd = caa_container_of(node, struct ust_command, node);
  
                        DBG("Dispatching UST registration pid:%d ppid:%d uid:%d"
                        free(ust_cmd);
                } while (node != NULL);
  
 +              tracepoint(ust_dispatch_register_stop);
 +
                /* Futex wait on queue. Blocking call on futex() */
                futex_nto1_wait(&ust_cmd_queue.futex);
        }
@@@ -1308,8 -1260,6 +1314,8 @@@ static void *thread_registration_apps(v
         */
        struct ust_command *ust_cmd = NULL;
  
 +      tracepoint(sessiond_th_reg_start);
 +
        DBG("[thread] Manage application registration started");
  
        ret = lttcomm_listen_unix_sock(apps_sock);
        while (1) {
                DBG("Accepting application registration");
  
 +              tracepoint(sessiond_th_reg_poll);
 +
                nb_fd = LTTNG_POLL_GETNB(&events);
  
                /* Inifinite blocking call, waiting for transmission */
                                        ERR("Register apps socket poll error");
                                        goto error;
                                } else if (revents & LPOLLIN) {
 +                                      /* Registration starts here. Recording cycles */
 +                                      tracepoint(ust_register_start);
 +
                                        sock = lttcomm_accept_unix_sock(apps_sock);
                                        if (sock < 0) {
                                                goto error;
                                         * barrier with the exchange in cds_wfq_enqueue.
                                         */
                                        futex_nto1_wake(&ust_cmd_queue.futex);
 +
 +                                      tracepoint(ust_register_stop);
                                }
                        }
                }
@@@ -3441,18 -3384,14 +3447,18 @@@ static int process_client_msg(struct co
        }
        case LTTNG_CREATE_SESSION:
        {
 +              tracepoint(create_session_start);
                ret = cmd_create_session(cmd_ctx->lsm->session.name,
                                cmd_ctx->lsm->session.path, &cmd_ctx->creds);
 +              tracepoint(create_session_end);
                break;
        }
        case LTTNG_DESTROY_SESSION:
        {
 +              tracepoint(destroy_session_start);
                ret = cmd_destroy_session(cmd_ctx->session,
                                cmd_ctx->lsm->session.name);
 +              tracepoint(destroy_session_end);
                break;
        }
        case LTTNG_LIST_DOMAINS:
  
                session_lock_list();
                nr_sessions = lttng_sessions_count(cmd_ctx->creds.uid, cmd_ctx->creds.gid);
-               if (nr_sessions == 0) {
-                       ret = LTTCOMM_NO_SESSION;
-                       session_unlock_list();
-                       goto error;
-               }
                ret = setup_lttng_msg(cmd_ctx, sizeof(struct lttng_session) * nr_sessions);
                if (ret < 0) {
                        session_unlock_list();
@@@ -3603,8 -3538,6 +3605,8 @@@ static void *thread_manage_clients(voi
        struct command_ctx *cmd_ctx = NULL;
        struct lttng_poll_event events;
  
 +      tracepoint(sessiond_th_cli_start);
 +
        DBG("[thread] Manage client started");
  
        rcu_register_thread();
        while (1) {
                DBG("Accepting client command ...");
  
 +              tracepoint(sessiond_th_cli_poll);
 +
                nb_fd = LTTNG_POLL_GETNB(&events);
  
                /* Inifinite blocking call, waiting for transmission */
   */
  static int check_existing_daemon(void)
  {
-       if (access(client_unix_sock_path, F_OK) < 0 &&
-                       access(apps_unix_sock_path, F_OK) < 0) {
-               return 0;
-       }
        /* Is there anybody out there ? */
        if (lttng_session_daemon_alive()) {
                return -EEXIST;
-       } else {
-               return 0;
        }
+       return 0;
  }
  
  /*
   * Set the tracing group gid onto the client socket.
   *
   * Race window between mkdir and chown is OK because we are going from more
-  * permissive (root.root) to les permissive (root.tracing).
+  * permissive (root.root) to less permissive (root.tracing).
   */
  static int set_permissions(char *rundir)
  {
                perror("chown");
        }
  
+       /* Ensure tracing group can search the run dir */
+       ret = chmod(rundir, S_IRWXU | S_IXGRP);
+       if (ret < 0) {
+               ERR("Unable to set permissions on %s", rundir);
+               perror("chmod");
+       }
        /* lttng client socket path */
        ret = chown(client_unix_sock_path, 0, gid);
        if (ret < 0) {
@@@ -4067,7 -4000,7 +4071,7 @@@ static int create_lttng_rundir(const ch
  
        DBG3("Creating LTTng run directory: %s", rundir);
  
-       ret = mkdir(rundir, S_IRWXU | S_IRWXG );
+       ret = mkdir(rundir, S_IRWXU);
        if (ret < 0) {
                if (errno != EEXIST) {
                        ERR("Unable to create %s", rundir);
@@@ -4109,7 -4042,7 +4113,7 @@@ static int set_consumer_sockets(struct 
  
        DBG2("Creating consumer directory: %s", path);
  
-       ret = mkdir(path, S_IRWXU | S_IRWXG);
+       ret = mkdir(path, S_IRWXU);
        if (ret < 0) {
                if (errno != EEXIST) {
                        ERR("Failed to create %s", path);
@@@ -4231,8 -4164,6 +4235,8 @@@ int main(int argc, char **argv
        void *status;
        const char *home_path;
  
 +      tracepoint(sessiond_boot_start);
 +
        init_kernel_workarounds();
  
        rcu_register_thread();
                goto exit_kernel;
        }
  
 +      tracepoint(sessiond_boot_end);
 +
        ret = pthread_join(kernel_thread, &status);
        if (ret != 0) {
                perror("pthread_join");
This page took 0.043562 seconds and 4 git commands to generate.