Merge branch 'master' into benchmark
[lttng-tools.git] / src / bin / lttng-sessiond / main.c
index 631aa6b2d92e5e0d13aaa5a2d59072327b31eb69..acade53db2f3fa9b13d90f5245ef8fed77f07847 100644 (file)
@@ -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;
@@ -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",
@@ -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) {
@@ -618,6 +641,8 @@ static int notify_ust_apps(int active)
        /* Wake waiting process */
        futex_wait_update((int32_t *) wait_shm_mmap, active);
 
+       tracepoint(ust_notify_apps_stop);
+
        /* Apps notified successfully */
        return 0;
 
@@ -790,6 +815,8 @@ static void *thread_manage_kernel(void *data)
        char tmp;
        struct lttng_poll_event events;
 
+       tracepoint(sessiond_th_kern_start);
+
        DBG("Thread manage kernel started");
 
        ret = create_thread_poll_set(&events, 2);
@@ -824,6 +851,8 @@ static void *thread_manage_kernel(void *data)
                /* 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) {
@@ -892,6 +921,8 @@ static void *thread_manage_consumer(void *data)
        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);
@@ -915,6 +946,8 @@ static void *thread_manage_consumer(void *data)
 
        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) {
@@ -1047,6 +1080,8 @@ static void *thread_manage_apps(void *data)
        struct ust_command ust_cmd;
        struct lttng_poll_event events;
 
+       tracepoint(sessiond_th_apps_start);
+
        DBG("[thread] Manage application started");
 
        rcu_register_thread();
@@ -1070,6 +1105,8 @@ static void *thread_manage_apps(void *data)
 
                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) {
@@ -1093,13 +1130,16 @@ static void *thread_manage_apps(void *data)
                                        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);
@@ -1108,7 +1148,9 @@ static void *thread_manage_apps(void *data)
                                        } else if (ret < 0) {
                                                break;
                                        }
+                                       tracepoint(ust_register_add_stop);
 
+                                       tracepoint(ust_register_done_start);
                                        /*
                                         * Validate UST version compatibility.
                                         */
@@ -1141,7 +1183,7 @@ static void *thread_manage_apps(void *data)
                                                DBG("Apps with sock %d added to poll set",
                                                                ust_cmd.sock);
                                        }
-
+                                       tracepoint(ust_register_done_stop);
                                        break;
                                }
                        } else {
@@ -1150,6 +1192,8 @@ static void *thread_manage_apps(void *data)
                                 * 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) {
@@ -1158,6 +1202,8 @@ static void *thread_manage_apps(void *data)
 
                                        /* Socket closed on remote end. */
                                        ust_app_unregister(pollfd);
+
+                                       tracepoint(ust_unregister_stop);
                                        break;
                                }
                        }
@@ -1186,6 +1232,8 @@ static void *thread_dispatch_ust_registration(void *data)
        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) {
@@ -1193,6 +1241,8 @@ static void *thread_dispatch_ust_registration(void *data)
                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) {
@@ -1201,6 +1251,8 @@ static void *thread_dispatch_ust_registration(void *data)
                                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"
@@ -1231,6 +1283,8 @@ static void *thread_dispatch_ust_registration(void *data)
                        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);
        }
@@ -1254,6 +1308,8 @@ static void *thread_registration_apps(void *data)
         */
        struct ust_command *ust_cmd = NULL;
 
+       tracepoint(sessiond_th_reg_start);
+
        DBG("[thread] Manage application registration started");
 
        ret = lttcomm_listen_unix_sock(apps_sock);
@@ -1287,6 +1343,8 @@ static void *thread_registration_apps(void *data)
        while (1) {
                DBG("Accepting application registration");
 
+               tracepoint(sessiond_th_reg_poll);
+
                nb_fd = LTTNG_POLL_GETNB(&events);
 
                /* Inifinite blocking call, waiting for transmission */
@@ -1312,6 +1370,9 @@ static void *thread_registration_apps(void *data)
                                        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;
@@ -1361,6 +1422,8 @@ static void *thread_registration_apps(void *data)
                                         * barrier with the exchange in cds_wfq_enqueue.
                                         */
                                        futex_nto1_wake(&ust_cmd_queue.futex);
+
+                                       tracepoint(ust_register_stop);
                                }
                        }
                }
@@ -3376,14 +3439,18 @@ static int process_client_msg(struct command_ctx *cmd_ctx)
        }
        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:
@@ -3534,6 +3601,8 @@ static void *thread_manage_clients(void *data)
        struct command_ctx *cmd_ctx = NULL;
        struct lttng_poll_event events;
 
+       tracepoint(sessiond_th_cli_start);
+
        DBG("[thread] Manage client started");
 
        rcu_register_thread();
@@ -3568,6 +3637,8 @@ static void *thread_manage_clients(void *data)
        while (1) {
                DBG("Accepting client command ...");
 
+               tracepoint(sessiond_th_cli_poll);
+
                nb_fd = LTTNG_POLL_GETNB(&events);
 
                /* Inifinite blocking call, waiting for transmission */
@@ -4158,6 +4229,7 @@ int main(int argc, char **argv)
        void *status;
        const char *home_path;
 
+       tracepoint(sessiond_boot_start);
        rcu_register_thread();
 
        /* Create thread quit pipe */
@@ -4417,6 +4489,8 @@ int main(int argc, char **argv)
                goto exit_kernel;
        }
 
+       tracepoint(sessiond_boot_end);
+
        ret = pthread_join(kernel_thread, &status);
        if (ret != 0) {
                perror("pthread_join");
This page took 0.033445 seconds and 4 git commands to generate.