mirror of
https://github.com/janishutz/eth-summaries.git
synced 2026-03-14 10:50:05 +01:00
106 lines
3.5 KiB
TeX
106 lines
3.5 KiB
TeX
\subsection{Caches}
|
|
|
|
Processors generally improve quicker than memory speed does. Therefore, optimizing memory is necessary, and this is what Caches do.
|
|
|
|
\content{Structure} Caches can be defined using $S, E, B$ s.t. $S \cdot E \cdot B = \text{Cache Size}$.\\
|
|
$S = 2^s$ is the set count, $E = 2^e$ is the lines per set, and $B=2^b$ is the bytecount per cache block.
|
|
|
|
\content{Address} Using the above, the address can be separated into fields which dictate the cache location:
|
|
|
|
\begin{center}
|
|
Address:
|
|
\begin{tabular}{|c|c|c|}
|
|
\hline
|
|
tag & set index & block offset \\
|
|
\hline
|
|
\end{tabular}
|
|
\end{center}
|
|
|
|
Since we have $S=2^s$ sets and $B=2^b$ bytes per block, we need $s$ bits for the set index, $b$ bits for block offset. The remaining part (tag) is stored with the cache block and needs to match for a cache hit.
|
|
|
|
\inlinedef \textbf{Direct-mapped} i.e. $E=1$ (1 cache line per set only).
|
|
|
|
\inlinedef \textbf{2-way Set-Associative} i.e. $E=2$ (2 cache lines per set).
|
|
|
|
\content{Example} The importance of caches can quickly be seen when looking at the memory hierarchy:
|
|
|
|
\begin{tabular}{llllll}
|
|
\toprule
|
|
\textbf{Cache type} &
|
|
\textbf{What is cached?} &
|
|
\textbf{Where is it cached?} &
|
|
\textbf{Latency (cycles)} &
|
|
\textbf{Managed by} \\
|
|
\midrule
|
|
Registers &
|
|
4/8-byte words &
|
|
CPU core &
|
|
0 &
|
|
Compiler \\
|
|
|
|
TLB &
|
|
Address translations &
|
|
On-chip TLB &
|
|
0 &
|
|
Hardware \\
|
|
|
|
L1 cache &
|
|
64-byte blocks &
|
|
On-chip L1 &
|
|
1 &
|
|
Hardware \\
|
|
|
|
L2 cache &
|
|
64-byte blocks &
|
|
On-chip L2 &
|
|
10 &
|
|
Hardware \\
|
|
|
|
Virtual memory &
|
|
4\,kB page &
|
|
Main memory (RAM) &
|
|
100 &
|
|
Hardware + OS \\
|
|
|
|
Buffer cache &
|
|
4\,kB sectors &
|
|
Main memory &
|
|
100 &
|
|
OS \\
|
|
|
|
Network buffer cache &
|
|
Parts of files &
|
|
Local disk, SSD &
|
|
1{,}000{,}000 &
|
|
SMB/NFS client \\
|
|
|
|
Browser cache &
|
|
Web pages &
|
|
Local disk &
|
|
10{,}000{,}000 &
|
|
Web browser \\
|
|
|
|
Web cache &
|
|
Web pages &
|
|
Remote server disks &
|
|
1{,}000{,}000{,}000 &
|
|
Web proxy server \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
|
|
\subsubsection{Cache Addressing Schemes}
|
|
|
|
The cache can see either the virtual or physical address, and the tag and index do \textit{not} need to both use the physical/virtual address.
|
|
|
|
\begin{center}
|
|
\begin{tabular}{c|c|c}
|
|
\hline
|
|
\textbf{Indexing} & \textbf{Tagging} & \textbf{Code} \\
|
|
\hline
|
|
Virtually Indexed & Virtually Tagged & VV \\
|
|
Virtually Indexed & Physically Tagged & VP \\
|
|
Physically Indexed & Virtually Tagged & PV \\
|
|
Physically Indexed & Physically Tagged & PP
|
|
\end{tabular}
|
|
\end{center}
|