Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(19)

Issue 6210058: [google] Instrumented sampling FDO interface cleanup

Can't Edit
Can't Publish+Mail
Start Review
Created:
11 years, 11 months ago by tejohnson
Modified:
9 years, 7 months ago
Reviewers:
davidxl
CC:
gcc-patches_gcc.gnu.org
Base URL:
svn+ssh://gcc.gnu.org/svn/gcc/branches/google/main/
Visibility:
Public.

Patch Set 1 #

Unified diffs Side-by-side diffs Delta from patch set Stats (+69 lines, -36 lines) Patch
M gcc/doc/invoke.texi View 1 chunk +4 lines, -4 lines 0 comments Download
M gcc/params.def View 1 chunk +2 lines, -2 lines 0 comments Download
M gcc/tree-profile.c View 6 chunks +44 lines, -19 lines 0 comments Download
M libgcc/libgcov.c View 2 chunks +19 lines, -11 lines 0 comments Download

Messages

Total messages: 2
tejohnson
Two cleanup items for the sampling instrumentation interfaces. First, rename variables from *rate* to *period*, ...
11 years, 11 months ago (2012-05-15 02:18:17 UTC) #1
davidxl
11 years, 11 months ago (2012-05-15 04:47:01 UTC) #2
Looks good.

thanks,

David

