Hi,
I am implementing a framework based on Memcached. There's a problem that
confused me a lot. The framework basically change the eviction policy, so
when it calls to evict an item, it might not evict the tail item at COLD
LRU, instead it will look for a "more suitable" item to evict and it will
reinsert the tail items to the head of COLD queue.
It mostly works fine, but sometimes it causes a SegFault when reinsertion
happens very frequently (like in almost each eviction). The SegFault is
triggered in the crawler part. As attached, it seems when the crawler loops
through the item queue, it reaches an invalid memory address. The bug
happens after around 50000000~10000000 GET/SET (9:1) operations. I used
Memaslap for testing.
Could anyone give me some suggestions of the reasons which cause such error?
Here is the gdb messages:
*Thread 8 "memcached" received signal SIGSEGV, Segmentation fault.*
*[Switching to Thread 0x7ffff4d6c700 (LWP 36414)]*
*do_item_crawl_q (it=it@entry=0x55555579e7e0 <crawlers+12320>)*
* at items.c:2015*
*2015 it->prev->next = it->next;*
*(gdb) print it->prev*
*$5 = (struct _stritem *) 0x4f4d6355616d5471*
*(gdb) print it->prev->next*
*Cannot access memory at address 0x4f4d6355616d5479*
*(gdb) print it->next*
*$6 = (struct _stritem *) 0x7a59324376753351*
*(gdb) print it->next->prev*
*Cannot access memory at address 0x7a59324376753361*
*(gdb) print it->nkey*
*$7 = 0 '\000'*
*(gdb) *
Here is the part that triggers the error:
*2012 assert(it->next != it);*
*2013 if (it->next) {*
*2014 assert(it->prev->next == it);*
*2015 it->prev->next = it->next;*
*2016 it->next->prev = it->prev;*
*2017 } else {*
*2018 /* Tail. Move this above? */*
*2019 it->prev->next = 0;*
*2020 }*
(I'm also confused why the assert function in line 2014 does not give
error?)
Thank you very much for helping!
Best,
Qingchen
--
---
You received this message because you are subscribed to the Google Groups
"memcached" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/memcached/ed80d89c-eb8f-4682-9938-a7cd024d4d10n%40googlegroups.com.