From: Avi Kivity <avi@redhat.com>
To: Dhaval Giani <dhaval.giani@gmail.com>
Cc: kvm@vger.kernel.org, joro@8bytes.org, agraf@suse.de,
rostedt@goodmis.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] kvm: log directly from the guest to the host kvm buffer
Date: Thu, 12 May 2011 18:13:08 +0300 [thread overview]
Message-ID: <4DCBF904.6040104@redhat.com> (raw)
In-Reply-To: <1305207413.18715.3.camel@gondor.retis>
On 05/12/2011 04:36 PM, Dhaval Giani wrote:
> Hi,
>
> As part of some of the work for my project, I have been looking at
> tracing some of the events in the guest from inside the host. In
> my usecase, I have been looking to co-relate the time of a network
> packet arrival with that in the host. ftrace makes such arbitrary
> use quite simple, so I went ahead an extended this functionality
> in terms of a hypercall. There are still a few issues with this patch.
>
> 1. For some reason, the first time the hypercall is called, it works
> just fine, but the second invocation refuses to happen. I am still
> clueless about it. (and am looking for hints :-) )
> 2. I am not very sure if I got the demarcation between the guest and
> the host code fine or not. Someone more experienced than me should take
> a look at the code as well :-)
> 3. This adds a new paravirt call.
> 4. This has been implemented just for x86 as of now. If there is enough
> interest, I will look to make it more generic to be used across other
> architectures. However, it is quite easy to do the same.
> 5. It still does not have all the fancy ftrace features, but again,
> depending on the interest, I can add all those in.
> 6. Create a config option for this feature.
>
> I think such a feature is useful for debugging purposes and might make
> sense to carry upstream.
I guess it could help things like virtio/vhost development and profiling.
I think that one hypercall per trace is too expensive. Tracing is meant
to be lightweight! I think the guest can log to a buffer, which is
flushed on overflow or when a vmexit occurs. That gives us automatic
serialization between a vcpu and the cpu it runs on, but not between a
vcpu and a different host cpu.
>
> +int kvm_pv_ftrace(struct kvm_vcpu *vcpu, unsigned long ip, gpa_t addr)
> +{
> + int ret;
> + char *fmt = (char *) kzalloc(PAGE_SIZE, GFP_KERNEL);
> +
> + ret = kvm_read_guest(vcpu->kvm, addr, fmt, PAGE_SIZE);
> +
> + trace_printk("KVM instance %p: VCPU %d, IP %lu: %s",
> + vcpu->kvm, vcpu->vcpu_id, ip, fmt);
> +
> + kfree(fmt);
> +
> + return 0;
> +}
A kmalloc and printf seem expensive here. I'd prefer to log the
arguments and format descriptor instead. Similarly the guest should
pass unformatted parameters.+int kvm_ftrace_printk(unsigned long ip,
const char *fmt, ...)
> +{
> + char *buffer = kzalloc(PAGE_SIZE, GFP_KERNEL);
> + int ret;
> + unsigned long a1, a2;
> + va_list args;
> + int i;
> +
> + va_start(args, fmt);
> + i = vsnprintf(buffer, PAGE_SIZE, fmt, args);
> + va_end(args);
> +
> + a1 = __pa(buffer);
> + a2 = 0;
> +
> + ret = kvm_hypercall3(KVM_HC_FTRACE, ip, a1, a2);
> +
> + kfree(buffer);
> + return ret;
> +}
> +EXPORT_SYMBOL(kvm_ftrace_printk);
> +
> static void mmu_queue_flush(struct kvm_para_state *state)
> {
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2011-05-12 15:13 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-12 13:36 [PATCH] kvm: log directly from the guest to the host kvm buffer Dhaval Giani
2011-05-12 15:13 ` Avi Kivity [this message]
2011-05-12 15:39 ` Dhaval Giani
2011-05-12 15:42 ` Avi Kivity
2011-05-12 23:59 ` Eric Northup
2011-05-17 15:50 ` 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=4DCBF904.6040104@redhat.com \
--to=avi@redhat.com \
--cc=agraf@suse.de \
--cc=dhaval.giani@gmail.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@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 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.