You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The areas denoted by ^_^ are arrays of pointers to further Skiplist Nodes. The left-to-right logic is still in place and works the same. However, when it's time to go "down" we don't use a pointer to the next-lower level. Instead, we have a fixed-size array associated with the node which allows us to go down by simply decrementing the level.
Note: this will fundamentally change how the skiplist is traversed at the physical level, while keeping the logical bits the same (forward and down). The primary concern I have is that my current SkiplistNode struct only requires 32 bytes; if I end up requiring a MAX_LEVELS (32) element array of pointers (8 bytes) PER NODE then we're going to drastically increase the amount of memory our skiplist consumes. This will need to be contrasted with the performance gains from better cache utilization.
My original statement above (about 15 minutes ago) indicated that we would still have the same number of SkiplistNodes in the Skip List; this was misleading. The pipes above |I2| are meant to indicate a single array as pat of a single SkiplistNode that contains that array. (I've updated the ASCII diagram accordingly).
Also of import: if we implement this, we will have to have a node per buffer no matter what, and the slnode will always be the same size so it really just becomes part of the cost of doing business. This means we will no longer need a nearest_neighbor concept which could eliminate a few things.
For future reference, tyche version 0.0.17 performed as follows:
e.g.: bin/tyche -m 1500000000 -p /tmp/ram_drive -d 60 -v -D 5 -U 5
U 0 D 0 100% mem: 323 million
U 5 D 0 100% mem: 235 million
U 0 D 5 100% mem: 186 million
U 5 D 5 100% mem: 139 million
The text was updated successfully, but these errors were encountered:
Consider removing the ->down pointer for skip lists and switching to fixed-size arrays:
The areas denoted by
^_^
are arrays of pointers to further Skiplist Nodes. The left-to-right logic is still in place and works the same. However, when it's time to go "down" we don't use a pointer to the next-lower level. Instead, we have a fixed-size array associated with the node which allows us to go down by simply decrementing the level.Note: this will fundamentally change how the skiplist is traversed at the physical level, while keeping the logical bits the same (forward and down). The primary concern I have is that my current SkiplistNode struct only requires 32 bytes; if I end up requiring a MAX_LEVELS (32) element array of pointers (8 bytes) PER NODE then we're going to drastically increase the amount of memory our skiplist consumes. This will need to be contrasted with the performance gains from better cache utilization.
My original statement above (about 15 minutes ago) indicated that we would still have the same number of SkiplistNodes in the Skip List; this was misleading. The pipes above
|I2|
are meant to indicate a single array as pat of a single SkiplistNode that contains that array. (I've updated the ASCII diagram accordingly).Also of import: if we implement this, we will have to have a node per buffer no matter what, and the slnode will always be the same size so it really just becomes part of the cost of doing business. This means we will no longer need a
nearest_neighbor
concept which could eliminate a few things.Update: for reference: http://ticki.github.io/blog/skip-lists-done-right/
For future reference, tyche version 0.0.17 performed as follows:
The text was updated successfully, but these errors were encountered: