본문 바로가기
  • Always Awake
서버프로그래밍

캐시 이론

by NerdyBoy 2024. 7. 4.
반응형

서버 프로그래밍을 할 때, 꼭알아야 할것으로 캐시 메모리가 있다.


캐시 메모리

Cache Memory, Hardware Cache

컴퓨터 시스템의 성능을 향상시키기 위해 별도로 탑재된 캐시 전용 메모리.

 

흰글씨

1번: 인텔의 펜티엄 프로세서

2번: 32kb 용량 캐시 메모리 모듈

3번: 스틱형 캐시 메모리 모듈 슬롯

 

구형이지만 실제로 보면 CPU가 탑재된 메인보드의 형태가 위 사진과 같이 생겼다. 저장 공간라고 하면 일반적으로 하드 디스크(HDD) 등을 생각하지만 캐시 메모리는 데이터 관리 효율성을 위해 별도로 탑재되어진다.

캐시 메모리 카드

메모리 카드 외에도 효율성을 위해 CPU, GPU에도 탑재된다. 요새 CPU에서 보이는 L1/L2 캐시같은게 점점 늘어나는 캐시 메모리의 수요에 따라 발전해온것. 


 

동작원리 

위에서 부터 레지스터 - 캐시 - 메모리(RAM) - 디스크(HDD/SDD) 순으로, 레지스터가 가장 빠르고, 비싸다.

 

캐시의 필요성은 식당의 종업원들이 일할 때를 생각할 수 있다.

주문현황판(RAM) 에 입력 해야 하는데, 사람이 많을 때에는 매번 입력을 할 수가 없으니

단기기억(Register) 으로 주문을 기억하고, 조금 길다 싶으면 수첩(Cache) 에 입력해서 한번에 입력하는것.

 

프로세서와 메모리의 관계

 

메모리와 매번 데이터를 주고 받기 보다는 프로세서 자체에서 단기적으로 캐시를 이용해 데이터를 쌓고, 어느정도 쌓이면 메인 메모리에 전달한다. 또는 캐시를 이용해서 필요한 데이터를 가져온다. 위에서 나온 L1/L2 캐시의 경우에는 L1 에서 L2로, L2 에서 메모리로 데이터를 전달하는 형태를 가진다. 


캐시 철학

1) TEMPORAL LOCALITY

시간적으로 봤을 때, 방금 작업이 일어난 곳에서 또 작업이 일어날 확률이 높다. 따라서 캐시는 같은 작업이 일어날 가능성을 염두에 두며 효율적으로 관리한다.

 

2) SPACIAL LOCALITY 

공간적으로 봤을 때, 방금 작업이 일어난 근처에서 연속해서 작업이 일어날 가능성이 높다. 따라서 캐시는 공간적으로 근접해있는 곳의 작업을 효율적으로 처리한다.

 

캐시의 특성을 보면, 같은 곳과 그 근처의 작업을 더 효율적으로 처리한다.

다음은 C#으로 캐시를 간단하게 활용해본다.


테스트

그렇다면 정말로 캐시가 동작하고 있을까.

다음은 간단하게 2차원 배열을 만들어 처음에는 2차원 배열의 순서대로, 두번째는 세로 인덱스부터 채워넣는 코드다.

namespace ServerCore
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] arr = new int[10000, 10000];
            {
                long now = DateTime.Now.Ticks;
                for (int y = 0; y < 10000; y++)
                    for (int x = 0; x < 10000; x++)
                        arr[y, x] = 1;
                long end = DateTime.Now.Ticks;
                Console.WriteLine($"(y,x)순서 걸린 시간 {end - now}");
            }
            {
                long now = DateTime.Now.Ticks;
                for (int y = 0; y < 10000; y++)
                    for (int x = 0; x < 10000; x++)
                        arr[x, y] = 1;
                long end = DateTime.Now.Ticks;
                Console.WriteLine($"(x,y)순서 걸린 시간 {end - now}");
            }

        }      
    }
}

 

 

결과

 

세로인덱스에 채워넣는시간이 가로인덱스에 채워넣는시간보다 훨씬 길다. 캐시가 동작하고 있다는 뜻인데, 캐시는 공간적으로 근접해 있는 작업을 할때 효율이 좋아진다고 했다. 여기서의 효율은 시간을 뜻하고. 그 결과로 세로인덱스부터 채워넣는 작업이 더 오래 걸렸다. 

 

5*5 작업을 그림으로 표현하면

[1][1][1][1][1][1]       [  ][  ][  ][  ][  ][  ]       ][  ][  ][  ][  ][  ]        [  ][  ][  ][  ][  ][  ]        [  ][  ][  ][  ][  ][  ]

[1][  ][  ][  ][  ][  ]       [1][  ][  ][  ][  ][  ]        [1][  ][  ][  ][  ][  ]        [1][  ][  ][  ][  ][  ]        [1][  ][  ][  ][  ][  ]

위와 아래 작업을 수행한셈. 

캐시는 위의 작업을 더 효율적으로 처리하며 이로써 캐시가 컴퓨터에서 동작하고 있다는 사실을 알았다. 성능이 다른 컴퓨터면 결과값이 또 다를 것이다. 

반응형

댓글