20160819

Rethinking Memory, GPU and Heterogeneous Systems : Towards a Holistic Approach
미래의 메모리 시스템은 많이 변화할 것이고, 어떤 기회가 있는지 이야기하고자 한다. 동기가 되는 내용부터 설명. 왜 오늘날 메모리가 중요한가? 메인 메모리는 모든 컴퓨터 시스템에서 중요한 컴포넌트이다. 프로세서 상에서도 상당 부분이 메모리로 이루어져있다. 새로운 메모리 기술이 등장하고 있고, 새로운 요구사항이 생기고 있음. 이상적인 메모리가 필요하다. 현재는 이상적인 요구사항을 만족시키지 못하고 있음. DRAM을 수정하고 emerging memories를 사용해 요구사항을 만족시키고자 함. 메인 메모리 트렌드 (1) capacity, bandwidth, QoS에 대한 요구사항 증가. 멀티코어 환경이 되고, 데이터 사용량이 늘어나고, consolidation ratio가 높아짐. DRAM 용량이 증가하는 속도보다 core 수가 증가하는 속도가 더 빠르다. 메모리 대역폭의 증가 속도는 더 느리다.
the memory capacity gap.PNG
(2) 에너지와 전력이 시스템 설계의 중요한 요인이 됨. 시스템 에너지 소모의 40~50%가 메모리 계층에 의해 소모됨. DRAM은 refresh를 요구하므로, 사용하지 않을 때에도 상당량의 에너지 소모. (3) DRAM scaling이 끝남. DRAM이 Xnm 이상으로 scaling되지 않을 것으로 예상. Scaling이 계속될수록 용량이 늘어나고, 비용이 줄어들고, 소모 에너지가 줄어듦.
DRAM scaling problem. 메모리는 storage device + access device로 구성됨. DRAM의 storage device는 capacitor, access device는 access transistor이다. DRAM unit size를 줄임에 따라 reliability가 떨어짐. DRAM scaling problem을 실제 실험으로 보인 논문 목록 다음과 같음. 이론이 아닌 실제 실험으로 얻는 데이터는 매우 중요하다.

testing DRAM scaling issues.PNG

DRAM scaling problem으로 인해 발생하는 문제가 DRAM hammering. 특정 row에 계속해서 open / close를 반복하면 인접한 row의 데이터에 변조가 일어남. HDD에서도 비슷한 현상이 발생하며, 모든 메모리는 scaling되면 유사한 문제가 발생하는 것으로 보인다. 최신 DRAM에서 더 많은 현상이 보인다. 이를 활용하면 권한 상승 취약점을 만들 수 있는데, 페이지 테이블의 write enable bit를 set하여 공격할 수 있다. Exploiting the DRAM rowhammer bug to gain kernel privileges (Seaborn, 2015). 이후 원격 rowhammer 공격도 연구되었음. 원래는 CLFLUSH를 사용해서 캐시 플러시를 계속 유도해야 했는데, 원격 javascript 공격에서는 캐시 간섭 현상을 사용해 계속해서 캐시를 evict하도록 했다. ANVIL도 rowhammer 공격에 대한 논문. DRAM rowhammer에 대해 더 연구해보았음. Aggressor row와 victim row가 얼마나 인접하는지 확인. 반드시 인접하는 것은 아님. 이는 remapping 때문일 수 있음. DRAM 생산자는 오류 있을 때 위해 redundancy높이는데, 이 때문에 remapping. 논리적으로 인접하지 않아도 물리적으로는 인접할 수 있음.

aggressor victim row.PNG

