From: Alexander Graf <graf@amazon.de>
To: <milanpa@amazon.com>, Milan Pandurov <milanpa@amazon.de>,
<kvm@vger.kernel.org>
Cc: <pbonzini@redhat.com>, <rkrcmar@redhat.com>, <borntraeger@de.ibm.com>
Subject: Re: [PATCH 2/2] kvm: Add ioctl for gathering debug counters
Date: Wed, 15 Jan 2020 15:59:30 +0100 [thread overview]
Message-ID: <ab84ee05-7e2b-e0cc-6994-fc485012a51a@amazon.de> (raw)
In-Reply-To: <8584d6c2-323c-14e2-39c0-21a47a91bbda@amazon.com>
On 15.01.20 15:43, milanpa@amazon.com wrote:
> On 1/15/20 3:04 PM, Alexander Graf wrote:
>>
>>
>> On 15.01.20 14:43, Milan Pandurov wrote:
>>> KVM exposes debug counters through individual debugfs files.
>>> Monitoring these counters requires debugfs to be enabled/accessible for
>>> the application, which might not be always the case.
>>> Additionally, periodic monitoring multiple debugfs files from
>>> userspace requires multiple file open/read/close + atoi conversion
>>> operations, which is not very efficient.
>>>
>>> Let's expose new interface to userspace for garhering these
>>> statistics with one ioctl.
>>>
>>> Two new ioctl methods are added:
>>> - KVM_GET_SUPPORTED_DEBUGFS_STAT : Returns list of available counter
>>> names. Names correspond to the debugfs file names
>>> - KVM_GET_DEBUGFS_VALUES : Returns list of u64 values each
>>> corresponding to a value described in KVM_GET_SUPPORTED_DEBUGFS_STAT.
>>>
>>> Userspace application can read counter description once using
>>> KVM_GET_SUPPORTED_DEBUGFS_STAT and periodically invoke the
>>> KVM_GET_DEBUGFS_VALUES to get value update.
>>>
>>> Signed-off-by: Milan Pandurov <milanpa@amazon.de>
>>
>> Thanks a lot! I really love the idea to get stats directly from the
>> kvm vm fd owner. This is so much better than poking at files from a
>> random unrelated debug or stat file system.
>>
>> I have a few comments overall though:
>>
>>
>> 1)
>>
>> This is an interface that requires a lot of logic and buffers from
>> user space to retrieve individual, explicit counters. What if I just
>> wanted to monitor the number of exits on every user space exit?
>
> In case we want to cover such latency sensitive use cases solution b),
> with mmap'ed structs you suggested, would be a way to go, IMO.
>
>>
>> Also, we're suddenly making the debugfs names a full ABI, because
>> through this interface we only identify the individual stats through
>> their names. That means we can not remove stats or change their names,
>> because people may rely on them, no? Thining about this again, maybe
>> they already are an ABI because people rely on them in debugfs though?
>>
>> I see two alternatives to this approach here:
>>
>> a) ONE_REG
>>
>> We can just add a new DEBUG arch in ONE_REG and expose ONE_REG per VM
>> as well (if we really have to?). That gives us explicit identifiers
>> for each stat with an explicit path to introduce new ones with very
>> unique identifiers.
>>
>> That would give us a very easily structured approach to retrieve
>> individual counters.
>>
>> b) part of the mmap'ed vcpu struct
>>
>> We could simply move the counters into the shared struct that we
>> expose to user space via mmap. IIRC we only have that per-vcpu, but
>> then again most counters are per-vcpu anyway, so we would push the
>> aggregation to user space.
>>
>> For per-vm ones, maybe we can just add another mmap'ed shared page for
>> the vm fd?
>>
>>
>> 2) vcpu counters
>>
>> Most of the counters count on vcpu granularity, but debugfs only gives
>> us a full VM view. Whatever we do to improve the situation, we should
>> definitely try to build something that allows us to get the counters
>> per vcpu (as well).
>>
>> The main purpose of these counters is monitoring. It can be quite
>> important to know that only a single vCPU is going wild, compared to
>> all of them for example.
>
> I agree, exposing per vcpu counters can be useful. I guess it didn't
> make much sense exposing them through debugfs so aggregation was done in
> kernel. However if we chose to go with approach 1-b) mmap counters
> struct in userspace, we could do this.
We could do it in any approach, even with statfs if we do directories
per vcpu :).
The reason I dislike the debugfs/statfs approach is that it generates a
completely separate permission and access paths to the stats. That's
great for full system monitoring, but really bad when you have multiple
individual tenants on a single host.
Alex
Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss
Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
Sitz: Berlin
Ust-ID: DE 289 237 879
next prev parent reply other threads:[~2020-01-15 14:59 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-15 13:43 [PATCH 2/2] kvm: Add ioctl for gathering debug counters Milan Pandurov
2020-01-15 14:04 ` Alexander Graf
2020-01-15 14:43 ` milanpa
2020-01-15 14:59 ` Alexander Graf [this message]
2020-01-17 23:38 ` Paolo Bonzini
2020-01-20 17:53 ` Alexander Graf
2020-01-20 18:57 ` milanpa
2020-01-21 15:38 ` Alexander Graf
2020-01-23 12:08 ` Paolo Bonzini
2020-01-23 12:32 ` Alexander Graf
2020-01-23 14:19 ` Paolo Bonzini
2020-01-23 14:45 ` Alexander Graf
2020-01-23 14:50 ` Paolo Bonzini
2020-01-23 14:58 ` Alexander Graf
2020-01-23 15:05 ` Paolo Bonzini
2020-01-23 15:27 ` milanpa
2020-01-23 16:15 ` Paolo Bonzini
2020-01-23 18:31 ` milanpa
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=ab84ee05-7e2b-e0cc-6994-fc485012a51a@amazon.de \
--to=graf@amazon.de \
--cc=borntraeger@de.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=milanpa@amazon.com \
--cc=milanpa@amazon.de \
--cc=pbonzini@redhat.com \
--cc=rkrcmar@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox