qcow2: Make cache=writethrough default
The performance of qcow2 has improved meanwhile, so we don't need to special-case it any more. Switch the default to write-through caching like all other block drivers. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
fc5b81d1f6
commit
0aa217e461
3
block.h
3
block.h
|
@ -37,9 +37,8 @@ typedef struct QEMUSnapshotInfo {
|
||||||
bdrv_file_open()) */
|
bdrv_file_open()) */
|
||||||
#define BDRV_O_NOCACHE 0x0020 /* do not use the host page cache */
|
#define BDRV_O_NOCACHE 0x0020 /* do not use the host page cache */
|
||||||
#define BDRV_O_CACHE_WB 0x0040 /* use write-back caching */
|
#define BDRV_O_CACHE_WB 0x0040 /* use write-back caching */
|
||||||
#define BDRV_O_CACHE_DEF 0x0080 /* use default caching */
|
|
||||||
|
|
||||||
#define BDRV_O_CACHE_MASK (BDRV_O_NOCACHE | BDRV_O_CACHE_WB | BDRV_O_CACHE_DEF)
|
#define BDRV_O_CACHE_MASK (BDRV_O_NOCACHE | BDRV_O_CACHE_WB)
|
||||||
|
|
||||||
void bdrv_info(Monitor *mon);
|
void bdrv_info(Monitor *mon);
|
||||||
void bdrv_info_stats(Monitor *mon);
|
void bdrv_info_stats(Monitor *mon);
|
||||||
|
|
|
@ -145,14 +145,6 @@ static int qcow_open(BlockDriverState *bs, const char *filename, int flags)
|
||||||
QCowHeader header;
|
QCowHeader header;
|
||||||
uint64_t ext_end;
|
uint64_t ext_end;
|
||||||
|
|
||||||
/* Performance is terrible right now with cache=writethrough due mainly
|
|
||||||
* to reference count updates. If the user does not explicitly specify
|
|
||||||
* a caching type, force to writeback caching.
|
|
||||||
*/
|
|
||||||
if ((flags & BDRV_O_CACHE_DEF)) {
|
|
||||||
flags |= BDRV_O_CACHE_WB;
|
|
||||||
flags &= ~BDRV_O_CACHE_DEF;
|
|
||||||
}
|
|
||||||
ret = bdrv_file_open(&s->hd, filename, flags);
|
ret = bdrv_file_open(&s->hd, filename, flags);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -148,9 +148,7 @@ an internal copy of the data.
|
||||||
|
|
||||||
Some block drivers perform badly with @option{cache=writethrough}, most notably,
|
Some block drivers perform badly with @option{cache=writethrough}, most notably,
|
||||||
qcow2. If performance is more important than correctness,
|
qcow2. If performance is more important than correctness,
|
||||||
@option{cache=writeback} should be used with qcow2. By default, if no explicit
|
@option{cache=writeback} should be used with qcow2.
|
||||||
caching is specified for a qcow2 disk image, @option{cache=writeback} will be
|
|
||||||
used. For all other disk types, @option{cache=writethrough} is the default.
|
|
||||||
|
|
||||||
Instead of @option{-cdrom} you can use:
|
Instead of @option{-cdrom} you can use:
|
||||||
@example
|
@example
|
||||||
|
|
4
vl.c
4
vl.c
|
@ -2239,7 +2239,7 @@ int drive_init(struct drive_opt *arg, int snapshot, void *opaque)
|
||||||
unit_id = -1;
|
unit_id = -1;
|
||||||
translation = BIOS_ATA_TRANSLATION_AUTO;
|
translation = BIOS_ATA_TRANSLATION_AUTO;
|
||||||
index = -1;
|
index = -1;
|
||||||
cache = 3;
|
cache = 1;
|
||||||
|
|
||||||
if (machine->use_scsi) {
|
if (machine->use_scsi) {
|
||||||
type = IF_SCSI;
|
type = IF_SCSI;
|
||||||
|
@ -2557,8 +2557,6 @@ int drive_init(struct drive_opt *arg, int snapshot, void *opaque)
|
||||||
bdrv_flags |= BDRV_O_NOCACHE;
|
bdrv_flags |= BDRV_O_NOCACHE;
|
||||||
else if (cache == 2) /* write-back */
|
else if (cache == 2) /* write-back */
|
||||||
bdrv_flags |= BDRV_O_CACHE_WB;
|
bdrv_flags |= BDRV_O_CACHE_WB;
|
||||||
else if (cache == 3) /* not specified */
|
|
||||||
bdrv_flags |= BDRV_O_CACHE_DEF;
|
|
||||||
if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
|
if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
|
||||||
fprintf(stderr, "qemu: could not open disk image %s\n",
|
fprintf(stderr, "qemu: could not open disk image %s\n",
|
||||||
file);
|
file);
|
||||||
|
|
Loading…
Reference in New Issue