Refresh 주기를 높일수록 에러 발생률을 떨어뜨릴 수 있음. ECC로 방어할 수 있으나, 모든 에러를 막을 수는 없음. 이미 존재하는 시스템에서 해당 취약점을 방어하기 위해서는 refresh rate을 높이는 것밖에 없음. 이를 해결하기 위해 probabilistic adjacent row activation을 적용함. 확률은 낮아서 일반적인 경우에는 발생하지 않지만, 계속해서 발생하는 access에 대해서는 반드시 adjacent row activation 발생하므로 방어 가능. 하지만 이를 적용하기 위해서는 메모리 컨트롤러와 DRAM 사이의 협동이 필요하다. 메모리 컨트롤러가 인접한 row를 정확하게 알아야 한다. Read disturbance in flash memory 문제에서 착안하여 DRAM에도 유사한 연구를 시작한 것이라고 함. 원래 retention failure 분석을 위해 만든 infrastructure를 사용하여 row hammer 문제를 찾은 것. DRAM의 모든 row는 64ms마다 refresh된다. 그런데 64ms가 옳은지, leak하지 않는지 어떻게 아는가? DRAM retention time은 두 가지 요소에 의존적이다. Data pattern, variable retention time. Data pattern에 dependent한 이유는 DRAM에 bitline-bitline coupling, bitline-wordline coupling이 있기 때문이다. Variable retention time 은 시간에 따라 랜덤하게 변하는 특성을 갖고 있다. 이는 random process처럼 보였으며, 이를 분석한 논문이 있었다 (TED’11). Retention time problem은 새롭게 생산된 DRAM에서 더 크게 나타난다. 한 학생의 질문. 전자과 수준의 문제 아닌가? 답변. 맞다. 하지만 전자과 수준에서 풀기 어려운 문제이다. An Experimental Study of Data Retention Behavior in Modern DRAM Devices: Implications for Retention Time Profiling Mechanisms 논문 읽어보기 바람. DRAM process scaling challenges: refresh, tWR, VRT. Samsung과 Intel에서는 DRAM과 controller가 coordinate하는 기법에 대해 제안함. 메모리 문제를 어떻게 해결할 것인가? 메모리와 컨트롤러를 더 똑똑하게 한다. 또는 DRAM 기술을 다른 기술로 대체한다. 풀지 않고, 이종 메모리를 사용한다. Reliable, non-reliable한 메모리로 나누어 이종 메모리로 관리할 수 있을 것.

RowHammer가 실제 어플리케이션에서 얼마나 자주 발생하나? 거의 발생하지 않지만, 디버깅하기 쉽지 않을 것. DSN’15? DSN’14에서 발표된 논문에서 이야기하기를, 디버깅에 6개월이 소요되었으나 알고 보니 하드웨어 버그였다고 한다.

메모리 시스템에서 해결해야 하는 문제: 낮은 비용으로 높은 신뢰성, 낮은 에너지, 빠른 레이턴시, 높은 대역폭, 낭비하는 자원 줄이기, 연산을 데이터 근처에서 하기. 바이트 단위로 데이터를 가져오면 낭비하는 대역폭 또는 에너지를 줄일 수 있을 것. 연산을 데이터 근처에서 하면 상당한 문제를 해결할 수 있다. 새롭게 등장하는 많은 메모리 기술들은 더욱 scalable하고, non-volatile하다. NVRAM이 DRAM을 대체할 수 있나? 모든 요구사항을 만족하는 메모리를 찾기는 어렵다. 어플리케이션이 요구하는 신뢰도에 따라서도 다양한 메모리를 사용할 수도 있다. Heterogeneous-reliability memory. Reliable memory는 ECC 적용, well-tested chip을 사용. Low-cost memory는 ECC 적용 X, less-tested chip 사용. 이를 사용하면 서버 컴퓨터에서 하드웨어 비용을 4.7% 절약할 수 있다고 함.

