
On Tue, Sep 12, 2017 at 05:21:53PM -0400, John Ferlan wrote:
On 09/07/2017 02:09 AM, Liu Qing wrote:
Random write IOPS will drop dramatically if qcow2 l2 cache could not cover the whole disk. This patch gives libvirt user a chance to adjust the qcow2 cache configuration.
Three new qcow2 driver parameters are added. They are l2-cache-size, refcount-cache-size and cache-clean-interval.
The following are from qcow2-cache.txt. The amount of virtual disk that can be mapped by the L2 and refcount caches (in bytes) is: disk_size = l2_cache_size * cluster_size / 8 disk_size = refcount_cache_size * cluster_size * 8 / refcount_bits
The parameter "cache-clean-interval" defines an interval (in seconds). All cache entries that haven't been accessed during that interval are removed from memory.
Suggestion, rewrite a bit:
Three new qcow2 driver parameters (l2-cache-size, refcount-cache-size and cache-clean-interval) are added as attributes to a new <qcow2> subelement for a <driver name='qemu' type='qcow2'...> of a <disk> element. The QEMU source docs/qcow2-cache.txt provides the guidelines for defining/configuring values for each.
...
That is - let's not bother with repeating what's in the document since it can change, but provide enough information that someone with curiosity would know where to look.
I am thinking add a web link but afraid of 404 error when the link is not accessable. A indirect link like docs/qcow2-cache.txt is a good idea.
Question from me: does "cache='none'" need to be set in the <driver> element for this to work properly? Do any of the cache values make sense? If it must be none, then we need to check that. If something doesn't make ense, we need to check that too.
The cache attribute in driver element is how qemu will deals with page cache of qcow2 file on the host. When opening a qcow2 file on host, the oflag will be dertimined by cache. L2 and refcount tables are metadatas of qcow2. So cache='xxx' determines how the guest data will be cached, and l2/refcount table cache controls the metadata cache.
if (def->src->auth) { diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index ed8cb6e..391aaba 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1433,6 +1433,12 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, qemuformat = "luks"; virBufferAsprintf(buf, "format=%s,", qemuformat); } + if (disk->src->l2_cache_size > 0) + virBufferAsprintf(buf, "l2-cache-size=%llu,", disk->src->l2_cache_size); + if (disk->src->refcount_cache_size > 0) + virBufferAsprintf(buf, "refcount-cache-size=%llu,", disk->src->refcount_cache_size); + if (disk->src->cache_clean_interval > 0) + virBufferAsprintf(buf, "cache-clean-interval=%llu,", disk->src->cache_clean_interval);
These don't belong in this patch, they belong in the next patch. We're not adding the .args here.
I can make all the above changes for you - not a problem. But please let me know your thoughts on whether we should keep the sizing recommendation in formatdomain.html.in or just point at the qemu source document. It's a fine line - I like the example, but I also see the downside. A point to source document is fine. I have done all the modifications in v5. If any missing please let me know. Thanks. Qing
John