//
// TODO: maybe we want to munmap() larger size blocks to reclaim virtual address space?
void nbd_free (void *x) {
+ assert(x);
LOCALIZE_THREAD_LOCAL(tid_, int);
block_t *b = (block_t *)x;
assert(((size_t)b >> REGION_SCALE) < ((1 << HEADER_REGION_SCALE) / sizeof(header_t)));
// on the private free list. If we didn't find any blocks on the public free lists, allocate a new
// region, break it up into blocks and put them on the private free list.
void *nbd_malloc (size_t n) {
+ assert(n);
LOCALIZE_THREAD_LOCAL(tid_, int);
if (n < sizeof(block_t)) {
n = sizeof(block_t);
void ht_free (hash_table_t *ht) {
hash_table_i_t *hti = *ht;
do {
+ for (uint32_t i = 0; i < (1 << hti->scale); ++i) {
+ assert(hti->table[i].value == COPIED_VALUE || !IS_TAGGED(hti->table[i].value));
+ if (hti->table[i].key != DOES_NOT_EXIST) {
+ nbd_free((void *)(hti->table[i].key & MASK(48)));
+ }
+ }
hash_table_i_t *next = hti->next;
nbd_free(hti);
hti = next;
hash_table_t *ht = wd->ht;
CuTest* tc = wd->tc;
uint64_t d = wd->id;
- int iters = 20000;
+ int iters = 1000000;
SYNC_ADD(wd->wait, -1);
do { } while (*((volatile worker_data_t *)wd)->wait); // wait for all workers to be ready
- make rcu wait when its buffer gets full, instead of crashing
- fix makefile to compute dependency info as a side-effect of compilation (-MF)
-- investigate 16 byte CAS
- - ht can store GUIDs inline instead of pointers to actual keys
- - mem can keep tail pointers for free-lists and do O(1) appends
+- investigate 16 byte CAS; ht can store GUIDs inline instead of pointers to actual keys
- test ht
- optimize tracing code, still too much overhead