Memory management within a server

  • 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?