qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
  • * [Qemu-devel] [PATCH v2] migration: avoid filling ignore-shared ramblock when in incoming migration
           [not found] <1553010562-13561-1-git-send-email-catherine.hecx@gmail.com>
           [not found] ` <20190320050735.GB8956@xz-x1>
    @ 2019-04-02 15:30 ` Catherine Ho
      2019-04-03  2:25   ` Peter Xu
      1 sibling, 1 reply; 19+ messages in thread
    From: Catherine Ho @ 2019-04-02 15:30 UTC (permalink / raw)
      To: Paolo Bonzini, Richard Henderson, Dr. David Alan Gilbert
      Cc: Markus Armbruster, Juan Quintela, qemu-devel, Peter Xu,
    	Catherine Ho
    
    Commit 18269069c310 ("migration: Introduce ignore-shared capability")
    addes ignore-shared capability to bypass the shared ramblock (e,g,
    membackend + numa node). It does good to live migration.
    
    This commit expectes that QEMU doesn't write to guest RAM until
    VM starts, but it does on aarch64 qemu:
    Backtrace:
    1  0x000055f4a296dd84 in address_space_write_rom_internal () at exec.c:3458
    2  0x000055f4a296de3a in address_space_write_rom () at exec.c:3479
    3  0x000055f4a2d519ff in rom_reset () at hw/core/loader.c:1101
    4  0x000055f4a2d475ec in qemu_devices_reset () at hw/core/reset.c:69
    5  0x000055f4a2c90a28 in qemu_system_reset () at vl.c:1675
    6  0x000055f4a2c9851d in main () at vl.c:4552
    
    Actually, on arm64 virt marchine, ramblock "dtb" will be filled into ram
    during rom_reset. In ignore-shared incoming case, this rom filling
    is not required since all the data has been stored in memory backend file.
    
    Fixes: commit 18269069c310 ("migration: Introduce ignore-shared capability")
    Signed-off-by: Catherine Ho <catherine.hecx@gmail.com>
    Suggested-by: Yury Kotov <yury-kotov@yandex-team.ru>
    ---
     hw/core/loader.c          | 15 +++++++++++++++
     include/exec/cpu-common.h |  1 +
     migration/ram.c           |  2 +-
     3 files changed, 17 insertions(+), 1 deletion(-)
    
    diff --git a/hw/core/loader.c b/hw/core/loader.c
    index fe5cb24122..861a03335b 100644
    --- a/hw/core/loader.c
    +++ b/hw/core/loader.c
    @@ -53,6 +53,7 @@
     #include "hw/nvram/fw_cfg.h"
     #include "exec/memory.h"
     #include "exec/address-spaces.h"
    +#include "exec/cpu-common.h"
     #include "hw/boards.h"
     #include "qemu/cutils.h"
     
    @@ -1086,6 +1087,9 @@ int rom_add_option(const char *file, int32_t bootindex)
     static void rom_reset(void *unused)
     {
         Rom *rom;
    +    MemoryRegion *mr;
    +    hwaddr hw_addr;
    +    hwaddr l;
     
         QTAILQ_FOREACH(rom, &roms, next) {
             if (rom->fw_file) {
    @@ -1094,6 +1098,17 @@ static void rom_reset(void *unused)
             if (rom->data == NULL) {
                 continue;
             }
    +
    +        /* bypass the rom blob in ignore-shared migration case*/
    +        if (runstate_check(RUN_STATE_INMIGRATE)) {
    +            rcu_read_lock();
    +            mr = address_space_translate(rom->as, rom->addr, &hw_addr, &l,
    +                                         true, MEMTXATTRS_UNSPECIFIED);
    +            rcu_read_unlock();
    +            if (mr->ram_block != NULL && ramblock_is_ignored(mr->ram_block))
    +                continue;
    +        }
    +
             if (rom->mr) {
                 void *host = memory_region_get_ram_ptr(rom->mr);
                 memcpy(host, rom->data, rom->datasize);
    diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h
    index cef8b88a2a..c80b7248a6 100644
    --- a/include/exec/cpu-common.h
    +++ b/include/exec/cpu-common.h
    @@ -76,6 +76,7 @@ void *qemu_ram_get_host_addr(RAMBlock *rb);
     ram_addr_t qemu_ram_get_offset(RAMBlock *rb);
     ram_addr_t qemu_ram_get_used_length(RAMBlock *rb);
     bool qemu_ram_is_shared(RAMBlock *rb);
    +bool ramblock_is_ignored(RAMBlock *block);
     bool qemu_ram_is_uf_zeroable(RAMBlock *rb);
     void qemu_ram_set_uf_zeroable(RAMBlock *rb);
     bool qemu_ram_is_migratable(RAMBlock *rb);
    diff --git a/migration/ram.c b/migration/ram.c
    index 35bd6213e9..d6de9d335d 100644
    --- a/migration/ram.c
    +++ b/migration/ram.c
    @@ -159,7 +159,7 @@ out:
         return ret;
     }
     
    -static bool ramblock_is_ignored(RAMBlock *block)
    +bool ramblock_is_ignored(RAMBlock *block)
     {
         return !qemu_ram_is_migratable(block) ||
                (migrate_ignore_shared() && qemu_ram_is_shared(block));
    -- 
    2.17.1
    
    ^ permalink raw reply related	[flat|nested] 19+ messages in thread

  • end of thread, other threads:[~2019-04-04  9:55 UTC | newest]
    
    Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <1553010562-13561-1-git-send-email-catherine.hecx@gmail.com>
         [not found] ` <20190320050735.GB8956@xz-x1>
         [not found]   ` <CAEn6zmEzwQD_Ot8sttJj0KwML3Zkhfg9+QBxbOLn6bUsDpVn7w@mail.gmail.com>
         [not found]     ` <20190321061024.GB9149@xz-x1>
         [not found]       ` <CAEn6zmGFv+UbhyriwakFKB=UhnC6=thhybDF9D1E9JzoYL-1oA@mail.gmail.com>
         [not found]         ` <CAFEAcA8q0c5BFh-11KNRJWCi6+Yer_5peekmQptmaw8Ag3SNhw@mail.gmail.com>
         [not found]           ` <20190322101211.GA2703@work-vm>
         [not found]             ` <20190325033948.GG9149@xz-x1>
         [not found]               ` <CAEn6zmF0DRqqUxjKpdxWYdb_ofGXV_wACfELA991qLfvo9N6vA@mail.gmail.com>
    2019-04-02  2:57                 ` [Qemu-devel] [PATCH] migration: avoid copying ignore-shared ramblock when in incoming migration Catherine Ho
    2019-04-02  3:05                   ` Peter Maydell
    2019-04-02  7:47                     ` Catherine Ho
    2019-04-02  7:49                       ` Catherine Ho
    2019-04-02  7:51                       ` Peter Maydell
    2019-04-02  7:58                       ` Peter Xu
    2019-04-02  9:06                         ` Catherine Ho
    2019-04-02 12:36                           ` Peter Xu
    2019-04-02 14:17                             ` Catherine Ho
    2019-04-02 14:33                               ` Catherine Ho
    2019-04-02 17:37                               ` Dr. David Alan Gilbert
    2019-04-02 15:30 ` [Qemu-devel] [PATCH v2] migration: avoid filling " Catherine Ho
    2019-04-03  2:25   ` Peter Xu
    2019-04-03 15:21     ` Catherine Ho
    2019-04-04  4:25       ` Peter Xu
    2019-04-04  7:17         ` Catherine Ho
    2019-04-04  7:31           ` Peter Xu
    2019-04-04  7:33         ` Catherine Ho
    2019-04-04  9:45           ` Peter Xu
    

    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).