/
Memory management within a server
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?