docs/cgroups.html.in | 424 -------------- docs/cgroups.rst | 364 ++++++++++++ docs/drvbhyve.html.in | 583 ------------------- docs/drvbhyve.rst | 582 +++++++++++++++++++ docs/drvesx.html.in | 838 --------------------------- docs/drvesx.rst | 681 ++++++++++++++++++++++ docs/drvhyperv.html.in | 150 ----- docs/drvhyperv.rst | 121 ++++ docs/drvlxc.html.in | 822 -------------------------- docs/drvlxc.rst | 670 +++++++++++++++++++++ docs/drvnodedev.html.in | 383 ------------ docs/drvnodedev.rst | 348 +++++++++++ docs/drvopenvz.html.in | 123 ---- docs/drvopenvz.rst | 97 ++++ docs/drvremote.html.in | 7 - docs/drvsecret.html.in | 82 --- docs/drvsecret.rst | 65 +++ docs/drvtest.html.in | 27 - docs/drvtest.rst | 21 + docs/drvvbox.html.in | 172 ------ docs/drvvbox.rst | 161 +++++ docs/drvvirtuozzo.html.in | 70 --- docs/drvvirtuozzo.rst | 60 ++ docs/drvvmware.html.in | 89 --- docs/drvvmware.rst | 72 +++ docs/drvxen.html.in | 358 ------------ docs/drvxen.rst | 338 +++++++++++ docs/firewall.html.in | 523 ----------------- docs/firewall.rst | 506 ++++++++++++++++ docs/format.html.in | 48 -- docs/format.rst | 35 ++ docs/formatcaps.html.in | 219 ------- docs/formatcaps.rst | 196 +++++++ docs/formatdomain.rst | 25 +- docs/formatdomaincaps.html.in | 693 ---------------------- docs/formatdomaincaps.rst | 602 +++++++++++++++++++ docs/formatnetworkport.html.in | 223 ------- docs/formatnetworkport.rst | 175 ++++++ docs/formatstoragecaps.html.in | 95 --- docs/formatstoragecaps.rst | 81 +++ docs/formatstorageencryption.html.in | 181 ------ docs/formatstorageencryption.rst | 139 +++++ docs/hooks.html.in | 406 ------------- docs/hooks.rst | 518 +++++++++++++++++ docs/java.html.in | 121 ---- docs/java.rst | 128 ++++ docs/kbase/backing_chains.rst | 2 +- docs/logging.html.in | 243 -------- docs/logging.rst | 215 +++++++ docs/meson.build | 49 +- docs/php.html.in | 28 - docs/php.rst | 23 + 52 files changed, 6236 insertions(+), 6946 deletions(-) delete mode 100644 docs/cgroups.html.in create mode 100644 docs/cgroups.rst delete mode 100644 docs/drvbhyve.html.in create mode 100644 docs/drvbhyve.rst delete mode 100644 docs/drvesx.html.in create mode 100644 docs/drvesx.rst delete mode 100644 docs/drvhyperv.html.in create mode 100644 docs/drvhyperv.rst delete mode 100644 docs/drvlxc.html.in create mode 100644 docs/drvlxc.rst delete mode 100644 docs/drvnodedev.html.in create mode 100644 docs/drvnodedev.rst delete mode 100644 docs/drvopenvz.html.in create mode 100644 docs/drvopenvz.rst delete mode 100644 docs/drvremote.html.in delete mode 100644 docs/drvsecret.html.in create mode 100644 docs/drvsecret.rst delete mode 100644 docs/drvtest.html.in create mode 100644 docs/drvtest.rst delete mode 100644 docs/drvvbox.html.in create mode 100644 docs/drvvbox.rst delete mode 100644 docs/drvvirtuozzo.html.in create mode 100644 docs/drvvirtuozzo.rst delete mode 100644 docs/drvvmware.html.in create mode 100644 docs/drvvmware.rst delete mode 100644 docs/drvxen.html.in create mode 100644 docs/drvxen.rst delete mode 100644 docs/firewall.html.in create mode 100644 docs/firewall.rst delete mode 100644 docs/format.html.in create mode 100644 docs/format.rst delete mode 100644 docs/formatcaps.html.in create mode 100644 docs/formatcaps.rst delete mode 100644 docs/formatdomaincaps.html.in create mode 100644 docs/formatdomaincaps.rst delete mode 100644 docs/formatnetworkport.html.in create mode 100644 docs/formatnetworkport.rst delete mode 100644 docs/formatstoragecaps.html.in create mode 100644 docs/formatstoragecaps.rst delete mode 100644 docs/formatstorageencryption.html.in create mode 100644 docs/formatstorageencryption.rst delete mode 100644 docs/hooks.html.in create mode 100644 docs/hooks.rst delete mode 100644 docs/java.html.in create mode 100644 docs/java.rst delete mode 100644 docs/logging.html.in create mode 100644 docs/logging.rst delete mode 100644 docs/php.html.in create mode 100644 docs/php.rst
Peter Krempa (29): docs: Remove empty unreferenced 'drvremote' page docs: Convert 'cgroups' page to rST docs: Convert 'drvbhyve' page to rST docs: Convert 'drvesx' page to rST docs: Convert 'drvhyperv' page to rST docs: Convert 'drvlxc' page to rST docs: Convert 'drvnodedev' page to rST docs: Convert 'drvopenvz' page to rST docs: Convert 'drvsecret' page to rST docs: Convert 'drvtest' page to rST docs: Convert 'drvvbox' page to rST docs: Convert 'drvvirtuozzo' page to rST docs: Convert 'drvvmware' page to rST docs: Convert 'drvxen' page to rST docs: Convert 'firewall' page to rST docs: Convert 'format' page to rST docs: Convert 'formatcaps' page to rST docs: Convert 'formatdomaincaps' to rST docs: Convert 'formatnetworkport' to rST docs: Fix heading of 'formatnetworkport' page docs: Convert 'formatstoragecaps' page to rST docs: Convert 'formatstorageencryption' page to rST docs: formatstorageencryption: Drop empty 'default' paragraph docs: formatstorageencryption: Re-style encryption type headers docs: Convert 'hooks' page to rST docs: Convert 'java' page to rST docs: Convert 'logging' page to rST docs: logging: Replace example by link to kbase/debuglogs.html docs: Convert 'php' page to rST docs/cgroups.html.in | 424 -------------- docs/cgroups.rst | 364 ++++++++++++ docs/drvbhyve.html.in | 583 ------------------- docs/drvbhyve.rst | 582 +++++++++++++++++++ docs/drvesx.html.in | 838 --------------------------- docs/drvesx.rst | 681 ++++++++++++++++++++++ docs/drvhyperv.html.in | 150 ----- docs/drvhyperv.rst | 121 ++++ docs/drvlxc.html.in | 822 -------------------------- docs/drvlxc.rst | 670 +++++++++++++++++++++ docs/drvnodedev.html.in | 383 ------------ docs/drvnodedev.rst | 348 +++++++++++ docs/drvopenvz.html.in | 123 ---- docs/drvopenvz.rst | 97 ++++ docs/drvremote.html.in | 7 - docs/drvsecret.html.in | 82 --- docs/drvsecret.rst | 65 +++ docs/drvtest.html.in | 27 - docs/drvtest.rst | 21 + docs/drvvbox.html.in | 172 ------ docs/drvvbox.rst | 161 +++++ docs/drvvirtuozzo.html.in | 70 --- docs/drvvirtuozzo.rst | 60 ++ docs/drvvmware.html.in | 89 --- docs/drvvmware.rst | 72 +++ docs/drvxen.html.in | 358 ------------ docs/drvxen.rst | 338 +++++++++++ docs/firewall.html.in | 523 ----------------- docs/firewall.rst | 506 ++++++++++++++++ docs/format.html.in | 48 -- docs/format.rst | 35 ++ docs/formatcaps.html.in | 219 ------- docs/formatcaps.rst | 196 +++++++ docs/formatdomain.rst | 25 +- docs/formatdomaincaps.html.in | 693 ---------------------- docs/formatdomaincaps.rst | 602 +++++++++++++++++++ docs/formatnetworkport.html.in | 223 ------- docs/formatnetworkport.rst | 175 ++++++ docs/formatstoragecaps.html.in | 95 --- docs/formatstoragecaps.rst | 81 +++ docs/formatstorageencryption.html.in | 181 ------ docs/formatstorageencryption.rst | 139 +++++ docs/hooks.html.in | 406 ------------- docs/hooks.rst | 518 +++++++++++++++++ docs/java.html.in | 121 ---- docs/java.rst | 128 ++++ docs/kbase/backing_chains.rst | 2 +- docs/logging.html.in | 243 -------- docs/logging.rst | 215 +++++++ docs/meson.build | 49 +- docs/php.html.in | 28 - docs/php.rst | 23 + 52 files changed, 6236 insertions(+), 6946 deletions(-) delete mode 100644 docs/cgroups.html.in create mode 100644 docs/cgroups.rst delete mode 100644 docs/drvbhyve.html.in create mode 100644 docs/drvbhyve.rst delete mode 100644 docs/drvesx.html.in create mode 100644 docs/drvesx.rst delete mode 100644 docs/drvhyperv.html.in create mode 100644 docs/drvhyperv.rst delete mode 100644 docs/drvlxc.html.in create mode 100644 docs/drvlxc.rst delete mode 100644 docs/drvnodedev.html.in create mode 100644 docs/drvnodedev.rst delete mode 100644 docs/drvopenvz.html.in create mode 100644 docs/drvopenvz.rst delete mode 100644 docs/drvremote.html.in delete mode 100644 docs/drvsecret.html.in create mode 100644 docs/drvsecret.rst delete mode 100644 docs/drvtest.html.in create mode 100644 docs/drvtest.rst delete mode 100644 docs/drvvbox.html.in create mode 100644 docs/drvvbox.rst delete mode 100644 docs/drvvirtuozzo.html.in create mode 100644 docs/drvvirtuozzo.rst delete mode 100644 docs/drvvmware.html.in create mode 100644 docs/drvvmware.rst delete mode 100644 docs/drvxen.html.in create mode 100644 docs/drvxen.rst delete mode 100644 docs/firewall.html.in create mode 100644 docs/firewall.rst delete mode 100644 docs/format.html.in create mode 100644 docs/format.rst delete mode 100644 docs/formatcaps.html.in create mode 100644 docs/formatcaps.rst delete mode 100644 docs/formatdomaincaps.html.in create mode 100644 docs/formatdomaincaps.rst delete mode 100644 docs/formatnetworkport.html.in create mode 100644 docs/formatnetworkport.rst delete mode 100644 docs/formatstoragecaps.html.in create mode 100644 docs/formatstoragecaps.rst delete mode 100644 docs/formatstorageencryption.html.in create mode 100644 docs/formatstorageencryption.rst delete mode 100644 docs/hooks.html.in create mode 100644 docs/hooks.rst delete mode 100644 docs/java.html.in create mode 100644 docs/java.rst delete mode 100644 docs/logging.html.in create mode 100644 docs/logging.rst delete mode 100644 docs/php.html.in create mode 100644 docs/php.rst -- 2.35.1
Can you please rebase? The series doesn't apply cleanly anymore. Isn't this a part 3 actually? Based on [1]... :P [1] https://listman.redhat.com/archives/libvir-list/2022-March/229208.html Erik
On Fri, Apr 01, 2022 at 09:23:54 +0200, Erik Skultety wrote: > Can you please rebase? The series doesn't apply cleanly anymore. I've noted that patch 17 doesn't apply cleanly. I planned to drop it (and solve the trivial conflict in docs/meson.build in patch 18). Then I'll re-convert it in the next pass. It doesn't make too much sense for me to try to chase and re-apply what has changed to the converted docs. > > Isn't this a part 3 actually? Based on [1]... :P > > [1] https://listman.redhat.com/archives/libvir-list/2022-March/229208.html It is, but that series is pushed for some time now. The problem was that there was a docs change in one of the files converted in this series. I can re-send with the conflict solved if you'd like me to.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- docs/drvremote.html.in | 7 ------- docs/meson.build | 1 - 2 files changed, 8 deletions(-) delete mode 100644 docs/drvremote.html.in diff --git a/docs/drvremote.html.in b/docs/drvremote.html.in deleted file mode 100644 index 224f1bfb17..0000000000 --- a/docs/drvremote.html.in +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html> -<html xmlns="http://www.w3.org/1999/xhtml"> - <body> - <h1>Remote management driver</h1> - </body> -</html> diff --git a/docs/meson.build b/docs/meson.build index b097866208..5f26d40082 100644 --- a/docs/meson.build +++ b/docs/meson.build @@ -29,7 +29,6 @@ docs_html_in_files = [ 'drvlxc', 'drvnodedev', 'drvopenvz', - 'drvremote', 'drvsecret', 'drvtest', 'drvvbox', -- 2.35.1
On Mon, Mar 28, 2022 at 02:10:16PM +0200, Peter Krempa wrote: > Signed-off-by: Peter Krempa <pkrempa@redhat.com> > --- Reviewed-by: Erik Skultety <eskultet@redhat.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
docs/cgroups.html.in | 424 -------------------------------------------
docs/cgroups.rst | 364 +++++++++++++++++++++++++++++++++++++
docs/meson.build | 2 +-
3 files changed, 365 insertions(+), 425 deletions(-)
delete mode 100644 docs/cgroups.html.in
create mode 100644 docs/cgroups.rst
diff --git a/docs/cgroups.html.in b/docs/cgroups.html.in
deleted file mode 100644
index 412a9360ff..0000000000
--- a/docs/cgroups.html.in
+++ /dev/null
@@ -1,424 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml">
- <body>
- <h1>Control Groups Resource Management</h1>
-
- <ul id="toc"></ul>
-
- <p>
- The QEMU and LXC drivers make use of the Linux "Control Groups" facility
- for applying resource management to their virtual machines and containers.
- </p>
-
- <h2><a id="requiredControllers">Required controllers</a></h2>
-
- <p>
- The control groups filesystem supports multiple "controllers". By default
- the init system (such as systemd) should mount all controllers compiled
- into the kernel at <code>/sys/fs/cgroup/$CONTROLLER-NAME</code>. Libvirt
- will never attempt to mount any controllers itself, merely detect where
- they are mounted.
- </p>
-
- <p>
- The QEMU driver is capable of using the <code>cpuset</code>,
- <code>cpu</code>, <code>cpuacct</code>, <code>memory</code>,
- <code>blkio</code> and <code>devices</code> controllers.
- None of them are compulsory. If any controller is not mounted,
- the resource management APIs which use it will cease to operate.
- It is possible to explicitly turn off use of a controller,
- even when mounted, via the <code>/etc/libvirt/qemu.conf</code>
- configuration file.
- </p>
-
- <p>
- The LXC driver is capable of using the <code>cpuset</code>,
- <code>cpu</code>, <code>cpuacct</code>, <code>freezer</code>,
- <code>memory</code>, <code>blkio</code> and <code>devices</code>
- controllers. The <code>cpuacct</code>, <code>devices</code>
- and <code>memory</code> controllers are compulsory. Without
- them mounted, no containers can be started. If any of the
- other controllers are not mounted, the resource management APIs
- which use them will cease to operate.
- </p>
-
- <h2><a id="currentLayout">Current cgroups layout</a></h2>
-
- <p>
- As of libvirt 1.0.5 or later, the cgroups layout created by libvirt has been
- simplified, in order to facilitate the setup of resource control policies by
- administrators / management applications. The new layout is based on the concepts
- of "partitions" and "consumers". A "consumer" is a cgroup which holds the
- processes for a single virtual machine or container. A "partition" is a cgroup
- which does not contain any processes, but can have resource controls applied.
- A "partition" will have zero or more child directories which may be either
- "consumer" or "partition".
- </p>
-
- <p>
- As of libvirt 1.1.1 or later, the cgroups layout will have some slight
- differences when running on a host with systemd 205 or later. The overall
- tree structure is the same, but there are some differences in the naming
- conventions for the cgroup directories. Thus the following docs split
- in two, one describing systemd hosts and the other non-systemd hosts.
- </p>
-
- <h3><a id="currentLayoutSystemd">Systemd cgroups integration</a></h3>
-
- <p>
- On hosts which use systemd, each consumer maps to a systemd scope unit,
- while partitions map to a system slice unit.
- </p>
-
- <h4><a id="systemdScope">Systemd scope naming</a></h4>
-
- <p>
- The systemd convention is for the scope name of virtual machines / containers
- to be of the general format <code>machine-$NAME.scope</code>. Libvirt forms the
- <code>$NAME</code> part of this by concatenating the driver type with the id
- and truncated name of the guest, and then escaping any systemd reserved
- characters.
- So for a guest <code>demo</code> running under the <code>lxc</code> driver,
- we get a <code>$NAME</code> of <code>lxc-12345-demo</code> which when escaped
- is <code>lxc\x2d12345\x2ddemo</code>. So the complete scope name is
- <code>machine-lxc\x2d12345\x2ddemo.scope</code>.
- The scope names map directly to the cgroup directory names.
- </p>
-
- <h4><a id="systemdSlice">Systemd slice naming</a></h4>
-
- <p>
- The systemd convention for slice naming is that a slice should include the
- name of all of its parents prepended on its own name. So for a libvirt
- partition <code>/machine/engineering/testing</code>, the slice name will
- be <code>machine-engineering-testing.slice</code>. Again the slice names
- map directly to the cgroup directory names. Systemd creates three top level
- slices by default, <code>system.slice</code> <code>user.slice</code> and
- <code>machine.slice</code>. All virtual machines or containers created
- by libvirt will be associated with <code>machine.slice</code> by default.
- </p>
-
- <h4><a id="systemdLayout">Systemd cgroup layout</a></h4>
-
- <p>
- Given this, a possible systemd cgroups layout involving 3 qemu guests,
- 3 lxc containers and 3 custom child slices, would be:
- </p>
-
- <pre>
-$ROOT
- |
- +- system.slice
- | |
- | +- libvirtd.service
- |
- +- machine.slice
- |
- +- machine-qemu\x2d1\x2dvm1.scope
- | |
- | +- libvirt
- | |
- | +- emulator
- | +- vcpu0
- | +- vcpu1
- |
- +- machine-qemu\x2d2\x2dvm2.scope
- | |
- | +- libvirt
- | |
- | +- emulator
- | +- vcpu0
- | +- vcpu1
- |
- +- machine-qemu\x2d3\x2dvm3.scope
- | |
- | +- libvirt
- | |
- | +- emulator
- | +- vcpu0
- | +- vcpu1
- |
- +- machine-engineering.slice
- | |
- | +- machine-engineering-testing.slice
- | | |
- | | +- machine-lxc\x2d11111\x2dcontainer1.scope
- | |
- | +- machine-engineering-production.slice
- | |
- | +- machine-lxc\x2d22222\x2dcontainer2.scope
- |
- +- machine-marketing.slice
- |
- +- machine-lxc\x2d33333\x2dcontainer3.scope
- </pre>
-
- <p>
- Prior libvirt 7.1.0 the topology doesn't have extra
- <code>libvirt</code> directory.
- </p>
-
- <h3><a id="currentLayoutGeneric">Non-systemd cgroups layout</a></h3>
-
- <p>
- On hosts which do not use systemd, each consumer has a corresponding cgroup
- named <code>$VMNAME.libvirt-{qemu,lxc}</code>. Each consumer is associated
- with exactly one partition, which also have a corresponding cgroup usually
- named <code>$PARTNAME.partition</code>. The exceptions to this naming rule
- is the top level default partition for virtual machines and containers
- <code>/machine</code>.
- </p>
-
- <p>
- Given this, a possible non-systemd cgroups layout involving 3 qemu guests,
- 3 lxc containers and 2 custom child slices, would be:
- </p>
-
- <pre>
-$ROOT
- |
- +- machine
- |
- +- qemu-1-vm1.libvirt-qemu
- | |
- | +- emulator
- | +- vcpu0
- | +- vcpu1
- |
- +- qeme-2-vm2.libvirt-qemu
- | |
- | +- emulator
- | +- vcpu0
- | +- vcpu1
- |
- +- qemu-3-vm3.libvirt-qemu
- | |
- | +- emulator
- | +- vcpu0
- | +- vcpu1
- |
- +- engineering.partition
- | |
- | +- testing.partition
- | | |
- | | +- lxc-11111-container1.libvirt-lxc
- | |
- | +- production.partition
- | |
- | +- lxc-22222-container2.libvirt-lxc
- |
- +- marketing.partition
- |
- +- lxc-33333-container3.libvirt-lxc
- </pre>
-
- <h2><a id="customPartiton">Using custom partitions</a></h2>
-
- <p>
- If there is a need to apply resource constraints to groups of
- virtual machines or containers, then the single default
- partition <code>/machine</code> may not be sufficiently
- flexible. The administrator may wish to sub-divide the
- default partition, for example into "testing" and "production"
- partitions, and then assign each guest to a specific
- sub-partition. This is achieved via a small element addition
- to the guest domain XML config, just below the main <code>domain</code>
- element
- </p>
-
- <pre>
-...
-<resource>
- <partition>/machine/production</partition>
-</resource>
-...
- </pre>
-
- <p>
- Note that the partition names in the guest XML are using a
- generic naming format, not the low level naming convention
- required by the underlying host OS. That is, you should not include
- any of the <code>.partition</code> or <code>.slice</code>
- suffixes in the XML config. Given a partition name
- <code>/machine/production</code>, libvirt will automatically
- apply the platform specific translation required to get
- <code>/machine/production.partition</code> (non-systemd)
- or <code>/machine.slice/machine-production.slice</code>
- (systemd) as the underlying cgroup name
- </p>
-
- <p>
- Libvirt will not auto-create the cgroups directory to back
- this partition. In the future, libvirt / virsh will provide
- APIs / commands to create custom partitions, but currently
- this is left as an exercise for the administrator.
- </p>
-
- <p>
- <strong>Note:</strong> the ability to place guests in custom
- partitions is only available with libvirt >= 1.0.5, using
- the new cgroup layout. The legacy cgroups layout described
- later in this document did not support customization per guest.
- </p>
-
- <h3><a id="createSystemd">Creating custom partitions (systemd)</a></h3>
-
- <p>
- Given the XML config above, the admin on a systemd based host would
- need to create a unit file <code>/etc/systemd/system/machine-production.slice</code>
- </p>
-
- <pre>
-# cat > /etc/systemd/system/machine-testing.slice <<EOF
-[Unit]
-Description=VM testing slice
-Before=slices.target
-Wants=machine.slice
-EOF
-# systemctl start machine-testing.slice
- </pre>
-
- <h3><a id="createNonSystemd">Creating custom partitions (non-systemd)</a></h3>
-
- <p>
- Given the XML config above, the admin on a non-systemd based host
- would need to create a cgroup named '/machine/production.partition'
- </p>
-
- <pre>
-# cd /sys/fs/cgroup
-# for i in blkio cpu,cpuacct cpuset devices freezer memory net_cls perf_event
- do
- mkdir $i/machine/production.partition
- done
-# for i in cpuset.cpus cpuset.mems
- do
- cat cpuset/machine/$i > cpuset/machine/production.partition/$i
- done
-</pre>
-
- <h2><a id="resourceAPIs">Resource management APIs/commands</a></h2>
-
- <p>
- Since libvirt aims to provide an API which is portable across
- hypervisors, the concept of cgroups is not exposed directly
- in the API or XML configuration. It is considered to be an
- internal implementation detail. Instead libvirt provides a
- set of APIs for applying resource controls, which are then
- mapped to corresponding cgroup tunables
- </p>
-
- <h3>Scheduler tuning</h3>
-
- <p>
- Parameters from the "cpu" controller are exposed via the
- <code>schedinfo</code> command in virsh.
- </p>
-
- <pre>
-# virsh schedinfo demo
-Scheduler : posix
-cpu_shares : 1024
-vcpu_period : 100000
-vcpu_quota : -1
-emulator_period: 100000
-emulator_quota : -1</pre>
-
-
- <h3>Block I/O tuning</h3>
-
- <p>
- Parameters from the "blkio" controller are exposed via the
- <code>bkliotune</code> command in virsh.
- </p>
-
-
- <pre>
-# virsh blkiotune demo
-weight : 500
-device_weight : </pre>
-
- <h3>Memory tuning</h3>
-
- <p>
- Parameters from the "memory" controller are exposed via the
- <code>memtune</code> command in virsh.
- </p>
-
- <pre>
-# virsh memtune demo
-hard_limit : 580192
-soft_limit : unlimited
-swap_hard_limit: unlimited
- </pre>
-
- <h3>Network tuning</h3>
-
- <p>
- The <code>net_cls</code> is not currently used. Instead traffic
- filter policies are set directly against individual virtual
- network interfaces.
- </p>
-
- <h2><a id="legacyLayout">Legacy cgroups layout</a></h2>
-
- <p>
- Prior to libvirt 1.0.5, the cgroups layout created by libvirt was different
- from that described above, and did not allow for administrator customization.
- Libvirt used a fixed, 3-level hierarchy <code>libvirt/{qemu,lxc}/$VMNAME</code>
- which was rooted at the point in the hierarchy where libvirtd itself was
- located. So if libvirtd was placed at <code>/system/libvirtd.service</code>
- by systemd, the groups for each virtual machine / container would be located
- at <code>/system/libvirtd.service/libvirt/{qemu,lxc}/$VMNAME</code>. In addition
- to this, the QEMU drivers further child groups for each vCPU thread and the
- emulator thread(s). This leads to a hierarchy that looked like
- </p>
-
-
- <pre>
-$ROOT
- |
- +- system
- |
- +- libvirtd.service
- |
- +- libvirt
- |
- +- qemu
- | |
- | +- vm1
- | | |
- | | +- emulator
- | | +- vcpu0
- | | +- vcpu1
- | |
- | +- vm2
- | | |
- | | +- emulator
- | | +- vcpu0
- | | +- vcpu1
- | |
- | +- vm3
- | |
- | +- emulator
- | +- vcpu0
- | +- vcpu1
- |
- +- lxc
- |
- +- container1
- |
- +- container2
- |
- +- container3
- </pre>
-
- <p>
- Although current releases are much improved, historically the use of deep
- hierarchies has had a significant negative impact on the kernel scalability.
- The legacy libvirt cgroups layout highlighted these problems, to the detriment
- of the performance of virtual machines and containers.
- </p>
- </body>
-</html>
diff --git a/docs/cgroups.rst b/docs/cgroups.rst
new file mode 100644
index 0000000000..eb66a14f0d
--- /dev/null
+++ b/docs/cgroups.rst
@@ -0,0 +1,364 @@
+==================================
+Control Groups Resource Management
+==================================
+
+.. contents::
+
+The QEMU and LXC drivers make use of the Linux "Control Groups" facility for
+applying resource management to their virtual machines and containers.
+
+Required controllers
+--------------------
+
+The control groups filesystem supports multiple "controllers". By default the
+init system (such as systemd) should mount all controllers compiled into the
+kernel at ``/sys/fs/cgroup/$CONTROLLER-NAME``. Libvirt will never attempt to
+mount any controllers itself, merely detect where they are mounted.
+
+The QEMU driver is capable of using the ``cpuset``, ``cpu``, ``cpuacct``,
+``memory``, ``blkio`` and ``devices`` controllers. None of them are compulsory.
+If any controller is not mounted, the resource management APIs which use it will
+cease to operate. It is possible to explicitly turn off use of a controller,
+even when mounted, via the ``/etc/libvirt/qemu.conf`` configuration file.
+
+The LXC driver is capable of using the ``cpuset``, ``cpu``, ``cpuacct``,
+``freezer``, ``memory``, ``blkio`` and ``devices`` controllers. The ``cpuacct``,
+``devices`` and ``memory`` controllers are compulsory. Without them mounted, no
+containers can be started. If any of the other controllers are not mounted, the
+resource management APIs which use them will cease to operate.
+
+Current cgroups layout
+----------------------
+
+As of libvirt 1.0.5 or later, the cgroups layout created by libvirt has been
+simplified, in order to facilitate the setup of resource control policies by
+administrators / management applications. The new layout is based on the
+concepts of "partitions" and "consumers". A "consumer" is a cgroup which holds
+the processes for a single virtual machine or container. A "partition" is a
+cgroup which does not contain any processes, but can have resource controls
+applied. A "partition" will have zero or more child directories which may be
+either "consumer" or "partition".
+
+As of libvirt 1.1.1 or later, the cgroups layout will have some slight
+differences when running on a host with systemd 205 or later. The overall tree
+structure is the same, but there are some differences in the naming conventions
+for the cgroup directories. Thus the following docs split in two, one describing
+systemd hosts and the other non-systemd hosts.
+
+Systemd cgroups integration
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+On hosts which use systemd, each consumer maps to a systemd scope unit, while
+partitions map to a system slice unit.
+
+Systemd scope naming
+^^^^^^^^^^^^^^^^^^^^
+
+The systemd convention is for the scope name of virtual machines / containers to
+be of the general format ``machine-$NAME.scope``. Libvirt forms the ``$NAME``
+part of this by concatenating the driver type with the id and truncated name of
+the guest, and then escaping any systemd reserved characters. So for a guest
+``demo`` running under the ``lxc`` driver, we get a ``$NAME`` of
+``lxc-12345-demo`` which when escaped is ``lxc\x2d12345\x2ddemo``. So the
+complete scope name is ``machine-lxc\x2d12345\x2ddemo.scope``. The scope names
+map directly to the cgroup directory names.
+
+Systemd slice naming
+^^^^^^^^^^^^^^^^^^^^
+
+The systemd convention for slice naming is that a slice should include the name
+of all of its parents prepended on its own name. So for a libvirt partition
+``/machine/engineering/testing``, the slice name will be
+``machine-engineering-testing.slice``. Again the slice names map directly to the
+cgroup directory names. Systemd creates three top level slices by default,
+``system.slice`` ``user.slice`` and ``machine.slice``. All virtual machines or
+containers created by libvirt will be associated with ``machine.slice`` by
+default.
+
+Systemd cgroup layout
+^^^^^^^^^^^^^^^^^^^^^
+
+Given this, a possible systemd cgroups layout involving 3 qemu guests, 3 lxc
+containers and 3 custom child slices, would be:
+
+::
+
+ $ROOT
+ |
+ +- system.slice
+ | |
+ | +- libvirtd.service
+ |
+ +- machine.slice
+ |
+ +- machine-qemu\x2d1\x2dvm1.scope
+ | |
+ | +- libvirt
+ | |
+ | +- emulator
+ | +- vcpu0
+ | +- vcpu1
+ |
+ +- machine-qemu\x2d2\x2dvm2.scope
+ | |
+ | +- libvirt
+ | |
+ | +- emulator
+ | +- vcpu0
+ | +- vcpu1
+ |
+ +- machine-qemu\x2d3\x2dvm3.scope
+ | |
+ | +- libvirt
+ | |
+ | +- emulator
+ | +- vcpu0
+ | +- vcpu1
+ |
+ +- machine-engineering.slice
+ | |
+ | +- machine-engineering-testing.slice
+ | | |
+ | | +- machine-lxc\x2d11111\x2dcontainer1.scope
+ | |
+ | +- machine-engineering-production.slice
+ | |
+ | +- machine-lxc\x2d22222\x2dcontainer2.scope
+ |
+ +- machine-marketing.slice
+ |
+ +- machine-lxc\x2d33333\x2dcontainer3.scope
+
+Prior libvirt 7.1.0 the topology doesn't have extra ``libvirt`` directory.
+
+Non-systemd cgroups layout
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+On hosts which do not use systemd, each consumer has a corresponding cgroup
+named ``$VMNAME.libvirt-{qemu,lxc}``. Each consumer is associated with exactly
+one partition, which also have a corresponding cgroup usually named
+``$PARTNAME.partition``. The exceptions to this naming rule is the top level
+default partition for virtual machines and containers ``/machine``.
+
+Given this, a possible non-systemd cgroups layout involving 3 qemu guests, 3 lxc
+containers and 2 custom child slices, would be:
+
+::
+
+ $ROOT
+ |
+ +- machine
+ |
+ +- qemu-1-vm1.libvirt-qemu
+ | |
+ | +- emulator
+ | +- vcpu0
+ | +- vcpu1
+ |
+ +- qeme-2-vm2.libvirt-qemu
+ | |
+ | +- emulator
+ | +- vcpu0
+ | +- vcpu1
+ |
+ +- qemu-3-vm3.libvirt-qemu
+ | |
+ | +- emulator
+ | +- vcpu0
+ | +- vcpu1
+ |
+ +- engineering.partition
+ | |
+ | +- testing.partition
+ | | |
+ | | +- lxc-11111-container1.libvirt-lxc
+ | |
+ | +- production.partition
+ | |
+ | +- lxc-22222-container2.libvirt-lxc
+ |
+ +- marketing.partition
+ |
+ +- lxc-33333-container3.libvirt-lxc
+
+Using custom partitions
+-----------------------
+
+If there is a need to apply resource constraints to groups of virtual machines
+or containers, then the single default partition ``/machine`` may not be
+sufficiently flexible. The administrator may wish to sub-divide the default
+partition, for example into "testing" and "production" partitions, and then
+assign each guest to a specific sub-partition. This is achieved via a small
+element addition to the guest domain XML config, just below the main ``domain``
+element
+
+::
+
+ ...
+ <resource>
+ <partition>/machine/production</partition>
+ </resource>
+ ...
+
+Note that the partition names in the guest XML are using a generic naming
+format, not the low level naming convention required by the underlying host OS.
+That is, you should not include any of the ``.partition`` or ``.slice`` suffixes
+in the XML config. Given a partition name ``/machine/production``, libvirt will
+automatically apply the platform specific translation required to get
+``/machine/production.partition`` (non-systemd) or
+``/machine.slice/machine-production.slice`` (systemd) as the underlying cgroup
+name
+
+Libvirt will not auto-create the cgroups directory to back this partition. In
+the future, libvirt / virsh will provide APIs / commands to create custom
+partitions, but currently this is left as an exercise for the administrator.
+
+**Note:** the ability to place guests in custom partitions is only available
+with libvirt >= 1.0.5, using the new cgroup layout. The legacy cgroups layout
+described later in this document did not support customization per guest.
+
+Creating custom partitions (systemd)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Given the XML config above, the admin on a systemd based host would need to
+create a unit file ``/etc/systemd/system/machine-production.slice``
+
+::
+
+ # cat > /etc/systemd/system/machine-testing.slice <<EOF
+ [Unit]
+ Description=VM testing slice
+ Before=slices.target
+ Wants=machine.slice
+ EOF
+ # systemctl start machine-testing.slice
+
+Creating custom partitions (non-systemd)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Given the XML config above, the admin on a non-systemd based host would need to
+create a cgroup named '/machine/production.partition'
+
+::
+
+ # cd /sys/fs/cgroup
+ # for i in blkio cpu,cpuacct cpuset devices freezer memory net_cls perf_event
+ do
+ mkdir $i/machine/production.partition
+ done
+ # for i in cpuset.cpus cpuset.mems
+ do
+ cat cpuset/machine/$i > cpuset/machine/production.partition/$i
+ done
+
+Resource management APIs/commands
+---------------------------------
+
+Since libvirt aims to provide an API which is portable across hypervisors, the
+concept of cgroups is not exposed directly in the API or XML configuration. It
+is considered to be an internal implementation detail. Instead libvirt provides
+a set of APIs for applying resource controls, which are then mapped to
+corresponding cgroup tunables
+
+Scheduler tuning
+~~~~~~~~~~~~~~~~
+
+Parameters from the "cpu" controller are exposed via the ``schedinfo`` command
+in virsh.
+
+::
+
+ # virsh schedinfo demo
+ Scheduler : posix
+ cpu_shares : 1024
+ vcpu_period : 100000
+ vcpu_quota : -1
+ emulator_period: 100000
+ emulator_quota : -1
+
+Block I/O tuning
+~~~~~~~~~~~~~~~~
+
+Parameters from the "blkio" controller are exposed via the ``bkliotune`` command
+in virsh.
+
+::
+
+ # virsh blkiotune demo
+ weight : 500
+ device_weight :
+
+Memory tuning
+~~~~~~~~~~~~~
+
+Parameters from the "memory" controller are exposed via the ``memtune`` command
+in virsh.
+
+::
+
+ # virsh memtune demo
+ hard_limit : 580192
+ soft_limit : unlimited
+ swap_hard_limit: unlimited
+
+Network tuning
+~~~~~~~~~~~~~~
+
+The ``net_cls`` is not currently used. Instead traffic filter policies are set
+directly against individual virtual network interfaces.
+
+Legacy cgroups layout
+---------------------
+
+Prior to libvirt 1.0.5, the cgroups layout created by libvirt was different from
+that described above, and did not allow for administrator customization. Libvirt
+used a fixed, 3-level hierarchy ``libvirt/{qemu,lxc}/$VMNAME`` which was rooted
+at the point in the hierarchy where libvirtd itself was located. So if libvirtd
+was placed at ``/system/libvirtd.service`` by systemd, the groups for each
+virtual machine / container would be located at
+``/system/libvirtd.service/libvirt/{qemu,lxc}/$VMNAME``. In addition to this,
+the QEMU drivers further child groups for each vCPU thread and the emulator
+thread(s). This leads to a hierarchy that looked like
+
+::
+
+ $ROOT
+ |
+ +- system
+ |
+ +- libvirtd.service
+ |
+ +- libvirt
+ |
+ +- qemu
+ | |
+ | +- vm1
+ | | |
+ | | +- emulator
+ | | +- vcpu0
+ | | +- vcpu1
+ | |
+ | +- vm2
+ | | |
+ | | +- emulator
+ | | +- vcpu0
+ | | +- vcpu1
+ | |
+ | +- vm3
+ | |
+ | +- emulator
+ | +- vcpu0
+ | +- vcpu1
+ |
+ +- lxc
+ |
+ +- container1
+ |
+ +- container2
+ |
+ +- container3
+
+Although current releases are much improved, historically the use of deep
+hierarchies has had a significant negative impact on the kernel scalability. The
+legacy libvirt cgroups layout highlighted these problems, to the detriment of
+the performance of virtual machines and containers.
diff --git a/docs/meson.build b/docs/meson.build
index 5f26d40082..bb7e27e031 100644
--- a/docs/meson.build
+++ b/docs/meson.build
@@ -19,7 +19,6 @@ docs_assets = [
docs_html_in_files = [
'404',
- 'cgroups',
'csharp',
'dbus',
'docs',
@@ -70,6 +69,7 @@ docs_rst_files = [
'best-practices',
'bindings',
'bugs',
+ 'cgroups',
'ci',
'coding-style',
'committer-guidelines',
--
2.35.1
On Mon, Mar 28, 2022 at 02:10:17PM +0200, Peter Krempa wrote: > Signed-off-by: Peter Krempa <pkrempa@redhat.com> > --- Reviewed-by: Erik Skultety <eskultet@redhat.com>
The first sentence was moved up a paragraph to stop treating the first sub-heading as a page subtitle. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- docs/drvtest.html.in | 27 --------------------------- docs/drvtest.rst | 21 +++++++++++++++++++++ docs/meson.build | 2 +- 3 files changed, 22 insertions(+), 28 deletions(-) delete mode 100644 docs/drvtest.html.in create mode 100644 docs/drvtest.rst diff --git a/docs/drvtest.html.in b/docs/drvtest.html.in deleted file mode 100644 index 6884184e6f..0000000000 --- a/docs/drvtest.html.in +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html> -<html xmlns="http://www.w3.org/1999/xhtml"> - <body> - <h1>Test "mock" driver</h1> - - <h2>Connections to Test driver</h2> - - <p> - The libvirt Test driver is a per-process fake hypervisor driver, - with a driver name of 'test'. The driver maintains all its state - in memory. It can start with a pre-configured default config, or - be given a path to an alternate config. Some example connection URIs - for the libvirt driver are: - </p> - -<pre> -test:///default (local access, default config) -test:///path/to/driver/config.xml (local access, custom config) -test+unix:///default (local access, default config, via daemon) -test://example.com/default (remote access, TLS/x509) -test+tcp://example.com/default (remote access, SASl/Kerberos) -test+ssh://root@example.com/default (remote access, SSH tunnelled) -</pre> - - </body> -</html> diff --git a/docs/drvtest.rst b/docs/drvtest.rst new file mode 100644 index 0000000000..99578a47ba --- /dev/null +++ b/docs/drvtest.rst @@ -0,0 +1,21 @@ +================== +Test "mock" driver +================== + +The libvirt ``test`` driver is a per-process fake hypervisor driver. + +Connections to Test driver +-------------------------- + +The driver maintains all its state in memory. It can start with +a pre-configured default config, or be given a path to an alternate config. Some +example connection URIs for the libvirt driver are: + +:: + + test:///default (local access, default config) + test:///path/to/driver/config.xml (local access, custom config) + test+unix:///default (local access, default config, via daemon) + test://example.com/default (remote access, TLS/x509) + test+tcp://example.com/default (remote access, SASl/Kerberos) + test+ssh://root@example.com/default (remote access, SSH tunnelled) diff --git a/docs/meson.build b/docs/meson.build index 8499b3d595..5995b2ec91 100644 --- a/docs/meson.build +++ b/docs/meson.build @@ -22,7 +22,6 @@ docs_html_in_files = [ 'csharp', 'dbus', 'docs', - 'drvtest', 'drvvbox', 'drvvirtuozzo', 'drvvmware', @@ -81,6 +80,7 @@ docs_rst_files = [ 'drvopenvz', 'drvqemu', 'drvsecret', + 'drvtest', 'errors', 'formatbackup', 'formatcheckpoint', -- 2.35.1
On Mon, Mar 28, 2022 at 02:10:25PM +0200, Peter Krempa wrote: > The first sentence was moved up a paragraph to stop treating the first > sub-heading as a page subtitle. > > Signed-off-by: Peter Krempa <pkrempa@redhat.com> > --- Reviewed-by: Erik Skultety <eskultet@redhat.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- docs/drvvirtuozzo.html.in | 70 --------------------------------------- docs/drvvirtuozzo.rst | 60 +++++++++++++++++++++++++++++++++ docs/meson.build | 2 +- 3 files changed, 61 insertions(+), 71 deletions(-) delete mode 100644 docs/drvvirtuozzo.html.in create mode 100644 docs/drvvirtuozzo.rst diff --git a/docs/drvvirtuozzo.html.in b/docs/drvvirtuozzo.html.in deleted file mode 100644 index e47f72bad1..0000000000 --- a/docs/drvvirtuozzo.html.in +++ /dev/null @@ -1,70 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html> -<html xmlns="http://www.w3.org/1999/xhtml"> - <body> - <h1>Virtuozzo driver</h1> - <ul id="toc"></ul> - <p> - The libvirt vz driver can manage Virtuozzo starting from version 6.0. - </p> - - - <h2><a id="project">Project Links</a></h2> - <ul> - <li> - The <a href="https://www.virtuozzo.com/">Virtuozzo</a> Solution. - </li> - </ul> - - - <h2><a id="uri">Connections to the Virtuozzo driver</a></h2> - <p> - The libvirt Virtuozzo driver is a single-instance privileged driver, with a driver name of 'virtuozzo'. Some example connection URIs for the libvirt driver are: - </p> -<pre> -vz:///system (local access) -vz+unix:///system (local access) -vz://example.com/system (remote access, TLS/x509) -vz+tcp://example.com/system (remote access, SASl/Kerberos) -vz+ssh://root@example.com/system (remote access, SSH tunnelled) -</pre> - - <h2><a id="example">Example guest domain XML configuration</a></h2> - - <p> - Virtuozzo driver require at least one hard disk for new domains - at this time. It is used for defining directory, where VM should - be created. - </p> - -<pre> -<domain type='vz'> - <name>demo</name> - <uuid>54cdecad-4492-4e31-a209-33cc21d64057</uuid> - <description>some description</description> - <memory unit='KiB'>1048576</memory> - <currentMemory unit='KiB'>1048576</currentMemory> - <vcpu placement='static'>2</vcpu> - <os> - <type arch='x86_64'>hvm</type> - </os> - <clock offset='utc'/> - <on_poweroff>destroy</on_poweroff> - <on_reboot>destroy</on_reboot> - <on_crash>destroy</on_crash> - <devices> - <disk type='file' device='disk'> - <source file='/storage/vol1'/> - <target dev='hda'/> - </disk> - <video> - <model type='vga' vram='33554432' heads='1'> - <acceleration accel3d='no' accel2d='no'/> - </model> - </video> - </devices> -</domain> - -</pre> - -</body></html> diff --git a/docs/drvvirtuozzo.rst b/docs/drvvirtuozzo.rst new file mode 100644 index 0000000000..fbb6ab0e71 --- /dev/null +++ b/docs/drvvirtuozzo.rst @@ -0,0 +1,60 @@ +================ +Virtuozzo driver +================ + +The libvirt vz driver can manage Virtuozzo starting from version 6.0. + +Project Links +------------- + +- The `Virtuozzo <https://www.virtuozzo.com/>`__ Solution. + +Connections to the Virtuozzo driver +----------------------------------- + +The libvirt Virtuozzo driver is a single-instance privileged driver, with a +driver name of 'virtuozzo'. Some example connection URIs for the libvirt driver +are: + +:: + + vz:///system (local access) + vz+unix:///system (local access) + vz://example.com/system (remote access, TLS/x509) + vz+tcp://example.com/system (remote access, SASl/Kerberos) + vz+ssh://root@example.com/system (remote access, SSH tunnelled) + +Example guest domain XML configuration +-------------------------------------- + +Virtuozzo driver require at least one hard disk for new domains at this time. It +is used for defining directory, where VM should be created. + +:: + + <domain type='vz'> + <name>demo</name> + <uuid>54cdecad-4492-4e31-a209-33cc21d64057</uuid> + <description>some description</description> + <memory unit='KiB'>1048576</memory> + <currentMemory unit='KiB'>1048576</currentMemory> + <vcpu placement='static'>2</vcpu> + <os> + <type arch='x86_64'>hvm</type> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>destroy</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <source file='/storage/vol1'/> + <target dev='hda'/> + </disk> + <video> + <model type='vga' vram='33554432' heads='1'> + <acceleration accel3d='no' accel2d='no'/> + </model> + </video> + </devices> + </domain> diff --git a/docs/meson.build b/docs/meson.build index 954c4e4b96..99732f57ba 100644 --- a/docs/meson.build +++ b/docs/meson.build @@ -22,7 +22,6 @@ docs_html_in_files = [ 'csharp', 'dbus', 'docs', - 'drvvirtuozzo', 'drvvmware', 'drvxen', 'firewall', @@ -81,6 +80,7 @@ docs_rst_files = [ 'drvsecret', 'drvtest', 'drvvbox', + 'drvvirtuozzo', 'errors', 'formatbackup', 'formatcheckpoint', -- 2.35.1
On Mon, Mar 28, 2022 at 02:10:27PM +0200, Peter Krempa wrote: > Signed-off-by: Peter Krempa <pkrempa@redhat.com> > --- Reviewed-by: Erik Skultety <eskultet@redhat.com>
Note that if we want to preserve the link from the code block hilighting 'virConnectGetStoragePoolCapabilities' we'd need to re-stylize it as rST doesn't support nesting of links into preformatted code blocks. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- docs/formatstoragecaps.html.in | 95 ---------------------------------- docs/formatstoragecaps.rst | 81 +++++++++++++++++++++++++++++ docs/meson.build | 2 +- 3 files changed, 82 insertions(+), 96 deletions(-) delete mode 100644 docs/formatstoragecaps.html.in create mode 100644 docs/formatstoragecaps.rst diff --git a/docs/formatstoragecaps.html.in b/docs/formatstoragecaps.html.in deleted file mode 100644 index a9ecc371fa..0000000000 --- a/docs/formatstoragecaps.html.in +++ /dev/null @@ -1,95 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html> -<html xmlns="http://www.w3.org/1999/xhtml"> - <body> - <h1>Storage Pool Capabilities XML format</h1> - - <ul id="toc"></ul> - - <h2><a id="Overview">Overview</a></h2> - - <p>The Storage Pool Capabilities XML will provide the information - to determine what types of Storage Pools exist, whether the pool is - supported, and if relevant the source format types, the required - source elements, and the target volume format types. </p> - - <h2><a id="elements">Element and attribute overview</a></h2> - - <p>A query interface was added to the virConnect API's to retrieve the - XML listing of the set of Storage Pool Capabilities - (<span class="since">Since 5.2.0</span>):</p> - -<pre> -<a href="/html/libvirt-libvirt-storage.html#virConnectGetStoragePoolCapabilities">virConnectGetStoragePoolCapabilities</a> -</pre> - - <p>The root element that emulator capability XML document starts with is - named <code>storagepoolCapabilities</code>. There will be any number of - <code>pool</code> child elements with two attributes <code>type</code> - and <code>supported</code>. Each <code>pool</code> element may have - a <code>poolOptions</code> or <code>volOptions</code> subelements to - describe the available features. Sample XML output is:</p> - -<pre> -<storagepoolCapabilities> - <pool type='dir' supported='yes'> - <volOptions> - <defaultFormat type='raw'</> - <enum name='targetFormatType'> - <value>none</value> - <value>raw</value> - ... - </enum> - </volOptions> - </pool> - <pool type='fs' supported='yes'> - <poolOptions> - <defaultFormat type='auto'</> - <enum name='sourceFormatType'> - <value>auto</value> - <value>ext2</value> - ... - </enum> - </poolOptions> - <volOptions> - <defaultFormat type='raw'</> - <enum name='targetFormatType'> - <value>none</value> - <value>raw</value> - ... - </enum> - </volOptions> - </pool> - ... -</storagepoolCapabilities> -</pre> - - <p>The following section describes subelements of the - <code>poolOptions</code> and <code>volOptions</code> subelements </p>: - - <dl> - <dt><code>defaultFormat</code></dt> - <dd>For the <code>poolOptions</code>, the <code>type</code> attribute - describes the default format name used for the pool source. For the - <code>volOptions</code>, the <code>type</code> attribute describes - the default volume name used for each volume. - </dd> - <dl> - <dt><code>enum</code></dt> - <dd>Each enum uses a name from the list below with any number of - <code>value</code> value subelements describing the valid values. - <dl> - <dt><code>sourceFormatType</code></dt> - <dd>Lists all the possible <code>poolOptions</code> source - pool format types. - </dd> - <dt><code>targetFormatType</code></dt> - <dd>Lists all the possible <code>volOptions</code> target volume - format types. - </dd> - </dl> - </dd> - </dl> - </dl> - </body> -</html> diff --git a/docs/formatstoragecaps.rst b/docs/formatstoragecaps.rst new file mode 100644 index 0000000000..32cd392931 --- /dev/null +++ b/docs/formatstoragecaps.rst @@ -0,0 +1,81 @@ +.. role:: since + +==================================== +Storage Pool Capabilities XML format +==================================== + +.. contents:: + +Overview +-------- + +The Storage Pool Capabilities XML will provide the information to determine what +types of Storage Pools exist, whether the pool is supported, and if relevant the +source format types, the required source elements, and the target volume format +types. + +Element and attribute overview +------------------------------ + +A query interface was added to the virConnect API's to retrieve the XML listing +of the set of Storage Pool Capabilities ( :since:`Since 5.2.0` ): + +:: + + virConnectGetStoragePoolCapabilities + +The root element that emulator capability XML document starts with is named +``storagepoolCapabilities``. There will be any number of ``pool`` child elements +with two attributes ``type`` and ``supported``. Each ``pool`` element may have a +``poolOptions`` or ``volOptions`` subelements to describe the available +features. Sample XML output is: + +:: + + <storagepoolCapabilities> + <pool type='dir' supported='yes'> + <volOptions> + <defaultFormat type='raw'</> + <enum name='targetFormatType'> + <value>none</value> + <value>raw</value> + ... + </enum> + </volOptions> + </pool> + <pool type='fs' supported='yes'> + <poolOptions> + <defaultFormat type='auto'</> + <enum name='sourceFormatType'> + <value>auto</value> + <value>ext2</value> + ... + </enum> + </poolOptions> + <volOptions> + <defaultFormat type='raw'</> + <enum name='targetFormatType'> + <value>none</value> + <value>raw</value> + ... + </enum> + </volOptions> + </pool> + ... + </storagepoolCapabilities> + +The following section describes subelements of the ``poolOptions`` and +``volOptions`` subelements + +``defaultFormat`` + For the ``poolOptions``, the ``type`` attribute describes the default format + name used for the pool source. For the ``volOptions``, the ``type`` attribute + describes the default volume name used for each volume. +``enum`` + Each enum uses a name from the list below with any number of ``value`` value + subelements describing the valid values. + + ``sourceFormatType`` + Lists all the possible ``poolOptions`` source pool format types. + ``targetFormatType`` + Lists all the possible ``volOptions`` target volume format types. diff --git a/docs/meson.build b/docs/meson.build index bb1359aacd..b911292480 100644 --- a/docs/meson.build +++ b/docs/meson.build @@ -25,7 +25,6 @@ docs_html_in_files = [ 'formatnetwork', 'formatnode', 'formatnwfilter', - 'formatstoragecaps', 'formatstorageencryption', 'hooks', 'index', @@ -88,6 +87,7 @@ docs_rst_files = [ 'formatsecret', 'formatsnapshot', 'formatstorage', + 'formatstoragecaps', 'glib-adoption', 'goals', 'governance', -- 2.35.1
On Mon, Mar 28, 2022 at 02:10:36PM +0200, Peter Krempa wrote: > Note that if we want to preserve the link from the code block hilighting > 'virConnectGetStoragePoolCapabilities' we'd need to re-stylize it as rST > doesn't support nesting of links into preformatted code blocks. > > Signed-off-by: Peter Krempa <pkrempa@redhat.com> > --- ... > +A query interface was added to the virConnect API's to retrieve the XML listing > +of the set of Storage Pool Capabilities ( :since:`Since 5.2.0` ): > + > +:: > + > + virConnectGetStoragePoolCapabilities Here too it should IMO be a ref instead of verbatim. Reviewed-by: Erik Skultety <eskultet@redhat.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
docs/logging.html.in | 243 -------------------------------------------
docs/logging.rst | 243 +++++++++++++++++++++++++++++++++++++++++++
docs/meson.build | 2 +-
3 files changed, 244 insertions(+), 244 deletions(-)
delete mode 100644 docs/logging.html.in
create mode 100644 docs/logging.rst
diff --git a/docs/logging.html.in b/docs/logging.html.in
deleted file mode 100644
index 1052b763a0..0000000000
--- a/docs/logging.html.in
+++ /dev/null
@@ -1,243 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml">
- <body>
- <h1 >Logging in the library and the daemon</h1>
-
- <p>Libvirt includes logging facilities starting from version 0.6.0,
- this complements the <a href="errors.html">error handling</a>
- mechanism and APIs to allow tracing through the execution of the
- library as well as in the libvirtd daemon.</p>
-
- <ul id="toc"/>
-
- <h2>
- <a id="log_library">Logging in the library</a>
- </h2>
- <p>The logging functionalities in libvirt are based on 3 key concepts,
- similar to the one present in other generic logging facilities like
- log4j:</p>
- <ul>
- <li><b>log messages</b>: they are information generated at runtime by
- the libvirt code. Each message includes a priority level (DEBUG = 1,
- INFO = 2, WARNING = 3, ERROR = 4), a category, function name and
- line number, indicating where it originated from, and finally
- a formatted message. In addition the library adds a timestamp
- at the beginning of the message</li>
- <li><b>log filters</b>: a set of patterns and priorities to accept
- or reject a log message. If the message category matches a filter,
- the message priority is compared to the filter priority, if lower
- the message is discarded, if higher the message is output. If
- no filter matches, then a general priority level is applied to
- all remaining messages. This allows, for example, capturing all
- debug messages for the QEMU driver, but otherwise only allowing
- errors to show up from other parts.</li>
- <li><b>log outputs</b>: once a message has gone through filtering a set of
- output defines where to send the message, they can also filter
- based on the priority, for example it may be useful to output
- all messages to a debugging file but only allow errors to be
- logged through syslog.</li>
- </ul>
-
- <h2>
- <a id="log_config">Configuring logging in the library</a>
- </h2>
- <p>The library configuration of logging is through 3 environment variables
- allowing to control the logging behaviour:</p>
- <ul>
- <li>LIBVIRT_DEBUG: it can take the four following values:
- <ul>
- <li>1 or "debug": asking the library to log every message emitted,
- though the filters can be used to avoid filling up the output</li>
- <li>2 or "info": log all non-debugging information</li>
- <li>3 or "warn": log warnings and errors, that's the default value</li>
- <li>4 or "error": log only error messages</li>
- </ul></li>
- <li>LIBVIRT_LOG_FILTERS: defines logging filters</li>
- <li>LIBVIRT_LOG_OUTPUTS: defines logging outputs</li>
- </ul>
- <p>Note that, for example, setting LIBVIRT_DEBUG= is the same as unset. If
- you specify an invalid value, it will be ignored with a warning. If you
- have an error in a filter or output string, some of the settings may be
- applied up to the point at which libvirt encountered the error.</p>
- <h2>
- <a id="log_daemon">Logging in the daemon</a>
- </h2>
- <p>Similarly the daemon logging behaviour can be tuned using 3 config
- variables, stored in the configuration file:</p>
- <ul>
- <li>log_level: accepts the following values:
- <ul>
- <li>4: only errors</li>
- <li>3: warnings and errors</li>
- <li>2: information, warnings and errors</li>
- <li>1: debug and everything</li>
- </ul></li>
- <li>log_filters: defines logging filters</li>
- <li>log_outputs: defines logging outputs</li>
- </ul>
- <p>When starting the libvirt daemon, any logging environment variable
- settings will override settings in the config file. Command line options
- take precedence over all. If no outputs are defined for libvirtd, it
- will try to use</p>
- <ul>
- <li>0.10.0 or later: systemd journal, if <code>/run/systemd/journal/socket</code> exists</li>
- <li>0.9.0 or later: file <code>/var/log/libvirt/libvirtd.log</code> if running as a daemon</li>
- <li>before 0.9.0: syslog if running as a daemon</li>
- <li>all versions: to stderr stream if running in the foreground</li>
- </ul>
- <p>Libvirtd does not reload its logging configuration when issued a SIGHUP.
- If you want to reload the configuration, you must do a <code>service
- libvirtd restart</code> or manually stop and restart the daemon
- yourself.</p>
- <p>Starting from 0.9.0, the daemon can save all the content of the debug
- buffer to the defined error channels (or /var/log/libvirt/libvirtd.log
- by default) in case of crash, this can also be activated explicitly
- for debugging purposes by sending the daemon a USR2 signal:</p>
- <pre>killall -USR2 libvirtd</pre>
- <h2>
- <a id="log_syntax">Syntax for filters and output values</a>
- </h2>
- <p>The syntax for filters and outputs is the same for both types of
- variables.</p>
- <p>The format for a filter is:</p>
- <pre>
-x:name</pre>
- <p>where <code>name</code> is a string which is matched against
- the category given in the VIR_LOG_INIT() at the top of each
- libvirt source file, e.g., <code>remote</code>, <code>qemu</code>,
- or <code>util.json</code> (the name in the filter can be a
- substring of the full category name, in order to match multiple
- similar categories), and <code>x</code> is the minimal
- level where matching messages should be logged:</p>
- <ul>
- <li>1: DEBUG</li>
- <li>2: INFO</li>
- <li>3: WARNING</li>
- <li>4: ERROR</li>
- </ul>
- <p>Multiple filters can be defined in a single string, they just need to be
- separated by spaces, e.g: <code>"3:remote 4:event"</code> to only get
- warning or errors from the remote layer and only errors from the event
- layer.</p>
- <p>If you specify a log priority in a filter that is below the default log
- priority level, messages that match that filter will still be logged,
- while others will not. In order to see those messages, you must also have
- an output defined that includes the priority level of your filter.</p>
- <p>The format for an output can be one of the following forms:</p>
- <ul>
- <li><code>x:stderr</code> output goes to stderr</li>
- <li><code>x:syslog:name</code> use syslog for the output and use the
- given <code>name</code> as the ident</li>
- <li><code>x:file:file_path</code> output to a file, with the given
- filepath</li>
- <li><code>x:journald</code> output goes to systemd journal</li>
- </ul>
- <p>In all cases the x prefix is the minimal level, acting as a filter:</p>
- <ul>
- <li>1: DEBUG</li>
- <li>2: INFO</li>
- <li>3: WARNING</li>
- <li>4: ERROR</li>
- </ul>
- <p>Multiple output can be defined, they just need to be separated by
- spaces, e.g.: <code>"3:syslog:libvirtd 1:file:/tmp/libvirt.log"</code>
- will log all warnings and errors to syslog under the libvirtd ident
- but also log all debug and information included in the
- file <code>/tmp/libvirt.log</code></p>
-
- <h2><a id="journald">Systemd journal fields</a></h2>
-
- <p>
- When logging to the systemd journal, the following fields
- are defined, in addition to any automatically recorded
- <a href="https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html">standard fields</a>:
- </p>
-
- <dl>
- <dt><code>MESSAGE</code></dt>
- <dd>The log message string</dd>
- <dt><code>PRIORITY</code></dt>
- <dd>The log priority value</dd>
- <dt><code>LIBVIRT_SOURCE</code></dt>
- <dd>The source type, one of "file", "error", "audit", "trace", "library"</dd>
- <dt><code>CODE_FILE</code></dt>
- <dd>The name of the file emitting the log record</dd>
- <dt><code>CODE_LINE</code></dt>
- <dd>The line number of the file emitting the log record</dd>
- <dt><code>CODE_FUNC</code></dt>
- <dd>The name of the function emitting the log record</dd>
- <dt><code>LIBVIRT_DOMAIN</code></dt>
- <dd>The libvirt error domain (values from virErrorDomain enum), if LIBVIRT_SOURCE="error"</dd>
- <dt><code>LIBVIRT_CODE</code></dt>
- <dd>The libvirt error code (values from virErrorCode enum), if LIBVIRT_SOURCE="error"</dd>
- </dl>
-
- <h3><a id="journaldids">Well known message ID values</a></h3>
-
- <p>
- Certain areas of the code will emit log records tagged with well known
- unique id values, which are guaranteed never to change in the future.
- This allows applications to identify critical log events without doing
- string matching on the <code>MESSAGE</code> field.
- </p>
-
- <dl>
- <dt><code>MESSAGE_ID=8ae2f3fb-2dbe-498e-8fbd-012d40afa361</code></dt>
- <dd>Generated by the QEMU driver when it identifies a QEMU system
- emulator binary, but is unable to extract information about its
- capabilities. This is usually an indicator of a broken QEMU
- build or installation. When this is emitted, the <code>LIBVIRT_QEMU_BINARY</code>
- message field will provide the full path of the QEMU binary that failed.
- </dd>
- </dl>
-
- <p>
- The <code>journalctl</code> command can be used to search the journal
- matching on specific message ID values
- </p>
-
- <pre>
-$ journalctl MESSAGE_ID=8ae2f3fb-2dbe-498e-8fbd-012d40afa361 --output=json
-{ ...snip...
- "LIBVIRT_SOURCE" : "file",
- "PRIORITY" : "3",
- "CODE_FILE" : "qemu/qemu_capabilities.c",
- "CODE_LINE" : "2770",
- "CODE_FUNC" : "virQEMUCapsLogProbeFailure",
- "MESSAGE_ID" : "8ae2f3fb-2dbe-498e-8fbd-012d40afa361",
- "LIBVIRT_QEMU_BINARY" : "/bin/qemu-system-xtensa",
- "MESSAGE" : "Failed to probe capabilities for /bin/qemu-system-xtensa:" \
- "internal error: Child process (LC_ALL=C LD_LIBRARY_PATH=/home/berrange" \
- "/src/virt/libvirt/src/.libs PATH=/usr/lib64/ccache:/usr/local/sbin:" \
- "/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin HOME=/root " \
- "USER=root LOGNAME=root /bin/qemu-system-xtensa -help) unexpected " \
- "exit status 127: /bin/qemu-system-xtensa: error while loading shared " \
- "libraries: libglapi.so.0: cannot open shared object file: No such " \
- "file or directory\n" }
- </pre>
-
- <h2>
- <a id="log_examples">Examples</a>
- </h2>
- <p>For example setting up the following:</p>
- <pre>export LIBVIRT_DEBUG=1
-export LIBVIRT_LOG_OUTPUTS="1:file:virsh.log"</pre>
- <p>and then running virsh will accumulate the logs in the
- <code>virsh.log</code> file in a way similar to:</p>
- <pre>14:29:04.771: debug : virInitialize:278 : register drivers
-14:29:04.771: debug : virRegisterDriver:618 : registering Test as driver 0</pre>
- <p>the messages are timestamped, there is also the level recorded,
- if debug the name of the function is also printed and then the formatted
- message. This should be sufficient to at least get a precise idea of
- what is happening and where things are going wrong, allowing to then
- put the correct breakpoints when running under a debugger.</p>
- <p>To activate full debug of the libvirt entry points, utility
- functions and the QEMU/KVM driver, set:</p>
- <pre>log_filters="1:libvirt 1:util 1:qemu"
-log_outputs="1:file:/var/log/libvirt/libvirtd.log"</pre>
- <p>in libvirtd.conf and restart the daemon will allow to
- gather a copious amount of debugging traces for the operations done
- in those areas.</p>
- </body>
-</html>
diff --git a/docs/logging.rst b/docs/logging.rst
new file mode 100644
index 0000000000..204176c6f5
--- /dev/null
+++ b/docs/logging.rst
@@ -0,0 +1,243 @@
+=====================================
+Logging in the library and the daemon
+=====================================
+
+.. contents::
+
+Libvirt includes logging facilities starting from version 0.6.0, this
+complements the `error handling <errors.html>`__ mechanism and APIs to allow
+tracing through the execution of the library as well as in the libvirtd daemon.
+
+Logging in the library
+----------------------
+
+The logging functionalities in libvirt are based on 3 key concepts, similar to
+the one present in other generic logging facilities like log4j:
+
+- **log messages**: they are information generated at runtime by the libvirt
+ code. Each message includes a priority level (DEBUG = 1, INFO = 2, WARNING =
+ 3, ERROR = 4), a category, function name and line number, indicating where it
+ originated from, and finally a formatted message. In addition the library
+ adds a timestamp at the beginning of the message
+- **log filters**: a set of patterns and priorities to accept or reject a log
+ message. If the message category matches a filter, the message priority is
+ compared to the filter priority, if lower the message is discarded, if higher
+ the message is output. If no filter matches, then a general priority level is
+ applied to all remaining messages. This allows, for example, capturing all
+ debug messages for the QEMU driver, but otherwise only allowing errors to
+ show up from other parts.
+- **log outputs**: once a message has gone through filtering a set of output
+ defines where to send the message, they can also filter based on the
+ priority, for example it may be useful to output all messages to a debugging
+ file but only allow errors to be logged through syslog.
+
+Configuring logging in the library
+----------------------------------
+
+The library configuration of logging is through 3 environment variables allowing
+to control the logging behaviour:
+
+- LIBVIRT_DEBUG: it can take the four following values:
+
+ - 1 or "debug": asking the library to log every message emitted, though the
+ filters can be used to avoid filling up the output
+ - 2 or "info": log all non-debugging information
+ - 3 or "warn": log warnings and errors, that's the default value
+ - 4 or "error": log only error messages
+
+- LIBVIRT_LOG_FILTERS: defines logging filters
+- LIBVIRT_LOG_OUTPUTS: defines logging outputs
+
+Note that, for example, setting LIBVIRT_DEBUG= is the same as unset. If you
+specify an invalid value, it will be ignored with a warning. If you have an
+error in a filter or output string, some of the settings may be applied up to
+the point at which libvirt encountered the error.
+
+Logging in the daemon
+---------------------
+
+Similarly the daemon logging behaviour can be tuned using 3 config variables,
+stored in the configuration file:
+
+- log_level: accepts the following values:
+
+ - 4: only errors
+ - 3: warnings and errors
+ - 2: information, warnings and errors
+ - 1: debug and everything
+
+- log_filters: defines logging filters
+- log_outputs: defines logging outputs
+
+When starting the libvirt daemon, any logging environment variable settings will
+override settings in the config file. Command line options take precedence over
+all. If no outputs are defined for libvirtd, it will try to use
+
+- 0.10.0 or later: systemd journal, if ``/run/systemd/journal/socket`` exists
+- 0.9.0 or later: file ``/var/log/libvirt/libvirtd.log`` if running as a daemon
+- before 0.9.0: syslog if running as a daemon
+- all versions: to stderr stream if running in the foreground
+
+Libvirtd does not reload its logging configuration when issued a SIGHUP. If you
+want to reload the configuration, you must do a
+``service libvirtd restart`` or manually stop and restart the daemon
+yourself.
+
+Starting from 0.9.0, the daemon can save all the content of the debug buffer to
+the defined error channels (or /var/log/libvirt/libvirtd.log by default) in case
+of crash, this can also be activated explicitly for debugging purposes by
+sending the daemon a USR2 signal:
+
+::
+
+ killall -USR2 libvirtd
+
+Syntax for filters and output values
+------------------------------------
+
+The syntax for filters and outputs is the same for both types of variables.
+
+The format for a filter is:
+
+::
+
+ x:name
+
+where ``name`` is a string which is matched against the category given in the
+VIR_LOG_INIT() at the top of each libvirt source file, e.g., ``remote``,
+``qemu``, or ``util.json`` (the name in the filter can be a substring of the
+full category name, in order to match multiple similar categories), and ``x`` is
+the minimal level where matching messages should be logged:
+
+- 1: DEBUG
+- 2: INFO
+- 3: WARNING
+- 4: ERROR
+
+Multiple filters can be defined in a single string, they just need to be
+separated by spaces, e.g: ``"3:remote 4:event"`` to only get warning or errors
+from the remote layer and only errors from the event layer.
+
+If you specify a log priority in a filter that is below the default log priority
+level, messages that match that filter will still be logged, while others will
+not. In order to see those messages, you must also have an output defined that
+includes the priority level of your filter.
+
+The format for an output can be one of the following forms:
+
+- ``x:stderr`` output goes to stderr
+- ``x:syslog:name`` use syslog for the output and use the given ``name`` as the
+ ident
+- ``x:file:file_path`` output to a file, with the given filepath
+- ``x:journald`` output goes to systemd journal
+
+In all cases the x prefix is the minimal level, acting as a filter:
+
+- 1: DEBUG
+- 2: INFO
+- 3: WARNING
+- 4: ERROR
+
+Multiple output can be defined, they just need to be separated by spaces, e.g.:
+``"3:syslog:libvirtd 1:file:/tmp/libvirt.log"`` will log all warnings and errors
+to syslog under the libvirtd ident but also log all debug and information
+included in the file ``/tmp/libvirt.log``
+
+Systemd journal fields
+----------------------
+
+When logging to the systemd journal, the following fields are defined, in
+addition to any automatically recorded `standard
+fields <https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html>`__:
+
+``MESSAGE``
+ The log message string
+``PRIORITY``
+ The log priority value
+``LIBVIRT_SOURCE``
+ The source type, one of "file", "error", "audit", "trace", "library"
+``CODE_FILE``
+ The name of the file emitting the log record
+``CODE_LINE``
+ The line number of the file emitting the log record
+``CODE_FUNC``
+ The name of the function emitting the log record
+``LIBVIRT_DOMAIN``
+ The libvirt error domain (values from virErrorDomain enum), if
+ LIBVIRT_SOURCE="error"
+``LIBVIRT_CODE``
+ The libvirt error code (values from virErrorCode enum), if
+ LIBVIRT_SOURCE="error"
+
+Well known message ID values
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Certain areas of the code will emit log records tagged with well known unique id
+values, which are guaranteed never to change in the future. This allows
+applications to identify critical log events without doing string matching on
+the ``MESSAGE`` field.
+
+``MESSAGE_ID=8ae2f3fb-2dbe-498e-8fbd-012d40afa361``
+ Generated by the QEMU driver when it identifies a QEMU system emulator
+ binary, but is unable to extract information about its capabilities. This is
+ usually an indicator of a broken QEMU build or installation. When this is
+ emitted, the ``LIBVIRT_QEMU_BINARY`` message field will provide the full path
+ of the QEMU binary that failed.
+
+The ``journalctl`` command can be used to search the journal matching on
+specific message ID values
+
+::
+
+ $ journalctl MESSAGE_ID=8ae2f3fb-2dbe-498e-8fbd-012d40afa361 --output=json
+ { ...snip...
+ "LIBVIRT_SOURCE" : "file",
+ "PRIORITY" : "3",
+ "CODE_FILE" : "qemu/qemu_capabilities.c",
+ "CODE_LINE" : "2770",
+ "CODE_FUNC" : "virQEMUCapsLogProbeFailure",
+ "MESSAGE_ID" : "8ae2f3fb-2dbe-498e-8fbd-012d40afa361",
+ "LIBVIRT_QEMU_BINARY" : "/bin/qemu-system-xtensa",
+ "MESSAGE" : "Failed to probe capabilities for /bin/qemu-system-xtensa:" \
+ "internal error: Child process (LC_ALL=C LD_LIBRARY_PATH=/home/berrange" \
+ "/src/virt/libvirt/src/.libs PATH=/usr/lib64/ccache:/usr/local/sbin:" \
+ "/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin HOME=/root " \
+ "USER=root LOGNAME=root /bin/qemu-system-xtensa -help) unexpected " \
+ "exit status 127: /bin/qemu-system-xtensa: error while loading shared " \
+ "libraries: libglapi.so.0: cannot open shared object file: No such " \
+ "file or directory\n" }
+
+Examples
+--------
+
+For example setting up the following:
+
+::
+
+ export LIBVIRT_DEBUG=1
+ export LIBVIRT_LOG_OUTPUTS="1:file:virsh.log"
+
+and then running virsh will accumulate the logs in the ``virsh.log`` file in a
+way similar to:
+
+::
+
+ 14:29:04.771: debug : virInitialize:278 : register drivers
+ 14:29:04.771: debug : virRegisterDriver:618 : registering Test as driver 0
+
+the messages are timestamped, there is also the level recorded, if debug the
+name of the function is also printed and then the formatted message. This should
+be sufficient to at least get a precise idea of what is happening and where
+things are going wrong, allowing to then put the correct breakpoints when
+running under a debugger.
+
+To activate full debug of the libvirt entry points, utility functions and the
+QEMU/KVM driver, set:
+
+::
+
+ log_filters="1:libvirt 1:util 1:qemu"
+ log_outputs="1:file:/var/log/libvirt/libvirtd.log"
+
+in libvirtd.conf and restart the daemon will allow to gather a copious amount of
+debugging traces for the operations done in those areas.
diff --git a/docs/meson.build b/docs/meson.build
index e1b618438c..f6e51353f0 100644
--- a/docs/meson.build
+++ b/docs/meson.build
@@ -27,7 +27,6 @@ docs_html_in_files = [
'formatnwfilter',
'index',
'internals',
- 'logging',
'php',
'python',
'remote',
@@ -94,6 +93,7 @@ docs_rst_files = [
'java',
'libvirt-go',
'libvirt-go-xml',
+ 'logging',
'macos',
'migration',
'newreposetup',
--
2.35.1
On Mon, Mar 28, 2022 at 02:10:42PM +0200, Peter Krempa wrote: > Signed-off-by: Peter Krempa <pkrempa@redhat.com> > --- Reviewed-by: Erik Skultety <eskultet@redhat.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- docs/meson.build | 2 +- docs/php.html.in | 28 ---------------------------- docs/php.rst | 23 +++++++++++++++++++++++ 3 files changed, 24 insertions(+), 29 deletions(-) delete mode 100644 docs/php.html.in create mode 100644 docs/php.rst diff --git a/docs/meson.build b/docs/meson.build index f6e51353f0..c1def26655 100644 --- a/docs/meson.build +++ b/docs/meson.build @@ -27,7 +27,6 @@ docs_html_in_files = [ 'formatnwfilter', 'index', 'internals', - 'php', 'python', 'remote', 'storage', @@ -100,6 +99,7 @@ docs_rst_files = [ 'nss', 'pci-addresses', 'pci-hotplug', + 'php', 'platforms', 'programming-languages', 'securityprocess', diff --git a/docs/php.html.in b/docs/php.html.in deleted file mode 100644 index 9340c81eec..0000000000 --- a/docs/php.html.in +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html> -<html xmlns="http://www.w3.org/1999/xhtml"> - <body> - <h1>PHP API bindings</h1> - -<h2>Presentation</h2> - <p>The libvirt-php, originally called php-libvirt, is the PHP API bindings for - the libvirt virtualization toolkit originally developed by Radek Hladik.</p> - -<h2>Getting the source</h2> -<p> The PHP bindings code source is now maintained in a <a -href="https://git-scm.com/">git</a> repository available on -<a href="https://gitlab.com/libvirt/libvirt-php">gitlab.com</a>: -</p> -<pre> -git clone https://gitlab.com/libvirt/libvirt-php.git -</pre> - -<p></p> -<h2>Project pages</h2> -<p>Since February 2011 the project has its own pages hosted at libvirt.org. For more information on the project - please refer to <a href="https://libvirt.org/php">https://libvirt.org/php</a>. - -</p> - - </body> -</html> diff --git a/docs/php.rst b/docs/php.rst new file mode 100644 index 0000000000..36f7c44bed --- /dev/null +++ b/docs/php.rst @@ -0,0 +1,23 @@ +================ +PHP API bindings +================ + +The libvirt-php, originally called php-libvirt, is the PHP API bindings for the +libvirt virtualization toolkit originally developed by Radek Hladik. + +Getting the source +------------------ + +The PHP bindings code source is now maintained in a +`git <https://git-scm.com/>`__ repository available on +`gitlab.com <https://gitlab.com/libvirt/libvirt-php>`__: + +:: + + git clone https://gitlab.com/libvirt/libvirt-php.git + +Project pages +------------- + +Since February 2011 the project has its own pages hosted at libvirt.org. For +more information on the project please refer to https://libvirt.org/php. -- 2.35.1
© 2016 - 2026 Red Hat, Inc.