메모리 대역폭

한번의 클럭 신호를 통해서 처리할 수 있는 용량을 말한다. SDRAM이나 DDR RAM의 경우에는 8bit 씩 8개의 칩에서 병열로 처리하기 때문에 한번의 주기 신호로 총 8Byte의 데이터를 처리할 수 있다. 즉, DDR 400의 경우에 대역폭은 400MHz x 8 Byte = 3200MB가 된다. 일반적으로 메모리에 이름을 붙일 때 클럭으로 이름을 붙이기도 하고 대역폭으로 붙이기도 한다. DDR 400의 경우 400MHz의 클럭 스피드를 메모리의 이름으로 표현한 것이고 같은 메모리를 PC3200이라고 부르기도 하는데 이는 DDR 400메모리가 구현할 수 있는 최대 대역폭인 3200MB를 이름으로 사용한 것이 된다.

듀얼 메모리


메모리와 마찬가지로 CPU와 메인보드에도 클럭 스피드가 있는데, 이를 FSB라고 표시한다. 최신의 펜티엄4의 경우에는 FSB800로 초당 800MHz의 주기신호를 보낼 수 있는데, 이 때문에 CPU에서 지원하는 대역폭은 6.4GB가 된다. 이는 DDR 400에서 지원하는 대역폭 3.2Gb의 두 배가 되는 대역폭으로 CPU에서 요구하는 데이터의 양과 메모리에서 수용할 수 있는 데이터 양에 차이가 생겨 병목현상이 발생한다. 이렇게 CPU와 메모리간의 대역폭 차이를 해소하기 위해서 메모리 2개를 병열로 나열해 대역폭을 늘리는 기술이 바로 듀얼채널 기술이다. DDR400을 듀얼채널로 구성하게 되면 한 번의 주기신호 동안에 두 개의 메모리가 동시에 8byte씩 16 byte의 일을 처리하는 셈이 된다. 그래서 대역폭은 CPU가 지원하는 최대 대역폭인 6.4Gb와 맞아떨어지게 된다. 이렇게 듀얼채널을 구성하게 되면 CPU에서 지원 가능한 최대 대역폭을 모두 사용할 수 있게 되어 시스템의 성능을 한층 끌어 올릴 수 있게 된다.

언버퍼드 메모리는 사용된 칩의 개수가 단면으로 8개다

.


언버퍼드 메모리

반면 ECC 메모리는 언버퍼드 메모리와 구조가 완전히 같은 것 처럼 보이지만 메모리 칩의 개수를 세어보면 9개인 것을 확인할 수 있다.



ECC 메모리


언버퍼드 메모리와 ECC 메모리, 그리고 레지스터드 메모리는 외형적으로 뚜렷이 차이가 난다. 우선 마지막으로 레지스터드 메모리는 ECC 메모리 와 같이 9개의 메모리칩과 더불어 추가로 3개의 칩이 더 들어가 있는 것을 볼 수 있다.



REG-ECC(레지스터드) 메모리


▷ 패리티 메모리와 ECC 메모리의 원리 SDRAM이 나오기 전까지는 메모리는 에러를 정정하기 위한 패리티 비트가 존재했었다. 즉 전송되고 있는 데이터에 오류나 노이즈 여부를 알아내기 위해 데이터 맨 끝 부분 1bit를 이용해 데이터를 짝수 혹은 홀수로 항상 유지시키는 것이다. 이렇게 되면 1개 bit의 데이터가 오류가 났을 경우 오류 여부를 바로 알 수 있게 되어 오류가 난 데이터를 재전송 받을 수 있다. 물론 패리티 비트를 사용한다하더라도 2개 이상의 bit가 동시에 오류가 난다면 이를 검출 할 수 있는 방법은 없다. 하지만 패리티 비트가 없는 경우에 비해 데이터 전송에 신뢰성이 훨씬 높아지는 효과가 있다. 문제는 패리티 비트로 1bit의 데이터를 이용할 수 없기 때문에 사용 가능한 메모리 용량이 줄어든다는데 있다. 이 때문에 메모리 전송 오류가 많이 줄어든 오늘날에는 메모리에 패리티 비트를 아예 없애고 그 부분에 데이터를 보관하는 메모리를 사용하고 있다. 이것이 언버퍼드 메모리이다. 반면 극히 적은 빈도라도 메모리에서 전송된 데이터에 에러가 나면 곤란한 서버이상의 컴퓨터에서는 여전히 전송 에러 체크를 하게 되는데, 기존의 패리티 비트에 비해서 보다 진일보한 전송에러 체크 방식인 ECC를 사용한다. ECC 방식은 패리티 비트처럼 단일 데이터에 체크 비트(Bit)를 끼워 넣어 전송하는 것이 아니라 전송되는 데이터를 체크할 수 있는 별도의 체크비트 데이터를 저장하고 이를 데이터들과 함께 전송한다. 이 별도의 체크 비트를 이용하면 1비트의 데이터 오류가 일어났을 때 오류가 일어난 위치를 정확하게 판별할 수 있다. 그래서 전송 오류를 자동으로 수정하는 것이 가능하다. 또한 동시에 2비트에서 오류가 일어났을 때에도 이를 감지해내고 사용자에게 이를 알릴 수 있다. 처음 ECC메모리를 사용하면 데이터의 오류를 동시에 2비트에서 난 것까지 검출이 가능하다. 1비트에서만 오류가 일어났을 때는 재전송 없이 자동으로 수정이 가능하다는 점에서 안정성과 전송 속도 면에서 신뢰성이 높다.