시스템에서 메모리 간섭 현상이 발생한다. 코어들 사이에 메모리를 공유함에 따라, 메모리 버스 및 컨트롤러에서 간섭이 발생한다. QoS-aware memory systems가 필요하다. 예측 가능한 성능을 제공하기 위해 어떻게 할 것인지연구. DASH: Deadline-Aware High-Performance Memory Scheduler for Heterogeneous Systems with Hardware Accelerators, Bounding Memory Interference Delay in COTS-based Multi-Core Systems 읽어보기 바람. QoS에 대한 strong guarantee 관련 논문. 메모리 서비스에 대한 보장을 위해서는 자원을 공유하고 있을 때 성능을 추정하기 위한 모델이 필요하다. 그리고 자원을 파티셔닝하고 우선순위를 주기 위한 기법이 필요하다. MISE: Providing Performance Predictability and Improving Fairness in Shared Main Memory Systems, The Application Slowdown Model 논문 읽어보기 바람. Cycle level에서 성능 간섭을 추정하기는 어렵다. 그 영향이 얼마나 큰지 모르기 때문이다. 따라서 성능에 대한 proxy인 request service rate를 사용함. 공유했을 때의 request service rate, 혼자 사용할 때의 request service rate를 비교해서 성능 변화를 확인할 수 있다. 메모리 레벨에서는 prioritize하여 성능을 비교하고, 캐시 레벨에서는 auxiliary tag store를 두어 성능을 비교한다.

New memory architectures. 왜 메모리에서 연산하는 것이 필요해졌나? 1990년대에도 관련된 논문이 있었다. 1960년대부터 나오기 시작한 개념이다. A logic in memory computers가 해당 논문의 제목. 기술적으로 이를 필요로 하기 때문이다(push). DRAM sacling이 더이상 잘 되지 않는다. 산업계가 새로운 메모리 아키텍쳐를 사용하고자 한다. HMC, automata processor 등이 등장하고 있음. 그리고 시스템과 어플리케이션에서 이러한 구조를 필요로 한다(pull). 어플리케이션과 시스템에서 데이터 접근이 bottleneck이 되고 있음. 시스템이 에너지 제약을 가짐. 데이터 이동으로 인한 에너지 소모가 심함(Communication dominates arithmetic HiPEAC’15 참고). In-memory processing을 위한 두 가지 접근. (1) DRAM을 가능한 한 적게 변경하면서도 강력한 연산을 지원하는 것. (2) 3D-stacked memory의 logic을 사용하는 것. 대량의 데이터 복사와 초기화는 자주 일어나는 연산이다. 구글 데이터센터의 5% 사이클이 메모리 복사와 이동에 사용된다.

todays memory bulk memory copy.PNG

Intra-subarray, inter-subarray의 복사를 가능하게 함으로써 성능 향상 가능.

enabling in-memory computation.PNG

In DRAM bitwise and / or 연산이 가능하다(Fast Bulk Bitwise AND and OR in DRAM). 이를 사용해 성능 향상 가능.

그래프 워크로드에서 성능 저하가 발생함. 많은 랜덤 메모리 접근이 발생하고, 그에 비해 연산은 단순하다. 이를 해결하기 위해 scalable graph processing을 제안. 아키텍쳐와 프로그래밍 모델을 모두 개선함으로써 성능 개선 가능. In-memory processing을 적용하면 성능이 메모리 크기와 함께 증가한다. 기존의 아키텍쳐에서는 메모리 크기가 늘어나도 연산기는 그대로이므로 성능이 증가하지 않음. 하지만 in-memory processing을 적용하면 프로세서도 같이 늘어나는 효과가 있음. Minimal in-memory processing support는 어떤 것이 있을 수 있을까? 프로그래밍 모델, 가상 메모리를 변경하지 않고 적용하는 방법. PIM-enabled instruction을 추가하면 된다. 더 성능을 개선하려면, data locality를 aware해서 PIM-enabled instruction을 사용하면 됨.

그 다음으로 latency에 대해 이야기하자. 2000년에서 2011년까지 DRAM capacity는 16배 개선되었으나, latency는 20% 감소하는 것에 그침. DRAM latency는 time-sensitive workloads에는 중요한 요소이다. DRAM latency는 subarray latency + I/O latency로 이루어지는데, subarray latency가 지배적이다. Bitline이 길면 더 높은 집적도를 기대할 수 있으나, latency가 길어지고 전력 소모가 심해진다.

why is the subarray slow.PNG

