본문 바로가기
Computer Science/Computer Architecture

논문정리)What Every Programmer Should Know About Memory - 1. Introduction

by 채소장사 2020. 1. 24.

이 내용은 Ulrich Drepper의 2007년 논문 What Every Programmer Should Know About Memory을 섹션별로 간단히 번역하고 정리한 내용입니다.

 


CPU 동작속도나 집적된 코어의 수가 빠르게 발전하면서, 대부분의 프로그램에서 메모리 엑세스가 성능 제약 요인(limiting factor)이 되고 있다. 하드웨어 설계자들이 제안한 메모리 핸들링 기술이나 캐시를 이용한 가속화 기술은 프로그래머의 이해가 바탕이 되어야 최적으로 동작할 수 있다. 이 논문은 현대 상용 하드웨어에서 사용되고 있는 메모리 서브시스템을 설명한다. 특히 CPU 캐시가 어떤 방식으로 동작하고, 이를 활용하기 위해 프로그래머가 이해해야 할 내용들을 담고 있다.

 


  컴퓨터를 구성하는 각 요소들이 개별적으로 개발되기 시작하면서, 컴포넌트 간의 성능 차이가 발생하기 시작했고 병목(bottleneck)이 생겨났다. 특히 대용량 저장장치(mass storage)나 메모리 서브시스템은 비용의 문제로 인하여 상대적으로 느리게 발전하였다.

  대용량 저장장치는 소프트웨어 기술로 해결하려는 시도들이 있었는데, 운영체제가 자주 접근하는 데이터를 메인 메모리에 계속 유지하는 방식이나 디바이스에 캐시 스토리지를 추가하여 사용하는 방법이 있었다.

( 참고- 최근에는 SSD와 같은 고속 저장장치(fast storage)를 사용하여서 저장장치의 데이터 접근 속도가 크게 향상되었고, 이에 따라 운영체제에서 SSD의 데이터를 효율적으로 접근하는 방식 등이 연구되고 있다. 또한 persistent memory와 같은 하드웨어 연구도 지속되고 있다.)

그러나 이 논문에서는 메모리 서브시스템에 집중하여 설명하므로 대용량 저장장치에 관한 내용은 깊게 다루지 않는다.

  메인 메모리에서 발생하는 병목을 해결하는 것은 훨씬 복잡하며, 거의 모든 제안방식은 하드웨어의 변경이 요구된다. 현재 다음 네 가지 형태로 이런 해결책이 제시되고 있다.

  • RAM 하드웨어 디자인 ( 속도와 병렬화 측면)
  • 메모리 컨트롤러 디자인
  • CPU 캐시
  • DMA ( Direct Memory Access)

  논문에서는 주로 CPU 캐시에 관한 내용을 다룬다.

메모리 서브 시스템의 한계와 문제점을 이해하기 위해 오늘날 상용 하드웨어의 설계방식에 대해 간단히 설명한다. 추가로 RAM의 타입에 대해서 살펴본다. 문서가 소프트웨어 개발자를 위해서 만들어졌으므로 하드웨어에 관한 상세한 내용을 다루지는 않았다.

  • 2장에서는 RAM( Random Access Memory)에 관하여 기술한다. 
  • 3장에서는 CPU 캐시의 동작에 관한 상세한 내용을 담고 있다.
  • 4장에서는 가상메모리(Virtual Memory)의 실행방식을 간단히 다룬다.
  • 5장에서는 NUMA( Non Uniform Memory Access)에 대해 상세히 설명한다.

이상의 배경지식을 바탕으로 핵심적인 내용을 6장에서 서술하는데, 다양한 상황에서 높은 성능을 보이는 코드 작성 방식에 관한 내용을 담고 있다. 7장에서는 이를 위한 유용한 프로그래밍 도구들을 다루고 마지막으로 8장에서는 (2007년 기준으로) 곧 활용될 수 있을 것으로 기대되는 기술 전망에 관해 이야기한다.

댓글