Peter Krempa 856077138a Avoid use of glib's G_REGEX_OPTIMIZE flag
glib's G_REGEX_OPTIMIZE invokes pcre's JIT optimizer which requires
writable executable memory. On hosts with SELinux this by default caused
AVC denials to be logged. The solution in Fedora's SELinux policy was
to allow execmem for e.g. virtqemud, but e.g. virtlogd or
libvirt_leaseshelper on the other hand got a 'dontaudit' rule.

Now the optimizer itself does have a substantial effect; I've measured
around 3x speedup when matching VIR_LOG_REGEX against a sample of a qemu
VM log file. On the other hand, only 3 out of 10 uses of 'g_regex_new'
used the flag and also none of the regexes which used 'G_REGEX_OPTIMIZE'
are on a hot path:

 - virDomainQemuMonitorEventStateRegisterID

    Used only when custom qemu monitor event callback is registered,
    which resides in libvirt_qemu.so so noone will actually use this
    in production.

 - virCommandRunRegex

   Used in:
    - virStorageBackendFileSystemNetFindNFSPoolSources

      Invoked only via API on output of 'showmount'. Unlikely to ever
      see lots of data.

    - virStorageBackendLogicalFindLVs
    - virStorageBackendLogicalGetPoolSources
    - virStorageBackendLogicalRefreshPool

      Invoked on output of lvs/pvs/vgs. Neither of them are likely to
      ever see lots of output to match.

    - virISCSIGetSession
    - virISCSIScanTargetsInternal

      Invoked on output of iscsiadm, unlikely to see lots of data.

 - virLogProbablyLogMessage
    - virLXCProcessIgnorableLogLine
    - domainLogContextReadFiltered

      Both of the above are used on code paths processing log output
      when failure to startup a VM process or one of the helper
      processes for devices for a qemu domain. Thus they are not invoked
      on success and the processed buffer is capped to 1k of data.

Since none of the above are on anything resembling a hot path and thus
likely to substantially benefit from the optimizer, and we do have
plenty of other uses without optimization, drop the optimizations
everywhere and add a note to sc_G_REGEX_OPTIMIZE that we're currently
avoiding the use of this flag.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2026-06-10 11:22:32 +02:00
2019-05-31 17:54:28 +02:00
2026-06-09 14:16:35 +01:00
2026-06-08 02:33:43 -04:00
2026-06-04 14:20:46 +02:00
2019-09-06 12:47:46 +02:00
2022-03-17 14:33:12 +01:00
2023-12-05 11:48:28 +01:00
2020-08-03 09:26:48 +02:00
2019-10-18 17:32:52 +02:00
2015-06-16 13:46:20 +02:00
2026-06-01 12:24:27 +02:00

.. image:: https://gitlab.com/libvirt/libvirt/badges/master/pipeline.svg
     :target: https://gitlab.com/libvirt/libvirt/pipelines
     :alt: GitLab CI Build Status
.. image:: https://bestpractices.coreinfrastructure.org/projects/355/badge
     :target: https://bestpractices.coreinfrastructure.org/projects/355
     :alt: CII Best Practices
.. image:: https://translate.fedoraproject.org/widgets/libvirt/-/libvirt/svg-badge.svg
     :target: https://translate.fedoraproject.org/engage/libvirt/
     :alt: Translation status

==============================
Libvirt API for virtualization
==============================

Libvirt provides a portable, long term stable C API for managing the
virtualization technologies provided by many operating systems. It
includes support for QEMU, KVM, Xen, LXC, bhyve, Virtuozzo, VMware
vCenter and ESX, VMware Desktop, Hyper-V, VirtualBox and the POWER
Hypervisor.

For some of these hypervisors, it provides a stateful management
daemon which runs on the virtualization host allowing access to the
API both by non-privileged local users and remote users.

Layered packages provide bindings of the libvirt C API into other
languages including Python, Perl, PHP, Go, Java, OCaml, as well as
mappings into object systems such as GObject, CIM and SNMP.

Further information about the libvirt project can be found on the
website:

https://libvirt.org


License
=======

The libvirt C API is distributed under the terms of GNU Lesser General
Public License, version 2.1 (or later). Some parts of the code that are
not part of the C library may have the more restrictive GNU General
Public License, version 2.0 (or later). See the files ``COPYING.LESSER``
and ``COPYING`` for full license terms & conditions.


Installation
============

Instructions on building and installing libvirt can be found on the website:

https://libvirt.org/compiling.html

Contributing
============

The libvirt project welcomes contributions in many ways. For most components
the best way to contribute is to send patches to the primary development
mailing list. Further guidance on this can be found on the website:

https://libvirt.org/contribute.html


Contact
=======

The libvirt project has two primary mailing lists:

* users@lists.libvirt.org (**for user discussions**)
* devel@lists.libvirt.org (**for development only**)

Further details on contacting the project are available on the website:

https://libvirt.org/contact.html
S
Description
Read-only mirror. Please submit merge requests / issues to https://gitlab.com/libvirt/libvirt
Readme
1,008 MiB
Languages
C 95.2%
Python 2%
Meson 0.9%
Shell 0.6%
Perl 0.5%
Other 0.7%