Isso tem a ver com o tamanho físico do dado. Cada bit em um cache é mantido por um ou mais transistores, portanto, se você quiser muito cache, precisará de muitos transistores. A velocidade do cache é essencialmente inversamente proporcional à localidade da unidade que deseja acessá-lo - em dispositivos pequenos como esse, a comunicação fica mais lenta quando o caminho do sinal fica mais longo. Isso tem a ver parcialmente com a impedância do substrato, mas nesse nível há alguns fenômenos físicos mais complexos envolvidos.
Se quisermos incluir um cache grande e singular, ele deve estar a uma distância muito pequena da MMU, ALU, etc. ao mesmo tempo. Isso dificulta bastante o design físico do processador, pois um grande cache ocupa muito espaço. Para tornar o cache "local" para essas subunidades, você precisa sacrificar a localidade das subunidades entre si.
Usando um cache local pequeno e rápido (L1), podemos maximizar a localização e a velocidade, mas perdemos o tamanho. Então, usamos um cache secundário (L2) para manter grandes quantidades de dados, com um pequeno sacrifício de localidade (e, portanto, velocidade). Isso nos dá o melhor dos dois mundos - podemos armazenar muitos dados, mas ainda temos um cache local muito rápido para as subunidades do processador usarem.
Em processadores multicore, o cache L3 é geralmente compartilhado entre os núcleos. Nesse tipo de design, os caches L1 e L2 são embutidos no dado de cada núcleo, e o cache L3 fica entre os núcleos. Isso fornece uma localização razoável para cada núcleo, mas também permite um cache muito grande.
A funcionalidade dos caches em processadores modernos é muito complicada, então eu nem vou tentar uma descrição apropriada, mas um processo muito simplista é que os endereços de destino são procurados no L1, depois no L2, depois no L3, antes recorrendo a uma busca de memória do sistema. Uma vez que essa busca é feita, é puxada de volta pelos caches.