Memshare: a Dynamic Multi-tenant Memory Key-value Cache

by   Asaf Cidon, et al.

Web application performance is heavily reliant on the hit rate of memory-based caches. Current DRAM-based web caches statically partition their memory across multiple applications sharing the cache. This causes under utilization of memory which negatively impacts cache hit rates. We present Memshare, a novel web memory cache that dynamically manages memory across applications. Memshare provides a resource sharing model that guarantees private memory to different applications while dynamically allocating the remaining shared memory to optimize overall hit rate. Today's high cost of DRAM storage and the availability of high performance CPU and memory bandwidth, make web caches memory capacity bound. Memshare's log-structured design allows it to provide significantly higher hit rates and dynamically partition memory among applications at the expense of increased CPU and memory bandwidth consumption. In addition, Memshare allows applications to use their own eviction policy for their objects, independent of other applications. We implemented Memshare and ran it on a week-long trace from a commercial memcached provider. We demonstrate that Memshare increases the combined hit rate of the applications in the trace by an 6.1 total number of misses by 39.7 Even for single-tenant applications, Memshare increases the average hit rate of the current state-of-the-art memory cache by an additional 2.7 real-world trace.


A Cycle-level Unified DRAM Cache Controller Model for 3DXPoint Memory Systems in gem5

To accommodate the growing memory footprints of today's applications, CP...

DSPatch: Dual Spatial Pattern Prefetcher

High main memory latency continues to limit performance of modern high-p...

Enabling Design Space Exploration of DRAM Caches in Emerging Memory Systems

The increasing growth of applications' memory capacity and performance d...

Accelerating PageRank using Partition-Centric Processing

PageRank is a fundamental link analysis algorithm and a key representati...

ShareJIT: JIT Code Cache Sharing across Processes and Its Practical Implementation

Just-in-time (JIT) compilation coupled with code caching are widely used...

Canvas: Isolated and Adaptive Swapping for Multi-Applications on Remote Memory

Remote memory techniques for datacenter applications have recently gaine...

Assessing Impact of Data Partitioning for Approximate Memory in C/C++ Code

Approximate memory is a technique to mitigate the performance gap betwee...

Please sign up or login with your details

Forgot password? Click here to reset