From: Prerna Saxena <prerna@linux.vnet.ibm.com>
To: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Cc: Maneesh Soni <maneesh@linux.vnet.ibm.com>,
sripathik@in.ibm.com, qemu-devel@nongnu.org,
Ananth <ananth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH 3/3] trace: Flush trace buffer on exit
Date: Thu, 08 Jul 2010 12:12:10 +0530 [thread overview]
Message-ID: <4C357342.3080708@linux.vnet.ibm.com> (raw)
In-Reply-To: <1278447241-2709-3-git-send-email-stefanha@linux.vnet.ibm.com>
Hi Stefan,
On 07/07/2010 01:44 AM, Stefan Hajnoczi wrote:
> Signed-off-by: Stefan Hajnoczi<stefanha@linux.vnet.ibm.com>
> ---
> This applies to the tracing branch at:
>
> http://repo.or.cz/w/qemu/stefanha.git/shortlog/refs/heads/tracing-dev
>
> simpletrace.c | 23 +++++++++++++++--------
> 1 files changed, 15 insertions(+), 8 deletions(-)
>
> diff --git a/simpletrace.c b/simpletrace.c
> index ace009f..9604ea6 100644
> --- a/simpletrace.c
> +++ b/simpletrace.c
> @@ -22,6 +22,20 @@ static TraceRecord trace_buf[TRACE_BUF_LEN];
> static unsigned int trace_idx;
> static FILE *trace_fp;
>
> +static void flush_trace_buffer(void)
> +{
> + if (!trace_fp) {
> + trace_fp = fopen("/tmp/trace.log", "w");
> + if (trace_fp) {
> + atexit(flush_trace_buffer);
> + }
> + }
> + if (trace_fp) {
> + size_t unused; /* for when fwrite(3) is declared warn_unused_result */
> + unused = fwrite(trace_buf, trace_idx * sizeof(trace_buf[0]), 1, trace_fp);
I think this would be better denoted as :
unused = fwrite(trace_buf, trace_idx * sizeof(TraceRecord), 1, trace_fp);
> + }
> +}
> +
> static void trace(TraceEventID event, unsigned long x1,
> unsigned long x2, unsigned long x3,
> unsigned long x4, unsigned long x5)
> @@ -44,15 +58,8 @@ static void trace(TraceEventID event, unsigned long x1,
> rec->x5 = x5;
>
> if (++trace_idx == TRACE_BUF_LEN) {
> + flush_trace_buffer();
> trace_idx = 0;
> -
> - if (!trace_fp) {
> - trace_fp = fopen("/tmp/trace.log", "w");
> - }
> - if (trace_fp) {
> - size_t result = fwrite(trace_buf, sizeof trace_buf, 1, trace_fp);
> - result = result;
> - }
> }
> }
>
I was wondering if we can extend this. One can have a monitor command
such as "dump-trace" which would write a partly-filled buffer to file
using a call to flush_trace_buffer().
But this has a few caveats. flush_trace_buffer() must reset trace_idx to
0 to prevent duplicate traces to be written once the buffer is filled up.
Also, I'm wondering what happens in case qemu is started with -smp 2 or
more. We might need to enforce some kind of synchronisation so that
threads on other cpus do not log traces while the buffer is being
sync'ed. ( For now, I have not been able to get upstream qemu run with
-smp. Going forward, this is something that might need to be looked into.)
Regards,
--
Prerna Saxena
Linux Technology Centre,
IBM Systems and Technology Lab,
Bangalore, India
next prev parent reply other threads:[~2010-07-08 6:42 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-06 20:13 [Qemu-devel] [PATCH 1/3] trace: Document programmatically enabling/disabling trace events Stefan Hajnoczi
2010-07-06 20:14 ` [Qemu-devel] [PATCH 2/3] trace: Conform to QEMU coding style Stefan Hajnoczi
2010-07-06 20:14 ` [Qemu-devel] [PATCH 3/3] trace: Flush trace buffer on exit Stefan Hajnoczi
2010-07-08 6:42 ` Prerna Saxena [this message]
2010-07-08 8:28 ` Stefan Hajnoczi
2010-07-08 8:34 ` Stefan Hajnoczi
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=4C357342.3080708@linux.vnet.ibm.com \
--to=prerna@linux.vnet.ibm.com \
--cc=ananth@linux.vnet.ibm.com \
--cc=maneesh@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=sripathik@in.ibm.com \
--cc=stefanha@linux.vnet.ibm.com \
/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.