From: Matias Ezequiel Vara Larsen <matiasevara@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Matias Ezequiel Vara Larsen <matias.vara@vates.fr>,
Jan Beulich <jbeulich@suse.com>,
Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>,
George Dunlap <george.dunlap@citrix.com>,
Julien Grall <julien@xen.org>,
Stefano Stabellini <sstabellini@kernel.org>,
Dario Faggioli <dfaggioli@suse.com>,
Anthony PERARD <anthony.perard@citrix.com>
Subject: [RFC PATCH v1 0/2] Add a new acquire resource to query vcpu statistics
Date: Wed, 24 Aug 2022 15:27:29 +0200 [thread overview]
Message-ID: <cover.1661330065.git.matias.vara@vates.fr> (raw)
Hello all,
The purpose of this RFC is to get feedback about a new acquire resource that
exposes vcpu statistics for a given domain. The current mechanism to get those
statistics is by querying the hypervisor. This mechanism relies on a hypercall
and holds the domctl spinlock during its execution. When a pv tool like xcp-rrdd
periodically samples these counters, it ends up affecting other paths that share
that spinlock. By using acquire resources, the pv tool only requires a few
hypercalls to set the shared memory region and samples are got without issuing
any other hypercall. The original idea has been suggested by Andrew Cooper to
which I have been discussing about how to implement the current PoC. You can
find the RFC patch series at [1]. The series is rebased on top of stable-4.15.
I am currently a bit blocked on 1) what to expose and 2) how to expose it. For
1), I decided to expose what xcp-rrdd is querying, e.g., XEN_DOMCTL_getvcpuinfo.
More precisely, xcp-rrd gets runstate.time[RUNSTATE_running]. This is a uint64_t
counter. However, the time spent in other states may be interesting too.
Regarding 2), I am not sure if simply using an array of uint64_t is enough or if
a different interface should be exposed. The remaining question is when to get
new values. For the moment, I am updating this counter during
vcpu_runstate_change().
The current series includes a simple pv tool that shows how this new interface is
used. This tool maps the counter and periodically samples it.
Any feedback/help would be appreciated.
Thanks, Matias.
[1] https://github.com/MatiasVara/xen/tree/feature_stats
Changes in v1:
- rework how the resource is allocated and released
- rework when the resource is allocated that happens only when the resource is
requested
- rework the structure shared between the tool and Xen to make it extensible to
new counters and declare it in a public header
There are still the following questions:
- consumer may fetch inconsistency data
- resource shall be released when there are no more readers otherwise we keep
updating it during a hot path
- one frame can host up to 512 vcpus. Should I check to this limit when
updating? Should it be possible to allocate more than one frame for vcpu
counters?
Matias Ezequiel Vara Larsen (2):
xen/memory : Add a stats_table resource type
tools/misc: Add xen-vcpus-stats tool
tools/misc/Makefile | 6 +++
tools/misc/xen-vcpus-stats.c | 76 +++++++++++++++++++++++++++++
xen/arch/x86/hvm/hvm.c | 2 +
xen/common/memory.c | 94 ++++++++++++++++++++++++++++++++++++
xen/common/sched/core.c | 7 +++
xen/include/public/memory.h | 3 ++
xen/include/public/vcpu.h | 10 ++++
xen/include/xen/mm.h | 2 +
xen/include/xen/sched.h | 5 ++
9 files changed, 205 insertions(+)
create mode 100644 tools/misc/xen-vcpus-stats.c
--
2.25.1
next reply other threads:[~2022-08-24 13:28 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-24 13:27 Matias Ezequiel Vara Larsen [this message]
2022-08-24 13:27 ` [RFC PATCH v1 1/2] xen/memory : Add a stats_table resource type Matias Ezequiel Vara Larsen
2022-08-24 13:27 ` [RFC PATCH v1 2/2] tools/misc: Add xen-vcpus-stats tool Matias Ezequiel Vara Larsen
2022-09-29 15:55 ` [RFC PATCH v1 0/2] Add a new acquire resource to query vcpu statistics Jan Beulich
2022-09-30 11:10 ` Matias Ezequiel Vara Larsen
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=cover.1661330065.git.matias.vara@vates.fr \
--to=matiasevara@gmail.com \
--cc=andrew.cooper3@citrix.com \
--cc=anthony.perard@citrix.com \
--cc=dfaggioli@suse.com \
--cc=george.dunlap@citrix.com \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=matias.vara@vates.fr \
--cc=sstabellini@kernel.org \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.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.