On Mon, May 14, 2012 at 7:18 PM, Teresa Johnson <tejohnson@google.com> wrote:
> Two cleanup items for the sampling instrumentation interfaces. First,
> rename variables from *rate* to *period*, since what is being specified
> is a sampling period (time between recorded samples) not a rate.
> Second, add flag __gcov_has_sampling to indicate when a file was
> compiled with -fprofile-generate-sampling, and fuction
> __gcov_sampling_enabled to return the state of this flag. The flag
> is checked when a call is made to set the sampling period.
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu. Ok for google branches?
>
> Thanks,
> Teresa
>
> 2012-05-14   Teresa Johnson  <tejohnson@google.com>
>
>        * libgcc/libgcov.c (__gcov_sampling_period): Rename variable from
>        "*rate*" to "*period*".
>        (gcov_sampling_period_initialized): Ditto.
>        (__gcov_set_sampling_period): Rename from __gcov_set_sampling_rate.
>        Check __gcov_has_sampling.
>        (__gcov_has_sampling): New variable.
>        (__gcov_sampling_enabled): New function.
>        (__gcov_init): Rename variables from "*rate*" to "*period*".
>        * gcc/doc/invoke.texi (profile-generate-sampling-period): Rename
>        from profile-generate-sampling-rate.
>        * gcc/tree-profile.c (gcov_sampling_period_decl): Rename from
>        gcov_sampling_rate_decl.
>        (gcov_has_sampling_decl): New variable.
>        (insert_if_then, add_sampling_wrapper): Rename variables from
>        "*rate*" to "*period*".
>        (gimple_init_instrumentation_sampling): Ditto, and add handling
>        for gcov_has_sampling_decl.
>        * gcc/params.def (profile-generate-sampling-period): Rename
>        from profile-generate-sampling-rate.
>
> Index: libgcc/libgcov.c
> ===================================================================
> --- libgcc/libgcov.c    (revision 187470)
> +++ libgcc/libgcov.c    (working copy)
> @@ -141,18 +141,26 @@ extern char * __gcov_pmu_profile_filename;
>  extern char * __gcov_pmu_profile_options;
>  extern gcov_unsigned_t __gcov_pmu_top_n_address;
>
> -/* Sampling rate.  */
> -extern gcov_unsigned_t __gcov_sampling_rate;
> -static int gcov_sampling_rate_initialized = 0;
> -void __gcov_set_sampling_rate (unsigned int rate);
> +/* Sampling period.  */
> +extern gcov_unsigned_t __gcov_sampling_period;
> +extern gcov_unsigned_t __gcov_has_sampling;
> +static int gcov_sampling_period_initialized = 0;
> +void __gcov_set_sampling_period (unsigned int period);
> +unsigned int __gcov_sampling_enabled ();
>
> -/* Set sampling rate to RATE.  */
> +/* Set sampling period to PERIOD.  */
>
> -void __gcov_set_sampling_rate (unsigned int rate)
> +void __gcov_set_sampling_period (unsigned int period)
>  {
> -  __gcov_sampling_rate = rate;
> +  gcc_assert (__gcov_has_sampling);
> +  __gcov_sampling_period = period;
>  }
>
> +unsigned int __gcov_sampling_enabled ()
> +{
> +  return __gcov_has_sampling;
> +}
> +
>  /* Per thread sample counter.  */
>  THREAD_PREFIX gcov_unsigned_t __gcov_sample_counter = 0;
>
> @@ -659,16 +667,16 @@ gcov_clear (void)
>  void
>  __gcov_init (struct gcov_info *info)
>  {
> -  if (!gcov_sampling_rate_initialized)
> +  if (!gcov_sampling_period_initialized)
>     {
> -      const char* env_value_str = getenv ("GCOV_SAMPLING_RATE");
> +      const char* env_value_str = getenv ("GCOV_SAMPLING_PERIOD");
>       if (env_value_str)
>         {
>           int env_value_int = atoi(env_value_str);
>           if (env_value_int >= 1)
> -            __gcov_sampling_rate = env_value_int;
> +            __gcov_sampling_period = env_value_int;
>         }
> -      gcov_sampling_rate_initialized = 1;
> +      gcov_sampling_period_initialized = 1;
>     }
>
>   if (!info->version || !info->n_functions)
> Index: gcc/doc/invoke.texi
> ===================================================================
> --- gcc/doc/invoke.texi (revision 187470)
> +++ gcc/doc/invoke.texi (working copy)
> @@ -8335,12 +8335,12 @@ the profile feedback data files. See @option{-fpro
>  @opindex -fprofile-generate-sampling
>
>  Enable sampling for instrumented binaries.  Instead of recording every
event,
> -record only every N-th event, where N (the sampling rate) can be set either
> +record only every N-th event, where N (the sampling period) can be set
either
>  at compile time using
> -@option{--param profile-generate-sampling-rate=@var{value}}, or
> -at execution start time through environment variable
@samp{GCOV_SAMPLING_RATE}.
> +@option{--param profile-generate-sampling-period=@var{value}}, or at
> +execution start time through environment variable
@samp{GCOV_SAMPLING_PERIOD}.
>
> -At this time sampling applies only to branch counters.  A sampling rate of
100
> +At this time sampling applies only to branch counters.  A sampling period of
100
>  decreases instrumentated binary slowdown from up to 20x for heavily threaded
>  applications down to around 2x.  @option{-fprofile-correction} is always
>  needed with sampling.
> Index: gcc/tree-profile.c
> ===================================================================
> --- gcc/tree-profile.c  (revision 187470)
> +++ gcc/tree-profile.c  (working copy)
> @@ -165,9 +165,12 @@ static struct pointer_set_t *instrumentation_to_be
>  /* extern __thread gcov_unsigned_t __gcov_sample_counter  */
>  static tree gcov_sample_counter_decl = NULL_TREE;
>
> -/* extern gcov_unsigned_t __gcov_sampling_rate  */
> -static tree gcov_sampling_rate_decl = NULL_TREE;
> +/* extern gcov_unsigned_t __gcov_sampling_period  */
> +static tree gcov_sampling_period_decl = NULL_TREE;
>
> +/* extern gcov_unsigned_t __gcov_has_sampling  */
> +static tree gcov_has_sampling_decl = NULL_TREE;
> +
>  /* forward declaration.  */
>  void gimple_init_instrumentation_sampling (void);
>
> @@ -200,7 +203,7 @@ insert_if_then (gimple stmt_start, gimple stmt_end
>    Into:
>
>    __gcov_sample_counter++;
> -   if (__gcov_sample_counter >= __gcov_sampling_rate)
> +   if (__gcov_sample_counter >= __gcov_sampling_period)
>      {
>        __gcov_sample_counter = 0;
>        ORIGINAL CODE
> @@ -214,7 +217,7 @@ add_sampling_wrapper (gimple stmt_start, gimple st
>  {
>   tree zero, one, tmp_var, tmp1, tmp2, tmp3;
>   gimple stmt_inc_counter1, stmt_inc_counter2, stmt_inc_counter3;
> -  gimple stmt_reset_counter, stmt_assign_rate, stmt_if;
> +  gimple stmt_reset_counter, stmt_assign_period, stmt_if;
>   gimple_stmt_iterator gsi;
>
>   tmp_var = create_tmp_reg (get_gcov_unsigned_t (), "PROF_sample");
> @@ -230,7 +233,7 @@ add_sampling_wrapper (gimple stmt_start, gimple st
>   zero = build_int_cst (get_gcov_unsigned_t (), 0);
>   stmt_reset_counter = gimple_build_assign (gcov_sample_counter_decl, zero);
>   tmp3 = make_ssa_name (tmp_var, NULL);
> -  stmt_assign_rate = gimple_build_assign (tmp3, gcov_sampling_rate_decl);
> +  stmt_assign_period = gimple_build_assign (tmp3,
gcov_sampling_period_decl);
>   stmt_if = gimple_build_cond (GE_EXPR, tmp2, tmp3, NULL_TREE, NULL_TREE);
>
>   /* Insert them for now in the original basic block.  */
> @@ -238,7 +241,7 @@ add_sampling_wrapper (gimple stmt_start, gimple st
>   gsi_insert_before (&gsi, stmt_inc_counter1, GSI_SAME_STMT);
>   gsi_insert_before (&gsi, stmt_inc_counter2, GSI_SAME_STMT);
>   gsi_insert_before (&gsi, stmt_inc_counter3, GSI_SAME_STMT);
> -  gsi_insert_before (&gsi, stmt_assign_rate, GSI_SAME_STMT);
> +  gsi_insert_before (&gsi, stmt_assign_period, GSI_SAME_STMT);
>   gsi_insert_before (&gsi, stmt_reset_counter, GSI_SAME_STMT);
>
>   /* Insert IF block.  */
> @@ -293,27 +296,49 @@ add_sampling_to_edge_counters (void)
>  void
>  gimple_init_instrumentation_sampling (void)
>  {
> -  if (!gcov_sampling_rate_decl)
> +  if (!gcov_sampling_period_decl)
>     {
> -      /* Define __gcov_sampling_rate regardless of
-fprofile-generate-sampling.
> -         Otherwise the extern reference to it from libgcov becomes
unmatched.
> +      /* Define __gcov_sampling_period regardless of
> +         -fprofile-generate-sampling. Otherwise the extern reference to
> +         it from libgcov becomes unmatched.
>       */
> -      gcov_sampling_rate_decl = build_decl (
> +      gcov_sampling_period_decl = build_decl (
>           UNKNOWN_LOCATION,
>           VAR_DECL,
> -          get_identifier ("__gcov_sampling_rate"),
> +          get_identifier ("__gcov_sampling_period"),
>           get_gcov_unsigned_t ());
> -      TREE_PUBLIC (gcov_sampling_rate_decl) = 1;
> -      DECL_ARTIFICIAL (gcov_sampling_rate_decl) = 1;
> -      DECL_COMDAT_GROUP (gcov_sampling_rate_decl)
> -          = DECL_ASSEMBLER_NAME (gcov_sampling_rate_decl);
> -      TREE_STATIC (gcov_sampling_rate_decl) = 1;
> -      DECL_INITIAL (gcov_sampling_rate_decl) = build_int_cst (
> +      TREE_PUBLIC (gcov_sampling_period_decl) = 1;
> +      DECL_ARTIFICIAL (gcov_sampling_period_decl) = 1;
> +      DECL_COMDAT_GROUP (gcov_sampling_period_decl)
> +          = DECL_ASSEMBLER_NAME (gcov_sampling_period_decl);
> +      TREE_STATIC (gcov_sampling_period_decl) = 1;
> +      DECL_INITIAL (gcov_sampling_period_decl) = build_int_cst (
>           get_gcov_unsigned_t (),
> -          PARAM_VALUE (PARAM_PROFILE_GENERATE_SAMPLING_RATE));
> -      varpool_finalize_decl (gcov_sampling_rate_decl);
> +          PARAM_VALUE (PARAM_PROFILE_GENERATE_SAMPLING_PERIOD));
> +      varpool_finalize_decl (gcov_sampling_period_decl);
>     }
>
> +  if (!gcov_has_sampling_decl)
> +    {
> +      /* Initialize __gcov_has_sampling to 1 if -fprofile-generate-sampling
> +         specified, 0 otherwise. Used by libgcov to determine whether
> +         a request to set the sampling period makes sense.  */
> +      gcov_has_sampling_decl = build_decl (
> +          UNKNOWN_LOCATION,
> +          VAR_DECL,
> +          get_identifier ("__gcov_has_sampling"),
> +          get_gcov_unsigned_t ());
> +      TREE_PUBLIC (gcov_has_sampling_decl) = 1;
> +      DECL_ARTIFICIAL (gcov_has_sampling_decl) = 1;
> +      DECL_COMDAT_GROUP (gcov_has_sampling_decl)
> +          = DECL_ASSEMBLER_NAME (gcov_has_sampling_decl);
> +      TREE_STATIC (gcov_has_sampling_decl) = 1;
> +      DECL_INITIAL (gcov_has_sampling_decl) = build_int_cst (
> +          get_gcov_unsigned_t (),
> +          flag_profile_generate_sampling ? 1 : 0);
> +      varpool_finalize_decl (gcov_has_sampling_decl);
> +    }
> +
>   if (flag_profile_generate_sampling && !instrumentation_to_be_sampled)
>     {
>       instrumentation_to_be_sampled = pointer_set_create ();
> Index: gcc/params.def
> ===================================================================
> --- gcc/params.def      (revision 187470)
> +++ gcc/params.def      (working copy)
> @@ -919,8 +919,8 @@ DEFPARAM (PARAM_MAX_LIPO_MEMORY,
>          "don't import aux files if memory consumption exceeds this value",
>          2400000, 0, 0)
>
> -DEFPARAM (PARAM_PROFILE_GENERATE_SAMPLING_RATE,
> -         "profile-generate-sampling-rate",
> +DEFPARAM (PARAM_PROFILE_GENERATE_SAMPLING_PERIOD,
> +         "profile-generate-sampling-period",
>          "sampling rate with -fprofile-generate-sampling",
>          100, 0, 2000000000)
>
>
> --
> This patch is available for review at http://codereview.appspot.com/6210058
Sign in to reply to this message.

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b