qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: Stefan Hajnoczi <stefanha@gmail.com>
Cc: kwolf@redhat.com, pbonzini@redhat.com, qemu-devel@nongnu.org,
	stefanha@redhat.com, mreitz@redhat.com
Subject: Re: [Qemu-devel] [PATCH v5 0/4] Use blkdebug to make test deterministic
Date: Wed, 20 Nov 2013 09:44:40 +0800	[thread overview]
Message-ID: <528C1408.5070701@redhat.com> (raw)
In-Reply-To: <20131119153141.GD3202@stefanha-thinkpad.redhat.com>

On 2013年11月19日 23:31, Stefan Hajnoczi wrote:
> On Mon, Nov 18, 2013 at 03:01:47PM +0800, Fam Zheng wrote:
>> This adds "remove_break" command to block, which removes a break point defined
>> with "break". It is used in iotests.py to pause and resume drive in block job
>> cases to make the test deterministic.
>>
>> v5: Addressing Max's comments (thanks for reviewing)
>>      [02] Resume all the requests.
>>      [03] Fix event="" case. Change default value to None.
>>           Change resume to bool.
>>      [04] Change resume to bool
>>
>> v4: [01] Added.
>>      [03] Add common method pair "pause_drive" and "resume_drive".
>>      [04] Also fix 040, 055.
>>
>> Fam Zheng (4):
>>    qemu-iotests: Drop local version of cancel_and_wait from 040
>>    blkdebug: add "remove_break" command
>>    qemu-iotest: Add pause_drive and resume_drive methods
>>    qemu-iotests: Make test case 030, 040 and 055 deterministic
>>
>>   block.c                       | 13 +++++++++++++
>>   block/blkdebug.c              | 27 +++++++++++++++++++++++++++
>>   include/block/block.h         |  1 +
>>   include/block/block_int.h     |  2 ++
>>   qemu-io-cmds.c                | 22 ++++++++++++++++++++++
>>   tests/qemu-iotests/030        | 16 +++++++++++-----
>>   tests/qemu-iotests/040        | 19 +++----------------
>>   tests/qemu-iotests/055        | 15 +++++++++++----
>>   tests/qemu-iotests/iotests.py | 18 +++++++++++++++++-
>>   9 files changed, 107 insertions(+), 26 deletions(-)
>
> I get this failure after applying the patches onto my block-next tree:
>

Interesting. I guess this is what happens here:

  - Pause drive.
  - Start block job.
  - Block job send first IO request.
  - Request pended into blkdebug suspended request queue.
  - Block job pause.
  - Resume drive.
  - Query block job #1. The first IO is not completed (luckily): offset 
== 0.
  - Script sleep for 1 sec. The first IO request continues and 
completes, so the offset of block job becomes 65536.
  - Query block job #2. The offset == 65536. Asserssion failed.

This is what happened when I tested it before posting:

  - Pause drive.
  - Start block job.
  - "block-job-pause", before it even entering the IO loop.
  - Resume drive. But the block job is paused, no IO submitted.
  - Query block job #1. Offset is 0.
  - Sleep for 1 second.
  - Query block job #2. Offset is 0. (succeed by luck)
  - Block job resume, starts to IO.
  - Wait until completed
  - ...

Apparently, need some improvements to make this more deterministic. :)

Fam

> $ ./check -qcow2 055
> QEMU          -- /home/stefanha/qemu/tests/qemu-iotests/qemu
> QEMU_IMG      -- /home/stefanha/qemu/tests/qemu-iotests/qemu-img
> QEMU_IO       -- /home/stefanha/qemu/tests/qemu-iotests/qemu-io
> IMGFMT        -- qcow2 (compat=1.1)
> IMGPROTO      -- file
> PLATFORM      -- Linux/x86_64 stefanha-thinkpad 3.11.8-300.fc20.x86_64
> SOCKET_SCM_HELPER --
>
> 055 9s ... [failed, exit status 1] - output mismatch (see 055.out.bad)
> --- 055.out	2013-10-08 13:23:38.412934858 +0200
> +++ 055.out.bad	2013-11-19 16:30:31.100351135 +0100
> @@ -1,5 +1,15 @@
> -..............
> +.......F......
> +======================================================================
> +FAIL: test_pause (__main__.TestSingleDrive)
> +----------------------------------------------------------------------
> +Traceback (most recent call last):
> +  File "./055", line 80, in test_pause
> +    self.assert_qmp(result, 'return[0]/offset', offset)
> +  File "/home/stefanha/qemu/tests/qemu-iotests/iotests.py", line 232, in assert_qmp
> +    self.assertEqual(result, value, 'values not equal "%s" and "%s"' % (str(result), str(value)))
> +AssertionError: values not equal "65536" and "0"
> +
>   ----------------------------------------------------------------------
>   Ran 14 tests
>
> -OK
> +FAILED (failures=1)
> Failures: 055
> Failed 1 of 1 tests
>

      reply	other threads:[~2013-11-20  1:44 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-18  7:01 [Qemu-devel] [PATCH v5 0/4] Use blkdebug to make test deterministic Fam Zheng
2013-11-18  7:01 ` [Qemu-devel] [PATCH v5 1/4] qemu-iotests: Drop local version of cancel_and_wait from 040 Fam Zheng
2013-11-18  7:01 ` [Qemu-devel] [PATCH v5 2/4] blkdebug: add "remove_break" command Fam Zheng
2013-11-18  7:01 ` [Qemu-devel] [PATCH v5 3/4] qemu-iotest: Add pause_drive and resume_drive methods Fam Zheng
2013-11-18  7:01 ` [Qemu-devel] [PATCH v5 4/4] qemu-iotests: Make test case 030, 040 and 055 deterministic Fam Zheng
2013-11-19 15:31 ` [Qemu-devel] [PATCH v5 0/4] Use blkdebug to make test deterministic Stefan Hajnoczi
2013-11-20  1:44   ` Fam Zheng [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=528C1408.5070701@redhat.com \
    --to=famz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).