qemu-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Questions about Disk I/O Record and Replay


From: Arnabjyoti Kalita
Subject: Re: Questions about Disk I/O Record and Replay
Date: Sat, 14 Aug 2021 12:55:11 +0530

Dear Pavel,

Thank you again for the answers.

I had another question -

How is it possible to just use the request id while recording and use
it during replay? Don't we have to record other parameters of the disk
I/O request (like offset, bytes, iov buffer etc.) ?

Best Regards,
Arnabjyoti Kalita


On Fri, Aug 13, 2021 at 7:47 PM Pavel Dovgalyuk
<pavel.dovgalyuk@ispras.ru> wrote:
>
> On 13.08.2021 08:53, Arnabjyoti Kalita wrote:
> > Hello all,
> >
> > I am trying to use the blkreplay driver to record and replay disk
> > operations. My disk record and replay mechanism is a variant of the
> > inbuilt record replay mechanism in QEMU.
> >
> > During record, I just store the completion ids of the disk operations
> > as they happen. Something like this -
> >
> > void replay_block_event(QEMUBH *bh, uint64_t id)
> > {
> >      if (replay_mode == REPLAY_MODE_RECORD) {
> >          if (start_recording) {
> >              replay_put_qword(id, "disk");  // writes ids to a separate
> > file dedicated for disk I/O record
> >          }
> >          qemu_bh_schedule(bh);
> >      }
> > }
> >
> > During replay, all I do is store the disk ID into an events list and
> > ask the CPU to continue executing instructions.
> >
> > void replay_block_event(QEMUBH *bh, uint64_t id)
> > {
> >     if (replay_mode == REPLAY_MODE_RECORD) {
> >         /* as shown above */
> >     }
> >     if (replay_mode == REPLAY_MODE_PLAY) {
> >         BlockEvent *event = g_malloc0(sizeof(BlockEvent));
> >         event->opaque = bh;
> >         event->id = id;
> >         QTAILQ_INSERT_TAIL(&blk_events_list, event, blk_events);
> >         qemu_cpu_kick(first_cpu);                    <- Replayed guest
> > gets stuck here
> >     }
> >     else {
> >         qemu_bh_schedule(bh);
> >     }
> > }
> >
> > I know when the disk interrupt happens and so all the event ids that
> > we store will be replayed right before that.
> >
> > My questions are as follows -
> >
> > 1. Is the above approach a good idea to achieve deterministic disk I/O 
> > replay?
> >
> > 2. Should I also replay disk event I/O as and when they arrive? How do
> > I ensure that it actually gets completed before a checkpoint?
>
> I do not remember the details about this.
>
> > checkpoint in this case, is the disk interrupt.
> >
> > 3. How can I handle out-of-order disk I/O completions, in this
> > scenario? How should I proceed?
>
> This is handled by saving events at the checkpoint.
>
> >
> > I would love to get more details on these questions.
> >
> > Thank you very much for all your help so far.
> >
> > Best Regards,
> > Arnabjyoti Kalita
> >
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]