Bitline을 짧게하면 차지하는 면적은 넓어지지만, latency는 짧아진다. 이를 융합하여 tiered-latency DRAM을 제안한다. 짧은 latency를 필요로 하는 경우에는 short bitline을 사용, 긴 latency를 필요로 하는 경우에는 long bitline을 사용. 이를 사용해 inclusive 캐시 또는 exclusive 캐시로 사용할 수 있음. Tiered-latency DRAM이 두 개의 다른 latency DIMM보다 나은 이유? 데이터 이동이 훨씬 효율적이다.

다음으로 adaptive-latency DRAM. DRAM의 timing에는 충분한 margin이 있고, 이는 worst case를 감당하기 위함이다. (1) process variation이 있고, (2) tempereature dependence가 있다. Adaptive-latency DRAM은 일반적인 상황에서 사용되는 상황을 가정하고 DRAM timing을 최적화하는 것. 전하량이 많은 경우에는 sensing을 빠르게 수행할 수 있다. tRCD를 17%까지 줄일 수 있다. AL-DRAM은 online으로 DRAM timing parameter를 최적화하고자 하는 것. DRAM 온도. 서버는 일반적으로 34’C, Desktop은 50’C. DRAM은 보통 85’C로 잡고 설계된다. Multicore system에서 AL-DRAM은 더 높은 성능 향상을 보인다. Multicore system에서는 contention이 더 심하고, 따라서 latency가 중요하게 된다.

다음으로 ChargeCache 소개. DRAM cell에 전하가 얼마나 들어있느냐에 따라 timing parameter를 조절해서 사용할 수 있다. 최근에 refresh된 DRAM cell의 경우에는 짧은 latency로 데이터 접근 가능하다.

다음으로 LISA 소개. Subarray 내의 connectivity는 좋지만, subarray들 사이의 connectivity가 낮다. 이들 사이에 데이터를 이동하기 위한 길을 만들어주자는 것이 LISA. 그리고 이를 활용하기 위한 기법들을 소개한다. 일반적으로 한 개의 bank는 64개의 subarray로 이루어져있는데, LISA에서는 최대 세 개의 subarray를 묶는 것을 가정함. LISA를 사용해서 fast subarray, slow subarray로 구성된 variable latency DRAM의 데이터 이동을 도울 수 있다. 또는 두 개의 precharge unit을 동시에 이용함으로써 latency를 짧게 할 수 있다.

Ramulator 소개. 연구에서 자주 사용하는 simulator. 원래 C#으로 짜여있었음. C++ 버전으로 공개함. DRAM, memory controller가 많이 변하고 있음. 표준도 변하고 있으며, 컨트롤러도 새롭게 등장하고 있음. 빠르고 확장하기 좋은 simulator가 필요해서 ramulator를 개발함. 많은 다양한 DRAM 표준을 지원한다. 가장 빠른 오픈 소스 시뮬레이터보다 2.5배 정도 빠르다. Gem5와 통합하여 쓸 수도 있다.

논문을 리뷰하는 방법.
how to do the paper reviews.PNG
모든 논문은 약점을 가진다. 약점에 대해 생각해보면서 비판적인 시각을 기를 수 있음.

그 다음으로 refresh에 대해 이야기. DRAM cell은 leaky하고, 64ms마다 refresh되어야 함. DRAM 크기가 늘어남에 따라 refresh에 드는 시간이 늘어남. 더 많은 row를 refresh해야하기 때문이다. Refresh와 접근을 병렬화할 수도 있고, 불필요한 refresh는 수행하지 않을 수도 있다. 메모리를 할당하지 않은 영역에 대해 refresh할 필요가 없기 때문이다.

summary refresh access parallelization.PNG

읽기 요청이 있을 때에는 refresh를 수행하지 않고, subarray-level parallel하게 refresh를 수행한다.

Refresh를 제거할 수도 있다. 대부분의 refresh는 64ms마다 일어날 필요가 없다는 점에 착안. Refresh가 얼마나 자주 필요한지에 따라 나누어, 몇 개의 클래스(bin)로 나눈다. 그리고 각 bin에 알맞은 refresh timing을 적용한다. 이렇게 구현하면 32GB DRAM에도 1.25KB Bloom filter로 충분하다. 약 75%의 refresh를 절감할 수 있다.

