본문으로 이동

CMM-D의 Linux NUMA 활용: Memory Tiering

  • 메일
Utilizing Linux NUMA in CMM-D: Memory Tiering
Utilizing Linux NUMA in CMM-D: Memory Tiering
삼성전자는 지난 12월 업계 최초로 엔터프라이즈 리눅스 글로벌 1위 기업인 레드햇과의 협업을 통해 CMM-D (CXL* Memory Module-DRAM) 메모리 동작 검증을 완료1 했다. 이번 동작 검증은 기존 D램 모듈로 한정되었던 NUMA* (Non-Uniform Memory Access) 구조를 CMM-D에서도 활용할 수 있게 되었다는 점에서 의미가 크다. 삼성전자와 레드햇은 서버 사용자가 CMM-D를 손쉽게 활용할 수 있도록 레드햇 홈페이지를 통해 RHEL (Red Hat Enterprise Linux) 9 CXL 활용 가이드를 제공2 하고 있다.
• CXL (Compute Express Link): 고성능 서버 시스템에서 CPU와 함께 사용되는 가속기, D램, 저장 장치 등을 보다 효율적으로 활용하기 위한 차세대 인터페이스 표준 • NUMA (Non-Uniform Memory Access): 각 CPU 별로 접근할 수 있는 메모리 영역을 구분, 병목 현상을 해결하여 메모리를 효율적으로 관리하는 방법
본 아티클에서는 CMM-D로 확장된 NUMA 구조를 서버에서 손쉽고 유용하게 사용할 수 있는 기능 중 하나인 Memory Tiering과 그 세부 특성에 대해 자세히 소개하고자 한다. Memory Hierarchy 메모리 계층 구조 (Memory Hierarchy)란 시스템에서 사용되는 다양한 유형의 메모리를 계층적으로 구성하는 것을 의미한다. 이러한 계층 구조는 속도, 용량, 빈도 등으로 구분할 수 있으며, 유사한 특성이 있는 메모리를 함께 사용하여 데이터에 빠르게 접근하고 효율적으로 관리함으로써 전체 시스템의 성능을 향상시키는 것을 목적으로 한다. 메모리의 성능과 용량을 기준으로 고속 특성을 가진 Cache Memory, Main Memory, 고용량 특성을 가진 Memory Expander로 구분할 수 있다. 각 메모리의 특성은 아래 그림과 같다.
Memory Hierarchy
Memory Hierarchy
• Main Memory: D램으로 구성된 시스템의 주요 메모리. 저장 용량은 작은 반면 처리 속도가 빠름. CPU가 실행할 프로세스와 데이터를 임시 보관하는 공간. • Memory Expander (CMM-D): CXL 인터페이스를 통해 구성되는 메모리 모듈. 메인 메모리 대비 저장 용량이 높은 반면 처리 속도가 느림. Memory Tiering을 통해 효율 개선함. • Storage: SSD, HDD 등 비휘발성 스토리지 장치로 구성. 용량은 TB 수준으로 매우 크지만 메모리에 비해 속도가 현저히 느리고, 매우 높은 지연 시간을 가짐.

Memory Tiering CMM-D가 서버에 설치되면 Zero CPU NUMA (CPU가 없는 NUMA)로 인식되고, D램 모듈과 서로 다른 NUMA 노드로 인식되어 CPU 접근 시간에 차이가 발생하게 된다. 이때 발생하는 접근 속도 차이를 고려해서 메모리를 효율적으로 사용하도록 하는 기술이 Memory Tiering이다. Memory Tiering은 커널 레벨에서 기능을 활성화하거나, Ramdisk, Hugepage를 활용하여 기능을 구성할 수 있다.
Memory Promotion, Demotion Memory Tiering의 주요 기능으로 Memory Promotion과 Memory Demotion이 있다. Memory Promotion은 메모리 접근 빈도가 높은 핫 데이터를 고속 메모리인 D램에 배치하는 기능이며, Memory Demotion은 자주 사용하지 않는 콜드 데이터를 고용량인 CMM-D에 배치하는 기능이다. 이렇게 배치된 데이터를 필요에 따라 메모리 간 데이터 마이그레이션함으로써 시스템 운영 효율을 높일 수 있다.


Memory Tiering 활용 실전 아래는 CMM-D를 활용한 Memory Tiering의 실제 활용 방법이다. ■ Memory Tiering 설정 dax device system-ram type 구성을 위해 cxl , dax, numa 관련 패키지를 다운로드한다. dax 장치 리스트를 확인해 보면 CMM-D를 system-ram 형식의 Normal Type으로 인식하는 것을 확인할 수 있다.
code image 1
code image 1
NUMA Demotion 기능 활성화를 위해, numa_balancing Memory Tiering 모드로 설정한다. 이 옵션이 활성화되면 CMM-D에 데이터를 저장함으로써 로컬 메모리 영역에 과도한 부하가 발생하는 것을 막을 수 있다.
code image 2
code image 2
※ numa_balancing 지원 옵션 리스트 0 : NUMA_BALANCING_DISABLED 1 : NUMA_BALANCING_NORMAL 2 : NUMA_BALANCING_MEMORY_TIERING
■ Memory Tiering 설정 검증 NUMA Memory Tiering이 제대로 설정되었는지 검증하기 위해서는 Stress 툴을 활용할 수 있다. Stress 툴은 EPEL Repository에서 제공되므로, EPEL 패키지를 먼저 다운로드 후 Stress 패키지 설치가 필요하다. Stress 벤치마크 툴 설치 후 Swap 사용을 위해 메모리 용량 70% 초과 부하를 수행한다.
code image 3
code image 3
CMM-D 추가 후 Memory Tiering을 설정하지 않고 메모리 과부하 상태가 되면, Swap memory가 사용된다. 하지만 Memory Tiering이 설정된 환경에서는 속도가 느린 Swap memory는 사용되지 않고 CMM-D를 통해 pgpromote_success, pgdemote_kswapd, pgmigrate_success 등이 동작함을 확인할 수 있다.
code image 4
code image 4
※ pgpromote_success: 이 값은 페이지 프로모션을 수행한 횟수를 나타낸다. 페이지 프로모션은 빠른 데이터 접근을 위해 메모리의 페이지를 더 높은 수준의 캐시나 메모리로 이동시키는 프로세스이다. ※ pgdemote_kswapd: 이 값은 페이지 디모션을 수행한 횟수를 나타낸다. 페이지 디모션은 메모리의 페이지를 더 낮은 수준의 캐시나 메모리로 이동시키는 프로세스이다. 메모리 부족 상황에서 페이지를 디모션하거나 스왑 아웃하여 더 많은 여유 메모리를 확보한다.

1 https://semiconductor.samsung.com/news-events/news/exceptional-scalability-with-cxl-memory-samsung-and-red-hat-expand-the-ecosystem/ 2 https://www.redhat.com/ko/resources/rhel-cxl-usage-guide