All of lore.kernel.org
 help / color / mirror / Atom feed
From: sridhar kulkarni <sridhar_kulk@yahoo.com>
To: Peter Xu <peterx@redhat.com>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] Savevm and loadvm not working
Date: Thu, 1 Feb 2018 12:19:20 +0000 (UTC)	[thread overview]
Message-ID: <75114832.1210415.1517487560355@mail.yahoo.com> (raw)
In-Reply-To: <20180130115510.GA13988@xz-mi>

 

    On Tuesday, January 30, 2018 5:25 PM, Peter Xu <peterx@redhat.com> wrote:
 

 On Tue, Jan 30, 2018 at 10:34:31AM +0000, sridhar kulkarni via Qemu-devel wrote:
> Hi,
> I am new bee to snapshot feature and how to use it correctly. My requirement is simple, in that I want to snapshot the running VM and save the snapshot file. Using the snapshot file, I want to boot the VM directly to snapshot state.I came across the qemu monitors "savevm" and "loadvm" commands. The following are the steps I follow to create snapshot and load the snapshot,Step 1: Launch VM using below command, 
> qemu-system-arm -M arm-machine -m 512M -name my_name -kernel main.rbx -serial pty -serial vc -serial vc -serial vc -drive if=none,format=qcow2,file=/home/sridhar/qemu_disk_image/dummy.qcow2 
> 
> Step 2: Save the snapshot (issue savevm from qemu monitor)
>         --> savevm my_snapshot
> 
> Step 3 Launch the VM using snapshot image saved in step 2,
> qemu-system-arm -M arm-machine -m 512M -name my_name -kernel main.rbx -serial pty -serial vc -serial vc -serial vc -drive if=none,format=qcow2,file=/home/sridhar/qemu_disk_image/dummy.qcow2 -loadvm my_snapshot
> With this approach, I am seeing that RAM contents are not getting saved when I issue "savevm" command.

Could I ask how do you know that RAM contents are not saved?  Is there
any error happened after your loadvm operation?
I thought that RAM contents are not saved because of return value RAM_SAVE_CONTROL_NOT_SUPP. Now that you clarified about this, I debugged this further. After doing loadvm operation, I am getting following error,qemu-system-arm: error while loading state for instance 0x0 of device 'cpu'
qemu-system-arm: Error -1 while loading VM state
I figured out that, this error is because of following function returning FALSE. "write_raw_cp_reg" writes a value and "read_raw_cp_reg" reads the value back. There is mismatch between what we write and what is being read back, and hence function returns FALSE.
Between I want to mention that, I am trying the snapshot on a VM which runs ARM 7 core. I am not sure if this snapshot feature is fully function for ARM targets.

bool write_list_to_cpustate(ARMCPU *cpu)
{
    int i;
    bool ok = true;

    for (i = 0; i < cpu->cpreg_array_len; i++) {
        uint32_t regidx = kvm_to_cpreg_id(cpu->cpreg_indexes[i]);
        uint64_t v = cpu->cpreg_values[i];
        const ARMCPRegInfo *ri;

        ri = get_arm_cp_reginfo(cpu->cp_regs, regidx);
        if (!ri) {
            ok = false;
            continue;
        }
        if (ri->type & ARM_CP_NO_RAW) {
            continue;
        }
        /* Write value and confirm it reads back as written
         * (to catch read-only registers and partially read-only
         * registers where the incoming migration value doesn't match)
         */
        write_raw_cp_reg(&cpu->env, ri, v);
        if (read_raw_cp_reg(&cpu->env, ri) != v) {
            ok = false;
        }
    }
    return ok;

> I have copied the part of the file, when the function "ram_control_save_page" returns "RAM_SAVE_CONTROL_NOT_SUPP" and hence the page is not getting saved.
> 
> size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset,
>                              ram_addr_t offset, size_t size,
>                              uint64_t *bytes_sent)
> {
>     if (f->hooks && f->hooks->save_page) {
>         int ret = f->hooks->save_page(f, f->opaque, block_offset,
>                                       offset, size, bytes_sent);
> 
>         if (ret != RAM_SAVE_CONTROL_DELAYED) {
>             if (bytes_sent && *bytes_sent > 0) {
>                 qemu_update_position(f, *bytes_sent);
>             } else if (ret < 0) {
>                 qemu_file_set_error(f, ret);
>             }
>         }
> 
>         return ret;
>     }
> 
>     return RAM_SAVE_CONTROL_NOT_SUPP;

Here IMHO as long as you are not using RDMA, this function should
always return with RAM_SAVE_CONTROL_NOT_SUPP.

And I do think the name is slightly misleading.

> }
> 
> Is there anything that I am missing here in the understanding "savevm" and "loadvm" commands? 
> 
> Thanks

-- 
Peter Xu


   

  reply	other threads:[~2018-02-01 12:19 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1972503886.3523325.1517308471375.ref@mail.yahoo.com>
2018-01-30 10:34 ` [Qemu-devel] Savevm and loadvm not working sridhar kulkarni
2018-01-30 11:55   ` Peter Xu
2018-02-01 12:19     ` sridhar kulkarni [this message]
2018-02-01 12:26       ` Peter Maydell
2018-02-01 17:36         ` sridhar kulkarni
2018-02-01 18:00           ` Peter Maydell

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=75114832.1210415.1517487560355@mail.yahoo.com \
    --to=sridhar_kulk@yahoo.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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 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.