block: add -drive copy-on-read=on|off
This patch adds the -drive copy-on-read=on|off command-line option: copy-on-read=on|off copy-on-read is "on" or "off" and enables whether to copy read backing file sectors into the image file. Copy-on-read avoids accessing the same backing file sectors repeatedly and is useful when the backing file is over a slow network. By default copy-on-read is off. Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									ab1859218a
								
							
						
					
					
						commit
						fb0490f69f
					
				| @ -257,6 +257,7 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi) | ||||
|     DriveInfo *dinfo; | ||||
|     BlockIOLimit io_limits; | ||||
|     int snapshot = 0; | ||||
|     bool copy_on_read; | ||||
|     int ret; | ||||
| 
 | ||||
|     translation = BIOS_ATA_TRANSLATION_AUTO; | ||||
| @ -273,6 +274,7 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi) | ||||
| 
 | ||||
|     snapshot = qemu_opt_get_bool(opts, "snapshot", 0); | ||||
|     ro = qemu_opt_get_bool(opts, "readonly", 0); | ||||
|     copy_on_read = qemu_opt_get_bool(opts, "copy-on-read", false); | ||||
| 
 | ||||
|     file = qemu_opt_get(opts, "file"); | ||||
|     serial = qemu_opt_get(opts, "serial"); | ||||
| @ -546,6 +548,10 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi) | ||||
|         bdrv_flags |= (BDRV_O_SNAPSHOT|BDRV_O_CACHE_WB|BDRV_O_NO_FLUSH); | ||||
|     } | ||||
| 
 | ||||
|     if (copy_on_read) { | ||||
|         bdrv_flags |= BDRV_O_COPY_ON_READ; | ||||
|     } | ||||
| 
 | ||||
|     if (media == MEDIA_CDROM) { | ||||
|         /* CDROM is fine for any interface, don't check.  */ | ||||
|         ro = 1; | ||||
|  | ||||
| @ -860,9 +860,10 @@ ETEXI | ||||
|         .args_type  = "pci_addr:s,opts:s", | ||||
|         .params     = "[[<domain>:]<bus>:]<slot>\n" | ||||
|                       "[file=file][,if=type][,bus=n]\n" | ||||
|                       "[,unit=m][,media=d][index=i]\n" | ||||
|                       "[,unit=m][,media=d][,index=i]\n" | ||||
|                       "[,cyls=c,heads=h,secs=s[,trans=t]]\n" | ||||
|                       "[snapshot=on|off][,cache=on|off]", | ||||
|                       "[,snapshot=on|off][,cache=on|off]\n" | ||||
|                       "[,readonly=on|off][,copy-on-read=on|off]", | ||||
|         .help       = "add drive to PCI storage controller", | ||||
|         .mhandler.cmd = drive_hot_add, | ||||
|     }, | ||||
|  | ||||
| @ -109,6 +109,10 @@ static QemuOptsList qemu_drive_opts = { | ||||
|             .name = "bps_wr", | ||||
|             .type = QEMU_OPT_NUMBER, | ||||
|             .help = "limit write bytes per second", | ||||
|         },{ | ||||
|             .name = "copy-on-read", | ||||
|             .type = QEMU_OPT_BOOL, | ||||
|             .help = "copy read data from backing file into image file", | ||||
|         }, | ||||
|         { /* end of list */ } | ||||
|     }, | ||||
|  | ||||
| @ -135,7 +135,7 @@ DEF("drive", HAS_ARG, QEMU_OPTION_drive, | ||||
|     "       [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n" | ||||
|     "       [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]\n" | ||||
|     "       [,serial=s][,addr=A][,id=name][,aio=threads|native]\n" | ||||
|     "       [,readonly=on|off]\n" | ||||
|     "       [,readonly=on|off][,copy-on-read=on|off]\n" | ||||
|     "       [[,bps=b]|[[,bps_rd=r][,bps_wr=w]]][[,iops=i]|[[,iops_rd=r][,iops_wr=w]]\n" | ||||
|     "                use 'file' as a drive image\n", QEMU_ARCH_ALL) | ||||
| STEXI | ||||
| @ -187,6 +187,9 @@ host disk is full; report the error to the guest otherwise). | ||||
| The default setting is @option{werror=enospc} and @option{rerror=report}. | ||||
| @item readonly | ||||
| Open drive @option{file} as read-only. Guest write attempts will fail. | ||||
| @item copy-on-read=@var{copy-on-read} | ||||
| @var{copy-on-read} is "on" or "off" and enables whether to copy read backing | ||||
| file sectors into the image file. | ||||
| @end table | ||||
| 
 | ||||
| By default, writethrough caching is used for all block device.  This means that | ||||
| @ -218,6 +221,10 @@ like your host losing power, the disk storage getting disconnected accidently, | ||||
| etc. you're image will most probably be rendered unusable.   When using | ||||
| the @option{-snapshot} option, unsafe caching is always used. | ||||
| 
 | ||||
| Copy-on-read avoids accessing the same backing file sectors repeatedly and is | ||||
| useful when the backing file is over a slow network.  By default copy-on-read | ||||
| is off. | ||||
| 
 | ||||
| Instead of @option{-cdrom} you can use: | ||||
| @example | ||||
| qemu -drive file=file,index=2,media=cdrom | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Stefan Hajnoczi
						Stefan Hajnoczi