All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ross Zwisler <zwisler@google.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Linux Trace Devel <linux-trace-devel@vger.kernel.org>,
	Ross Zwisler <zwisler@chromium.org>
Subject: Re: [PATCH] traceeval: Add way to extract the number of elements
Date: Mon, 2 Oct 2023 14:40:19 -0600	[thread overview]
Message-ID: <20231002204019.GK1532181@google.com> (raw)
In-Reply-To: <20230928102434.58e08f78@rorschach.local.home>

On Thu, Sep 28, 2023 at 10:24:34AM -0400, Steven Rostedt wrote:
> From: "Steven Rostedt (Google)" <rostedt@goodmis.org>
> 
> Add traceeval_count() that will return the number of elements in the
> traceeval. This can be useful for allocating an array to store the
> elements. By getting the count, the allocation can be done first and
> then iterated to load the elements into the array.
> 
> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
> ---
>  include/traceeval-hist.h |  2 ++
>  src/histograms.c         | 11 +++++++++++
>  2 files changed, 13 insertions(+)
> 
> diff --git a/include/traceeval-hist.h b/include/traceeval-hist.h
> index eefa48d..44d071f 100644
> --- a/include/traceeval-hist.h
> +++ b/include/traceeval-hist.h
> @@ -204,6 +204,8 @@ int traceeval_query_size(struct traceeval *teval, const struct traceeval_data *k
>  void traceeval_results_release(struct traceeval *teval,
>  			       const struct traceeval_data *results);
>  
> +size_t traceeval_count(struct traceeval *teval);
> +
>  #define traceeval_stat(teval, keys, type)				\
>  	traceeval_stat_size(teval, keys, TRACEEVAL_ARRAY_SIZE(keys), type)
>  
> diff --git a/src/histograms.c b/src/histograms.c
> index 2456342..ac3f7f7 100644
> --- a/src/histograms.c
> +++ b/src/histograms.c
> @@ -1006,6 +1006,17 @@ int traceeval_remove_size(struct traceeval *teval,
>  	return 1;
>  }
>  
> +/**
> + * traceeval_count - Return the number of elements in the traceeval
> + * @teval: The traceeval handle to get the count from
> + *
> + * Returns the number of elements stored by unique keys in the @teval.
> + */
> +size_t traceeval_count(struct traceeval *teval)
> +{
> +	return teval->update_counter;

I don't think this is going to do what you want.  'teval->update_counter'
is a generation number, is monotonically increasing, and is incremented any
time an element is added or removed from the hash.

I think we either need to actually keep an element count (increment in
create_entry(), decrement in traceeval_remove_size() and
traceeval_iterator_remove()), or else we're going to have to count the
elements by walking the 'struct hash_table' buckets.  Probably easier to just
keep an explicit element count.

> +}
> +
>  /**
>   * traceeval_iterator_put - release a given iterator
>   * @iter: The iterartor to release
> -- 
> 2.40.1
> 

      reply	other threads:[~2023-10-02 20:40 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-28 14:24 [PATCH] traceeval: Add way to extract the number of elements Steven Rostedt
2023-10-02 20:40 ` Ross Zwisler [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231002204019.GK1532181@google.com \
    --to=zwisler@google.com \
    --cc=linux-trace-devel@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=zwisler@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.