▷ 레지스터드 메모리 레지스터드 메모리가 그러한 이름으로 불리는 이유는 지극히 간단하다. 바로 레지스터(Register)가 달려있기 때문이다. 레지스터의 역할은 신호왜곡(skew)의 제거, 쉽게말하면 신호의 정렬이다. 이는 곧 메모리 칩의 제어를 의미한다. 즉, 간소화된 메모리 컨트롤러가 메모리 모듈 상에 위치한다고 보면 된다. 이러한 구성은 시스템의 수준에서, 그리고 메모리 모듈 자체의 수준에서 각각 한가지씩의 장점을 제공한다. 일반적인 언버퍼드 메모리의 경우 각 메모리 디바이스까지도 칩셋의 메모리 컨트롤러가 담당하는 구조를 가진다. 이러한 구조는 전체적인 구조가 간소화되며, 빠른 동작을 기대할 수 있다는 이점을 있다. 반대로 메모리 컨트롤러 하나가 모든 메모리 디바이스까지 직접 제어해야 하기 때문에 메모리의 확장이 쉽게 한계에 다다른다. 특히나 메모리의 속도가 빨라질수록 메모리의 타이밍이 대단히 민감해지기 때문에 컨트롤러 하나로 모든 메모리를 제어하는 방법에서는 다룰 수 있는 메모리 디바이스의 제한이 더욱 심해진다.

언버퍼드에서의 메모리 컨트롤

일반 사용자들은 2개 혹은 3개의 모듈을 사용해도 별 상관이 없지만 수십 GB급의 고용량을 필요로 하는 서버 및 그에 준하는 시스템에서는 언버퍼드 메모리로는 메모리 확장에 답답함을 느낄수 밖에 없다.

레지스터드에서 메모리 컨트롤


한편, 레지스터드 메모리는 이러한 문제점을 상당부분 해소한다. 각 메모리 디바이스의 제어는 메모리 모듈에 탑재된 레지스터에서 행하고 있기 때문에 메인 칩셋에 있는 메모리 컨트롤러는 단지 레지스터들만을 제어하면 된다. 이는 메모리 컨트롤러의 설계를 대단히 단순하게 바꿀 수 있을 뿐만 아니라 메모리 모듈을 보다 많이 사용하게 해 줌으로써 대용량 메모리의 구현이 가능해진다.

복층, 다열구조의 레지스터드 메모리

또한, 메모리 모듈 자체에서 얻을 수 있는 이점도 있다. 레지스터드 메모리를 사용하면 사진에서 보는 것과 같은 구조의 메모리 모듈을 만들 수 있다. 일반적인 언버퍼드 메모리처럼 레지스터가 없는 구조에서 이와 같은 구조로 메모리 칩을 싸아 놓으면 각 메모리 칩과 메인보드 상에 메모리 컨트롤러 사이에 도달 거리가 차이가 생긴다. 이 작은 차이 때문에 메모리 데이터에 왜곡이 생길 수 있으며 심지어 전송한 데이터의 앞뒤 순서가 바뀔 수도 있다. 하지만 레지스터드 메모리는 레지스터를 통해서 메모리칩들의 위치에 따른 거리 차의 왜곡을 한번 정열해준 뒤 메모리 컨트롤러와 데이터를 주고받게 된다. 그래서 안정된 데이터 전송을 보장할 수 있다. 물론 사진과 같은 구조의 메모리의 이점은 하나의 모듈에 보다 많은 용량의 메모리를 설치할 수 있다는 점이다. 다만 메모리의 데이터가 레지스터를 거치는 동안 한차례 정열이 필요하기 때문에 메모리의 성능은 일반 언버퍼드 메모리에 비해 다소 낮을 수밖에 없다. 따라서 일반 사용자가 레지스터드 메모리를 사용하는 일은 사실상 드물지만, 대용량의 메모리와 안정한 데이터 전송이 필요한 서버 컴퓨터에서는 레지스터드 메모리를 주로 사용하게 된다.

+ Recent posts