* [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes
@ 2019-09-04 9:11 Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 1/6] iotests: allow " Andrey Shinkevich
` (6 more replies)
0 siblings, 7 replies; 9+ messages in thread
From: Andrey Shinkevich @ 2019-09-04 9:11 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: kwolf, vsementsov, mreitz, andrey.shinkevich, den, jsnow
In the current implementation of the QEMU bash iotests, only qemu-io
processes may be run under the Valgrind with the switch '-valgrind'.
Let's allow the common.rc bash script running all other QEMU processes,
such as qemu-kvm, qemu-img, qemu-ndb and qemu-vxhs, under the Valgrind.
v8:
01: Fix for the optimization made in v7 where the iotests 039 and 051
did not pass being run under the Valgrind. NO_VALGRIND variable
has been introduced to complete the optimization logic (patch 2/6).
Discussed in the email threads with the message IDs:
<1563553816-148827-1-git-send-email-andrey.shinkevich@virtuozzo.com>
<1560276131-683243-1-git-send-email-andrey.shinkevich@virtuozzo.com>
<1566834628-485525-1-git-send-email-andrey.shinkevich@virtuozzo.com>
Andrey Shinkevich (6):
iotests: allow Valgrind checking all QEMU processes
iotests: exclude killed processes from running under Valgrind
iotests: Add casenotrun report to bash tests
iotests: Valgrind fails with nonexistent directory
iotests: extended timeout under Valgrind
iotests: extend sleeping time under Valgrind
tests/qemu-iotests/028 | 6 ++-
tests/qemu-iotests/039 | 5 +++
tests/qemu-iotests/039.out | 30 +++----------
tests/qemu-iotests/051 | 4 ++
tests/qemu-iotests/061 | 2 +
tests/qemu-iotests/061.out | 12 +----
tests/qemu-iotests/137 | 1 +
tests/qemu-iotests/137.out | 6 +--
tests/qemu-iotests/183 | 9 +++-
tests/qemu-iotests/192 | 6 ++-
tests/qemu-iotests/247 | 6 ++-
tests/qemu-iotests/common.rc | 105 +++++++++++++++++++++++++++++++++++--------
12 files changed, 130 insertions(+), 62 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v8 1/6] iotests: allow Valgrind checking all QEMU processes
2019-09-04 9:11 [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Andrey Shinkevich
@ 2019-09-04 9:11 ` Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 2/6] iotests: exclude killed processes from running under Valgrind Andrey Shinkevich
` (5 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Andrey Shinkevich @ 2019-09-04 9:11 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: kwolf, vsementsov, mreitz, andrey.shinkevich, den, jsnow
With the '-valgrind' option, let all the QEMU processes be run under
the Valgrind tool. The Valgrind own parameters may be set with its
environment variable VALGRIND_OPTS, e.g.
$ VALGRIND_OPTS="--leak-check=yes" ./check -valgrind <test#>
or they may be listed in the Valgrind checked file ./.valgrindrc or
~/.valgrindrc like
--memcheck:leak-check=no
--memcheck:track-origins=yes
To exclude a specific process from running under the Valgrind, the
corresponding environment variable VALGRIND_QEMU_<name> is to be set
to the empty string:
$ VALGRIND_QEMU_IO= ./check -valgrind <test#>
When QEMU-IO process is being killed, the shell report refers to the
text of the command in _qemu_io_wrapper(), which was modified with this
patch. So, the benchmark output for the tests 039, 061 and 137 is to be
changed also.
Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
---
tests/qemu-iotests/039.out | 30 +++------------
tests/qemu-iotests/061.out | 12 +-----
tests/qemu-iotests/137.out | 6 +--
tests/qemu-iotests/common.rc | 88 +++++++++++++++++++++++++++++++++++---------
4 files changed, 78 insertions(+), 58 deletions(-)
diff --git a/tests/qemu-iotests/039.out b/tests/qemu-iotests/039.out
index 724d7b2..2e356d5 100644
--- a/tests/qemu-iotests/039.out
+++ b/tests/qemu-iotests/039.out
@@ -11,11 +11,7 @@ No errors were found on the image.
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
wrote 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-./common.rc: Killed ( if [ "${VALGRIND_QEMU}" == "y" ]; then
- exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-else
- exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-fi )
+./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}" _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
incompatible_features 0x1
ERROR cluster 5 refcount=0 reference=1
ERROR OFLAG_COPIED data cluster: l2_entry=8000000000050000 refcount=0
@@ -50,11 +46,7 @@ read 512/512 bytes at offset 0
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
wrote 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-./common.rc: Killed ( if [ "${VALGRIND_QEMU}" == "y" ]; then
- exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-else
- exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-fi )
+./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}" _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
incompatible_features 0x1
ERROR cluster 5 refcount=0 reference=1
Rebuilding refcount structure
@@ -68,11 +60,7 @@ incompatible_features 0x0
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
wrote 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-./common.rc: Killed ( if [ "${VALGRIND_QEMU}" == "y" ]; then
- exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-else
- exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-fi )
+./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}" _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
incompatible_features 0x0
No errors were found on the image.
@@ -91,11 +79,7 @@ No errors were found on the image.
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
wrote 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-./common.rc: Killed ( if [ "${VALGRIND_QEMU}" == "y" ]; then
- exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-else
- exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-fi )
+./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}" _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
incompatible_features 0x1
ERROR cluster 5 refcount=0 reference=1
ERROR OFLAG_COPIED data cluster: l2_entry=8000000000050000 refcount=0
@@ -105,11 +89,7 @@ Data may be corrupted, or further writes to the image may corrupt it.
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
wrote 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-./common.rc: Killed ( if [ "${VALGRIND_QEMU}" == "y" ]; then
- exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-else
- exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-fi )
+./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}" _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
incompatible_features 0x0
No errors were found on the image.
*** done
diff --git a/tests/qemu-iotests/061.out b/tests/qemu-iotests/061.out
index 1aa7d37..d6a7c2a 100644
--- a/tests/qemu-iotests/061.out
+++ b/tests/qemu-iotests/061.out
@@ -118,11 +118,7 @@ No errors were found on the image.
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
wrote 131072/131072 bytes at offset 0
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-./common.rc: Killed ( if [ "${VALGRIND_QEMU}" == "y" ]; then
- exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-else
- exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-fi )
+./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}" _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
magic 0x514649fb
version 3
backing_file_offset 0x0
@@ -280,11 +276,7 @@ No errors were found on the image.
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
wrote 131072/131072 bytes at offset 0
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-./common.rc: Killed ( if [ "${VALGRIND_QEMU}" == "y" ]; then
- exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-else
- exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-fi )
+./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}" _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
magic 0x514649fb
version 3
backing_file_offset 0x0
diff --git a/tests/qemu-iotests/137.out b/tests/qemu-iotests/137.out
index 22d59df..1c6569e 100644
--- a/tests/qemu-iotests/137.out
+++ b/tests/qemu-iotests/137.out
@@ -35,11 +35,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
qemu-io: Unsupported value 'blubb' for qcow2 option 'overlap-check'. Allowed are any of the following: none, constant, cached, all
wrote 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-./common.rc: Killed ( if [ "${VALGRIND_QEMU}" == "y" ]; then
- exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-else
- exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@";
-fi )
+./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}" _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
incompatible_features 0x0
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
wrote 65536/65536 bytes at offset 0
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
index 5502c3d..48f4bc0 100644
--- a/tests/qemu-iotests/common.rc
+++ b/tests/qemu-iotests/common.rc
@@ -60,19 +60,68 @@ if ! . ./common.config
exit 1
fi
+# Set the variables to the empty string to turn Valgrind off
+# for specific processes, e.g.
+# $ VALGRIND_QEMU_IO= ./check -qcow2 -valgrind 015
+
+: ${VALGRIND_QEMU_VM=$VALGRIND_QEMU}
+: ${VALGRIND_QEMU_IMG=$VALGRIND_QEMU}
+: ${VALGRIND_QEMU_IO=$VALGRIND_QEMU}
+: ${VALGRIND_QEMU_NBD=$VALGRIND_QEMU}
+: ${VALGRIND_QEMU_VXHS=$VALGRIND_QEMU}
+
+# The Valgrind own parameters may be set with
+# its environment variable VALGRIND_OPTS, e.g.
+# $ VALGRIND_OPTS="--leak-check=yes" ./check -qcow2 -valgrind 015
+
+_qemu_proc_exec()
+{
+ local VALGRIND_LOGFILE="$1"
+ shift
+ if [ "${VALGRIND_QEMU}" == "y" ]; then
+ exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$@"
+ else
+ exec "$@"
+ fi
+}
+
+_qemu_proc_valgrind_log()
+{
+ local VALGRIND_LOGFILE="$1"
+ local RETVAL="$2"
+ if [ "${VALGRIND_QEMU}" == "y" ]; then
+ if [ $RETVAL == 99 ]; then
+ cat "${VALGRIND_LOGFILE}"
+ fi
+ rm -f "${VALGRIND_LOGFILE}"
+ fi
+}
+
_qemu_wrapper()
{
+ local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind
(
if [ -n "${QEMU_NEED_PID}" ]; then
echo $BASHPID > "${QEMU_TEST_DIR}/qemu-${_QEMU_HANDLE}.pid"
fi
- exec "$QEMU_PROG" $QEMU_OPTIONS "$@"
+ VALGRIND_QEMU="${VALGRIND_QEMU_VM}" _qemu_proc_exec "${VALGRIND_LOGFILE}" \
+ "$QEMU_PROG" $QEMU_OPTIONS "$@"
)
+ RETVAL=$?
+ _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL
+ return $RETVAL
}
_qemu_img_wrapper()
{
- (exec "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS "$@")
+ local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind
+ (
+ VALGRIND_QEMU="${VALGRIND_QEMU_IMG}" _qemu_proc_exec "${VALGRIND_LOGFILE}" \
+ "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS "$@"
+ )
+ RETVAL=$?
+ _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL
+ return $RETVAL
}
_qemu_io_wrapper()
@@ -85,36 +134,39 @@ _qemu_io_wrapper()
QEMU_IO_ARGS="--object secret,id=keysec0,data=$IMGKEYSECRET $QEMU_IO_ARGS"
fi
fi
- local RETVAL
(
- if [ "${VALGRIND_QEMU}" == "y" ]; then
- exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@"
- else
- exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@"
- fi
+ VALGRIND_QEMU="${VALGRIND_QEMU_IO}" _qemu_proc_exec "${VALGRIND_LOGFILE}" \
+ "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@"
)
RETVAL=$?
- if [ "${VALGRIND_QEMU}" == "y" ]; then
- if [ $RETVAL == 99 ]; then
- cat "${VALGRIND_LOGFILE}"
- fi
- rm -f "${VALGRIND_LOGFILE}"
- fi
- (exit $RETVAL)
+ _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL
+ return $RETVAL
}
_qemu_nbd_wrapper()
{
- "$QEMU_NBD_PROG" --pid-file="${QEMU_TEST_DIR}/qemu-nbd.pid" \
- $QEMU_NBD_OPTIONS "$@"
+ local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind
+ (
+ VALGRIND_QEMU="${VALGRIND_QEMU_NBD}" _qemu_proc_exec "${VALGRIND_LOGFILE}" \
+ "$QEMU_NBD_PROG" --pid-file="${QEMU_TEST_DIR}/qemu-nbd.pid" \
+ $QEMU_NBD_OPTIONS "$@"
+ )
+ RETVAL=$?
+ _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL
+ return $RETVAL
}
_qemu_vxhs_wrapper()
{
+ local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind
(
echo $BASHPID > "${TEST_DIR}/qemu-vxhs.pid"
- exec "$QEMU_VXHS_PROG" $QEMU_VXHS_OPTIONS "$@"
+ VALGRIND_QEMU="${VALGRIND_QEMU_VXHS}" _qemu_proc_exec "${VALGRIND_LOGFILE}" \
+ "$QEMU_VXHS_PROG" $QEMU_VXHS_OPTIONS "$@"
)
+ RETVAL=$?
+ _qemu_proc_valgrind_log "${VALGRIND_LOGFILE}" $RETVAL
+ return $RETVAL
}
export QEMU=_qemu_wrapper
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v8 2/6] iotests: exclude killed processes from running under Valgrind
2019-09-04 9:11 [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 1/6] iotests: allow " Andrey Shinkevich
@ 2019-09-04 9:11 ` Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 3/6] iotests: Add casenotrun report to bash tests Andrey Shinkevich
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Andrey Shinkevich @ 2019-09-04 9:11 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: kwolf, vsementsov, mreitz, andrey.shinkevich, den, jsnow
The Valgrind tool fails to manage its termination in multi-threaded
processes when they raise the signal SIGKILL. The bug has been reported
to the Valgrind maintainers and was registered as the bug #409141:
https://bugs.kde.org/show_bug.cgi?id=409141
Let's exclude such test cases from running under the Valgrind until a
new version with the bug fix is released because checking for the
memory issues is covered by other test cases.
Suggested-by: John Snow <jsnow@redhat.com>
Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
---
tests/qemu-iotests/039 | 5 +++++
tests/qemu-iotests/061 | 2 ++
tests/qemu-iotests/137 | 1 +
tests/qemu-iotests/common.rc | 12 ++++++++++--
4 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/tests/qemu-iotests/039 b/tests/qemu-iotests/039
index 0d4e963..99f39a2 100755
--- a/tests/qemu-iotests/039
+++ b/tests/qemu-iotests/039
@@ -65,6 +65,7 @@ echo "== Creating a dirty image file =="
IMGOPTS="compat=1.1,lazy_refcounts=on"
_make_test_img $size
+_NO_VALGRIND \
$QEMU_IO -c "write -P 0x5a 0 512" \
-c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
| _filter_qemu_io
@@ -100,6 +101,7 @@ echo "== Opening a dirty image read/write should repair it =="
IMGOPTS="compat=1.1,lazy_refcounts=on"
_make_test_img $size
+_NO_VALGRIND \
$QEMU_IO -c "write -P 0x5a 0 512" \
-c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
| _filter_qemu_io
@@ -118,6 +120,7 @@ echo "== Creating an image file with lazy_refcounts=off =="
IMGOPTS="compat=1.1,lazy_refcounts=off"
_make_test_img $size
+_NO_VALGRIND \
$QEMU_IO -c "write -P 0x5a 0 512" \
-c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
| _filter_qemu_io
@@ -151,6 +154,7 @@ echo "== Changing lazy_refcounts setting at runtime =="
IMGOPTS="compat=1.1,lazy_refcounts=off"
_make_test_img $size
+_NO_VALGRIND \
$QEMU_IO -c "reopen -o lazy-refcounts=on" \
-c "write -P 0x5a 0 512" \
-c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
@@ -163,6 +167,7 @@ _check_test_img
IMGOPTS="compat=1.1,lazy_refcounts=on"
_make_test_img $size
+_NO_VALGRIND \
$QEMU_IO -c "reopen -o lazy-refcounts=off" \
-c "write -P 0x5a 0 512" \
-c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
diff --git a/tests/qemu-iotests/061 b/tests/qemu-iotests/061
index d7dbd7e..4eac5b8 100755
--- a/tests/qemu-iotests/061
+++ b/tests/qemu-iotests/061
@@ -73,6 +73,7 @@ echo
echo "=== Testing dirty version downgrade ==="
echo
IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
+_NO_VALGRIND \
$QEMU_IO -c "write -P 0x2a 0 128k" -c flush \
-c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 | _filter_qemu_io
$PYTHON qcow2.py "$TEST_IMG" dump-header
@@ -107,6 +108,7 @@ echo
echo "=== Testing dirty lazy_refcounts=off ==="
echo
IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
+_NO_VALGRIND \
$QEMU_IO -c "write -P 0x2a 0 128k" -c flush \
-c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 | _filter_qemu_io
$PYTHON qcow2.py "$TEST_IMG" dump-header
diff --git a/tests/qemu-iotests/137 b/tests/qemu-iotests/137
index 0c3d2a1..089821d 100755
--- a/tests/qemu-iotests/137
+++ b/tests/qemu-iotests/137
@@ -130,6 +130,7 @@ echo
# Whether lazy-refcounts was actually enabled can easily be tested: Check if
# the dirty bit is set after a crash
+_NO_VALGRIND \
$QEMU_IO \
-c "reopen -o lazy-refcounts=on,overlap-check=blubb" \
-c "write -P 0x5a 0 512" \
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
index 48f4bc0..e4f8fcc 100644
--- a/tests/qemu-iotests/common.rc
+++ b/tests/qemu-iotests/common.rc
@@ -78,7 +78,7 @@ _qemu_proc_exec()
{
local VALGRIND_LOGFILE="$1"
shift
- if [ "${VALGRIND_QEMU}" == "y" ]; then
+ if [[ "${VALGRIND_QEMU}" == "y" && "${NO_VALGRIND}" != "y" ]]; then
exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$@"
else
exec "$@"
@@ -89,7 +89,7 @@ _qemu_proc_valgrind_log()
{
local VALGRIND_LOGFILE="$1"
local RETVAL="$2"
- if [ "${VALGRIND_QEMU}" == "y" ]; then
+ if [[ "${VALGRIND_QEMU}" == "y" && "${NO_VALGRIND}" != "y" ]]; then
if [ $RETVAL == 99 ]; then
cat "${VALGRIND_LOGFILE}"
fi
@@ -169,6 +169,14 @@ _qemu_vxhs_wrapper()
return $RETVAL
}
+# Valgrind bug #409141 https://bugs.kde.org/show_bug.cgi?id=409141
+# Until valgrind 3.16+ is ubiquitous, we must work around a hang in
+# valgrind when issuing sigkill. Disable valgrind for this invocation.
+_NO_VALGRIND()
+{
+ NO_VALGRIND="y" "$@"
+}
+
export QEMU=_qemu_wrapper
export QEMU_IMG=_qemu_img_wrapper
export QEMU_IO=_qemu_io_wrapper
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v8 3/6] iotests: Add casenotrun report to bash tests
2019-09-04 9:11 [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 1/6] iotests: allow " Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 2/6] iotests: exclude killed processes from running under Valgrind Andrey Shinkevich
@ 2019-09-04 9:11 ` Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 4/6] iotests: Valgrind fails with nonexistent directory Andrey Shinkevich
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Andrey Shinkevich @ 2019-09-04 9:11 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: kwolf, vsementsov, mreitz, andrey.shinkevich, den, jsnow
The new function _casenotrun() is to be invoked if a test case cannot
be run for some reason. The user will be notified by a message passed
to the function. It is the caller's responsibility to make skipped a
particular test.
Suggested-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
---
tests/qemu-iotests/common.rc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
index e4f8fcc..00a16ee 100644
--- a/tests/qemu-iotests/common.rc
+++ b/tests/qemu-iotests/common.rc
@@ -455,6 +455,15 @@ _notrun()
exit
}
+# bail out, setting up .casenotrun file
+# The function _casenotrun() is used as a notifier. It is the
+# caller's responsibility to make skipped a particular test.
+#
+_casenotrun()
+{
+ echo " [case not run] $*" >>"$OUTPUT_DIR/$seq.casenotrun"
+}
+
# just plain bail out
#
_fail()
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v8 4/6] iotests: Valgrind fails with nonexistent directory
2019-09-04 9:11 [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Andrey Shinkevich
` (2 preceding siblings ...)
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 3/6] iotests: Add casenotrun report to bash tests Andrey Shinkevich
@ 2019-09-04 9:11 ` Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 5/6] iotests: extended timeout under Valgrind Andrey Shinkevich
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Andrey Shinkevich @ 2019-09-04 9:11 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: kwolf, vsementsov, mreitz, andrey.shinkevich, den, jsnow
The Valgrind uses the exported variable TMPDIR and fails if the
directory does not exist. Let us exclude such a test case from
being run under the Valgrind and notify the user of it.
Suggested-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
---
tests/qemu-iotests/051 | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051
index ce942a5..53bcdbc 100755
--- a/tests/qemu-iotests/051
+++ b/tests/qemu-iotests/051
@@ -377,6 +377,10 @@ printf %b "qemu-io $device_id \"write -P 0x33 0 4k\"\ncommit $device_id\n" |
$QEMU_IO -c "read -P 0x33 0 4k" "$TEST_IMG" | _filter_qemu_io
# Using snapshot=on with a non-existent TMPDIR
+if [ "${VALGRIND_QEMU_VM}" == "y" ]; then
+ _casenotrun "Valgrind needs a valid TMPDIR for itself"
+fi
+VALGRIND_QEMU_VM= \
TMPDIR=/nonexistent run_qemu -drive driver=null-co,snapshot=on
# Using snapshot=on together with read-only=on
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v8 5/6] iotests: extended timeout under Valgrind
2019-09-04 9:11 [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Andrey Shinkevich
` (3 preceding siblings ...)
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 4/6] iotests: Valgrind fails with nonexistent directory Andrey Shinkevich
@ 2019-09-04 9:11 ` Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 6/6] iotests: extend sleeping time " Andrey Shinkevich
2019-09-04 13:44 ` [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Kevin Wolf
6 siblings, 0 replies; 9+ messages in thread
From: Andrey Shinkevich @ 2019-09-04 9:11 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: kwolf, vsementsov, mreitz, andrey.shinkevich, den, jsnow
As the iotests run longer under the Valgrind, the QEMU_COMM_TIMEOUT is
to be increased in the test cases 028, 183 and 192 when running under
the Valgrind.
Suggested-by: Roman Kagan <rkagan@virtuozzo.com>
Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
---
tests/qemu-iotests/028 | 6 +++++-
tests/qemu-iotests/183 | 9 ++++++++-
tests/qemu-iotests/192 | 6 +++++-
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/tests/qemu-iotests/028 b/tests/qemu-iotests/028
index 01f4959..71301ec 100755
--- a/tests/qemu-iotests/028
+++ b/tests/qemu-iotests/028
@@ -110,7 +110,11 @@ echo
qemu_comm_method="monitor"
_launch_qemu -drive file="${TEST_IMG}",cache=${CACHEMODE},id=disk
h=$QEMU_HANDLE
-QEMU_COMM_TIMEOUT=1
+if [ "${VALGRIND_QEMU}" == "y" ]; then
+ QEMU_COMM_TIMEOUT=7
+else
+ QEMU_COMM_TIMEOUT=1
+fi
# Silence output since it contains the disk image path and QEMU's readline
# character echoing makes it very hard to filter the output. Plus, there
diff --git a/tests/qemu-iotests/183 b/tests/qemu-iotests/183
index fbe5a99..04fb344 100755
--- a/tests/qemu-iotests/183
+++ b/tests/qemu-iotests/183
@@ -94,8 +94,15 @@ if echo "$reply" | grep "compiled without old-style" > /dev/null; then
_notrun "migrate -b support not compiled in"
fi
-QEMU_COMM_TIMEOUT=0.1 qemu_cmd_repeat=50 silent=yes \
+timeout_comm=$QEMU_COMM_TIMEOUT
+if [ "${VALGRIND_QEMU}" == "y" ]; then
+ QEMU_COMM_TIMEOUT=4
+else
+ QEMU_COMM_TIMEOUT=0.1
+fi
+qemu_cmd_repeat=50 silent=yes \
_send_qemu_cmd $src "{ 'execute': 'query-migrate' }" '"status": "completed"'
+QEMU_COMM_TIMEOUT=$timeout_comm
_send_qemu_cmd $src "{ 'execute': 'query-status' }" "return"
echo
diff --git a/tests/qemu-iotests/192 b/tests/qemu-iotests/192
index 6193257..0344322 100755
--- a/tests/qemu-iotests/192
+++ b/tests/qemu-iotests/192
@@ -60,7 +60,11 @@ fi
qemu_comm_method="monitor"
_launch_qemu -drive $DRIVE_ARG -incoming defer
h=$QEMU_HANDLE
-QEMU_COMM_TIMEOUT=1
+if [ "${VALGRIND_QEMU}" == "y" ]; then
+ QEMU_COMM_TIMEOUT=7
+else
+ QEMU_COMM_TIMEOUT=1
+fi
_send_qemu_cmd $h "nbd_server_start unix:$TEST_DIR/nbd" "(qemu)"
_send_qemu_cmd $h "nbd_server_add -w drive0" "(qemu)"
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v8 6/6] iotests: extend sleeping time under Valgrind
2019-09-04 9:11 [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Andrey Shinkevich
` (4 preceding siblings ...)
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 5/6] iotests: extended timeout under Valgrind Andrey Shinkevich
@ 2019-09-04 9:11 ` Andrey Shinkevich
2019-09-04 13:44 ` [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Kevin Wolf
6 siblings, 0 replies; 9+ messages in thread
From: Andrey Shinkevich @ 2019-09-04 9:11 UTC (permalink / raw)
To: qemu-devel, qemu-block
Cc: kwolf, vsementsov, mreitz, andrey.shinkevich, den, jsnow
To synchronize the time when QEMU is running longer under the Valgrind,
increase the sleeping time in the test 247.
Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
---
tests/qemu-iotests/247 | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/tests/qemu-iotests/247 b/tests/qemu-iotests/247
index 546a794..c853b73 100755
--- a/tests/qemu-iotests/247
+++ b/tests/qemu-iotests/247
@@ -57,7 +57,11 @@ TEST_IMG="$TEST_IMG.4" _make_test_img $size
{"execute":"block-commit",
"arguments":{"device":"format-4", "top-node": "format-2", "base-node":"format-0", "job-id":"job0"}}
EOF
-sleep 1
+if [ "${VALGRIND_QEMU}" == "y" ]; then
+ sleep 10
+else
+ sleep 1
+fi
echo '{"execute":"quit"}'
) | $QEMU -qmp stdio -nographic -nodefaults \
-blockdev file,node-name=file-0,filename=$TEST_IMG.0,auto-read-only=on \
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes
2019-09-04 9:11 [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Andrey Shinkevich
` (5 preceding siblings ...)
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 6/6] iotests: extend sleeping time " Andrey Shinkevich
@ 2019-09-04 13:44 ` Kevin Wolf
2019-09-04 13:54 ` Andrey Shinkevich
6 siblings, 1 reply; 9+ messages in thread
From: Kevin Wolf @ 2019-09-04 13:44 UTC (permalink / raw)
To: Andrey Shinkevich; +Cc: vsementsov, qemu-block, qemu-devel, mreitz, den, jsnow
Am 04.09.2019 um 11:11 hat Andrey Shinkevich geschrieben:
> In the current implementation of the QEMU bash iotests, only qemu-io
> processes may be run under the Valgrind with the switch '-valgrind'.
> Let's allow the common.rc bash script running all other QEMU processes,
> such as qemu-kvm, qemu-img, qemu-ndb and qemu-vxhs, under the Valgrind.
>
> v8:
> 01: Fix for the optimization made in v7 where the iotests 039 and 051
> did not pass being run under the Valgrind. NO_VALGRIND variable
> has been introduced to complete the optimization logic (patch 2/6).
Thanks, applied to the block branch.
Kevin
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes
2019-09-04 13:44 ` [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Kevin Wolf
@ 2019-09-04 13:54 ` Andrey Shinkevich
0 siblings, 0 replies; 9+ messages in thread
From: Andrey Shinkevich @ 2019-09-04 13:54 UTC (permalink / raw)
To: Kevin Wolf
Cc: Vladimir Sementsov-Ogievskiy, Denis Lunev, qemu-block,
qemu-devel, mreitz, jsnow
On 04/09/2019 16:44, Kevin Wolf wrote:
> Am 04.09.2019 um 11:11 hat Andrey Shinkevich geschrieben:
>> In the current implementation of the QEMU bash iotests, only qemu-io
>> processes may be run under the Valgrind with the switch '-valgrind'.
>> Let's allow the common.rc bash script running all other QEMU processes,
>> such as qemu-kvm, qemu-img, qemu-ndb and qemu-vxhs, under the Valgrind.
>>
>> v8:
>> 01: Fix for the optimization made in v7 where the iotests 039 and 051
>> did not pass being run under the Valgrind. NO_VALGRIND variable
>> has been introduced to complete the optimization logic (patch 2/6).
>
> Thanks, applied to the block branch.
>
> Kevin
>
Thank you too, Kevin.
Andrey
--
With the best regards,
Andrey Shinkevich
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2019-09-04 13:54 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-04 9:11 [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 1/6] iotests: allow " Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 2/6] iotests: exclude killed processes from running under Valgrind Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 3/6] iotests: Add casenotrun report to bash tests Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 4/6] iotests: Valgrind fails with nonexistent directory Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 5/6] iotests: extended timeout under Valgrind Andrey Shinkevich
2019-09-04 9:11 ` [Qemu-devel] [PATCH v8 6/6] iotests: extend sleeping time " Andrey Shinkevich
2019-09-04 13:44 ` [Qemu-devel] [PATCH v8 0/6] Allow Valgrind checking all QEMU processes Kevin Wolf
2019-09-04 13:54 ` Andrey Shinkevich
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.