* [PATCH v4 1/5] python/qemu: Move kvm_available() to its own module
2019-12-16 19:14 [PATCH v4 0/5] python/qemu: New accel module and improvements Wainer dos Santos Moschetta
@ 2019-12-16 19:14 ` Wainer dos Santos Moschetta
2019-12-16 19:14 ` [PATCH v4 2/5] python/qemu: accel: Add list_accel() method Wainer dos Santos Moschetta
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Wainer dos Santos Moschetta @ 2019-12-16 19:14 UTC (permalink / raw)
To: qemu-devel; +Cc: fam, ehabkost, philmd, jsnow, crosa, alex.bennee
This creates the 'accel' Python module to be the home for
utilities that deal with accelerators. Also moved kvm_available()
from __init__.py to this new module.
Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
python/qemu/__init__.py | 20 +-------------------
python/qemu/accel.py | 31 +++++++++++++++++++++++++++++++
tests/vm/basevm.py | 2 +-
3 files changed, 33 insertions(+), 20 deletions(-)
create mode 100644 python/qemu/accel.py
diff --git a/python/qemu/__init__.py b/python/qemu/__init__.py
index 6c919a3d56..eff17a306e 100644
--- a/python/qemu/__init__.py
+++ b/python/qemu/__init__.py
@@ -12,24 +12,6 @@
# Based on qmp.py.
#
-import logging
-import os
-
from . import qmp
from . import machine
-
-LOG = logging.getLogger(__name__)
-
-# Mapping host architecture to any additional architectures it can
-# support which often includes its 32 bit cousin.
-ADDITIONAL_ARCHES = {
- "x86_64" : "i386",
- "aarch64" : "armhf"
-}
-
-def kvm_available(target_arch=None):
- host_arch = os.uname()[4]
- if target_arch and target_arch != host_arch:
- if target_arch != ADDITIONAL_ARCHES.get(host_arch):
- return False
- return os.access("/dev/kvm", os.R_OK | os.W_OK)
+from . import accel
diff --git a/python/qemu/accel.py b/python/qemu/accel.py
new file mode 100644
index 0000000000..cbeac10dd1
--- /dev/null
+++ b/python/qemu/accel.py
@@ -0,0 +1,31 @@
+"""
+QEMU accel module:
+
+This module provides utilities for discover and check the availability of
+accelerators.
+"""
+# Copyright (C) 2015-2016 Red Hat Inc.
+# Copyright (C) 2012 IBM Corp.
+#
+# Authors:
+# Fam Zheng <famz@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2. See
+# the COPYING file in the top-level directory.
+#
+
+import os
+
+# Mapping host architecture to any additional architectures it can
+# support which often includes its 32 bit cousin.
+ADDITIONAL_ARCHES = {
+ "x86_64" : "i386",
+ "aarch64" : "armhf"
+}
+
+def kvm_available(target_arch=None):
+ host_arch = os.uname()[4]
+ if target_arch and target_arch != host_arch:
+ if target_arch != ADDITIONAL_ARCHES.get(host_arch):
+ return False
+ return os.access("/dev/kvm", os.R_OK | os.W_OK)
diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index 91a9226026..3e2b69c96c 100755
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -21,7 +21,7 @@ import logging
import time
import datetime
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu import kvm_available
+from qemu.accel import kvm_available
from qemu.machine import QEMUMachine
import subprocess
import hashlib
--
2.23.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v4 2/5] python/qemu: accel: Add list_accel() method
2019-12-16 19:14 [PATCH v4 0/5] python/qemu: New accel module and improvements Wainer dos Santos Moschetta
2019-12-16 19:14 ` [PATCH v4 1/5] python/qemu: Move kvm_available() to its own module Wainer dos Santos Moschetta
@ 2019-12-16 19:14 ` Wainer dos Santos Moschetta
2019-12-16 23:31 ` Cleber Rosa
2019-12-16 19:14 ` [PATCH v4 3/5] python/qemu: accel: Strengthen kvm_available() checks Wainer dos Santos Moschetta
` (3 subsequent siblings)
5 siblings, 1 reply; 8+ messages in thread
From: Wainer dos Santos Moschetta @ 2019-12-16 19:14 UTC (permalink / raw)
To: qemu-devel; +Cc: fam, ehabkost, philmd, jsnow, crosa, alex.bennee
Since commit cbe6d6365a48 the command `qemu -accel help` returns
the list of accelerators enabled in the QEMU binary. This adds
the list_accel() method which return that same list.
Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
---
python/qemu/accel.py | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/python/qemu/accel.py b/python/qemu/accel.py
index cbeac10dd1..7395cee793 100644
--- a/python/qemu/accel.py
+++ b/python/qemu/accel.py
@@ -14,7 +14,11 @@ accelerators.
# the COPYING file in the top-level directory.
#
+import logging
import os
+import subprocess
+
+LOG = logging.getLogger(__name__)
# Mapping host architecture to any additional architectures it can
# support which often includes its 32 bit cousin.
@@ -23,6 +27,25 @@ ADDITIONAL_ARCHES = {
"aarch64" : "armhf"
}
+def list_accel(qemu_bin):
+ """
+ List accelerators enabled in the QEMU binary.
+
+ @param qemu_bin (str): path to the QEMU binary.
+ @raise Exception: if failed to run `qemu -accel help`
+ @return a list of accelerator names.
+ """
+ if not qemu_bin:
+ return []
+ try:
+ out = subprocess.check_output([qemu_bin, '-accel', 'help'],
+ universal_newlines=True)
+ except:
+ LOG.debug("Failed to get the list of accelerators in %s", qemu_bin)
+ raise
+ # Skip the first line which is the header.
+ return [acc.strip() for acc in out.splitlines()[1:]]
+
def kvm_available(target_arch=None):
host_arch = os.uname()[4]
if target_arch and target_arch != host_arch:
--
2.23.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v4 2/5] python/qemu: accel: Add list_accel() method
2019-12-16 19:14 ` [PATCH v4 2/5] python/qemu: accel: Add list_accel() method Wainer dos Santos Moschetta
@ 2019-12-16 23:31 ` Cleber Rosa
0 siblings, 0 replies; 8+ messages in thread
From: Cleber Rosa @ 2019-12-16 23:31 UTC (permalink / raw)
To: Wainer dos Santos Moschetta
Cc: fam, ehabkost, philmd, qemu-devel, jsnow, alex.bennee
[-- Attachment #1: Type: text/plain, Size: 430 bytes --]
On Mon, Dec 16, 2019 at 04:14:35PM -0300, Wainer dos Santos Moschetta wrote:
> Since commit cbe6d6365a48 the command `qemu -accel help` returns
> the list of accelerators enabled in the QEMU binary. This adds
> the list_accel() method which return that same list.
>
> Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
Tested-by: Cleber Rosa <crosa@redhat.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 3/5] python/qemu: accel: Strengthen kvm_available() checks
2019-12-16 19:14 [PATCH v4 0/5] python/qemu: New accel module and improvements Wainer dos Santos Moschetta
2019-12-16 19:14 ` [PATCH v4 1/5] python/qemu: Move kvm_available() to its own module Wainer dos Santos Moschetta
2019-12-16 19:14 ` [PATCH v4 2/5] python/qemu: accel: Add list_accel() method Wainer dos Santos Moschetta
@ 2019-12-16 19:14 ` Wainer dos Santos Moschetta
2019-12-16 19:14 ` [PATCH v4 4/5] python/qemu: accel: Add tcg_available() method Wainer dos Santos Moschetta
` (2 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Wainer dos Santos Moschetta @ 2019-12-16 19:14 UTC (permalink / raw)
To: qemu-devel; +Cc: fam, ehabkost, philmd, jsnow, crosa, alex.bennee
Currently kvm_available() checks for the presence of kvm module
and, if target and host arches don't mismatch. This patch adds
an 3rd checking: if QEMU binary was compiled with kvm
support.
Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Cleber Rosa <crosa@redhat.com>
---
python/qemu/accel.py | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/python/qemu/accel.py b/python/qemu/accel.py
index 7395cee793..5fce3aa3dd 100644
--- a/python/qemu/accel.py
+++ b/python/qemu/accel.py
@@ -46,9 +46,24 @@ def list_accel(qemu_bin):
# Skip the first line which is the header.
return [acc.strip() for acc in out.splitlines()[1:]]
-def kvm_available(target_arch=None):
- host_arch = os.uname()[4]
- if target_arch and target_arch != host_arch:
- if target_arch != ADDITIONAL_ARCHES.get(host_arch):
- return False
- return os.access("/dev/kvm", os.R_OK | os.W_OK)
+def kvm_available(target_arch=None, qemu_bin=None):
+ """
+ Check if KVM is available using the following heuristic:
+ - Kernel module is present in the host;
+ - Target and host arches don't mismatch;
+ - KVM is enabled in the QEMU binary.
+
+ @param target_arch (str): target architecture
+ @param qemu_bin (str): path to the QEMU binary
+ @return True if kvm is available, otherwise False.
+ """
+ if not os.access("/dev/kvm", os.R_OK | os.W_OK):
+ return False
+ if target_arch:
+ host_arch = os.uname()[4]
+ if target_arch != host_arch:
+ if target_arch != ADDITIONAL_ARCHES.get(host_arch):
+ return False
+ if qemu_bin and "kvm" not in list_accel(qemu_bin):
+ return False
+ return True
--
2.23.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v4 4/5] python/qemu: accel: Add tcg_available() method
2019-12-16 19:14 [PATCH v4 0/5] python/qemu: New accel module and improvements Wainer dos Santos Moschetta
` (2 preceding siblings ...)
2019-12-16 19:14 ` [PATCH v4 3/5] python/qemu: accel: Strengthen kvm_available() checks Wainer dos Santos Moschetta
@ 2019-12-16 19:14 ` Wainer dos Santos Moschetta
2019-12-16 19:14 ` [PATCH v4 5/5] python/qemu: Remove unneeded imports in __init__ Wainer dos Santos Moschetta
2019-12-16 23:44 ` [PATCH v4 0/5] python/qemu: New accel module and improvements Cleber Rosa
5 siblings, 0 replies; 8+ messages in thread
From: Wainer dos Santos Moschetta @ 2019-12-16 19:14 UTC (permalink / raw)
To: qemu-devel; +Cc: fam, ehabkost, philmd, jsnow, crosa, alex.bennee
This adds a method to check if the tcg accelerator is enabled
in the QEMU binary.
Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Cleber Rosa <crosa@redhat.com>
---
python/qemu/accel.py | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/python/qemu/accel.py b/python/qemu/accel.py
index 5fce3aa3dd..0b38ddf0ab 100644
--- a/python/qemu/accel.py
+++ b/python/qemu/accel.py
@@ -67,3 +67,11 @@ def kvm_available(target_arch=None, qemu_bin=None):
if qemu_bin and "kvm" not in list_accel(qemu_bin):
return False
return True
+
+def tcg_available(qemu_bin):
+ """
+ Check if TCG is available.
+
+ @param qemu_bin (str): path to the QEMU binary
+ """
+ return 'tcg' in list_accel(qemu_bin)
--
2.23.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v4 5/5] python/qemu: Remove unneeded imports in __init__
2019-12-16 19:14 [PATCH v4 0/5] python/qemu: New accel module and improvements Wainer dos Santos Moschetta
` (3 preceding siblings ...)
2019-12-16 19:14 ` [PATCH v4 4/5] python/qemu: accel: Add tcg_available() method Wainer dos Santos Moschetta
@ 2019-12-16 19:14 ` Wainer dos Santos Moschetta
2019-12-16 23:44 ` [PATCH v4 0/5] python/qemu: New accel module and improvements Cleber Rosa
5 siblings, 0 replies; 8+ messages in thread
From: Wainer dos Santos Moschetta @ 2019-12-16 19:14 UTC (permalink / raw)
To: qemu-devel; +Cc: fam, ehabkost, philmd, jsnow, crosa, alex.bennee
__init_.py import some sub-modules unnecessarily. So let's
clean it up.
Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Suggested-by: Cleber Rosa <crosa@redhat.com>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
Tested-by: Cleber Rosa <crosa@redhat.com>
---
python/qemu/__init__.py | 6 ------
1 file changed, 6 deletions(-)
diff --git a/python/qemu/__init__.py b/python/qemu/__init__.py
index eff17a306e..4ca06c34a4 100644
--- a/python/qemu/__init__.py
+++ b/python/qemu/__init__.py
@@ -9,9 +9,3 @@
# This work is licensed under the terms of the GNU GPL, version 2. See
# the COPYING file in the top-level directory.
#
-# Based on qmp.py.
-#
-
-from . import qmp
-from . import machine
-from . import accel
--
2.23.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v4 0/5] python/qemu: New accel module and improvements
2019-12-16 19:14 [PATCH v4 0/5] python/qemu: New accel module and improvements Wainer dos Santos Moschetta
` (4 preceding siblings ...)
2019-12-16 19:14 ` [PATCH v4 5/5] python/qemu: Remove unneeded imports in __init__ Wainer dos Santos Moschetta
@ 2019-12-16 23:44 ` Cleber Rosa
5 siblings, 0 replies; 8+ messages in thread
From: Cleber Rosa @ 2019-12-16 23:44 UTC (permalink / raw)
To: Wainer dos Santos Moschetta
Cc: fam, ehabkost, philmd, qemu-devel, jsnow, alex.bennee
[-- Attachment #1: Type: text/plain, Size: 911 bytes --]
On Mon, Dec 16, 2019 at 04:14:33PM -0300, Wainer dos Santos Moschetta wrote:
> On commit abf0bf998dcb John Snow moved some code out of __init__.py
> to machine.py. kvm_available() remained in though. So on patch 01
> I continue his work by creating a home for that method (the new
> 'accel' module). Honestly I was unsure about whether move the code
> to any existing module or make a new, but since I am adding more
> methods related with accelerators then I thought they would deserve a
> module.
>
> The patches 02-04 introduce new helpers and make improvements. Later
> I intend to use those methods on the acceptance tests such as
> to automatically set the accelerator in QEMUMachine VM via Avocado
> tags, and skip the test if the accelerator is not available.
>
> Patch 05 just remove unneeded imports in __init__.py
>
FIY, queued all patches on my python-next branch.
- Cleber.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread