[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