qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Alberto Garcia <berto@igalia.com>, qemu-devel@nongnu.org
Cc: Stefan Hajnoczi <stefanha@redhat.com>, qemu-block@nongnu.org
Subject: Re: [Qemu-devel] [Qemu-block] [PATCH 5/7] qcow2: use a hash to look for entries in the L2 cache
Date: Fri, 08 May 2015 17:46:57 +0200	[thread overview]
Message-ID: <554CDA71.8060606@redhat.com> (raw)
In-Reply-To: <38be38957aff5457fd811db71706a6f645df5c7e.1430919406.git.berto@igalia.com>

On 06.05.2015 15:39, Alberto Garcia wrote:
> The current cache algorithm traverses the array starting always from
> the beginning, so the average number of comparisons needed to perform
> a lookup is proportional to the size of the array.
>
> By using a hash of the offset as the starting point, lookups are
> faster and independent from the array size.
>
> The hash is computed using the cluster number of the table, multiplied
> by 4 to make it perform better when there are collisions.
>
> In my tests, using a cache with 2048 entries, this reduces the average
> number of comparisons per lookup from 430 to 2.5.
>
> Signed-off-by: Alberto Garcia <berto@igalia.com>
> ---
>   block/qcow2-cache.c | 9 +++++++--
>   1 file changed, 7 insertions(+), 2 deletions(-)

So it's a direct-mapped cache, unless the entry has been used, in which 
case it becomes a fully associative cache...

Let's assume the cache is full. Now this hash algorithm (direct mapped 
cache) basically becomes futile, because the LRU algorithm (fully 
associative cache) takes over, and any entry (the LRU entry) is 
replaced, independently of the cache. Thus, the entry will most probably 
not be placed at its hashed position. So once the cache is full, I guess 
this algorithm doesn't help a lot, does it?

(I'm sorry if you had this discussion before...)

Max

  parent reply	other threads:[~2015-05-08 15:47 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-06 13:39 [Qemu-devel] [PATCH v2 0/7] qcow2 L2/refcount cache improvements Alberto Garcia
2015-05-06 13:39 ` [Qemu-devel] [PATCH 1/7] qcow2: use one single memory block for the L2/refcount cache tables Alberto Garcia
2015-05-07 10:14   ` Stefan Hajnoczi
2015-05-08 15:03   ` [Qemu-devel] [Qemu-block] " Max Reitz
2015-05-06 13:39 ` [Qemu-devel] [PATCH 2/7] qcow2: simplify qcow2_cache_put() and qcow2_cache_entry_mark_dirty() Alberto Garcia
2015-05-07 10:15   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-05-08 15:12   ` Max Reitz
2015-05-06 13:39 ` [Qemu-devel] [PATCH 3/7] qcow2: use an LRU algorithm to replace entries from the L2 cache Alberto Garcia
2015-05-07 10:16   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-05-07 14:55   ` [Qemu-devel] " Eric Blake
2015-05-07 15:01     ` Alberto Garcia
2015-05-08 15:22   ` [Qemu-devel] [Qemu-block] " Max Reitz
2015-05-06 13:39 ` [Qemu-devel] [PATCH 4/7] qcow2: remove qcow2_cache_find_entry_to_replace() Alberto Garcia
2015-05-07 10:17   ` Stefan Hajnoczi
2015-05-08 15:27   ` [Qemu-devel] [Qemu-block] " Max Reitz
2015-05-06 13:39 ` [Qemu-devel] [PATCH 5/7] qcow2: use a hash to look for entries in the L2 cache Alberto Garcia
2015-05-07 10:18   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-05-08 15:46   ` Max Reitz [this message]
2015-05-08 16:48     ` Alberto Garcia
2015-05-06 13:39 ` [Qemu-devel] [PATCH 6/7] qcow2: make qcow2_cache_put() a void function Alberto Garcia
2015-05-07 10:20   ` Stefan Hajnoczi
2015-05-08 15:51   ` [Qemu-devel] [Qemu-block] " Max Reitz
2015-05-08 16:59     ` Alberto Garcia
2015-05-06 13:39 ` [Qemu-devel] [PATCH 7/7] qcow2: style fixes in qcow2-cache.c Alberto Garcia
2015-05-07 10:20   ` Stefan Hajnoczi
2015-05-08 15:52   ` [Qemu-devel] [Qemu-block] " Max Reitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=554CDA71.8060606@redhat.com \
    --to=mreitz@redhat.com \
    --cc=berto@igalia.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).