Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

hashpower changed #129

Open
whatsthecraic opened this issue Sep 21, 2020 · 2 comments
Open

hashpower changed #129

whatsthecraic opened this issue Sep 21, 2020 · 2 comments

Comments

@whatsthecraic
Copy link

whatsthecraic commented Sep 21, 2020

HI there,

while concurrently inserting in a hash table, the library raises the exception hashpower_changed:

  // This exception is thrown whenever we try to lock a bucket, but the
  // hashpower is not what was expected
  class hashpower_changed {};

  // After taking a lock on the table for the given bucket, this function will
  // check the hashpower to make sure it is the same as what it was before the
  // lock was taken. If it isn't unlock the bucket and throw a
  // hashpower_changed exception.
  inline void check_hashpower(size_type hp, spinlock &lock) const {
    if (hashpower() != hp) {
      lock.unlock();
      LIBCUCKOO_DBG("%s", "hashpower changed\n");
      throw hashpower_changed();
    }
  }

stack trace:

#0  0x00007ffff7cb0bbe in __cxxabiv1::__cxa_throw (obj=0x7fff7c000ba0, tinfo=0x5735f8 <typeinfo for cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, 
long> >, 4ul>::hashpower_changed>, dest=0x0) at /export/scratch2/dleo/temp/d20200723-7173-7q975d/gcc-10.2.0/libstdc++-v3/libsupc++/eh_throw.cc:78
#1  0x000000000049263f in cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::check_hashpower (this=0x7fffffffb580, hp=16, lock=...) at .
./third-party/libcuckoo/cuckoohash_map.hh:936
#2  0x0000000000498d14 in cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::lock_one (this=0x7fffffffb580, hp=16, i=87) at ../third-par
ty/libcuckoo/cuckoohash_map.hh:991
#3  0x0000000000498a54 in cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::slot_search<std::integral_constant<bool, false> > (this=0x7
fffffffb580, hp=16, i1=32472, i2=49204) at ../third-party/libcuckoo/cuckoohash_map.hh:1645
#4  0x0000000000495937 in cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::cuckoopath_search<std::integral_constant<bool, false> > (th
is=0x7fffffffb580, hp=16, cuckoo_path=..., i1=32472, i2=49204) at ../third-party/libcuckoo/cuckoohash_map.hh:1422
#5  0x0000000000492a44 in cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::run_cuckoo<std::integral_constant<bool, false> > (this=0x7f
ffffffb580, b=..., insert_bucket=@0x7fffe35e48d8: 0, insert_slot=@0x7fffe35e48d0: 0) at ../third-party/libcuckoo/cuckoohash_map.hh:1384
#6  0x000000000048fe6d in cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::cuckoo_insert<std::integral_constant<bool, false>, unsigned
 long> (this=0x7fffffffb580, hv=..., b=..., key=@0x83c3e20: 10321624) at ../third-party/libcuckoo/cuckoohash_map.hh:1262
#7  0x000000000048dd6e in cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::cuckoo_insert_loop<std::integral_constant<bool, false>, uns
igned long> (this=0x7fffffffb580, hv=..., b=..., key=@0x83c3e20: 10321624) at ../third-party/libcuckoo/cuckoohash_map.hh:1200
#8  0x000000000048bbe4 in cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::uprase_fn<unsigned long&, cuckoohash_map<unsigned long, lon
g, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::upsert<unsigned long&, cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std
::allocator<std::pair<unsigned long const, long> >, 4ul>::insert<unsigned long&, long&>(unsigned long&, long&)::{lambda(long&)#1}, long&>(unsigned long&, cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned
 long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::insert<unsigned long&, long&>(unsigned long&, long&)::{lambda(long&)#1}, long&)::{lambda(long&)#1}, long&>(unsigned long&, cuckoohash_map<unsigned long, long, std::hash<
unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::insert<unsigned long&, long&>(unsigned long&, long&)::{lambda(long&)#1}, long&) (this=0x7fffffffb580, key=@0x83c3e20: 10321624, fn=
...) at ../third-party/libcuckoo/cuckoohash_map.hh:574
#9  0x00000000004899a0 in cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::upsert<unsigned long&, cuckoohash_map<unsigned long, long, 
std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::insert<unsigned long&, long&>(unsigned long&, long&)::{lambda(long&)#1}, long&>(unsigned long&, cuckoohash_map<unsigned l
ong, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::insert<unsigned long&, long&>(unsigned long&, long&)::{lambda(long&)#1}, long&) (this=0x7fffffffb580, key=@0x8
3c3e20: 10321624, fn=...) at ../third-party/libcuckoo/cuckoohash_map.hh:594
#10 0x0000000000487f47 in cuckoohash_map<unsigned long, long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, long> >, 4ul>::insert<unsigned long&, long&> (this=0x7fffffffb580, key=@0x
83c3e20: 10321624) at ../third-party/libcuckoo/cuckoohash_map.hh:653

fedora 30 linux 5.0.17, gcc 10.1, debug build, libcuckoo @ f313804

Can you elaborate what this is and how to solve?

Thanks

@manugoyal
Copy link
Contributor

Hello! That is very interesting. The library should be catching the hashpower_changed exception here. So I'm curious how it managed to propagate out of run_cuckoo (line 1384 on your stack trace).

Do you happen to have a way to reproduce this issue, or somehow find out why we're not catching the hashpower_changed exception?

@whatsthecraic
Copy link
Author

Hi there. I've only caught this error once, while concurrently running 40 logical threads on a server with 40 physical threads. I'm not able to provide you more context atm. The compiler was actually GCC v10.2 rather than GCC v10.1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants