# To Cache or Not to Cache
## 4 Evaluation
### Consistent Hit Rate Performance  
Next, we shall establish that, when augmenting a datapath caching algorithm, **FOMO** is both able to improve or preserve hit rate performance of the internal cache replacement algorithm. In particular, we establish that, of the two admission policies (**FOMO** and TinyLFU), **FOMO** is better able to improve or preserve the hit rate of the internal cache replacement algorithm over TinyLFU by focusing more on the changing of working sets than the preservation of valuable items in the cache. When we compare **FOMO**'s overall performance, as seen in Figure 6, to other non-datapath algorithms, we can see that its performance is similar to that of mARC and LARC, regardless of the internal cache replacement algorithm. In particular, we can see that **FOMO**(ARC) has the most consistent performance, having a smaller tail performance degradation compared to other versions of **FOMO**. TinyLFU, another admission policy, has the most variance in its performance compared to whichever algorithm performed the best. To simplify our observation of **FOMO**'s performance in comparison to mARC, LARC, and TinyLFU, we focus upon a single version of both **FOMO** and TinyLFU that utilize ARC as their internal cache replacement algorithm. Figure 7 allows us to observe how well or poorly **FOMO** does in comparison to each algorithm on a more detailed basis. We can see that, when compared to LARC, **FOMO**(ARC) performs well on the MSR, CloudCache, and CloudPhysics workloads. Furthermore, LARC is able to show minor improvement over **FOMO**(ARC) in the FIU workload, while being mostly similar in the CloudVPS workload. When comparing **FOMO**(ARC) to mARC, **FOMO**(ARC) performs well on the FIU, MSR, and CloudVPS workloads. mARC is able to have both better and worse performance for the CloudCache workload and similar performance for the CloudPhysics workload. Lastly, when comparing **FOMO**(ARC) to TinyLFU(ARC), **FOMO**(ARC) has consistently better hit rate performance, due to the strong protection of the cache afforded by TinyLFU's histogram. Here is a quantitative summary **FOMO**(ARC)'s percentage improvement/degradation relative to each algorithm across all workloads. Against LARC, **FOMO**(ARC) experiences on average an improvement of 2.64%, a max degradation of 20.88%, and a max improvement of 145.66%. Against mARC, **FOMO**(ARC) experiences on average an improvement of 1.16%, a max degradation of 65.8%, and a max improvement of 84.32%. Against TinyLFU(ARC), **FOMO**(ARC) experiences on average an improvement of 27.45%, a max degradation of 27.71%, and a max improvement of 366.10%. Figure 6: Normalized hit rate summary results in percentage difference from the best result. This includes results for all five different workload sources (FIU, MSR, CloudCache, CloudVPS, and CloudPhysics) measured for six different cache size configurations as a percentage of the workload footprint for each algorithm. TinyLFU has the overall worst performance when observing its performance across traces and cache sizes, regardless of internal cache replacement policy. mARC, LARC, and **FOMO** have similar hit rate performance characteristics when observing their performance as whole, but show their individual strengths and weaknesses when looking at a breakdown of the results, as seen in Figure 7.  
Figure 7: **FOMO**(ARC) hit-rate comparison. The X-axis varies the fractional cache size. For the FIU workloads, **FOMO**(ARC) generally performs similarly to LARC, with LARC’s comparative performance improving with larger cache sizes. For the MSR workloads, **FOMO**(ARC) shows a strong performance against LARC, mARC, and mJLFU(ARC). For the CloudCache workloads, **FOMO**(ARC) performs better than LARC and TinyLFU(ARC), but similarly to mARC, with variance toward better and poorer performance across cache sizes. For the CloudVPS workloads, **FOMO**(ARC) performs similarly to LARC and better than both mARC and TinyLFU(ARC).