728x90
Reference : MICRO 2009, Sangyeon Cho, Hyunjin Lee
Flip-N-Write : A Simple Deterministic Technique to Improve PRAM Write Performance, Energy and Endurance

현재 우리가 사용하고 있는 대표적인 메모리는 메인 메모리로 사용하는 DRAM(특히 SDRAM)과 캐쉬로 사용하는 SRAM 마지막으로 최근 이동식디스크로 사용하는 Flash이다. DRAM과 SRAM은 휘발성 메모리로 파워가 공급되는 동안에는 값을 유지하지만 파워가 끊기면 기억하고 있던 값은 모두 날라가 버린다. 그래서 이름이 휘발성 메모리(Volatile Memory)이다. DRAM은 매우 간단한 구조로 싼값에 메모리를 집적할 수 있기 때문에 대용량의 메모리를 만드는데 적합하나 값을 유지하기 위해서 주기적으로 갱신(Refresh) 작업을 실행해 주어야 한다. 그 이유는 leakage current로 인해서 시간이 지나면 값을 잃어버리기 때문이다. 반면 SRAM은 갱신작업이 필요없고 매우 빠르나 매우 비싸기 때문에 대용량 메모리로 사용하기 어려워 캐쉬에서만 사용하고 있다. 이 둘과 달리 Flash는 비휘발성 메모리(Non-Volatile Memory)이기 때문에 파워 공급이 없어도 값을 잃어버리지 않으며 DRAM에 비해서 느리기는 하나 집적이 쉬워서 대용량 메모리로 사용되고 있다. 그러면 DRAM 혹은 SRAM과 Flash 메모리의 장점을 섞어 놓은 빠르면서도 집적이 쉽고 leakage current가 흐르지 않아 Refresh를 해줄 필요가 없는 비휘발성 메모리는 만들 수 없을까?

최근 PCM (Phase Change Memory)이 많이 연구되고 있다. PCM은 앞으로 우리가 사용하는 PC의 메인 메모리를 대체할 수 있는 대표적인 차세대 메모리이다. PCM 메모리는 최근에 주로 연구가 되고 있지만 이미 1960년대에 그 가능성이 제기되었으며 비휘발성 메모리로 집적도 또한 우수하다. 이런 성격때문에 차세대 메모리로 각광받고 있으며 최근 상용화의 막바지 단계에 근접해가고 있다. 그러나 PCM의 고질적인 문제가 있으니 바로 데이터를 쓰는 횟수의 제한이다. 이 물질의 특성으로 발생하는 쓰기 제한은 메모리의 life time에 영향을 미치기 때문에 심각한 문제를 초래할 수 있다. 만약 메모리를 구매했는데 1년밖에 쓰지 못한다면 누가 그 메모리를 사용하려고 하겠는가? 그래서 ISCA나 MICRO와 같은 최고의 학회에서 매년 이와 관련된 PCM 논문들이 쏟아지고 있다.

Pictures from Hegedüs and Elliott, Nature Materials, March 2008


PCM을 구성하는 한 Cell은 위와 같이 두가지 상태를 가지게 된다. 왼쪽 그림 상태인 Amorphous 상태와 오른쪽 상태인 Crystalline 상태이다. Amorphous 상태는 저항이 크기 때문에 Logical 0(zero)를 의미하고 Crystalline 상태는 저항이 매우 낮기 때문에 Logical 1을 의미한다. 0을 1로 바꾸는 것을 SET operation이라 하고 1을 0으로 바꾸는 것을 RESET operation이라고 한다. SET이나 RESET이나 모두 메모리에 데이터를 쓰기 위한 동작으로 GST(Cell의 구성물질)의 상태를 변화시키기 때문에 다음과 같이 많은 전류가 필요하며 Latency 또한 길어진다. 반면에 READ operation의 경우 GST의 현재 상태만을 Sensing 하기 때문에 적은 전류와 적은 Latency로 값을 읽어오는 것이 가능하다.


그런데 쓰기 동작으로 인해서 쓰기 횟수의 제한이 발생하는데 대체적으로 최대 10만번까지 쓰기가 가능하다. 즉, 한 Cell에 10만번 데이터를 쓰면 더 이상 그 Cell을 사용할 수 없게 된다는 의미이다. 문제는 이 하나의 Cell이 사용할 수 없는 상태가 되면 메모리 전체를 사용할 수 없게 되기 때문에 이를 해결하는 방법이 필요하게 된다. 그래서 최근 연구는 메모리의 수명을 늘리기 위해서 대체적으로 두가지 접근법을 사용하고 있다.

1. Write 횟수를 줄이는 방법
2. 특정 Cell 혹은 Word line이 집중적으로 Write 되는 것을 방지하는 방법

첫 번째 방법 : Write 횟수를 줄이는 방법
A. Partial Writes (ISCA 2009)
캐쉬에서 메인 메모리로 Write Back을 할 때, Dirty bit이 1인 경우 해당 캐쉬 라인 전체를 메모리에 업데이트하게 된다. 이렇게 되면 실제 캐쉬 라인의 극히 일부분이 변경되었다 하더라도 전체의 값이 업데이트 되기 때문에 불필요한 Write가 발생하게 된다. 즉, Partial Writes 기법은 캐쉬 라인 전체를 업데이트 하지 말고 최대한 수정된 부분만 업데이트 하자는 생각이다. (물론 이 부분은 뒤에 나오는 다른 방법도 같은 발상에서 출발한다. ) 그래서 Dirty bit의 수를 늘려서 캐쉬라인을 잘게 쪼개어 수정된 부분만 업데이트를 하자는 것이 이 방법이다.


