  In this paper, we consider the problem of allocating cache resources among
multiple content providers. The cache can be partitioned into slices and each
partition can be dedicated to a particular content provider, or shared among a
number of them. It is assumed that each partition employs the LRU policy for
managing content. We propose utility-driven partitioning, where we associate
with each content provider a utility that is a function of the hit rate
observed by the content provider. We consider two scenarios: i)~content
providers serve disjoint sets of files, ii)~there is some overlap in the
content served by multiple content providers. In the first case, we prove that
cache partitioning outperforms cache sharing as cache size and numbers of
contents served by providers go to infinity. In the second case, It can be
beneficial to have separate partitions for overlapped content. In the case of
two providers, it is usually always beneficial to allocate a cache partition to
serve all overlapped content and separate partitions to serve the
non-overlapped contents of both providers. We establish conditions when this is
true asymptotically but also present an example where it is not true
asymptotically. We develop online algorithms that dynamically adjust partition
sizes in order to maximize the overall utility and prove that they converge to
optimal solutions, and through numerical evaluations, we show they are
effective.