VRT implications on profiling mechanisms.PNG

AVATAR에서는 ECC를 두고, 기본적으로 낮은 rate으로 refresh하다가 에러가 발생함을 확인하면 rate를 높인다. 테이블을 두고, 주기적으로 reset.

DRAM referesh summary.PNG

다음으로 메모리 압축 기법 소개. 메모리 압축을 사용하면 메모리 용량 및 대역폭을 낭비하지 않을 수 있다. 하지만 latency가 길어지지 않도록 유의해야 한다. Toggle-aware compression은 압축으로 인해 발생하는 에너지 추가 소모를 해결하고자 하는 것.

Cacti는 DRAM 모델링에 부적합하다.

Emerging memory는 기존의 DRAM보다 더욱 scalable하다. PCM은 물질의 상태에 따라 저항이 변함. 9nm까지 scale할 것으로 예상되며, 20nm까지 프로토타이핑됨. 뿐만 아니라, 한 개의 cell 안에 여러 개의 비트를 저장할 수 있음. 하지만 여러 문제점이 있고, 이를 해결해야 함. PCM은 DRAM에 비해 읽기 4배 느리고, 쓰기 12배 느리다. 대역폭은 DRAM의 10분의 1. DRAM의 2~3배 집적도를 갖는다. NVRAM에서 resistance drift가 발생해서 reliability가 떨어진다는 문제가 있다. 하지만 아주 오랜 시간이 지나야 resistance drift 발생함. DRAM을 그대로 NVRAM으로 대체하면 60%의 성능 저하, 2.2배의 에너지 사용, 500시간 이후 사용 불가. PCM 고려하여 설계하면 성능 저하를 막을 수 있음.

Data를 DRAM에 넣을 것인가? PCM에 넣을 것인가? Streaming access의 경우에는 PCM에 넣어도 DRAM보다 나쁘지 않다. Prefetch할 수 있기 때문이다. Random access의 경우에는 DRAM이 훨씬 빠르다. 만약 tape를 저장장치로 쓴다면? Random access는 안 좋지만 streaming이라면 OK.

DRAM을 캐시로 사용하는 경우. Tag와 캐시블록을 같은 row에 저장함으로써 locality를 살릴 수 있음. 캐시 hit의 경우에 메모리 접근이 두 번 필요하다는 단점이 있음. 이를 해결하고자 SRAM tag store를 사용할 수 있음. 캐시 블록 크기의 결정도 중요하다. 캐시 블록이 크면 대역폭 낭비가 심할 수 있다. Set sampling을 통해 적절한 캐시 블록의 크기를 결정할 수 있을 것.

STT-MRAM을 메인 메모리로 사용할 수도 있다.

STTMRAM as main memory.PNG

STTMRAM pros and cons.PNG

NVRAM은 DRAM과 HDD의 특징을 모두 갖는다.
two-level storage model.PNG

NVRAM과 HDD와 같은 storage를 통합하는 unified memory manager가 필요하다.
coordinated memory and storage with NVM.PNG

ThyNVM dual granularity checkpointing, checkpointing and execution overlapping. High locality write는 DRAM에, low locality random write는 NVM에 수행. 프로그래머에 transparent하게 하는 방법을 고민했다는 점에서 유의미하다.

몇 가지 원리. (1) 시스템 소프트웨어 스택과 아키텍쳐 사이의 정보 교환은 최적화의 가능성을 열어준다. (2) worst case보다 더 optimize해서 실행할 수 있다. Worst case가 흔히 일어나지 않음에 착안한다. (3) 시스템 설계의 이종성에 주목한다. 이종성을 도입하면 더 효율적으로 설계할 수 있다.

메모리 문제는 시스템 성능, 효율성, 사용성에 중요한 영향을 일으킨다.

Flash memory는 더욱 신뢰성이 떨어진다. NAND 플래시 메모리는 오류가 심하다.

NAND flash error model.PNG

Advertisements
Posted in 1) Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 88,681 hits
%d bloggers like this: