[Bug 37456] New: canvas cache on server is inefficient (contains two entries only!)

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Sun May 22 02:26:21 PDT 2011


https://bugs.freedesktop.org/show_bug.cgi?id=37456

           Summary: canvas cache on server is inefficient (contains two
                    entries only!)
           Product: Spice
           Version: unspecified
          Platform: Other
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: medium
         Component: server
        AssignedTo: spice-bugs at lists.freedesktop.org
        ReportedBy: ykaul at redhat.com


It appears there is some nice caching infrastructure for canvas in the server
(regretfully called image_put and image_get (server/red_worker.c), but it
contains only up to 2(!) entries (IMAGE_CACHE_MAX_ITEMS is defined as 2),
making it completely useless.
I changed it to contain more, and saw no issues with it. 
I did see XP guests use more entries when it was enabled.
Linux (F15) guests did not use it anyway.


All that I've done to gather the above is sprinkle some red_printf()'s after
reading the code: 

[ykaul at ykaul spice]$ git diff server/red_worker.c
diff --git a/server/red_worker.c b/server/red_worker.c
index bee86b9..16bf4b6 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -3494,7 +3494,7 @@ static int image_cache_hit(ImageCache *cache, uint64_t
id)
 static void image_cache_remove(ImageCache *cache, ImageCacheItem *item)
 {
     ImageCacheItem **now;
-
+    red_printf("id %lu, hash location: %lu", item->id, item->id %
IMAGE_CACHE_HASH_SIZE);
     now = &cache->hash_table[item->id % IMAGE_CACHE_HASH_SIZE];
     for (;;) {
         ASSERT(*now);
@@ -3518,9 +3518,10 @@ static void image_cache_put(SpiceImageCache
*spice_cache, uint64_t id, pixman_im
 {
     ImageCache *cache = (ImageCache *)spice_cache;
     ImageCacheItem *item;
-
 #ifndef IMAGE_CACHE_AGE
+    red_printf("cache->num_items: %u", cache->num_items);
     if (cache->num_items == IMAGE_CACHE_MAX_ITEMS) {
+    red_printf("cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!");
         ImageCacheItem *tail = (ImageCacheItem *)ring_get_tail(&cache->lru);
         ASSERT(tail);
         image_cache_remove(cache, tail);
@@ -3536,7 +3537,7 @@ static void image_cache_put(SpiceImageCache *spice_cache,
uint64_t id, pixman_im
 #endif
     item->image = pixman_image_ref(image);
     ring_item_init(&item->lru_link);
-
+    red_printf("id %lu, hash location: %lu", item->id, item->id %
IMAGE_CACHE_HASH_SIZE);
     item->next = cache->hash_table[item->id % IMAGE_CACHE_HASH_SIZE];
     cache->hash_table[item->id % IMAGE_CACHE_HASH_SIZE] = item;




here's a run example:
do_spice_init: ykaul: starting 0.6.3
spice_server_add_interface: SPICE_INTERFACE_KEYBOARD
spice_server_add_interface: SPICE_INTERFACE_MOUSE
spice_server_add_interface: SPICE_INTERFACE_QXL
red_worker_main: begin
spice_server_add_interface: SPICE_INTERFACE_PLAYBACK
handle_dev_destroy_surfaces:
handle_dev_destroy_surfaces:
handle_dev_input: start
QEMU 0.14.50 monitor - type 'help' for more information
(qemu) handle_dev_destroy_surfaces:
handle_dev_destroy_surfaces:
reds_handle_read_link_done: Peer doesn't support AUTH selection
reds_handle_main_link:
reds_show_new_channel: channel 1:0, connected successfully, over Non Secure
link
main_channel_link:
reds_handle_read_link_done: Peer doesn't support AUTH selection
reds_show_new_channel: channel 4:0, connected successfully, over Non Secure
link
red_dispatcher_set_cursor_peer:
main_channel_handle_parsed: net test: latency 0.260000 ms, bitrate 141221900
bps (134.679699 Mbps)
handle_dev_input: cursor connect
reds_handle_read_link_done: Peer doesn't support AUTH selection
reds_show_new_channel: channel 5:0, connected successfully, over Non Secure
link
reds_handle_read_link_done: Peer doesn't support AUTH selection
reds_show_new_channel: channel 2:0, connected successfully, over Non Secure
link
red_dispatcher_set_peer:
handle_dev_input: connect
handle_new_display_channel: jpeg disabled
handle_new_display_channel: zlib-over-glz disabled
image_cache_put: cache->num_items: 0
image_cache_put: id 16692984622346338345, hash location: 41
image_cache_put: cache->num_items: 1
image_cache_put: id 3280720828400402688, hash location: 256
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 16692984622346338345, hash location: 41
image_cache_put: id 9713389464692457571, hash location: 99
reds_handle_read_link_done: Peer doesn't support AUTH selection
reds_show_new_channel: channel 3:0, connected successfully, over Non Secure
link
inputs_link:
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 9713389464692457571, hash location: 99
image_cache_put: id 16692984622346338345, hash location: 41
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 16692984622346338345, hash location: 41
image_cache_put: id 9323874577061568761, hash location: 249
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 3280720828400402688, hash location: 256
image_cache_put: id 9713389464692457571, hash location: 99
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 9323874577061568761, hash location: 249
image_cache_put: id 10655197967897838368, hash location: 800
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 9713389464692457571, hash location: 99
image_cache_put: id 6355812529235034368, hash location: 256
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 10655197967897838368, hash location: 800
image_cache_put: id 17566795881926623488, hash location: 256
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 6355812529235034368, hash location: 256
image_cache_put: id 13707069709730971904, hash location: 256
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 17566795881926623488, hash location: 256
image_cache_put: id 1412022055884816640, hash location: 256
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 13707069709730971904, hash location: 256
image_cache_put: id 6355812529235034368, hash location: 256
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 1412022055884816640, hash location: 256
image_cache_put: id 7051416241264910410, hash location: 74
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 6355812529235034368, hash location: 256
image_cache_put: id 12743327117782106113, hash location: 1
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 7051416241264910410, hash location: 74
image_cache_put: id 3738288703970295809, hash location: 1
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 12743327117782106113, hash location: 1
image_cache_put: id 16714730741845475333, hash location: 5
image_cache_put: cache->num_items: 2
image_cache_put: cache->num_items == IMAGE_CACHE_MAX_ITEMS !!!
image_cache_remove: id 3738288703970295809, hash location: 1
image_cache_put: id 12743327117782106113, hash location: 1

-- 
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


More information about the spice-bugs mailing list