From: Orit Wasserman <owasserm@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: peter.maydell@linaro.org, aliguori@us.ibm.com,
quintela@redhat.com, stefanha@gmail.com, qemu-devel@nongnu.org,
mdroth@linux.vnet.ibm.com, blauwirbel@gmail.com,
Petter Svard <petters@cs.umu.se>,
Benoit Hudzia <benoit.hudzia@sap.com>,
avi@redhat.com, Aidan Shribman <aidan.shribman@sap.com>,
pbonzini@redhat.com, lcapitulino@redhat.com, chegu_vinod@hp.com
Subject: Re: [Qemu-devel] [PATCH 04/11] Add cache handling functions
Date: Sun, 29 Jul 2012 09:16:29 +0300 [thread overview]
Message-ID: <5014D53D.1090102@redhat.com> (raw)
In-Reply-To: <5011BBE8.7010901@redhat.com>
On 07/27/2012 12:51 AM, Eric Blake wrote:
> On 07/25/2012 08:50 AM, Orit Wasserman wrote:
>> Add LRU page cache mechanism.
>> The page are accessed by their address.
>>
>> Signed-off-by: Benoit Hudzia <benoit.hudzia@sap.com>
>> Signed-off-by: Petter Svard <petters@cs.umu.se>
>> Signed-off-by: Aidan Shribman <aidan.shribman@sap.com>
>> Signed-off-by: Orit Wasserman <owasserm@redhat.com>
>
>> +
>> +PageCache *cache_init(int64_t num_pages, unsigned int page_size)
>> +{
>> + int64_t i;
>> +
>> + PageCache *cache = g_malloc(sizeof(*cache));
>> +
>> + if (num_pages <= 0) {
>> + DPRINTF("invalid number of pages\n");
>> + return NULL;
>
> Unless memory returned by g_malloc() is automatically garbage collected,
> then this is a memory leak.
>
good catch I will move the check up.
>> +static unsigned long cache_get_cache_pos(const PageCache *cache,
>> + uint64_t address)
>> +{
>> + unsigned long pos;
>
> On a 32-bit platform, this could be 32 bits...
I will switch it to uint64_t.
>
>> +
>> + g_assert(cache->max_num_items);
>> + pos = (address / cache->page_size) & (cache->max_num_items - 1);
>
> while cache->max_num_items is int64_t and could thus overflow. Then
> again, a 32-bit platform can't access more than 4G memory, so I think
> this limitation is theoretical; still, I can't help but wonder if you
> should be consistently using size_t instead of a mix of 'unsigned int',
> 'int32_t', and 'unsigned long' in referring to sizing within your cache
> table.
>
same here
>> +int64_t cache_resize(PageCache *cache, int64_t new_num_pages)
>> +{
>
>> +
>> + /* move all data from old cache */
>> + for (i = 0; i < cache->max_num_items; i++) {
>> + old_it = &cache->page_cache[i];
>> + if (old_it->it_addr != -1) {
>> + /* check for collision , if there is, keep the first value */
>
> No space before ',' in English sentences.
>
> The comment about 'keep the first value' is wrong, you are keeping the
> 'MRU page'...
>
I will fix it
>> + new_it = cache_get_by_addr(new_cache, old_it->it_addr);
>> + if (new_it->it_data) {
>> + /* keep the oldest page */
>
> ...also wrong, you are keeping the MRU page, not the oldest page...
here too
>
>> + if (new_it->it_age >= old_it->it_age) {
>> + g_free(old_it->it_data);
>
> since a larger it_age implies more recently used.
>
>> +++ b/qemu-common.h
>> @@ -1,3 +1,4 @@
>> +
>> /* Common header file that is included by all of qemu. */
>> #ifndef QEMU_COMMON_H
>> #define QEMU_COMMON_H
>> @@ -411,6 +412,18 @@ static inline uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
>> /* Round number up to multiple */
>> #define QEMU_ALIGN_UP(n, m) QEMU_ALIGN_DOWN((n) + (m) - 1, (m))
>>
>> +static inline bool is_power_of_2(int64_t value)
>> +{
>> + if (!value) {
>> + return 0;
>> + }
>> +
>> + return !(value & (value - 1));
>
> Technically undefined by C99 if value is INT64_MIN, since 'value - 1'
> then overflows. Do you want this function to take uint64_t instead, to
> guarantee defined results even for 0x8000000000000000?
>
good idea.
Thanks,
Orit
next prev parent reply other threads:[~2012-07-29 6:16 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-25 14:50 [Qemu-devel] [PATCH 00/11] Migration next v6 Orit Wasserman
2012-07-25 14:50 ` Orit Wasserman
2012-07-25 14:50 ` [Qemu-devel] [PATCH 01/11] Add migration capabilities Orit Wasserman
2012-07-25 14:50 ` [Qemu-devel] [PATCH 02/11] Add migrate_set_parameter and query-migrate-parameters Orit Wasserman
2012-07-25 14:50 ` [Qemu-devel] [PATCH 03/11] Add XBZRLE documentation Orit Wasserman
2012-07-25 14:50 ` [Qemu-devel] [PATCH 04/11] Add cache handling functions Orit Wasserman
2012-07-26 21:51 ` Eric Blake
2012-07-29 6:16 ` Orit Wasserman [this message]
2012-07-25 14:50 ` [Qemu-devel] [PATCH 05/11] Add uleb encoding/decoding functions Orit Wasserman
2012-07-25 14:50 ` [Qemu-devel] [PATCH 06/11] Add xbzrle_encode_buffer and xbzrle_decode_buffer functions Orit Wasserman
2012-07-26 21:58 ` Eric Blake
2012-08-15 16:22 ` Igor Mitsyanko
2012-08-15 16:36 ` Eric Blake
2012-07-25 14:50 ` [Qemu-devel] [PATCH 07/11] Add XBZRLE to ram_save_block and ram_save_live Orit Wasserman
2012-07-26 22:20 ` Eric Blake
2012-07-29 6:34 ` Orit Wasserman
2012-07-25 14:50 ` [Qemu-devel] [PATCH 08/11] Add migrate_set_cachesize command Orit Wasserman
2012-07-26 22:22 ` Eric Blake
2012-07-25 14:50 ` [Qemu-devel] [PATCH 09/11] Add migration accounting for normal and duplicate pages Orit Wasserman
2012-07-26 22:41 ` Eric Blake
2012-07-29 6:57 ` Orit Wasserman
2012-07-25 14:50 ` [Qemu-devel] [PATCH 10/11] Add XBZRLE statistics Orit Wasserman
2012-07-26 22:48 ` Eric Blake
2012-07-29 7:10 ` Orit Wasserman
2012-07-25 14:50 ` [Qemu-devel] [PATCH 11/11] Restart optimization on stage3 update version Orit Wasserman
2012-07-25 15:41 ` Vinod, Chegu
2012-07-26 5:03 ` Orit Wasserman
-- strict thread matches above, loose matches on Subject: below --
2012-08-05 9:13 [Qemu-devel] [PATCH 00/11] Migration next v10 Orit Wasserman
2012-08-05 9:13 ` [Qemu-devel] [PATCH 04/11] Add cache handling functions Orit Wasserman
2012-08-02 12:44 [Qemu-devel] [PATCH 00/11] Migration next v9 Orit Wasserman
2012-08-02 12:44 ` [Qemu-devel] [PATCH 04/11] Add cache handling functions Orit Wasserman
2012-08-01 18:01 [Qemu-devel] [PULL 00/11] Migration next Juan Quintela
2012-08-01 18:01 ` [Qemu-devel] [PATCH 04/11] Add cache handling functions Juan Quintela
2012-07-31 18:54 [Qemu-devel] [PATCH 00/11] Migration next v8 Orit Wasserman
2012-07-31 18:54 ` [Qemu-devel] [PATCH 04/11] Add cache handling functions Orit Wasserman
2012-07-29 9:42 [Qemu-devel] [PATCH 00/11] Migration next v7 Orit Wasserman
2012-07-29 9:42 ` [Qemu-devel] [PATCH 04/11] Add cache handling functions Orit Wasserman
2012-07-24 18:19 [Qemu-devel] [PATCH 00/11] Migration next v5 Juan Quintela
2012-07-24 18:19 ` [Qemu-devel] [PATCH 04/11] Add cache handling functions Juan Quintela
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=5014D53D.1090102@redhat.com \
--to=owasserm@redhat.com \
--cc=aidan.shribman@sap.com \
--cc=aliguori@us.ibm.com \
--cc=avi@redhat.com \
--cc=benoit.hudzia@sap.com \
--cc=blauwirbel@gmail.com \
--cc=chegu_vinod@hp.com \
--cc=eblake@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=petters@cs.umu.se \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefanha@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.