How to manage the memory within a RAMCloud server?
Traditional memory allocation techniques are all O(N**2)unless they use bins.
There will probably be no pointers, so it's easy to reorganize memory to eliminate fragmentation.
For example, could use page-based approaches: to write a new object, find a page with lots of empty space, then compact the page if needed to collapse free spaces, then append the new object.
How are objects referenced (unique identifier?) and how are those identifiers mapped to a specific offset within a specific page?
If done right, memory management could help the persistence mechanisms:
Collect all recently-modified data together in a small number of pages
During checkpointing, only need to checkpoing the pages that have changed since the last checkpoint.
This could greatly reduce the cost of checkpoints.
This starts to smell a bit like a log-structured file system.
If RAMCloud stores variable-length blobs, should they be compressed in main memory? Perhaps they will be too short to get any benefit from compression.
What happens when memory fills up?
Must keep enough free space in memory to hold backup data during the recovery of other nodes. How many simultaneous recoveries does a node need to handle?