From: Tzvetomir Stoyanov <tz.stoyanov@gmail.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Linux Trace Devel <linux-trace-devel@vger.kernel.org>
Subject: Re: [PATCH v3 2/2] trace-cmd: Trace timesync to find pids that map vCPUs
Date: Fri, 14 May 2021 07:10:51 +0300 [thread overview]
Message-ID: <CAPpZLN6p2UgghB16=eqpacica6XEOLuCqTds+SdhFbZkPUZ0Hw@mail.gmail.com> (raw)
In-Reply-To: <20210513204315.1206204-3-rostedt@goodmis.org>
On Fri, May 14, 2021 at 3:33 AM Steven Rostedt <rostedt@goodmis.org> wrote:
>
> From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
>
> If qemu is not found, then there's no mapping between the vCPUs of the
> guest and the threads that run them. As the time sync has the agent run on
> all the guest's CPUs, trace it, looking for all kvm_entry, which state
> which vCPU the host thread is entering on the guest, and then use that to
> create the mapping for the data files.
>
> Only parse for qemu if no CID is given on the command line.
>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> ---
> Changes since v1:
> - Skipped v2 (added to v3 of this patch series)
> - Used some of the new APIs of libtracefs 1.2
> - Call read_qemu_guests is CID is not supplied on the command line.
>
> tracecmd/include/trace-local.h | 2 +
> tracecmd/trace-record.c | 202 ++++++++++++++++++++++++++++++++-
> 2 files changed, 203 insertions(+), 1 deletion(-)
>
> diff --git a/tracecmd/include/trace-local.h b/tracecmd/include/trace-local.h
> index b3997d00..4c5669c9 100644
> --- a/tracecmd/include/trace-local.h
> +++ b/tracecmd/include/trace-local.h
> @@ -298,11 +298,13 @@ void update_first_instance(struct buffer_instance *instance, int topt);
> void show_instance_file(struct buffer_instance *instance, const char *name);
>
> struct trace_guest {
> + struct tracefs_instance *instance;
> char *name;
> int cid;
> int pid;
> int cpu_max;
> int *cpu_pid;
> + int *task_pids;
> };
> struct trace_guest *trace_get_guest(unsigned int cid, const char *name);
> bool trace_have_guests_pid(void);
> diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c
> index 5dd8be4a..5219d60b 100644
> --- a/tracecmd/trace-record.c
> +++ b/tracecmd/trace-record.c
> @@ -3230,6 +3230,38 @@ static int do_accept(int sd)
> return -1;
> }
>
> +/* Find all the tasks associated with the guest pid */
> +static void find_tasks(struct trace_guest *guest)
> +{
> + struct dirent *dent;
> + char *path;
> + DIR *dir;
> + int ret;
> + int tasks = 0;
> +
> + ret = asprintf(&path, "/proc/%d/task", guest->pid);
> + if (ret < 0)
> + return;
> +
> + dir = opendir(path);
> + free(path);
> + if (!dir)
> + return;
> +
> + while ((dent = readdir(dir))) {
> + int *pids;
> + if (!(dent->d_type == DT_DIR && is_digits(dent->d_name)))
> + continue;
> + pids = realloc(guest->task_pids, sizeof(int) * (tasks + 2));
> + if (!pids)
> + break;
> + pids[tasks++] = strtol(dent->d_name, NULL, 0);
> + pids[tasks] = -1;
> + guest->task_pids = pids;
> + }
> + closedir(dir);
> +}
> +
> static char *parse_guest_name(char *gname, int *cid, int *port)
> {
> struct trace_guest *guest;
> @@ -3250,10 +3282,18 @@ static char *parse_guest_name(char *gname, int *cid, int *port)
> } else if (is_digits(gname))
> *cid = atoi(gname);
>
> - read_qemu_guests();
> + if (*cid < 0)
> + read_qemu_guests();
> +
> + if (*cid < 0)
> + return NULL;
This check is not needed. If cid is not part of the string, let
read_qemu_guests() to try discover the VMs, instead of returning NULL.
[ ... ]
--
Tzvetomir (Ceco) Stoyanov
VMware Open Source Technology Center
next prev parent reply other threads:[~2021-05-14 4:11 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-13 20:43 [PATCH v3 0/2] trace-cmd: Use vsock tracing to find cids and threads Steven Rostedt
2021-05-13 20:43 ` [PATCH v3 1/2] trace-cmd: Find PID of host-guest task from tracing vsock connection Steven Rostedt
2021-05-13 20:43 ` [PATCH v3 2/2] trace-cmd: Trace timesync to find pids that map vCPUs Steven Rostedt
2021-05-14 4:10 ` Tzvetomir Stoyanov [this message]
2021-05-14 13:12 ` Steven Rostedt
2021-05-14 13:38 ` Tzvetomir Stoyanov
2021-05-14 14:00 ` Steven Rostedt
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='CAPpZLN6p2UgghB16=eqpacica6XEOLuCqTds+SdhFbZkPUZ0Hw@mail.gmail.com' \
--to=tz.stoyanov@gmail.com \
--cc=linux-trace-devel@vger.kernel.org \
--cc=rostedt@goodmis.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).