## 4 Hierarchical Cache Management (HCM) Policy
### SSD Cache Replica Management
```
Input: New/updated replica cache utility: \(u\) Output:\(T_{utility}\)
1:if\(T_{utility}\) has never been set then
2:\(U_{max}\leftarrow\ u\)
3:\(U_{min}\leftarrow\ u\)
4:\(T_{utility}\leftarrow\ u\)
5:else
6:\(U_{max}\leftarrow\ max(U_{max},\ u)\)
7:\(U_{min}\leftarrow\ min(U_{min},\ u)\)
8:\(T_{utility}\leftarrow(U_{max}+U_{min})/2.0\)
9:endif
10:return\(T_{utility}\)
```  
**Algorithm 2**_Update_utility_threshold (\(u\))_  
``` Initialization:\(T_{utility}\gets 0\)
1:# cache insert process
2:if\(Q_{s-H}\) is not fullthen
3: Add \(m\) to the tail of \(Q_{s-H}\)
4:else
5:\(u_{m}\leftarrow\) Get cache utility of replica \(m\)
6:if\(u_{m}\geq T_{utility}\)then
7: Add \(m\) to the tail of \(Q_{s-H}\)
8:else
9: Add \(m\) to the tail of \(Q_{s-L}\)
10:endif
11:endif
12:Update_utility_threshold(\(u_{m}\))_

## 5 Simulation Results and Analysis

### Simulation Environment Setup

To evaluate the performance of the HCM policy, we conducted extensive comparative experiments using the Icarus simulator [16]. Based on the Icarus v0.8.0 source code, we implemented all the functions of HCM. Additionally, for the hierarchical cache architecture scenario, we made corresponding modifications to the original LRU and LFU. Furthermore, we selected two comparison schemes, uCache [15] and Probationary Insertion (denoted as PI) [10], and implemented their relevant functionalities in Icarus. A brief introduction to them is provided below. The Icarus parameters used in the experiments are shown in Table 1.

PI (Probationary Insertion): the DRAM and SSD caches are managed using two separate LRU queues. For the content evicted from the DRAM cache, if it has been accessed at least once during its time in DRAM, it is written to the SSD cache;

uCache: it uses a two-level LRU queue to manage the DRAM cache. Content that hits in the first-level LRU queue is directly promoted to the second-level LRU queue, while content evicted from the second-level LRU queue is directly written to the SSD cache. The SSD cache is managed using a single LRU queue. Additionally, the design includes a ghost buffer, which inserts content that was previously accessed but is now deleted directly into the second-level queue, allowing for the observation of data access patterns over a longer time period. \begin{table}
\begin{tabular}{c c} \hline \hline
**Parameters** & **Value** \\ \hline Topology & GARR \\ Number of nodes (receiver, router, server) & 21, 27, 13 \\ Bandwidth of network links & 1 Gbps \\ Cache placement & Uniform \\ DRAM/SSD capacity ratio & 1:10 \\ Content placement & Random \\ Content size & 2 MB \\ \hline \hline \end{tabular}
\end{table} 
Table 1: Simulation parameters in Icarus. We selected the GARR topology [49] as the network topology for the simulation, which consists of 21 receiver nodes, 27 cache nodes, and 13 server nodes. To visualize the topology, we used Gephi [50], as shown in Figure 3, where white nodes represent cache nodes, gray nodes represent receiver nodes, and yellow nodes represent server nodes. In addition, the bandwidth capacity of all links is set to 1 Gbps. The cache capacity is uniformly distributed across all cache nodes, with a DRAM-to-SSD capacity ratio of 1:10 for each cache node. All content is randomly assigned to a server node as its origin repository, and the size of each content item is set to 2 MB. Additionally, HCM requires the manual configuration of certain parameters, namely the filter's popularity threshold \(T_{pop}\) and the cache load tuning function \(\omega(t)\). In our experiments, we tested various \(T_{pop}\) values and found that setting \(T_{pop}\) to 2 achieves optimal cache performance in most cases. This is because it effectively filters out a large portion of one-time requests. However, further increasing \(T_{pop}\) reduces the write load on the SSD but negatively impacts the cache hit rate. Therefore, \(T_{pop}\) is fixed at 2 in the subsequent experiments. As for \(\omega(t)\), we simplified its configuration by setting it to a constant value of 0.1.