#include "rcu.h"
// Setting MAX_LEVELS to 1 essentially makes this data structure the Harris-Michael lock-free list (see list.c).
-#define MAX_LEVELS 15
+#define MAX_LEVELS 24
enum unlink {
FORCE_UNLINK,
#endif
static int random_levels (skiplist_t *sl) {
- unsigned r = nbd_rand();
+ uint64_t r = nbd_rand();
int z = __builtin_ctz(r);
int levels = (int)(z / 1.5);
if (levels == 0)
#include "runtime.h"
#include "mem.h"
-#define MAX_LEVELS 32
+#define MAX_LEVELS 24
typedef struct node {
map_key_t key;
};
static int random_levels (skiplist_t *sl) {
- unsigned r = nbd_rand();
+ uint64_t r = nbd_rand();
int z = __builtin_ctz(r);
int levels = (int)(z / 1.5);
if (levels == 0)
-------
- verify the memory management of keys in list, skiplist, and hashtable
- transaction tests
-- port perf tests from lib-high-scale
-- characterize the performance of hashtable vs. skiplist vs. list
- validate function arguments in interface functions
- document usage
- document algorithms
- use a shared scan for write-set validation in txn, similar to ht copy logic
- experiment with the performance impact of not passing the hash between functions in ht
- experiment with embedding the nstring keys in the list/skiplist nodes
+- lower skiplist's high_water when the actual number of levels in use drops
+- non-power-of 2 sized hashtables for improved memory usage
+- mem2
features
--------
- allow values of 0 to be inserted into maps (change DOES_NOT_EXIST to something other than 0)
- read-committed type transactions
- recycle free regions across size-classes and between threads
-
-