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


Reply via email to