이 그림에서 보이듯이 위의 경우가 기존의 방식이며 아래 부분이 여러개의 Dirty bit을 사용하는 방법이다. 아래에는 현재 두개의 dirty bit이 존재하고 짙은 파란색이 수정된 부분이다. 그래서 기존에는 절반 이상이 수정되지 않았음에도 불구하고 전체의 캐쉬라인을 업데이트 하게 되지만 아래의 경우에는 두 부분으로 쪼개지고 윈쪽 부분은 변경사항이 없으므로 dirty bit은 0으로 업데이트 되지 않고 오른쪽 부분은 dirty bit이 1로 메모리에 업데이트 되게 된다. 하지만 여전히 변경되지 않은 부분이 쓰여지고 있기 때문에 이를 위해서 더 잘게 쪼개는 것을 생각할 수 있다. 그러나 잘게 쪼갤때마다 dirty bit이 계속해서 추가되고 있으므로 너무 잘게 쪼개는 경우 overhead가 너무 커질 수 있다. 따라서 이 둘의 Trade Off를 잘 고려하는 것이 이 논문의 성능을 최대화 할 수 있는 방법이다.

B. Differential Write ( Data Comparison Write)
이 논문은 bit 단위로 변경이 발생한 부분만 Write 하도록 하자는 것이 핵심 아이디어이다. 기존의 메모리 값을 읽어와서 쓰고자 하는 새로운 값과 비교하여 변경된 bit만 업데이트 하도록 하는 것이다. 그래서 기존의 방식에 비해서 메모리로 부터 읽어오는 overhead가 발생하게 된다. 하지만 이로 인해서 많은 Write 횟수를 줄일 수 있기 때문에 메모리의 수명은 크게 늘어나게 된다.


이 경우를 잘 살펴보면 윗 부분이 새로운 데이터이며 아래 부분이 기존의 메모리 값이다. 기존 방식으로는 총 16개의 bit을 메모리에 Write 해줘야 하지만 이 방법을 사용하면 5개의 bit 만을 수정하면 되기 때문에 총 11번의 Write가 줄어들었다. 단, 이 방법은 모든 bit이 다를 경우 전체가 Write되어 이득을 전혀 볼 수 없다는 단점이 존재한다. 이 문제를 해결하기 위해서 다음과 같은 새로운 논문이 제안되었으며 Reference 논문이 바로 그것이다.

C. Flip-N-Write (Micro 2009)
 


Flip-N-Write 기법은 Differential Write의 단점을 보완한 방법으로 마찬가지로 기존의 메모리 값과 새로 쓰려는 데이터 값을 비교한 후 수정된 부분만을 업데이트 하는 방법이다. 그런데 여기서는 만약 절반 이상의 bit이 서로 다르다면 Flip을 하여 저장을 하자는 것이 핵심 아이디어이다. 그림에서 제일 위의 값이 새로 쓰려는 데이터이고 가장 아래의 값이 기존 메모리 값을 의미한다. 이 두 값을 비교한 결과 총 16개의 bit 중에서 11개의 bit이 차이가 나게 되고 절반 이상이 다르기 때문에 1->0, 0->1로 반전 시킨다. Flip한 결과가 바로 위에서 두 번째 값이며 이 Flip 값과 기존 메모리 값을 비교해보면 5개의 bit 만이 차이가 남을 알 수 있다. 즉, 반 이상 다르면 뒤집어쓰겠다는 매우 간단한 아이디어이다. 그대신 Flip이 되었다는 것을 표시하기 위해서 마지막에 추가로 Flip bit을 추가해주는 overhead가 발생한다. 따라서 이 경우 기존의 Differential Write 방법으로는 11개의 bit을 Write 해야 하지만 Flip-N-Write 기법을 통해서 5개의 bit을 수정하고 Flip bit 1개를 수정하여 총 6개의 bit을 업데이트하게 된다. 그래서 이 방법으로는 최대 N/2 개의 bit만 수정하면 되므로 매우 간단한 아이디어지만 매우 우수한 성능을 나타낸다.

이렇게 Write의 횟수를 줄이게 되면 Latency가 긴 Write 동작을 줄이므로 전체적인 메모리 성능이 증가하게 되고 또한 파워가 줄어들게 되고 당연히 Lifetime도 증가하게 된다.

두 번째 방법 : 특정 Cell 혹은 Word line이 집중적으로 Write 되는 것을 방지하는 방법
이 부분과 관련된 논문은 직접 읽은 것이 아니라 구체적 논문을 언급하기는 힘들고 학회(ISCA)와 논문 세미나를 통해서 들은 바로는 대체적으로 특정 Cell 혹은 Word가 집중적으로 쓰여져서 전체 메모리를 사용할 수 없게 되는 것을 방지하기 위해 Word Line을 Shift하고 Shift한 수를 Counting 하여 저장하는 방법과 Start-Gap(Micro 2009)이라는 논문에서는 추가로 Redundant한 Word Line을 이용하여 매 100번의 Write 동작마다 Circular Buffer와 마찬가지 방법으로 한 칸씩 이동하면서 특정 Cell이 집중적으로 쓰여지는 것을 막는 방법 등이 있다.
728x90
복사했습니다!