* David Goulet ([email protected]) wrote:
> 
> 
> Mathieu Desnoyers:
> > * David Goulet ([email protected]) wrote:
> >> The default per UID subbuffer size are changed from 4096 bytes to 131072
> >> bytes (128k). The rest have the same values as before.
> >>
> >> Some DEFAULT_CHANNEL_* macros are prefixed with an underscore making
> >> sure they are not used elsewhere in the code base and only domain
> >> specific values are used.
> > 
> > Looks good, except for one small question: the metadata defaults (e.g.
> > DEFAULT_METADATA_SWITCH_TIMER) don't seem to appear anywhere in the
> > help/manpage. Any idea on how we could fix that ?
> 
> Right, I guess just adding a "metadata: " everywhere would be the way to
> do it ?

Yep.

Thanks,

Mathieu

> 
> David
> 
> > 
> > Thanks,
> > 
> > Mathieu
> > 
> > 
> >>
> >> Fixes #524
> >>
> >> Signed-off-by: David Goulet <[email protected]>
> >> ---
> >>  doc/man/lttng.1                          |   15 ++++--
> >>  src/bin/lttng-sessiond/channel.c         |   59 ++++++++++++++-------
> >>  src/bin/lttng-sessiond/channel.h         |    3 +-
> >>  src/bin/lttng-sessiond/cmd.c             |   14 +++--
> >>  src/bin/lttng-sessiond/trace-ust.c       |    4 +-
> >>  src/bin/lttng-sessiond/ust-app.c         |    4 +-
> >>  src/bin/lttng/commands/enable_channels.c |   32 ++++++++----
> >>  src/common/defaults.c                    |   11 ++--
> >>  src/common/defaults.h                    |   84 
> >> +++++++++++++++++-------------
> >>  src/lib/lttng-ctl/lttng-ctl.c            |   36 ++++++++-----
> >>  tests/unit/test_ust_data.c               |    4 +-
> >>  11 files changed, 168 insertions(+), 98 deletions(-)
> >>
> >> diff --git a/doc/man/lttng.1 b/doc/man/lttng.1
> >> index 37c2063..aa98990 100644
> >> --- a/doc/man/lttng.1
> >> +++ b/doc/man/lttng.1
> >> @@ -327,17 +327,21 @@ same type.
> >>  \-\-overwrite
> >>          Flight recorder mode : overwrites events when subbuffers are full
> >>  \-\-subbuf-size SIZE
> >> -        Subbuffer size in bytes {+k,+M,+G} (default: 4096, kernel 
> >> default: 262144)
> >> +        Subbuffer size in bytes {+k,+M,+G}
> >> +        (default UST uid: 131072, UST pid: 4096, kernel: 262144)
> >>          Rounded up to the next power of 2.
> >>  \-\-num-subbuf NUM
> >> -        Number of subbuffers (default: 4)
> >> +        Number of subbuffers. (default UST uid: 4, UST pid: 4, kernel: 4)
> >>          Rounded up to the next power of 2.
> >>  \-\-switch-timer USEC
> >> -        Switch subbuffer timer interval in µsec (default: 0)
> >> +        Switch subbuffer timer interval in µsec.
> >> +        (default UST uid: 0, UST pid: 0, kernel: 0)
> >>  \-\-read-timer USEC
> >> -        Read timer interval in µsec (UST default: 0, kernel default: 
> >> 200000)
> >> +        Read timer interval in µsec.
> >> +        (default UST uid: 0, UST pid: 0, kernel: 200000)
> >>  \-\-output TYPE
> >>          Channel output type. Possible values: mmap, splice
> >> +        (default UST uid: mmap, UST pid: mmap, kernel: splice)
> >>  \-\-buffers-uid
> >>          Use per UID buffer (\-u only). Buffers are shared between 
> >> applications
> >>          that have the same UID.
> >> @@ -347,9 +351,10 @@ same type.
> >>          Use shared buffer for the whole system (\-k only)
> >>  \-C, \-\-tracefile-size SIZE
> >>          Maximum size of each tracefile within a stream (in bytes).
> >> +          0 means unlimited. (default: 0)
> >>  \-W, \-\-tracefile-count COUNT
> >>          Used in conjunction with \-C option, this will limit the number
> >> -        of files created to the specified count.
> >> +        of files created to the specified count. 0 means unlimited. 
> >> (default: 0)
> >>  
> >>  .B EXAMPLES:
> >>  
> >> diff --git a/src/bin/lttng-sessiond/channel.c 
> >> b/src/bin/lttng-sessiond/channel.c
> >> index ff2db69..8f835fd 100644
> >> --- a/src/bin/lttng-sessiond/channel.c
> >> +++ b/src/bin/lttng-sessiond/channel.c
> >> @@ -33,7 +33,8 @@
> >>  /*
> >>   * Return allocated channel attributes.
> >>   */
> >> -struct lttng_channel *channel_new_default_attr(int dom)
> >> +struct lttng_channel *channel_new_default_attr(int dom,
> >> +          enum lttng_buffer_type type)
> >>  {
> >>    struct lttng_channel *chan;
> >>  
> >> @@ -49,10 +50,14 @@ struct lttng_channel *channel_new_default_attr(int dom)
> >>            goto error;
> >>    }
> >>  
> >> +  /* Same for all domains. */
> >>    chan->attr.overwrite = DEFAULT_CHANNEL_OVERWRITE;
> >> +  chan->attr.tracefile_size = DEFAULT_CHANNEL_TRACEFILE_SIZE;
> >> +  chan->attr.tracefile_count = DEFAULT_CHANNEL_TRACEFILE_COUNT;
> >>  
> >>    switch (dom) {
> >>    case LTTNG_DOMAIN_KERNEL:
> >> +          assert(type == LTTNG_BUFFER_GLOBAL);
> >>            chan->attr.subbuf_size =
> >>                    default_get_kernel_channel_subbuf_size();
> >>            chan->attr.num_subbuf = DEFAULT_KERNEL_CHANNEL_SUBBUF_NUM;
> >> @@ -61,16 +66,27 @@ struct lttng_channel *channel_new_default_attr(int dom)
> >>            chan->attr.read_timer_interval = 
> >> DEFAULT_KERNEL_CHANNEL_READ_TIMER;
> >>            break;
> >>    case LTTNG_DOMAIN_UST:
> >> -#if 0
> >> -  case LTTNG_DOMAIN_UST_PID:
> >> -  case LTTNG_DOMAIN_UST_PID_FOLLOW_CHILDREN:
> >> -  case LTTNG_DOMAIN_UST_EXEC_NAME:
> >> -#endif
> >> -          chan->attr.subbuf_size = default_get_ust_channel_subbuf_size();
> >> -          chan->attr.num_subbuf = DEFAULT_UST_CHANNEL_SUBBUF_NUM;
> >> -          chan->attr.output = DEFAULT_UST_CHANNEL_OUTPUT;
> >> -          chan->attr.switch_timer_interval = 
> >> DEFAULT_UST_CHANNEL_SWITCH_TIMER;
> >> -          chan->attr.read_timer_interval = DEFAULT_UST_CHANNEL_READ_TIMER;
> >> +          switch (type) {
> >> +          case LTTNG_BUFFER_PER_UID:
> >> +                  chan->attr.subbuf_size = 
> >> default_get_ust_uid_channel_subbuf_size();
> >> +                  chan->attr.num_subbuf = 
> >> DEFAULT_UST_UID_CHANNEL_SUBBUF_NUM;
> >> +                  chan->attr.output = DEFAULT_UST_UID_CHANNEL_OUTPUT;
> >> +                  chan->attr.switch_timer_interval =
> >> +                          DEFAULT_UST_UID_CHANNEL_SWITCH_TIMER;
> >> +                  chan->attr.read_timer_interval =
> >> +                          DEFAULT_UST_UID_CHANNEL_READ_TIMER;
> >> +                  break;
> >> +          case LTTNG_BUFFER_PER_PID:
> >> +          default:
> >> +                  chan->attr.subbuf_size = 
> >> default_get_ust_pid_channel_subbuf_size();
> >> +                  chan->attr.num_subbuf = 
> >> DEFAULT_UST_PID_CHANNEL_SUBBUF_NUM;
> >> +                  chan->attr.output = DEFAULT_UST_PID_CHANNEL_OUTPUT;
> >> +                  chan->attr.switch_timer_interval =
> >> +                          DEFAULT_UST_PID_CHANNEL_SWITCH_TIMER;
> >> +                  chan->attr.read_timer_interval =
> >> +                          DEFAULT_UST_PID_CHANNEL_READ_TIMER;
> >> +                  break;
> >> +          }
> >>            break;
> >>    default:
> >>            goto error;     /* Not implemented */
> >> @@ -158,7 +174,8 @@ int channel_kernel_create(struct ltt_kernel_session 
> >> *ksession,
> >>  
> >>    /* Creating channel attributes if needed */
> >>    if (attr == NULL) {
> >> -          defattr = channel_new_default_attr(LTTNG_DOMAIN_KERNEL);
> >> +          defattr = channel_new_default_attr(LTTNG_DOMAIN_KERNEL,
> >> +                          LTTNG_BUFFER_GLOBAL);
> >>            if (defattr == NULL) {
> >>                    ret = LTTNG_ERR_FATAL;
> >>                    goto error;
> >> @@ -237,7 +254,7 @@ int channel_ust_create(struct ltt_ust_session *usess,
> >>  
> >>    /* Creating channel attributes if needed */
> >>    if (attr == NULL) {
> >> -          defattr = channel_new_default_attr(LTTNG_DOMAIN_UST);
> >> +          defattr = channel_new_default_attr(LTTNG_DOMAIN_UST, type);
> >>            if (defattr == NULL) {
> >>                    ret = LTTNG_ERR_FATAL;
> >>                    goto error;
> >> @@ -245,11 +262,6 @@ int channel_ust_create(struct ltt_ust_session *usess,
> >>            attr = defattr;
> >>    }
> >>  
> >> -  if (attr->attr.subbuf_size < DEFAULT_UST_CHANNEL_SUBBUF_SIZE) {
> >> -          ret = LTTNG_ERR_INVALID;
> >> -          goto error;
> >> -  }
> >> -
> >>    /*
> >>     * Validate UST buffer size and number of buffers: must both be power 
> >> of 2
> >>     * and nonzero. We validate right here for UST, because applications 
> >> will
> >> @@ -285,7 +297,18 @@ int channel_ust_create(struct ltt_ust_session *usess,
> >>    /* Validate buffer type. */
> >>    switch (type) {
> >>    case LTTNG_BUFFER_PER_PID:
> >> +          if (attr->attr.subbuf_size <
> >> +                          default_get_ust_pid_channel_subbuf_size()) {
> >> +                  ret = LTTNG_ERR_INVALID;
> >> +                  goto error;
> >> +          }
> >> +          break;
> >>    case LTTNG_BUFFER_PER_UID:
> >> +          if (attr->attr.subbuf_size <
> >> +                          default_get_ust_uid_channel_subbuf_size()) {
> >> +                  ret = LTTNG_ERR_INVALID;
> >> +                  goto error;
> >> +          }
> >>            break;
> >>    default:
> >>            ret = LTTNG_ERR_BUFFER_NOT_SUPPORTED;
> >> diff --git a/src/bin/lttng-sessiond/channel.h 
> >> b/src/bin/lttng-sessiond/channel.h
> >> index 7fbbb4c..15cabea 100644
> >> --- a/src/bin/lttng-sessiond/channel.h
> >> +++ b/src/bin/lttng-sessiond/channel.h
> >> @@ -30,7 +30,8 @@ int channel_kernel_enable(struct ltt_kernel_session 
> >> *ksession,
> >>  int channel_kernel_create(struct ltt_kernel_session *ksession,
> >>            struct lttng_channel *chan, int kernel_pipe);
> >>  
> >> -struct lttng_channel *channel_new_default_attr(int domain);
> >> +struct lttng_channel *channel_new_default_attr(int domain,
> >> +          enum lttng_buffer_type type);
> >>  
> >>  int channel_ust_create(struct ltt_ust_session *usess,
> >>            struct lttng_channel *attr, enum lttng_buffer_type type);
> >> diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c
> >> index 5d2cba1..528665a 100644
> >> --- a/src/bin/lttng-sessiond/cmd.c
> >> +++ b/src/bin/lttng-sessiond/cmd.c
> >> @@ -1106,7 +1106,7 @@ int cmd_add_context(struct ltt_session *session, int 
> >> domain,
> >>            if (chan_count == 0) {
> >>                    struct lttng_channel *attr;
> >>                    /* Create default channel */
> >> -                  attr = channel_new_default_attr(domain);
> >> +                  attr = channel_new_default_attr(domain, 
> >> usess->buffer_type);
> >>                    if (attr == NULL) {
> >>                            ret = LTTNG_ERR_FATAL;
> >>                            goto error;
> >> @@ -1166,7 +1166,8 @@ int cmd_enable_event(struct ltt_session *session, 
> >> struct lttng_domain *domain,
> >>            kchan = trace_kernel_get_channel_by_name(channel_name,
> >>                            session->kernel_session);
> >>            if (kchan == NULL) {
> >> -                  attr = channel_new_default_attr(LTTNG_DOMAIN_KERNEL);
> >> +                  attr = channel_new_default_attr(LTTNG_DOMAIN_KERNEL,
> >> +                                  LTTNG_BUFFER_GLOBAL);
> >>                    if (attr == NULL) {
> >>                            ret = LTTNG_ERR_FATAL;
> >>                            goto error;
> >> @@ -1216,7 +1217,8 @@ int cmd_enable_event(struct ltt_session *session, 
> >> struct lttng_domain *domain,
> >>                            channel_name);
> >>            if (uchan == NULL) {
> >>                    /* Create default channel */
> >> -                  attr = channel_new_default_attr(LTTNG_DOMAIN_UST);
> >> +                  attr = channel_new_default_attr(LTTNG_DOMAIN_UST,
> >> +                                  usess->buffer_type);
> >>                    if (attr == NULL) {
> >>                            ret = LTTNG_ERR_FATAL;
> >>                            goto error;
> >> @@ -1286,7 +1288,8 @@ int cmd_enable_event_all(struct ltt_session *session,
> >>                            session->kernel_session);
> >>            if (kchan == NULL) {
> >>                    /* Create default channel */
> >> -                  attr = channel_new_default_attr(LTTNG_DOMAIN_KERNEL);
> >> +                  attr = channel_new_default_attr(LTTNG_DOMAIN_KERNEL,
> >> +                                  LTTNG_BUFFER_GLOBAL);
> >>                    if (attr == NULL) {
> >>                            ret = LTTNG_ERR_FATAL;
> >>                            goto error;
> >> @@ -1350,7 +1353,8 @@ int cmd_enable_event_all(struct ltt_session *session,
> >>                            channel_name);
> >>            if (uchan == NULL) {
> >>                    /* Create default channel */
> >> -                  attr = channel_new_default_attr(LTTNG_DOMAIN_UST);
> >> +                  attr = channel_new_default_attr(LTTNG_DOMAIN_UST,
> >> +                                  usess->buffer_type);
> >>                    if (attr == NULL) {
> >>                            ret = LTTNG_ERR_FATAL;
> >>                            goto error;
> >> diff --git a/src/bin/lttng-sessiond/trace-ust.c 
> >> b/src/bin/lttng-sessiond/trace-ust.c
> >> index 7592d77..8fb685c 100644
> >> --- a/src/bin/lttng-sessiond/trace-ust.c
> >> +++ b/src/bin/lttng-sessiond/trace-ust.c
> >> @@ -384,8 +384,8 @@ struct ltt_ust_metadata 
> >> *trace_ust_create_metadata(char *path)
> >>    lum->attr.overwrite = DEFAULT_CHANNEL_OVERWRITE;
> >>    lum->attr.subbuf_size = default_get_metadata_subbuf_size();
> >>    lum->attr.num_subbuf = DEFAULT_METADATA_SUBBUF_NUM;
> >> -  lum->attr.switch_timer_interval = DEFAULT_UST_CHANNEL_SWITCH_TIMER;
> >> -  lum->attr.read_timer_interval = DEFAULT_UST_CHANNEL_READ_TIMER;
> >> +  lum->attr.switch_timer_interval = DEFAULT_METADATA_SWITCH_TIMER;
> >> +  lum->attr.read_timer_interval = DEFAULT_METADATA_READ_TIMER;
> >>    lum->attr.output = LTTNG_UST_MMAP;
> >>  
> >>    lum->handle = -1;
> >> diff --git a/src/bin/lttng-sessiond/ust-app.c 
> >> b/src/bin/lttng-sessiond/ust-app.c
> >> index e362381..5710226 100644
> >> --- a/src/bin/lttng-sessiond/ust-app.c
> >> +++ b/src/bin/lttng-sessiond/ust-app.c
> >> @@ -2527,8 +2527,8 @@ static int create_ust_app_metadata(struct 
> >> ust_app_session *ua_sess,
> >>            metadata->attr.overwrite = DEFAULT_CHANNEL_OVERWRITE;
> >>            metadata->attr.subbuf_size = default_get_metadata_subbuf_size();
> >>            metadata->attr.num_subbuf = DEFAULT_METADATA_SUBBUF_NUM;
> >> -          metadata->attr.switch_timer_interval = 
> >> DEFAULT_UST_CHANNEL_SWITCH_TIMER;
> >> -          metadata->attr.read_timer_interval = 
> >> DEFAULT_UST_CHANNEL_READ_TIMER;
> >> +          metadata->attr.switch_timer_interval = 
> >> DEFAULT_METADATA_SWITCH_TIMER;
> >> +          metadata->attr.read_timer_interval = 
> >> DEFAULT_METADATA_READ_TIMER;
> >>            metadata->attr.output = LTTNG_UST_MMAP;
> >>            metadata->attr.type = LTTNG_UST_CHAN_METADATA;
> >>    } else {
> >> diff --git a/src/bin/lttng/commands/enable_channels.c 
> >> b/src/bin/lttng/commands/enable_channels.c
> >> index 4816d62..c7bbca1 100644
> >> --- a/src/bin/lttng/commands/enable_channels.c
> >> +++ b/src/bin/lttng/commands/enable_channels.c
> >> @@ -104,28 +104,40 @@ static void usage(FILE *ofp)
> >>    fprintf(ofp, "      --overwrite          Flight recorder mode%s\n",
> >>            DEFAULT_CHANNEL_OVERWRITE ? " (default)" : "");
> >>    fprintf(ofp, "      --subbuf-size SIZE   Subbuffer size in bytes 
> >> {+k,+M,+G}\n");
> >> -  fprintf(ofp, "                               (default: %zu, kernel 
> >> default: %zu)\n",
> >> -          default_get_channel_subbuf_size(),
> >> +  fprintf(ofp, "                               (default UST uid: %zu, UST 
> >> pid: %zu, kernel: %zu)\n",
> >> +          default_get_ust_uid_channel_subbuf_size(),
> >> +          default_get_ust_pid_channel_subbuf_size(),
> >>            default_get_kernel_channel_subbuf_size());
> >>    fprintf(ofp, "                               Rounded up to the next 
> >> power of 2.\n");
> >>    fprintf(ofp, "      --num-subbuf NUM     Number of subbufers\n");
> >> -  fprintf(ofp, "                               (default: %u)\n",
> >> -          DEFAULT_CHANNEL_SUBBUF_NUM);
> >> +  fprintf(ofp, "                               (default UST uid: %u, UST 
> >> pid: %u, kernel: %u)\n",
> >> +          DEFAULT_UST_UID_CHANNEL_SUBBUF_NUM, 
> >> DEFAULT_UST_PID_CHANNEL_SUBBUF_NUM,
> >> +          DEFAULT_KERNEL_CHANNEL_SUBBUF_NUM);
> >>    fprintf(ofp, "                               Rounded up to the next 
> >> power of 2.\n");
> >> -  fprintf(ofp, "      --switch-timer USEC  Switch timer interval in usec 
> >> (default: %u)\n",
> >> -          DEFAULT_CHANNEL_SWITCH_TIMER);
> >> -  fprintf(ofp, "      --read-timer USEC    Read timer interval in usec 
> >> (UST default: %u, kernel default: %u)\n",
> >> -          DEFAULT_UST_CHANNEL_READ_TIMER, 
> >> DEFAULT_KERNEL_CHANNEL_READ_TIMER);
> >> +  fprintf(ofp, "      --switch-timer USEC  Switch timer interval in 
> >> usec\n");
> >> +  fprintf(ofp, "                               (default UST uid: %u, UST 
> >> pid: %u, kernel: %u)\n",
> >> +          DEFAULT_UST_UID_CHANNEL_SWITCH_TIMER, 
> >> DEFAULT_UST_PID_CHANNEL_SWITCH_TIMER,
> >> +          DEFAULT_KERNEL_CHANNEL_SWITCH_TIMER);
> >> +  fprintf(ofp, "      --read-timer USEC    Read timer interval in 
> >> usec.\n");
> >> +  fprintf(ofp, "                               (default UST uid: %u, UST 
> >> pid: %u, kernel: %u)\n",
> >> +          DEFAULT_UST_UID_CHANNEL_READ_TIMER, 
> >> DEFAULT_UST_UID_CHANNEL_READ_TIMER,
> >> +          DEFAULT_KERNEL_CHANNEL_READ_TIMER);
> >>    fprintf(ofp, "      --output TYPE        Channel output type (Values: 
> >> %s, %s)\n",
> >>                    output_mmap, output_splice);
> >> +  fprintf(ofp, "                               (default UST uid: %s, UST 
> >> pid: %s, kernel: %s)\n",
> >> +                  DEFAULT_UST_UID_CHANNEL_OUTPUT == LTTNG_EVENT_MMAP ? 
> >> output_mmap : output_splice,
> >> +                  DEFAULT_UST_PID_CHANNEL_OUTPUT == LTTNG_EVENT_MMAP ? 
> >> output_mmap : output_splice,
> >> +                  DEFAULT_KERNEL_CHANNEL_OUTPUT == LTTNG_EVENT_MMAP ? 
> >> output_mmap : output_splice);
> >>    fprintf(ofp, "      --buffers-uid        Use per UID buffer (-u 
> >> only)\n");
> >>    fprintf(ofp, "      --buffers-pid        Use per PID buffer (-u 
> >> only)\n");
> >>    fprintf(ofp, "      --buffers-global     Use shared buffer for the 
> >> whole system (-k only)\n");
> >>    fprintf(ofp, "  -C, --tracefile-size SIZE\n");
> >> -  fprintf(ofp, "                           Maximum size of each tracefile 
> >> within a stream (in bytes).\n");
> >> +  fprintf(ofp, "                           Maximum size of each tracefile 
> >> within a stream (in bytes). 0 means unlimited.\n");
> >> +  fprintf(ofp, "                               (default: %u)\n", 
> >> DEFAULT_CHANNEL_TRACEFILE_SIZE);
> >>    fprintf(ofp, "  -W, --tracefile-count COUNT\n");
> >>    fprintf(ofp, "                           Used in conjunction with -C 
> >> option, this will limit the number\n");
> >> -  fprintf(ofp, "                           of files created to the 
> >> specified count.\n");
> >> +  fprintf(ofp, "                           of files created to the 
> >> specified count. 0 means unlimited.\n");
> >> +  fprintf(ofp, "                               (default: %u)\n", 
> >> DEFAULT_CHANNEL_TRACEFILE_COUNT);
> >>    fprintf(ofp, "\n");
> >>  }
> >>  
> >> diff --git a/src/common/defaults.c b/src/common/defaults.c
> >> index ccdbaf4..d74a42b 100644
> >> --- a/src/common/defaults.c
> >> +++ b/src/common/defaults.c
> >> @@ -24,7 +24,8 @@
> >>  size_t default_channel_subbuf_size;
> >>  size_t default_metadata_subbuf_size;
> >>  size_t default_kernel_channel_subbuf_size;
> >> -size_t default_ust_channel_subbuf_size;
> >> +size_t default_ust_pid_channel_subbuf_size;
> >> +size_t default_ust_uid_channel_subbuf_size;
> >>  
> >>  static void __attribute__((constructor)) init_defaults(void)
> >>  {
> >> @@ -39,11 +40,13 @@ static void __attribute__((constructor)) 
> >> init_defaults(void)
> >>    }
> >>  
> >>    default_channel_subbuf_size =
> >> -          max(DEFAULT_CHANNEL_SUBBUF_SIZE, page_size);
> >> +          max(_DEFAULT_CHANNEL_SUBBUF_SIZE, page_size);
> >>    default_metadata_subbuf_size =
> >>            max(DEFAULT_METADATA_SUBBUF_SIZE, page_size);
> >>    default_kernel_channel_subbuf_size =
> >>            max(DEFAULT_KERNEL_CHANNEL_SUBBUF_SIZE, page_size);
> >> -  default_ust_channel_subbuf_size =
> >> -          max(DEFAULT_UST_CHANNEL_SUBBUF_SIZE, page_size);
> >> +  default_ust_pid_channel_subbuf_size =
> >> +          max(DEFAULT_UST_PID_CHANNEL_SUBBUF_SIZE, page_size);
> >> +  default_ust_uid_channel_subbuf_size =
> >> +          max(DEFAULT_UST_UID_CHANNEL_SUBBUF_SIZE, page_size);
> >>  }
> >> diff --git a/src/common/defaults.h b/src/common/defaults.h
> >> index fb6a975..2c73277 100644
> >> --- a/src/common/defaults.h
> >> +++ b/src/common/defaults.h
> >> @@ -112,55 +112,57 @@
> >>  
> >>  /* Default channel attributes */
> >>  #define DEFAULT_CHANNEL_NAME            "channel0"
> >> -#define DEFAULT_CHANNEL_OVERWRITE       0       /* usec */
> >> -/* DEFAULT_CHANNEL_SUBBUF_SIZE must always be a power of 2 */
> >> -#define DEFAULT_CHANNEL_SUBBUF_SIZE     4096    /* bytes */
> >> -/* DEFAULT_CHANNEL_SUBBUF_NUM must always be a power of 2 */
> >> -#define DEFAULT_CHANNEL_SUBBUF_NUM      4
> >> -#define DEFAULT_CHANNEL_SWITCH_TIMER    0       /* usec */
> >> -#define DEFAULT_CHANNEL_READ_TIMER      200000  /* usec */
> >> -#define DEFAULT_CHANNEL_OUTPUT          LTTNG_EVENT_MMAP
> >> -
> >> +#define DEFAULT_CHANNEL_OVERWRITE       0
> >> +#define DEFAULT_CHANNEL_TRACEFILE_SIZE  0
> >> +#define DEFAULT_CHANNEL_TRACEFILE_COUNT 0
> >> +
> >> +/* Must always be a power of 2 */
> >> +#define _DEFAULT_CHANNEL_SUBBUF_SIZE      4096    /* bytes */
> >> +/* Must always be a power of 2 */
> >> +#define _DEFAULT_CHANNEL_SUBBUF_NUM               4
> >> +#define _DEFAULT_CHANNEL_SWITCH_TIMER     0       /* usec */
> >> +#define _DEFAULT_CHANNEL_READ_TIMER               200000  /* usec */
> >> +#define _DEFAULT_CHANNEL_OUTPUT                   LTTNG_EVENT_MMAP
> >> +
> >> +/* Metadata channel defaults. */
> >>  #define DEFAULT_METADATA_SUBBUF_SIZE    4096
> >>  #define DEFAULT_METADATA_SUBBUF_NUM     2
> >>  #define DEFAULT_METADATA_CACHE_SIZE     4096
> >> +#define DEFAULT_METADATA_SWITCH_TIMER     _DEFAULT_CHANNEL_SWITCH_TIMER
> >> +#define DEFAULT_METADATA_READ_TIMER               
> >> _DEFAULT_CHANNEL_READ_TIMER
> >> +#define DEFAULT_METADATA_OUTPUT                   _DEFAULT_CHANNEL_OUTPUT
> >>  
> >>  /* Kernel has different defaults */
> >>  
> >>  /* DEFAULT_KERNEL_CHANNEL_SUBBUF_SIZE must always be a power of 2 */
> >> -#define DEFAULT_KERNEL_CHANNEL_SUBBUF_SIZE  262144    /* bytes */
> >> +#define DEFAULT_KERNEL_CHANNEL_SUBBUF_SIZE                262144    /* 
> >> bytes */
> >>  /*
> >>   * DEFAULT_KERNEL_CHANNEL_SUBBUF_NUM must always be a power of 2.
> >>   * Update help manually if override.
> >>   */
> >> -#define DEFAULT_KERNEL_CHANNEL_SUBBUF_NUM   DEFAULT_CHANNEL_SUBBUF_NUM
> >> +#define DEFAULT_KERNEL_CHANNEL_SUBBUF_NUM         
> >> _DEFAULT_CHANNEL_SUBBUF_NUM
> >>  /* See lttng-kernel.h enum lttng_kernel_output for channel output */
> >> -#define DEFAULT_KERNEL_CHANNEL_OUTPUT       LTTNG_EVENT_SPLICE
> >> -/* By default, unlimited tracefile size */
> >> -#define DEFAULT_KERNEL_CHANNEL_TRACEFILE_SIZE  0
> >> -/* By default, unlimited tracefile count */
> >> -#define DEFAULT_KERNEL_CHANNEL_TRACEFILE_COUNT 0
> >> -
> >> -#define DEFAULT_KERNEL_CHANNEL_SWITCH_TIMER       \
> >> -          DEFAULT_CHANNEL_SWITCH_TIMER
> >> -#define DEFAULT_KERNEL_CHANNEL_READ_TIMER      200000  /* usec */
> >> +#define DEFAULT_KERNEL_CHANNEL_OUTPUT                     
> >> LTTNG_EVENT_SPLICE
> >> +#define DEFAULT_KERNEL_CHANNEL_SWITCH_TIMER               
> >> _DEFAULT_CHANNEL_SWITCH_TIMER
> >> +#define DEFAULT_KERNEL_CHANNEL_READ_TIMER         
> >> _DEFAULT_CHANNEL_READ_TIMER
> >>  
> >>  /* User space defaults */
> >>  
> >>  /* Must be a power of 2 */
> >> -#define DEFAULT_UST_CHANNEL_SUBBUF_SIZE     4096    /* bytes */
> >> +#define DEFAULT_UST_PID_CHANNEL_SUBBUF_SIZE               
> >> _DEFAULT_CHANNEL_SUBBUF_SIZE
> >> +#define DEFAULT_UST_UID_CHANNEL_SUBBUF_SIZE               131072  /* 
> >> bytes */
> >>  /* Must be a power of 2. Update help manuall if override. */
> >> -#define DEFAULT_UST_CHANNEL_SUBBUF_NUM      DEFAULT_CHANNEL_SUBBUF_NUM
> >> +#define DEFAULT_UST_PID_CHANNEL_SUBBUF_NUM                
> >> _DEFAULT_CHANNEL_SUBBUF_NUM
> >> +#define DEFAULT_UST_UID_CHANNEL_SUBBUF_NUM                
> >> _DEFAULT_CHANNEL_SUBBUF_NUM
> >>  /* See lttng-ust.h enum lttng_ust_output */
> >> -#define DEFAULT_UST_CHANNEL_OUTPUT          LTTNG_EVENT_MMAP
> >> -/* By default, unlimited tracefile size */
> >> -#define DEFAULT_UST_CHANNEL_TRACEFILE_SIZE  0
> >> -/* By default, unlimited tracefile count */
> >> -#define DEFAULT_UST_CHANNEL_TRACEFILE_COUNT 0
> >> +#define DEFAULT_UST_PID_CHANNEL_OUTPUT                    
> >> _DEFAULT_CHANNEL_OUTPUT
> >> +#define DEFAULT_UST_UID_CHANNEL_OUTPUT                    
> >> _DEFAULT_CHANNEL_OUTPUT
> >> +/* Timers in usec. */
> >> +#define DEFAULT_UST_PID_CHANNEL_SWITCH_TIMER      
> >> _DEFAULT_CHANNEL_SWITCH_TIMER
> >> +#define DEFAULT_UST_UID_CHANNEL_SWITCH_TIMER      
> >> _DEFAULT_CHANNEL_SWITCH_TIMER
> >>  
> >> -#define DEFAULT_UST_CHANNEL_SWITCH_TIMER  \
> >> -          DEFAULT_CHANNEL_SWITCH_TIMER
> >> -#define DEFAULT_UST_CHANNEL_READ_TIMER      0  /* usec */
> >> +#define DEFAULT_UST_PID_CHANNEL_READ_TIMER      0  /* usec */
> >> +#define DEFAULT_UST_UID_CHANNEL_READ_TIMER      0  /* usec */
> >>  
> >>  /*
> >>   * Default timeout value for the sem_timedwait() call. Blocking forever 
> >> is not
> >> @@ -202,10 +204,10 @@
> >>  
> >>  extern size_t default_channel_subbuf_size;
> >>  extern size_t default_metadata_subbuf_size;
> >> -extern size_t default_ust_channel_subbuf_size;
> >> +extern size_t default_ust_pid_channel_subbuf_size;
> >> +extern size_t default_ust_uid_channel_subbuf_size;
> >>  extern size_t default_kernel_channel_subbuf_size;
> >>  
> >> -
> >>  /*
> >>   * Returns the default subbuf size.
> >>   *
> >> @@ -243,15 +245,27 @@ size_t default_get_kernel_channel_subbuf_size(void)
> >>  }
> >>  
> >>  /*
> >> - * Returns the default subbuf size for the UST domain.
> >> + * Returns the default subbuf size for the UST domain per PID.
> >> + *
> >> + * This function depends on a value that is set at constructor time, so 
> >> it is
> >> + * unsafe to call it from another constructor.
> >> + */
> >> +static inline
> >> +size_t default_get_ust_pid_channel_subbuf_size(void)
> >> +{
> >> +  return default_ust_pid_channel_subbuf_size;
> >> +}
> >> +
> >> +/*
> >> + * Returns the default subbuf size for the UST domain per UID.
> >>   *
> >>   * This function depends on a value that is set at constructor time, so 
> >> it is
> >>   * unsafe to call it from another constructor.
> >>   */
> >>  static inline
> >> -size_t default_get_ust_channel_subbuf_size(void)
> >> +size_t default_get_ust_uid_channel_subbuf_size(void)
> >>  {
> >> -  return default_ust_channel_subbuf_size;
> >> +  return default_ust_uid_channel_subbuf_size;
> >>  }
> >>  
> >>  #endif /* _DEFAULTS_H */
> >> diff --git a/src/lib/lttng-ctl/lttng-ctl.c b/src/lib/lttng-ctl/lttng-ctl.c
> >> index 3787e29..a7328eb 100644
> >> --- a/src/lib/lttng-ctl/lttng-ctl.c
> >> +++ b/src/lib/lttng-ctl/lttng-ctl.c
> >> @@ -1386,29 +1386,37 @@ void lttng_channel_set_default_attr(struct 
> >> lttng_domain *domain,
> >>  
> >>    memset(attr, 0, sizeof(struct lttng_channel_attr));
> >>  
> >> +  /* Same for all domains. */
> >> +  attr->overwrite = DEFAULT_CHANNEL_OVERWRITE;
> >> +  attr->tracefile_size = DEFAULT_CHANNEL_TRACEFILE_SIZE;
> >> +  attr->tracefile_count = DEFAULT_CHANNEL_TRACEFILE_COUNT;
> >> +
> >>    switch (domain->type) {
> >>    case LTTNG_DOMAIN_KERNEL:
> >> -          attr->overwrite = DEFAULT_CHANNEL_OVERWRITE;
> >>            attr->switch_timer_interval = 
> >> DEFAULT_KERNEL_CHANNEL_SWITCH_TIMER;
> >>            attr->read_timer_interval = DEFAULT_KERNEL_CHANNEL_READ_TIMER;
> >> -
> >>            attr->subbuf_size = default_get_kernel_channel_subbuf_size();
> >>            attr->num_subbuf = DEFAULT_KERNEL_CHANNEL_SUBBUF_NUM;
> >>            attr->output = DEFAULT_KERNEL_CHANNEL_OUTPUT;
> >> -          attr->tracefile_size = DEFAULT_KERNEL_CHANNEL_TRACEFILE_SIZE;
> >> -          attr->tracefile_count = DEFAULT_KERNEL_CHANNEL_TRACEFILE_COUNT;
> >>            break;
> >>    case LTTNG_DOMAIN_UST:
> >> -          attr->overwrite = DEFAULT_CHANNEL_OVERWRITE;
> >> -          attr->switch_timer_interval = DEFAULT_UST_CHANNEL_SWITCH_TIMER;
> >> -          attr->read_timer_interval = DEFAULT_UST_CHANNEL_READ_TIMER;
> >> -
> >> -          attr->subbuf_size = default_get_ust_channel_subbuf_size();
> >> -          attr->num_subbuf = DEFAULT_UST_CHANNEL_SUBBUF_NUM;
> >> -          attr->output = DEFAULT_UST_CHANNEL_OUTPUT;
> >> -          attr->tracefile_size = DEFAULT_UST_CHANNEL_TRACEFILE_SIZE;
> >> -          attr->tracefile_count = DEFAULT_UST_CHANNEL_TRACEFILE_COUNT;
> >> -          break;
> >> +          switch (domain->buf_type) {
> >> +          case LTTNG_BUFFER_PER_UID:
> >> +                  attr->subbuf_size = 
> >> default_get_ust_uid_channel_subbuf_size();
> >> +                  attr->num_subbuf = DEFAULT_UST_UID_CHANNEL_SUBBUF_NUM;
> >> +                  attr->output = DEFAULT_UST_UID_CHANNEL_OUTPUT;
> >> +                  attr->switch_timer_interval = 
> >> DEFAULT_UST_UID_CHANNEL_SWITCH_TIMER;
> >> +                  attr->read_timer_interval = 
> >> DEFAULT_UST_UID_CHANNEL_READ_TIMER;
> >> +                  break;
> >> +          case LTTNG_BUFFER_PER_PID:
> >> +          default:
> >> +                  attr->subbuf_size = 
> >> default_get_ust_pid_channel_subbuf_size();
> >> +                  attr->num_subbuf = DEFAULT_UST_PID_CHANNEL_SUBBUF_NUM;
> >> +                  attr->output = DEFAULT_UST_PID_CHANNEL_OUTPUT;
> >> +                  attr->switch_timer_interval = 
> >> DEFAULT_UST_PID_CHANNEL_SWITCH_TIMER;
> >> +                  attr->read_timer_interval = 
> >> DEFAULT_UST_PID_CHANNEL_READ_TIMER;
> >> +                  break;
> >> +          }
> >>    default:
> >>            /* Default behavior: leave set to 0. */
> >>            break;
> >> diff --git a/tests/unit/test_ust_data.c b/tests/unit/test_ust_data.c
> >> index a79e2eb..c79dbf6 100644
> >> --- a/tests/unit/test_ust_data.c
> >> +++ b/tests/unit/test_ust_data.c
> >> @@ -111,9 +111,9 @@ static void test_create_ust_metadata(void)
> >>       metadata->attr.num_subbuf
> >>                    == DEFAULT_METADATA_SUBBUF_NUM &&
> >>       metadata->attr.switch_timer_interval
> >> -                  == DEFAULT_UST_CHANNEL_SWITCH_TIMER &&
> >> +                  == DEFAULT_METADATA_SWITCH_TIMER &&
> >>       metadata->attr.read_timer_interval
> >> -                  == DEFAULT_UST_CHANNEL_READ_TIMER &&
> >> +                  == DEFAULT_METADATA_READ_TIMER &&
> >>       metadata->attr.output == LTTNG_UST_MMAP,
> >>       "Validate UST session metadata");
> >>  
> >> -- 
> >> 1.7.10.4
> >>
> >>
> >> _______________________________________________
> >> lttng-dev mailing list
> >> [email protected]
> >> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
> > 

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com

_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to