Add libvirt perf event
This blueprint is to add nova an ability to support perf event, these event data can be collected by Ceilometer. Co-authored-by: Alex Xu <hejie.xu@intel.com> Blueprint support-perf-event Change-Id: I7cec5c583048134b1a7c3986428e32672434c3c8
This commit is contained in:
committed by
Daniel Berrange
parent
3e9cdd9d02
commit
594782a6bc
179
specs/newton/approved/libvirt-perf-support.rst
Normal file
179
specs/newton/approved/libvirt-perf-support.rst
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
===============================
|
||||||
|
Libvirt: add perf event support
|
||||||
|
===============================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/nova/+spec/support-perf-event
|
||||||
|
|
||||||
|
The purpose of this blueprint is to add nova an ability to support perf event
|
||||||
|
to gain statistic (for example cpu cache usage) for each instance. These
|
||||||
|
perf event data will be collected by Ceilometer. [1]_
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Perf event is a Linux feature that provides a framework for analyzing
|
||||||
|
performance events at both hardware and software levels. Through a
|
||||||
|
list of measurable events we can measure events coming from different
|
||||||
|
resources (like context-switches, cache misses, etc.) and gain statistic
|
||||||
|
for each instance.
|
||||||
|
|
||||||
|
Perf has integrated to libvirt from 1.3.3 and it now supports to gain cpu
|
||||||
|
cache and more event type will be added. We can enable perf support in Nova.
|
||||||
|
|
||||||
|
Use Cases
|
||||||
|
----------
|
||||||
|
|
||||||
|
As a cloud operator, he/she wants to know if instances in a cloud occupy
|
||||||
|
what kinds of resources, for example, cpu, memory, cpu cache, memory
|
||||||
|
bandwidth etc., and also the amount of resource of the instance. These kinds
|
||||||
|
of monitor data can be collected from Ceilometer. With these monitor data,
|
||||||
|
the operatior can do some analysis to identify what is the most important
|
||||||
|
resource for this instance and he/she can do further operations like
|
||||||
|
migrate to some other hosts to provide better resources to meet customers SLA.
|
||||||
|
|
||||||
|
The Ceilometer spec requires to nova have perf support.[1]_
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Add new libvirt driver list configure option `enabled_perf_events`, which
|
||||||
|
is a list to indicate the perf event type, default is `[]`.
|
||||||
|
|
||||||
|
Add missing elements when generating XML definition in libvirt driver to
|
||||||
|
support perf event per the configuration of `enabled_perf_events`. Only
|
||||||
|
supported event with proper Libvirt version, it will be ignored if the
|
||||||
|
version of Libvirt is too old.
|
||||||
|
|
||||||
|
For example we have enabled_perf_events=['cmt'], the XML element will be
|
||||||
|
like this::
|
||||||
|
|
||||||
|
<perf>
|
||||||
|
<event enable="yes" name="cmt"/>
|
||||||
|
</perf>
|
||||||
|
|
||||||
|
Libvirt requires this flag in it's XML to initialize a file descriptor
|
||||||
|
before we gain the statistic, the polling won't be started until we call
|
||||||
|
Libvirt API.
|
||||||
|
|
||||||
|
In this spec, we don't propose nova to polling statistic data itself,
|
||||||
|
Ceilometer can benefit from this configuration.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
Another solution is enable perf event per instance by using flavor's
|
||||||
|
extra_spec, like adding 'perf:event=cmt,...', add aggregate to host.
|
||||||
|
It's complex to enable it from operators.
|
||||||
|
|
||||||
|
The reason not using flavor's extra_spec is this is not a spec user
|
||||||
|
should take care, it's not a feature of VM, but things the platform can
|
||||||
|
provide us, so if platform can provide us such feature, we can benifit from
|
||||||
|
it. It doesn't make sense that a user wants an instance schedule to a host
|
||||||
|
which can have performance monitor.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
There won't be performance impact. When perf event is enabled,
|
||||||
|
the operation is just to write the count into the memory,
|
||||||
|
and the impact can be almost ignored, especially we just
|
||||||
|
enable events for VMs (not for each processes).
|
||||||
|
|
||||||
|
No addition API call is requires at all.
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
Eli Qiao <liyong.qiao@intel.com>
|
||||||
|
|
||||||
|
Other contributors:
|
||||||
|
qiaowei-ren <qiaowei.ren@intel.com>
|
||||||
|
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
The primary work items are:
|
||||||
|
|
||||||
|
* Add new libvirt driver configuration option.
|
||||||
|
* If the version of libvirt is new enough to support the flags in the xml,
|
||||||
|
update the libvirt guest XML configuration when one or more perf events
|
||||||
|
are specified in libvirt driver configuration.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
And this spec will depend on the following libraries:
|
||||||
|
|
||||||
|
* libvirt >= 1.3.3
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
* Add unit test case to verify guest XML has been updated correctly.
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
* Add explanation of new added libvirt configuration.
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. [1] `ceilometer l3-cache-meter spec <https://blueprints.launchpad.net/ceilometer/+spec/l3-cache-meter/>`_
|
||||||
|
|
||||||
|
History
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. list-table:: Revisions
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Release Name
|
||||||
|
- Description
|
||||||
|
* - Newton
|
||||||
|
- introduced.
|
||||||
Reference in New Issue
Block a user