lir...@il.ibm.com wrote: > +static int block_load(QEMUFile *f, void *opaque, int version_id) > +{ > + int len, flags; > + char device_name[256]; > + int64_t addr; > + BlockDriverState *bs; > + uint8_t *buf; > + > + block_mig_state->sectors_per_block = bdrv_get_sectors_per_chunk(); > + buf = qemu_malloc(BLOCK_SIZE); > + > + do { > + > + addr = qemu_get_be64(f); > + > + flags = addr & ~SECTOR_MASK; > + addr &= SECTOR_MASK; > + > + if(flags & BLK_MIG_FLAG_DEVICE_BLOCK) { > + > + /* get device name */ > + len = qemu_get_byte(f); > + > + qemu_get_buffer(f, (uint8_t *)device_name, len); > + device_name[len] = '\0'; > + > + bs = bdrv_find(device_name); > + > + qemu_get_buffer(f, buf, > + BLOCK_SIZE); > + if(bs != NULL) { > + > + bdrv_write(bs, (addr >> SECTOR_BITS), > + buf, block_mig_state->sectors_per_block);
This synchronous write-back translates appears to be the reason for an unusable migration (or restore from snapshot) speed: about 100 KB/s here (ie. 22h for a rather small 8G guest :( ). Did you already try to improve this situation? Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux