KR20210103380A - 지속성 지원 장치 및 방법, 그리고 컴퓨팅 장치 - Google Patents

지속성 지원 장치 및 방법, 그리고 컴퓨팅 장치 Download PDF

Info

Publication number
KR20210103380A
KR20210103380A KR1020200145403A KR20200145403A KR20210103380A KR 20210103380 A KR20210103380 A KR 20210103380A KR 1020200145403 A KR1020200145403 A KR 1020200145403A KR 20200145403 A KR20200145403 A KR 20200145403A KR 20210103380 A KR20210103380 A KR 20210103380A
Authority
KR
South Korea
Prior art keywords
memory
persistence
processor
procedure
memory module
Prior art date
Application number
KR1020200145403A
Other languages
English (en)
Other versions
KR102470888B1 (ko
Inventor
정명수
권미령
박규영
이상원
Original Assignee
주식회사 멤레이
한국과학기술원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 멤레이, 한국과학기술원 filed Critical 주식회사 멤레이
Priority to US17/166,417 priority Critical patent/US11656967B2/en
Priority to CN202110185059.2A priority patent/CN113253920A/zh
Publication of KR20210103380A publication Critical patent/KR20210103380A/ko
Application granted granted Critical
Publication of KR102470888B1 publication Critical patent/KR102470888B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • G06F15/7864Architectures of general purpose stored program computers comprising a single central processing unit with memory on more than one IC chip
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

비휘발성 메모리를 포함하는 메모리 모듈 및 프로세서를 포함하는 컴퓨팅 장치의 지속성 지원 방법이 제공된다. 컴퓨팅 장치는 파워 오류 시에 정지 절차를 수행한다. 정지 절차에서, 컴퓨팅 장치는 실행 중인 프로세스 태스크를 스케줄링에서 제외하고, 프로세스 태스크의 상태를 메모리 모듈의 프로세스 제어 블록에 저장하고, 프로세서의 캐시를 플러시하고, 계류 중인 메모리 요청을 플러시한다.

Description

지속성 지원 장치 및 방법, 그리고 컴퓨팅 장치{METHOD AND APPARATUS FOR SUPPORTING PERSISTENCE AND COMPUTING DEVICE}
본 발명은 지속성 지원 장치 및 방법, 그리고 컴퓨팅 장치에 관한 것이다.
최근 지속 메모리(persistent memory) 기술은 데이터 센터 및 고성능 컴퓨터의 성능을 크게 향상시킬 수 있으므로 상당한 주목을 받고 있다. 특히 많은 컴퓨팅 영역에서 시스템 장애 및 고장으로부터의 복구를 위해 백엔드(back-end) 스토리지가 필요하다. 그런데 지속성 메모리는 모든 메모리 상태를 자발적으로 즉각적으로 복구할 수 있으므로, 백엔드 스토리지에 대한 많은 수의 액세스 및 관련된 런타임 오버헤드를 제거할 수 있다.
기존 지속성 메커니즘은 시스템을 완전히 비휘발성으로 만들도록 제한되어 있지만 상당한 오버헤드가 발생한다. 예를 들어, 절전 모드를 포함하는 시스템 이미지는 시스템이 정전에 직면할 때 지속성을 제공할 수 없다. 오류가 발생하면 절전 모드에서 전체 시스템 이미지를 직렬화해야 하므로 외부 전원의 도움 없이는 성공할 수 없다. 반면, 체크 포인트-리스타트(checkpoint-restart) 는 중복 데이터 덤프로 인해 심각한 시스템 오버 헤드를 유발할 수 있다. 또한 많은 체크 포인트-리스타트가 완전히 비휘발성이 아니기 때문에 커널을 재부팅하고 정확한 재개 지점을 감지하기 위해 추가 대기 시간이 필요하다.
본 발명이 이루고자 하는 과제는 파워 오류 시에 지속성에 제공할 수 있는 지속성 지원 장치 및 방법, 그리고 컴퓨팅 장치를 제공하는 것이다.
본 발명의 한 실시예에 따르면, 비휘발성 메모리를 포함하는 메모리 모듈 및 프로세서를 포함하는 컴퓨팅 장치의 지속성 지원 방법이 제공된다. 상기 지속성 지원 방법은 파워 오류 시에 정지 절차를 수행하는 단계를 포함한다. 상기 정지 절차를 수행하는 단계는, 실행 중인 프로세스 태스크를 스케줄링에서 제외하는 단계, 상기 프로세스 태스크의 상태를 상기 메모리 모듈의 프로세스 제어 블록에 저장하는 단계, 상기 프로세서의 캐시를 플러시하는 단계, 그리고 계류 중인 메모리 요청을 플러시하는 단계를 포함한다.
상기 지속성 지원 방법은 파워 복구 시에 계속 절차를 수행하는 단계를 더 포함할 수 있으며, 상기 계속 절차를 수행하는 단계는 상기 프로세스 제어 블록에 기초해서 프로세스 태스크를 스케줄링하는 단계를 포함할 수 있다.
상기 정지 절차를 수행하는 단계는, 상기 정지 절차와 상기 계속 절차를 수행하기 위한 프로그램과 관련된 레지스터를 상기 메모리 모듈에 저장하는 단계를 더 포함할 수 있다.
상기 계속 절차를 수행하는 단계는 상기 레지스터를 상기 메모리 모듈로부터 복원하는 단계를 더 포함할 수 있다.
상기 정지 절차를 수행하는 단계는, 주변 장치 관련 메모리 영역으로부터 주변 장치 정보를 읽는 단계, 그리고 상기 주변 장치 정보를 상기 메모리 모듈의 장치 컨텍스트에 기록하는 단계를 더 포함할 수 있다.
상기 지속성 지원 방법은 파워 복구 시에 계속 절차를 수행하는 단계를 더 포함할 수 있으며, 상기 계속 절차를 수행하는 단계는 상기 장치 컨텍스트를 읽어서 상기 주변 장치 정보를 복원하는 단계를 포함할 수 있다.
상기 프로세서는 복수의 코어 타일을 포함하고, 상기 복수의 코어 타일은 마스터 타일과 워커 타일을 포함할 수 있다. 상기 실행 중인 프로세스 태스크를 스케줄링에서 제외하는 단계는, 상기 마스터 타일에서 상기 정지 절차를 구현하는 커널 프로세서를 제외한 실행 중인 프로세스 태스크를 제외하는 단계, 그리고 상기 워커 타일에서 실행 중인 프로세스 태스크를 제외하는 단계를 포함할 수 있다.
상기 정지 절차를 수행하는 단계는, 상기 메모리 요청을 플러시하는 단계 이후에, 상기 워커 타일에서 상기 마스터 타일로 오프라인을 보고하고 전원을 끄는 단계, 그리고 상기 워커 타일로부터 상기 오프라인을 보고받으면 상기 마스터 타일에서 컨텍스트를 전환하는 단계를 더 포함할 수 있다.
상기 컨텍스트를 전환하는 단계는 시스템 레벨 예외를 발생시켜서 상기 컨텍스트를 커널에서 보호 모드의 부트로더로 전환하는 단계를 포함할 수 있다.
상기 정지 절차를 수행하는 단계는, 상기 보호 모드에서, 시스템을 재실행할 리턴 주소를 상기 메모리 모듈에 저장하는 단계를 더 포함할 수 있다.
상기 정지 절차를 수행하는 단계는, 시스템 레벨 예외를 발생시켜 컨텍스트를 커널에서 보호 모드의 부트로더로 전환하는 단계, 그리고 상기 보호 모드에서 상기 캐시를 플러시하는 제1 플러시 명령 및 상기 메모리 요청을 플러시하는 제2 플러시 명령을 실행하는 단계를 더 포함할 수 있다.
상기 실행 중인 프로세스 태스크를 스케줄링에서 제외하는 단계는 상기 실행 중인 프로세스 태스크를 유휴 태스크로 대체하는 단계를 포함할 수 있다.
상기 정지 절차를 수행하는 단계는 상기 유휴 태스크를 참조하는 커널 포인터를 지우는 단계를 더 포함할 수 있다.
상기 지속성 지원 방법은 파워 복구 시에 계속 절차를 수행하는 단계를 더 포함할 수 있으며, 상기 계속 절차를 수행하는 단계는 커널 포인터를 유휴 태스크로 돌린 후에 상기 프로세스 제어 블록에 기초해서 프로세스 태스크를 스케줄링하는 단계를 포함할 수 있다.
상기 프로세서의 캐시를 플러시하는 단계는 상기 메모리 모듈의 메모리 영역의 확인 없이 사용자 레벨에서 상기 캐시를 플러시하는 단계를 더 포함할 수 있다.
본 발명의 다른 실시예에 따르면, 비휘발성 메모리를 포함하는 메모리 모듈, 그리고 상기 메모리 모듈에 저장된 명령어를 실행함으로써, 파워 오류 시에 정지 절차를 수행하는 프로세서를 포함하는 컴퓨팅 장치가 제공된다. 상기 프로세서는, 상기 정지 절차에서, 실행 중인 프로세스 태스크를 스케줄링에서 제외하고, 상기 프로세스 태스크의 상태를 상기 메모리 모듈의 프로세스 제어 블록에 저장하고, 상기 프로세서의 캐시를 플러시하고, 계류 중인 메모리 요청을 플러시한다.
본 발명의 또 다른 실시예에 따르면, 컴퓨팅 장치의 프로세서로부터의 메모리 요청을 스케줄링하는 스케줄러, 그리고 메모리 컨트롤러를 포함하는 지속성 지원 장치가 제공된다. 상기 메모리 컨트롤러는 상기 컴퓨팅 장치의 시스템 메모리로 사용되는 비휘발성 메모리 모듈의 메모리 공간을 관리하며, 상기 프로세서로부터 제1 플러시 명령이 있는 경우 데이터 및 계류 중인 메모리 요청을 상기 메모리 모듈로 플러시하여 상기 프로세서와 상기 비휘발성 메모리 사이에서 지속성을 지원한다.
상기 프로세서는 RISC-V(reduced instruction set computer five) 코어 타일을 포함할 수 있다.
상기 메모리 컨트롤러는 상기 프로세서로부터의 제2 플러시 명령에 응답하여서 상기 프로세서의 캐시 라인의 데이터가 플러시되는 버퍼를 더 포함할 수 있다.
상기 지속성 지원 장치는 상기 제1 플러시 명령을 유지하는 레지스터를 더 포함할 수 있으며, 상기 메모리 컨트롤러는 상기 레지스터를 참조하여서 상기 제1 플러시 명령이 있는지 확인할 수 있다.
상기 메모리 컨트롤러는, 버퍼, 상기 메모리 모듈과의 인터페이스를 위한 메모리 인터페이스 로직, 그리고 상기 메모리 요청 중 쓰기 요청을 수신하면, 상기 메모리 인터페이스 로직을 통해 상태 읽기 요청을 상기 메모리 모듈로 발행하고, 상기 메모리 모듈에서 상기 쓰기 요청이 대상 영역이 사용 가능하지 않은 경우 상기 쓰기 요청을 상기 버퍼에 저장하는 버퍼 관리자를 포함할 수 있다.
상기 버퍼 관리자는 상기 대상 영역이 사용 가능한 경우 상기 쓰기 요청을 상기 메모리 인터페이스 로직을 통해 상기 메모리 모듈로 발행할 수 있다.
상기 메모리 모듈은 복수의 메모리 모듈을 포함할 수 있으며, 상기 메모리 컨트롤러는 상기 복수의 메모리 모듈에 각각 대응하는 복수의 메모리 컨트롤러를 포함할 수 있다. 상기 스케줄러는 메모리 요청을 상기 복수의 메모리 컨트롤러에 걸쳐 스트라이핑 및/또는 인터리빙할 수 있다.
본 발명의 또 다른 실시예에 따르면, 컴퓨팅 장치에 의해 실행되며, 기록 매체에 저장되어 있는 컴퓨터 프로그램이 제공된다. 상기 컴퓨터 프로그램은, 상기 컴퓨팅 장치가, 파워 오류 시에, 실행 중인 프로세스 태스크를 스케줄링에서 제외하는 처리, 상기 프로세스 태스크의 상태를 비휘발성 메모리를 포함하는 메모리 모듈의 프로세스 제어 블록에 저장하는 처리, 상기 프로세서의 캐시를 플러시하는 처리, 그리고 계류 중인 메모리 요청을 플러시하는 처리를 실행하도록 한다.
도 1은 본 발명의 한 실시예에 따른 컴퓨팅 장치의 블록도이다.
도 2는 PRAM에서 하나의 메모리 셀을 나타내는 도면이다.
도 3은 도 2에 도시한 메모리 셀에 인가되는 전류를 나타내는 도면이다.
도 4는 도 2에 도시한 메모리 셀에 도 3에 도시한 전류가 인가될 때의 온도 변화를 나타내는 도면이다.
도 5는 본 발명의 한 실시예에 따른 지속성 장치를 나타내는 도면이다.
도 6은 본 발명의 한 실시예에 따른 지속성 처리 장치를 나타내는 도면이다.
도 7은 본 발명의 한 실시예에 따른 지속성 지원 모듈을 나타내는 도면이다.
도 8 및 도 9는 본 발명의 한 실시예에 따른 지속성 메모리 모듈을 나타내는 도면이다.
도 10 및 도 11은 본 발명의 한 실시예에 따른 지속성 메모리 모듈에서 메모리 요청의 병렬 처리를 나타내는 도면이다.
도 12 및 도 13은 본 발명의 한 실시예에 따른 정지 및 계속 절차를 설명하는 도면이다.
도 14 및 도 15는 본 발명의 한 실시예에 따른 정지 절차를 나타내는 흐름도이다.
도 16은 본 발명의 한 실시예에 따른 계속 절차를 나타내는 흐름도이다.
도 17은 본 발명의 한 실시예에 따른 정지 및 계속 절차에서의 플러시 명령을 설명하는 도면이다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
도 1은 본 발명의 한 실시예에 따른 컴퓨팅 장치의 블록도이다. 도 1은 가능한 컴퓨팅 장치의 한 예이며, 본 발명의 실시예에 따른 컴퓨팅 장치는 다른 다양한 구조로 구현될 수 있다.
도 1을 참고하면, 본 발명의 한 실시예에 따른 컴퓨팅 디바이스(100)는 처리 장치(110) 및 메모리(120)를 포함한다.
처리 장치(110)는 명령어를 실행하여서 다양한 동작(예를 들면, 연산, 로직, 제어, 입출력 등의 연산)을 수행하는 프로세서를 포함한다. 프로세서는 예를 들면 중앙 처리 장치(central processing unit, CPU), 마이크로프로세서 또는 어플리케이션 프로세서(application processor, AP)일 수 있으며, 이에 한정되지 않는다.
메모리(120)는 처리 장치(110)에 의해 액세스되어 사용된다. 어떤 실시예에서, 메모리(120)는 컴퓨팅 장치의 시스템 메모리(메인 메모리)일 수 있다. 어떤 실시예에서, 컴퓨팅 디바이스(100)는 별도의 저장 장치를 더 포함할 수 있다.
메모리(120)는 비휘발성 메모리인 저항 변화 메모리(resistance switching memory)일 수 있다. 어떤 실시예에서, 저항 변화 메모리는 저장 매체(상변화 물질)의 저항율을 이용하는 상변화 메모리(phase-change memory, PCM)를 포함할 수 있다. 다른 실시예에서, 저항 변화 메모리는 메모리 소자의 저항을 이용하는 저항성 메모리(resistive memory) 또는 자기저항(magnetoresistive) 메모리를 포함할 수 있다. 아래에서 설명하는 실시예에서는 PCM, 특히 상변화 랜덤 액세스 메모리(phase-change random access memory, PRAM)를 저항 변화 메모리의 한 예로 설명한다.
어떤 실시예에서, 처리 장치(110)와 메모리(120)는 지속성 서비스를 제공하는 지속성 장치로 동작할 수 있다.
다음, 본 발명의 한 실시예에 따른 메모리에 포함되는 PRAM의 한 예에 대해서 설명한다.
도 2는 PRAM에서 하나의 메모리 셀을 나타내는 도면이며, 도 3은 도 2에 도시한 메모리 셀에 인가되는 전류를 나타내는 도면이고, 도 4는 도 2에 도시한 메모리 셀에 도 3에 도시한 전류가 인가될 때의 온도 변화를 나타내는 도면이다.
도 2에 도시한 메모리 셀은 하나의 예이며, 본 발명의 실시예에 따른 PRAM의 메모리 셀은 다양한 형태로 구현될 수 있다.
도 2를 참고하면, PRAM의 메모리 셀(200)은 상변화 소자(210)와 스위칭 소자(220)를 포함한다. 스위칭 소자(220)는 모스 트랜지스터, 다이오드 등의 다양한 소자로 구현될 수 있다. 상변화 소자(210)는 상변화막(211), 상벽화막 위에 형성되어 있는 상부 전극(212) 및 상변화막(211) 아래에 형성되어 있는 하부 전극(213)을 포함한다. 예를 들면, 상변화막(210)은 상변화 물질로 게르마늄(germanium, Ge), 안티몬(antimony, Sb) 및 텔루르(tellurium, Te)의 혼합물("GST 물질"이라 불리기도 함)을 포함할 수 있다.
상변화 물질은 비교적 높은 저항율(resistivity)을 가지는 비정질 상태와 비교적 낮은 저항율을 가지는 결정질 상태를 전환할 수 있다. 이때, 상변화 물질의 상태는 가열되는 온도와 가열 시간에 의해 결정될 수 있다.
다시 도 2를 참고하면, 메모리 셀(200)에 전류가 인가되면, 인가된 전류는 하부 전극(213)을 통해 흐르게 된다. 짧은 시간 동안 전류가 메모리 셀(200)에 인가되면, 인가된 전류는 하부 전극(213)의 인접한 막을 가열한다. 이때, 가열 프로파일의 차이에 의해서 상변화막(211)의 일부(도 2에서 해칭된 부분)가 결정질 상태로 되거나 비정질 상태로 된다. 결정질 상태는 "셋(set) 상태"로, 비정질 상태로 "리셋(reset) 상태"로 불린다.
도 3 및 도 4를 참고하면, 높은 전류의 리셋 펄스(RESET)가 짧은 시간(tRST) 동안 메모리 셀(200)에 인가될 때, 상변화막(211)은 리셋 상태로 된다. 리셋 펄스(RESET)의 인가에 따라 상변화막(211)의 상변화 물질이 가열되어 온도(Tr)가 녹는점 이상으로 되면, 상변화 물질이 녹은 후 식으면서 비정질 상태로 변화한다. 리셋 펄스(RESET)보다 낮은 전류를 가지는 셋 펄스(SET)가 리셋 펄스(RESET)보다 긴 시간(tSET) 동안 상변화막(211)에 인가될 때, 상변화막(211)은 셋 상태로 된다. 셋 전류(SET)의 인가에 따라, 상변화 물질이 가열되어서 온도(Ts) 녹는점보다 낮은 결정화 온도에 도달하면 결정질 상태로 변화한다. 셋 펄스(SET)보다 낮은 전류가 인가되거나 짧은 시간 동안 전류가 인가되는 경우에는 이러한 리셋 상태 및 셋 상태가 유지되므로, 메모리 셀(200)에 데이터를 기입할 수 있다.
이때, 리셋 상태와 셋 상태는 각각 "1"과 "0"의 데이터로 설정될 수 있으며, 이는 메모리 셀(200)의 상변화 소자(210)의 저항율을 측정함으로써 감지될 수 있다. 이와는 달리, 리셋 상태와 셋 상태를 각각 "0"과 "1"의 데이터로 설정될 수도 있다.
따라서 메모리 셀(200)에 읽기 펄스(READ)를 인가함으로써 메모리 셀(200)에 저장된 데이터를 읽을 수 있다. 읽기 펄스(READ)는 낮은 전류로 짧은 시간(tREAD) 동안 인가되어 메모리 셀(200)의 상태를 변경하지 않을 수 있다. 읽기 펄스(READ)는 전류 크기가 셋 펄스(SET)보다 낮을 수 있고, 인가되는 시간(tREAD)이 리셋 펄스(RESET)의 인가 시간(tRST)보다 짧을 수 있다. 메모리 셀(200)의 상변화 소자(210)의 저항율이 상태에 따라 다르므로, 상변화 소자(210)에 흐르는 전류의 크기 또는 상변화 소자(210)에서의 전압 강하의 크기로 메모리 셀(200)의 상태, 즉 메모리 셀(200)에 저장된 데이터를 읽을 수 있다.
한 실시예에서, 읽기 펄스(READ)를 인가하였을 때, 메모리 셀(200)에 걸리는 전압의 크기의 차이로 메모리 셀(200)의 상태를 읽을 수 있다. 이 경우, 리셋 상태에서 메모리 셀(200)의 상변화 소자(210)는 큰 저항을 가지므로, 상변화 소자(210)에서 감지된 전압인 큰 경우를 리셋 상태로, 상변화 소자(210)에서 감지된 전압이 작은 경우를 셋 상태로 결정할 수 있다. 다른 실시예에서, 메모리 셀(200)에 전압을 인가하였을 때, 출력되는 전류의 차이로 메모리 셀(200)의 상태를 읽을 수 있다. 이 경우, 상변화 소자(210)에서 감지된 전류가 작은 경우를 리셋 상태로, 상변화 소자(210)에서 감지된 전류가 큰 경우를 셋 상태로 결정할 수 있다.
PRAM에서는 데이터 쓰기는 일련의 리셋 과정과 셋 과정을 통해서 수행되므로, 인가 시간이 긴 리셋 펄스로 인해 쓰기 동작이 읽기 동작보다 느릴 수 있다.
도 5는 본 발명의 한 실시예에 따른 지속성 장치를 나타내는 도면이다.
도 5를 참고하면, 지속성 장치(500)는 프로세서(510), 지속성 지원 모듈(persistence support module, PSM)(520) 및 메모리 모듈(530)을 포함한다. 또한, 지속성 장치(500)는 프로세서(510)와 지속성 지원 모듈(520)을 연결하는 버스(541, 542)를 더 포함할 수 있다. 어떤 실시예에서, 버스(541, 542)는 프로세서(510)에 연결되는 시스템 버스(541)와 지속성 지원 모듈(520)에 연결되는 메모리 버스(542)를 포함할 수 있다. 이 경우, 시스템 버스(541)와 메모리 버스(542)는 연결되어 있다.
어떤 실시예에서, 프로세서(510)는 복수의 코어 타일(core tiles)을 포함할 수 있다. 한 실시예에서, 코어 타일은 RISC-V(reduced instruction set computer five) 코어 타일을 포함할 수 있다. 어떤 실시예에서, 시스템 버스(541)는 타일링크 기반 캐시 코히어런트(TileLink-based cache coherent) 시스템 버스를 포함할 수 있다.
지속성 장치(500)는 시스템 버스(541)에 연결될 DRAM(dynamic random access memory) 컨트롤러 및 NMEM(near memory cache) 컨트롤러와 같은 DRAM 관련 구성 요소 대신에 지속성 지원 모듈(520)을 도입한다.
어떤 실시예에서, 지속성 지원 모듈(520)은 메모리 버스(542)를 통해 프로세서(510)에 연결될 수 있다. 한 실시예에서, 메모리 버스(542)는 버스트 모드(burst mode) 메모리 버스를 포함할 수 있다. 어떤 실시예에서, 지속성 지원 모듈(520)은 인터페이스와 인터페이스의 물리 계층(physical layer, PHY)을 통해 메모리 모듈(530)에 연결될 수 있다. 한 실시예에서, 인터페이스는 DDR(double data rate) 인터페이스를 포함할 수 있다.
지속성 지원 모듈(520)은 프로세서(510)의 로드/저장(load/store) 요청, 즉 쓰기/읽기 요청을 PRAM 요청으로 변환할 수 있다.
메모리 모듈(530)은 지속성을 위해 비휘발성 메모리로 형성된다. 앞으로서, 메모리 모듈(530)을 지속성 메모리 모듈(persistence memory module, PMEM)이라 한다. 어떤 실시예에서, 비휘발성 메모리는 저항 변화 메모리일 수 있다. 한 실시예에서, 저항 변화 메모리는 PRAM일 수 있다.
다음 도 6 및 도 7을 참고로 하여 본 발명의 한 실시예에 따른 지속성 처리 장치를 설명한다.
도 6은 본 발명의 한 실시예에 따른 지속성 처리 장치를 나타내는 도면이며, 도 7은 본 발명의 한 실시예에 따른 지속성 지원 모듈을 나타내는 도면이다.
도 6을 참고하면, 지속성 처리 장치(600)는 프로세서(610)와 지속성 지원 모듈(670)을 포함한다.
프로세서(610)는 복수의 코어 타일을 포함할 수 있다. 한 실시예에서, 각 코어 타일은 RISC-V(reduced instruction set computer five) 코어 타일을 포함할 수 있다. 예를 들면, 프로세서(610)는 네 개의 서로 다른 RISC-V 코어 타일을 포함할 수 있다. 각 코어 타일(610)은 캐시(예를 들면 L1 캐시 또는 L2 캐시)를 포함한다. 어떤 실시예에서, 코어 타일(610)의 캐시에 저장된 데이터와 메모리 요청을 각각 플러시할 수 있는 플러시 명령어(cflush 및 mflush)가 사용될 수 있다.
다시 도 6을 참고하면, 복수의 코어 타일(610)은 시스템 버스(630)에 연결되어 있다. 시스템 버스(630)는 복수의 코어 타일(610)에 의해 공유되므로, 공유 시스템 버스(shared system bus)라 할 수 있다. 어떤 실시예에서, 시스템 버스(630)는 읽기 및 쓰기 버스 채널을 포함할 수 있다.
어떤 실시예에서, 지속성 처리 장치(600)는 캐시 일관성(coherence)를 보장하기 위해서 브로드캐스트 허브(broadcast hub)(620)를 더 포함할 수 있다. 브로드캐스트 허브(620)는 시스템 버스(630)의 나머지 버스 채널을 사용해서 MSI(Modified, Shared, Invalid) 캐시 일관성 프로토콜을 구현할 수 있다. 브로드캐스트 허브(620)는 시스템 버스(630)를 통해 코어 타일(610)에 연결될 수 있다.
어떤 실시예에서, 시스템 버스(630)의 버스 채널은 메모리 버스(640)로 라우팅될 수 있다. 어떤 실시예에서, 지속성 처리 장치(600)는 메모리 버스(640)의 프로토콜을 지속성 지원 모듈(670)이 코어 타일(610)에 연결되기 위해 사용되는 인터페이스(650)의 프로토콜로 변경하기 위한 변환 모듈(660)을 더 포함할 수 있다. 한 실시예에서, 인터페이스(650)는 AXI(advanced extensible interface), 예를 들면 AXI4를 포함할 수 있다.
어떤 실시예에서, 시스템 버스(630)는 칩 스케일 인터커넥트(chip-scale interconnect) 표준인 타일링크(TileLink)를 사용할 수 있다.
타일링크에는 세 가지 유형의 인터커넥트가 있으며, 세 가지 유형은 TL-C(TileLink cached)와 두 가지 유형의 TL-U(TileLink uncached)를 포함하며, 두 가지의 유형의 TL-U는 TL-UL(TileLink uncached lightweight)와 TL-UH(TileLink Uncached heavyweight)를 포함한다. TL-C 버스는 캐시 일관성 관리에 사용할 수 있는 복수의 링크 채널을 사용하며, TL-UL 및 TL-UH 버스는 일관성 관련 채널을 제거하여 채널 수를 줄인다. TL-UL 및 TL-UH 버스는 일반적인 읽기 및 쓰기를 제공할 수 있으며, TL-UH 버스는 어토믹 연산(atomic operation)(예를 들면: 조건부 저장(conditional-store), 힌트(hint)(예를 들면, 프리페치(prefetch) 및 버스트 읽기/쓰기와 같은 추가적인 기능을 제공할 수 있다. 타일링크에서 노드는 클라이언트(client), 넥서스(nexus) 및 어댑터(adapter)로 재정의될 수 있다. 클라이언트 노드는 출력 에지만 드러내지만, 넥서스 및 어댑터 노드는 입력 및 출력 에지를 모두 가질 수 있다. 어댑터 노드는 입력을 위한 에지와 출력을 위한 에지, 두 개의 에지를 가질 수 있지만, 넥서스 노드는 다양한 개수의 입력/출력 에지를 사용할 수 있다.
한 실시예에서, 시스템 버스(630)는 다섯 개의 버스 채널을 포함할 수 있다. 이 경우, 시스템 버스(630)는 TL-U로 구현되는 두 개의 읽기 및 쓰기 버스 채널를 포함할 수 있다. 브로드캐스트 허브(620)는 시스템 버스(630)에서 나머지 세 개의 버스 채널을 사용해서 MSI 캐시 일관성 프로토콜을 구현할 수 있다. 세 개의 버스 채널은 두 개의 링크 채널을 가지지만 버스 요청 동작을 지원하는 메모리 버스(640)로 라우팅될 수 있다.
시스템 버스(630)가 타일링크를 사용하고 인터페이스(650)가 AXI4인 경우, 변환 모듈(660)은 타일링크를 AXI4로 변환하는 변환 모듈(TileLinkToAXI4)을 포함할 수 있다.
어떤 실시예에서, 지속성 처리 장치(600)는 도 6에 도시한 것처럼 DAG(direct acyclic graph)로 구현될 수 있다. 이 경우, 코어 타일(610)은 클라이언트 노드일 수 있다. 넥서스 노드가 비대칭 입력과 출력 에지를 가질 수 있으므로, 시스템 버스(630), 메모리 버스(640), 인터페이스(650) 및 변환 모듈(660)은 넥서스 노드인 반면, 브로드캐스트 허브(620)는 어댑터 노드일 수 있다. 코어 타일(610)의 에지는 시스템 버스(630)를 형성하는 넥서스 노드로 전달될 수 있다. 지속성 지원 모듈(670)는 인터페이스(650)의 슬레이브, 예를 들면 AXI4 슬레이브(AXI4Slave)일 수 있다.
브로드캐스트 허브(620) 위에서의 상호 연결은 TL-C에 의해 처리되지만 브로스캐스트 허브(620) 아래에서의 상호 연결은 TL-UH에 의해 처리될 수 있다. 프로세서측의 캐시 라인 크기(예를 들면, 64B)를 고려하면, TL-UH는 버스트 기간 동안 8개의 64 비트 기반 메시지를 전달하도록 구성될 수 있다. 지속성 지원 모듈(670)은 블랙 박스로 TL-UH 넥서스에 연결될 수 있다.
도 7을 참고하면, 지속성 지원 모듈(670)은 지속성 메모리 모듈(예를 들면, 도 5의 530)과 인터페이스하면서 지속성 메모리 모듈의 메모리 공간을 관리하는 메모리 컨트롤러(710) 및 메모리 요청을 스케줄링하기 위한 스케줄러(720)를 포함한다. 어떤 실시예에서, 지속성 지원 모듈(670)은 복수의 메모리 컨트롤러(710)를 포함할 수 있다. 지속성 메모리 모듈이 복수의 메모리 모듈(예를 들면, DIMM(dual in-line memory module))을 포함하는 경우, 메모리 컨트롤러(710)는 메모리 모듈마다 제공될 수 있다.
어떤 실시예에서, 지속성 지원 모듈(670)은 지속성 동작을 위한 플러시 레지스터(730)를 더 포함할 수 있다. 플러시 레지스터(730)는 계류 중인 메모리 요청을 플러시하기 위한 명령어(mflush)를 유지할 수 있다. 메모리 컨트롤러(710)는 메모리 서비스마다 플러시 레지스터(730)를 참조하여, mflush 명령어가 있는 경우 수신 요청을 일시 중단하고 계류 중인 모든 요청이 지속성 메모리 모듈에서 서비스되도록 플러시할 수 있다.
스케줄러(720)는 메모리 요청을 복수의 메모리 컨트롤러(710)에 걸쳐 스트라이핑 및/또는 인터리빙하여서 PRAM 레벨에서 자원 충돌을 줄일 수 있다. 메모리 요청이 쓰기(즉, 저장) 요청인 경우, 스케줄러(720)는 스트라이핑 및/또는 인터리빙된 메모리 요청에 따라 메모리 요청에 대응하는 데이터와 주소를 메모리 컨트롤러(710)를 통해 지속성 메모리 모듈로 전달할 수 있다. 메모리 요청이 읽기 요청인 경우, 스케줄러(720)를 메모리 컨트롤러(710)를 통해 지속성 메모리 모듈로부터 읽기 요청에 해당하는 데이터를 읽을 수 있다.
한편, PRAM의 쓰기 대기 시간은 프로세서 관점에서 읽기보다 110∼120배 길다. 많은 응용 프로그램에서 읽기(로드) 수가 쓰기(저장)보다 많으므로 읽기 대해 논블록킹(non-blocking) 서비스를 제공하는 것이 중요할 수 있다. 어떤 실시예에서, 지속성 지원 모듈(670)은 논블록킹 읽기 서비스를 위해 부호 생성기(740)와 복원 모듈(750)을 더 포함할 수 있다. 메모리 요청이 쓰기 요청인 경우, 스케줄러(720)는 데이터를 부호 생성기(740)로 전달하고, 부호 생성기(740)는 데이터를 부호화하여서 논블록킹 부호를 생성할 수 있다. 그러면 스케줄러(720)는 데이터와 함께 논블록킹 부호를 메모리 컨트롤러(710)를 통해 지속성 메모리 모듈로 전달할 수 있다. 어떤 실시예에서, 지속성 메모리 모듈은 논블록킹 부호용으로 지정된 PRAM 패키지를 포함할 수 있다. 이 경우, 스케줄러(720)는 논블록킹 부호와 주소를 논블록킹 부호용으로 지정된 PRAM 패키지를 포함하는 메모리 모듈에 대응하는 메모리 컨트롤러(710)로 전달할 수 있다.
어떤 실시예에서, 부호 생성기(740)는 쓰기 요청의 데이터를 복수의 서브데이터로 나누고, 복수의 서브데이터를 부호화하여 논블록킹 부호를 생성할 수 있다. 이 경우, 복수의 서브데이터와 논블록킹 부호는 각각 서로 다른 PRAM 패키지에 저장될 수 있다. 한 실시예에서, 부호 생성기(740)는 데이터를 두 개의 서브데이터로 나누는 경우, 두 서브데이터는 두 개의 PRAM 패키지에 각각 저장되고, 논블록킹 부호는 또 다른 PRAM 패키지(예를 들면, 논블록킹 부호로 지정된 PRAM 패키지)에 저장될 수 있다.
예를 들면, 데이터가 64 바이트 데이터인 경우, 부호 생성기(740)는 데이터를 두 개의 32 바이트 서브데이터로 나눌 수 있다. 부호 생성기(740)는 복수의 서브데이터를 부호화하여서 논블록킹 부호를 생성할 수 있다. 한 실시예에서, 논블록킹 부호를 생성하는 부호화로 배타적 논리합(exclusive OR, XOR) 연산을 사용할 수 있다. 이 경우, 64 바이트의 원 데이터가 두 개의 32 바이트의 서브데이터(DATA_A, DATA_B)로 나누어지는 경우, 32 바이트의 서브데이터(DATA_A, DATA_B)를 비트단위(bitwise) XOR 연산하여서 32 바이트의 논블록킹 부호가 생성될 수 있다. 예를 들면, 부호 생성기(740)는 논블록킹 부호를 생성하기 위한 부호화로 배타적 논리합(exclusive OR, XOR) 연산을 사용할 수 있다. 예를 들면, 부호 생성기(740)는 "001011100110"의 데이터를 "001011"의 서브데이터와 "100110"의 서브데이터로 나누고, "001011"와 "100110"의 XOR 연산으로 논블록킹 부호 "101101"를 생성할 수 있다. 부호 생성기(740)는 XOR 외에 논블록킹 부호를 생성할 수 있는 다른 부호화를 사용할 수 있다. 한 예로, 오류 정정 부호화(error correction coding, ECC)가 논블록킹 부호를 생성하는 부호화로 사용될 수 있다. 예를 들면, 저밀도 패러티 검사(low density parity check, LDPC) 부호화를 통해서 논블록킹 부호로 패러티 부호를 생성할 수 있다.
메모리 요청이 읽기(즉, 로드) 요청인 경우, 스케줄러(720)는 메모리 컨트롤러(710)를 통해 지속성 메모리 모듈로부터 데이터를 읽는다. 메모리 컨트롤러(710)는 복수의 PRAM 패키지로부터 각각 읽기 요청의 대상 데이터에 해당하는 복수의 서브데이터를 읽어서 읽기 요청의 데이터를 제공할 수 있다. 한편, 복수의 PRAM 패키지 중에서 다른 메모리 요청의 서비스에 사용되고 있는 PRAM 패키지, 즉 충돌(conflict)이 있는 PRAM 패키지가 존재하여 해당 PRAM 패키지에서 다른 메모리 요청의 서비스가 완료될 때까지 서브 데이터를 읽을 수 없는 경우가 존재할 수 있다. 이 경우, 메모리 컨트롤러(710)는 지정된 PRAM 패키지로부터 대상 데이터에 해당하는 논블록킹 부호를 읽고, 복원 모듈(750)은 논블록킹 부호와 충돌이 없는 PRAM 패키지로부터 읽은 서브 데이터로부터 충돌이 있는 PRAM 패키지에 저장된 서브데이터를 복원할 수 있다. 예를 들면, 대상 데이터가 두 개의 서브데이터(DATA_A, DATA_B)로 나누어서 저장되어 있고, 서브데이터(DATA_B)가 저장된 PRAM 패키지에서 충돌이 있는 경우, 복원 모듈(750)은 충돌이 없는 PRAM 패키지에서 읽은 서브데이터(DATA_A)와 논블록킹 부호로부터 충돌이 있는 PRAM 패키지에 저장된 서브데이터를 복구할 수 있다. 예를 들면, "001011100110"의 원 데이터가 "001011"의 DATA_A와 "100110"의 DATA_B로 나누어서 저장된 경우, DATA_A와 논블록킹 부호의 XOR 연산을 통해 "100110"의 DATA_B를 복원할 수 있다.
어떤 실시예에서, 논블록킹 읽기 서비스는 미합중국 등록 특허 제10,452,531호에 개시된 내용을 사용할 수 있다.
한편, 프로세서는 플러시 명령(mflush, cflush)이 있는 경우에만 쓰기 완료를 기다리므로, 쓰기 대기 시간을 견딜 수 있다. 그러나 특정 영역에 대해 여러 번 쓰기를 요청하면 충돌로 인해 쓰기 대기 시간이 늘어날 수 있다. 어떤 실시예에서, 각 메모리 컨트롤러(710)는 논블록킹 쓰기 서비스를 제공할 수 있다. 이를 위해, 메모리 컨트롤러(710)는 버퍼(711), 버퍼 관리자(712), 마이그레이션 관리자(713), 버퍼 플러시(714) 및 메모리 인터페이스 로직(715)을 포함할 수 있다. 어떤 실시예에서, 메모리 레벨 병렬 처리를 향상시키기 위해서 지속성 메모리 모듈의 메모리 모듈당 두 개의 메모리 채널(CH0, CH1)이 할당될 수 있으며, 이 경우 각 메모리 컨트롤러(710)는 두 개의 메모리 채널(CH0, CH1)에 각각 대응하는 두 개의 메모리 인터페이스 로직(PIL0, PIL1)을 포함할 수 있다. 각 메모리 인터페이스 로직(715)은 대응하는 채널에 대해서 독립적으로 동작할 수 있다.
버퍼(711)는 쓰기 요청에 해당하는 데이터를 저장하며, 캐시로 동작할 수 있다. 어떤 실시예에서, 버퍼는 BRAM(block RAM)으로 구현될 수 있다. 메모리 컨트롤러(710)가 쓰기 요청을 수신하면, 버퍼 관리자(712)는 메모리 인터페이스 로직(715)을 통해 상태 읽기 요청을 지속성 메모리 모듈의 대상 PRAM 패키지에 발행할 수 있다. 대상 PRAM 패키지가 사용 가능한 경우(즉, 다른 메모리 요청 서비스와 충돌이 없는 경우), 버퍼 관리자(712)는 메모리 인터페이스 로직(715)를 통해 쓰기 요청을 대상 PRAM 패키지로 보낼 수 있다.
대상 PRAM 패키지가 사용 가능하지 않은 경우, 버퍼 관리자(712)는 버퍼(711)에 쓰기 요청을 넣을 수 있다. 버퍼 관리자(712)가 상태 읽기 요청을 지속성 메모리 모듈의 대상 PRAM 패키지에 발행한 결과, 대상 PRAM 패키지가 사용 가능한 경우, 마이그레이션 관리자(713)는 메모리 인터페이스 로직(715)를 통해 버퍼(711)에 저장된 쓰기 요청을 대상 PRAM 패키지로 보낼 수 있다. 또한 플러시 명령(mflush, cflush)이 발행되는 경우, 버퍼 플러시(714)는 버퍼에 저장된 요청을 대상 PRAM 패키지로 보낼 수 있다.
어떤 실시예에서, 메모리 인터페이스 로직(715)은 레지스터를 포함하고, 레지스터를 메모리 컨트롤러(710)에 노출할 수 있다. 레지스터는 수신 메모리 요청의 유형을 래칭(latch)하는 레지스터, 쓰기 내용을 래칭하는 레지스터 및 읽기 내용을 래칭하는 레지스터를 포함할 수 있다. 메모리 인터페이스 로직(715)은 레지스터에 기초해서 대상 PRAM 패키지와 통신하는데 사용되는 PRAM 명령을 생성하는 변환기(715a)를 더 포함할 수 있다. 메모리 인터페이스 로직(715)은 PRAM 명령을 PRAM 패키지로 전달하기 위한 메모리 타이밍을 처리하는 명령 생성기(715b)를 더 포함할 수 있으며, 명령 생성기의 타이밍에 따라 PRAM 명령은 실행될 수 있다. 메모리 인터페이스 로직(715)은 PRAM 명령과 관련된 디지털 신호를 통신을 위한 아날로그 신호로 변환하기 위한 물리 계층(715c)을 더 포함할 수 있다.
어떤 실시예에서, 메모리 컨트롤러(710)는 대상 PRAM 패키지를 선택하기 위해서 채널 선택기(716)와 칩 선택기(717)를 더 포함할 수 있다. 스케줄러(720)가 메모리 요청을 스트라이핑 및/또는 인터리빙하는 경우, 채널 선택기(717)는 메모리 요청의 각 서브 데이터에 해당하는 채널을 선택하고, 칩 선택기(717)는 해당 채널에 포함되는 PRAM 패키지 중에서 대상 PRAM 패키지를 선택할 수 있다.
어떤 실시예에서, 지속성 지원 모듈(670)은 복수의 입출력(input/output, I/O) 포트를 통해 메모리 컨트롤러(710)의 읽기 및 쓰기 인터페이스를 코어 타일(도 6의 610)에 노출시킬 수 있다. 한 실시예에서, 복수의 I/O 포트는 다섯 개의 I/O 포트(예를 들면 AXI4 I/O 포트)를 포함할 수 있다. 이 경우, 데이터 및 주소 채널을 위한 두 개의 I/O 포트가 읽기 경로에 할당되고, 마찬가지로 데이터 및 주소 채널을 위한 두 개의 I/O 포트가 쓰기 경로에 할당될 수 있다. 쓰기 상태를 확인하기 위해 하나의 I/O 포트가 쓰기에 대한 응답 채널로 할당될 수 있다.
다음, 본 발명의 한 실시예에 따른 지속성 메모리 모듈에 대해서 도 8 내지 도 11을 참고로 하여 설명한다.
도 8 및 도 9는 본 발명의 한 실시예에 따른 지속성 메모리 모듈을 나타내는 도면이다.
도 8 및 도 9를 참고하면, 지속성 메모리 모듈은 복수의 PRAM 패키지(830)를 포함한다. 한 실시예에서, PRAM 패키지는 PRAM 칩일 수 있다. 어떤 실시예에서, 지속성 메모리 모듈은 DIMM(dual in-line memory module)을 사용할 수 있다. 이 경우, 인쇄 회로 기판(printed circuit board, PCB)의 전면(front-end)(810)과 후면(back-end)(820)에 각각 복수의 PRAM 패키지(830)가 형성될 수 있다. 예를 들면, PCB의 전면(810)과 후면(820)에 각각 네 개의 PRAM 패키지(830)가 형성되어, 총 여덟 개의 PRAM 패키지(830)가 형성될 수 있다. 도 8에서는 설명의 편의상 전면(810)과 후면(820)이 같은 방향으로 도시되어 있다.
PCB의 각 면에서 복수의 PRAM 패키지(830)는 채널에 의해 그룹화되어 데이터 신호 배선(840)을 공유할 수 있다. 어떤 실시예에서, PCB의 전면(810)에 형성된 복수의 PRAM 패키지(예를 들면, 네 개의 PRAM 패키지)(830)가 하나의 채널(CH0)에 의해 그룹화되고, PCB의 후면(820)에 형성된 복수의 PRAM 패키지(예를 들면, 네 개의 PRAM 패키지)(830)가 다른 채널(CH1)에 의해 그룹화될 수 있다. 데이터 신호 배선(840)은 채널마다 개별적으로 할당될 수 있으며, 주소 신호 배선(850)도 동일한 방식으로 DDR(double date rate) 핀에 매핑될 수 있다. 어떤 실시예에서, 데이터 신호 배선(840)으로 16 비트 데이터 신호 배선이 사용될 수 있다. 이에 따라, 지속성 메모리 모듈은 32 비트 데이터 버스를 통해 지속성 처리 장치와 함께 동작할 수 있으며, 지속성 처리 장치는 버스트 I/O(input/output) 핸들링 수행하여 인터페이스를 통해 캐시 라인 방출을 지속성 메모리 모듈로 전달할 수 있다. 어떤 실시예에서, 주소 신호 배선(850)으로 10 비트 주소 신호 배선이 사용될 수 있다.
각 면에서 복수의 PRAM 패키지(830)가 채널에 의해 그룹화되어 데이터 신호 배선(840) 및 주소 신호 배선(850)을 공유하는 반면, 칩 선택(chip selection) 배선(860)은 각 PRAM 패키지(830)에 독립적으로 주어질 수 있다. 예를 들면, 각 면에 네 개의 PRAM 패키지(830)가 형성된 경우, 네 개의 CS 핀이 제공될 수 있다. 어떤 실시예에서, 각 CS 핀은 전면(810)과 후면(820)의 두 PRAM 패키지(830)에 연결되어 병렬 처리(parallelism)를 향상시킬 수 있다.
어떤 실시예에서, 복수의 CS 배선(860)이 채널 오프셋에 기초해서 서로 다른 PRAM 패키지(830)에 걸쳐 분산될 수 있다. 이 경우, 캐시 라인 방출은 두 개로 분할되어서 동일한 채널 오프셋을 가지는 두 개의 서로 다른 PRAM 패키지(830)을 통해 병렬로 처리될 수 있다.
어떤 실시예에서, 지속성 메모리 모듈은 복수의 메모리 모듈(예를 들면 DIMM)을 포함할 수 있다.
다음 복수의 메모리 모듈을 포함하는 지속성 메모리 모듈에서 수신 메모리 요청을 병렬로 처리하는 방법에 대해서 도 10 및 도 11를 참고로 하여 설명한다.
도 10 및 도 11은 본 발명의 한 실시예에 따른 지속성 메모리 모듈에서 메모리 요청의 병렬 처리를 나타내는 도면이다. 도 10 및 도 11에는 설명의 편의상 지속성 메모리 모듈이 여섯 개의 DIMM을 포함하고, 여섯 개의 DIMM 중에서 네 개의 DIMM이 데이터용으로, 두 개의 DIMM이 논블록킹 부호용으로 할당된 경우가 도시되어 있다.
도 10을 참고하면, 어떤 실시예에서, CS 배선이 서로 다른 PRAM 패키지에서 분리되어 있으므로, 수신 메모리 요청이 두 채널에 걸쳐 병렬로 스트라이핑되어 서비스될 수 있다(S1010). 이를 이중 채널 스트라이핑이라 한다. 또한, 어떤 실시예에서, 지속성 메모리 모듈에서 복수의 메모리 모듈(예를 들면, DIMM일 수 있으며, 앞으로 DIMM으로 설명한다)이 제공되는 경우, 도 11에 도시한 것처럼, 메모리 요청은 DIMM 사이에서 스트라이핑될 수 있다(S1020). 이를 DIMM간 스트라이핑(inter-DIMM striping)이라 한다. 또한, 어떤 실시예에서, 도 10에 도시한 것처럼, DIMM 내에서 복수의 PRAM 패키지에서 메모리 요청이 차례로 처리될 수 있으며(S1030), 이를 DIMM내 인터리빙(intra-DIMM interleaving)이라 한다.
한 실시예에서, 순차적으로 수신되는 메모리 요청은 아래와 같이 처리될 수 있다.
도 10 및 도 11을 참고하면, 메모리 컨트롤러는 수신 메모리 요청을 두 PRAM 패키지에 걸쳐 병렬로 스트라이핑한다(S1010). 예를 들면, 메모리 컨트롤러는 복수의 DIMM 중 DIMM0의 CS0에 의해 선택되는 두 채널(CH0, CH1)의 PRAM 패키지(P0)에 메모리 요청을 스트라이핑할 수 있다. 이어지는 메모리 요청이 수신되는 경우, 메모리 컨트롤러는 메모리 요청을 복수의 DIMM 중에서 다음 오프셋을 가지는 DIMM에 스트라이핑한다(S1020). 예를 들면, 메모리 컨트롤러는 복수의 DIMM 중 DIMM1의 CS0에 의해 선택되는 두 PRAM 패키지(P1)에 메모리 요청을 스트라이핑하고, DIMM2의 CS0에 의해 선택되는 두 PRAM 패키지(P2)에 메모리 요청을 스트라이핑하고, DIMM3의 CS0에 의해 선택되는 두 PRAM 패키지(P3)에 메모리 요청을 스트라이핑할 수 있다. 이와 같이, 메모리 요청은 복수의 DIMM(DIMM0, DIMM1, DIMM2, DIMM3)으로 차례로 스트라이핑될 수 있다. 이에 따라, 순차적인 메모리 액세스에 대한 메모리 충돌을 피할 수 있다.
또한 추가적인 메모리 요청이 수신되는 경우, 메모리 컨트롤러는 메모리 요청을 DIMM 내에서 다음 오프셋을 가지는 CS에 의해 선택되는 두 PRAM 패키지에 스트라이핑할 수 있다(S1030). 예를 들면, 메모리 컨트롤러는 복수의 DIMM 중 DIMM0의 CS1에 의해 선택되는 두 PRAM 패키지(P4)에 메모리 요청을 스트라이핑할 수 있다. 또한 이어지는 메모리 요청은 DIMM간 스트라이핑에 의해 복수의 DIMM(DIMM0, DIMM1, DIMM2, DIMM3)의 CS1에 의해 선택되는 PRAM 패키지로 차례로 스트라이핑될 수 있다. 또한 이어지는 메모리 요청은 다음 오프셋을 가지는 CS(CS2, CS3)에 의해 처리될 수 있다.
이와 같이, 메모리 요청의 주소가 DIMM 사이에서 및 DIMM 내에서 스크램블링되므로, 랜덤 메모리 요청이 자원 충돌을 최소화하여서 서비스될 수 있다.
어떤 실시예에서, 논블록킹 부호용으로 할당된 DIMM(DIMM4, DIMM5)의 각 채널은 대응하는 DIMM이 병렬로 동작할 때 인에이블될 수 있다. 도 11에 도시한 것처럼, DIMM4의 한 채널(C0)은 DIMM0이 동작할 때 인에이블되고, DIMM4의 다른 채널(C1)은 DIMM1이 동작할 때 인에이블되고, DIMM5의 한 채널(C2)은 DIMM2이 동작할 때 인에이블되고, DIMM5의 다른 채널(C3)은 DIMM3이 동작할 때 인에이블될 수 있다. 즉, DIMM0의 PRAM 패키지에 데이터가 저장될 때, 데이터에 대응하는 논블록킹 부호는 DIMM5의 C0의 PRAM 패키지에 저장될 수 있다. 이에 따라, 논블록킹 부호의 읽기 및 쓰기가 데이터의 읽기 및 쓰기의 임계 경로(critical path)에서 벗어날 수 있다.
어떤 실시예에서, 채널 선택기(도 7의 716) 및 칩 선택기(도 7의 717)은 주소를 파싱할 수 있다. 한 실시예에서, 채널 선택기(716) 및 칩 선택기(717)는 칩 번호와 DIMM 번호를 사용하여서 데이터를 위한 주소를 파싱할 수 있으며, 칩 번호, 채널 번호 및 DIMM 번호를 사용하여서 논블록킹 부호를 위한 주소를 파싱할 수 있다.
이상에서 설명한 것처럼, 지속성 처리 장치는 지속성 메모리 모듈 상에서 동작할 수 있다. 그러나 코어 타일의 캐시 및 레지스터에서 관리되는 비지속성 상태가 존재할 수 있다. 또한 지속성 처리 장치의 지속성 지원 모듈은 지속성 메모리 모듈에 완전히 기록하지 않은 메모리 요청을 보유할 수 있다. 아래에서는 지속성 처리 장치의 비지속성 상태 정보를 지속성으로 변경하기 위한 실시예에 대해서 설명한다.
도 12 및 도 13은 본 발명의 한 실시예에 따른 정지 및 계속 절차를 설명하는 도면이다. 도 14 및 도 15는 본 발명의 한 실시예에 따른 정지 절차를 나타내는 흐름도이며, 도 16은 본 발명의 한 실시예에 따른 계속 절차를 나타내는 흐름도이다. 도 17은 본 발명의 한 실시예에 따른 정지 및 계속 절차에서의 플러시 명령을 설명하는 도면이다.
본 발명의 다양한 실시예에서는 지속성 처리 장치의 비지속성 상태 정보를 지속성으로 변경하기 위해서 정지 및 계속(stop-and-go, SnG) 방법을 제공할 수 있다. 어떤 실시예에서, SnG는 명령어의 집합, 즉 프로그램으로 제공될 수 있다. 한 실시예에서, SnG는 운영 체제(operating system, OS) 레벨의 프로그램, 예를 들면 OS에 포함되는 명령어 코드로 제공될 수 있다. 이에 따라 OS 레벨의 직교 지속성이 제공될 수 있다. 한 실시예에서, 직교 지속성은 경량 직교 지속성(lightweight orthogonal persistence)일 수 있다.
도 12를 참고하면, SnG는 시스템이 내용을 잃지 않고 시스템을 안전하게 재실행할 수 있는 실행 지속성 컷(execution persistence cut, "EP 컷")을 제공할 수 있다. 앞으로, SnG에서 EP 컷 전의 모든 절차를 정지(Stop) 절차라 하고, 시스템을 다시 시작하는 절차를 계속(Go) 절차라 한다. SnG는 시스템의 파워 오류 신호에 의해 트리거될 수 있으며, 비지속성 상태 정보를 지속성으로 변경할 수 있다.
어떤 실시예에서, "Stop" 절차는 복수의 절차로 진행될 수 있다. 하나의 절차는 사용자 및 커널 프로세스와 상태의 지속성을 보장하기 위해 프로세서의 태스크를 스케줄링에서 제거하는 단계이며, 앞으로 이를 "Drive-to-Idle" 절차라 한다. 다음 절차는 지속성 처리 장치의 캐시와 행 버퍼를 정리하고 코어 타일을 끄는 절차이며, 앞으로 이를 "Auto-Stop" 절차라 한다. "Auto-Stop" 절차 완료에 의해 EP 컷이 완료될 수 있다.
어떤 실시예에서, 복수의 코어 타일은 마스터 타일(예를 들면, 첫 번째 코어 타일)과 워커(worker) 타일로 분류될 수 있다. SnG는 마스터 타일에서 실행될 수 있다. 어떤 실시예에서, 프로세서가 하나의 코어 타일을 사용하는 경우, 하나의 코어 타일이 마스터 마일과 워커 타일로 동작할 수 있다.
도 13 및 도 14를 참고하면, Drive-to-Idle 단계에서, SnG는 SnG를 구현하는 커널 프로세스를 제외한 실행 중인 프로세서를 마스터 타일 및 워커 타일에서 제거할 수 있다. 어떤 실시예에서, SnG는 SnG를 구현하는 커널 프로세스를 제외한 마스터 타일에서 실행 중인 모든 프로세스를 즉시 스케줄링에서 제거할 수 있다(S1410). 다음, SnG는 워커 타일의 사용자 레벨 및 커널 레벨의 실행 중인 프로세스가 더 이상 시스템 상태를 변경하지 않도록 스케줄링에서 제거할 수 있다(S1420). SnG는 타일의 프로세스 태스크를 성공적으로 스케줄링에서 제거하면, 각 타일의 실행 중인 프로세스 태스크를 유휴(idle) 태스크로 대체할 수 있다(S1430). SnG는 각 프로세스 태스크의 상태, 예를 들면 아키텍처 상태(architectural states)를 대응하는 프로세스 제어 블록(process control block, PCB)에 저장할 수 있다(S1440). 태스크의 상태는 스레드(threads)의 프로그램 카운터 및 레지스터를 포함할 수 있다. 프로세스 제어 블록은 예를 들면 리눅스 커널에서 프로세스 태스크를 설명하는 데이터 구조체인 task_struct 구조체로 구현될 수 있다. 이와 같이, "Drive-to-Idle" 단계에서 프로세스 레벨의 정지(stop)가 구현될 수 있다.
다음, SnG는 지속성 메모리 모듈에 물리적으로 위치하지 않지만 메모리에 매핑된 주변 장치(peripheral) 관련 메모리 영역(예를 들면, MMIO(memory-mapped input/output) 레지스터)으로부터 주변 장치 정보를 읽을 수 있다. SnG는 지속성 메모리 모듈, 예를 들면 지속성 메모리 모듈의 힙(heap)에 할당된 장치 컨텍스트(device context)에 주변 장치 정보를 기록할 수 있다(S1450). 또한, SnG는 타일측 캐시 라인을 지속성 지원 모듈로 플러시할 수 있다(S1460). 어떤 실시예에서, SnG는 캐시 라인의 플러시를 위해 "cflush" 명령어를 사용할 수 있다.
어떤 실시예에서, 기존의 "clflush"로 불리는 캐시 라인 플러시 명령어와 달리, SnG는 메모리 영역을 확인할 필요 없이 사용자 레벨에서 타일측 캐시 라인 전체를 플러시할 수 있다. 즉, "clflush" 명령어의 경우, 시스템 메모리(지속성 메모리 모듈)의 메모리 영역의 시작 주소와 크기를 입력을 받은 후에, 메모리 영역의 시작 주소부터 차례로 대응하는 캐시 라인에 데이터가 기록되어 있는지를 확인한 후에, 데이터가 기록되어 있으면 해당 캐시 라인의 플러시가 수행되므로, 시작 주소와 크기에 의해 지정된 주소 영역이 커질수록 명령어의 실행 시간이 길어질 수 있다. 그러나 "cflush" 명령어에서는 메모리 영역의 주소 영역(시작 주소 및 크기)를 입력받지 않고, 타일측 캐시 라인이 차례로 플러시될 수 있다. 이와 같이, 메모리 영역을 확인할 필요 없이 플러시가 수행되므로, 빠른 시간 내에 플러시가 수행될 수 있다.
이와 같이, "Drive-to-Idle" 단계에서 디바이스 레벨의 정지(stop)가 구현될 수 있다.
도 13 및 도 15를 참고하면, Drive-to-Idle 단계 이후에, SnG는 "Auto-Stop" 단계를 수행할 수 있다. "Auto-Stop" 단계는 전원 차단 프로세서로서, 이 단계에서 SnG는 코어 타일의 전원을 차단할 수 있다. 어떤 실시예에서, 마스터 타일은 시스템이 전원 차단 프로세스 중임을 알리기 위해 플래그를 설정할 수 있다. 한 실시예에서, 마스터 타일은 코어 타일마다 플래그를 설정할 수 있다. 한편, 앞서 설명한 것처럼, 워커 타일은 자신의 유휴 태스크를 실행하고 있으며, 유휴 태스크는 커널 포인터, 예를 들면 커널 태스크 포인터 및 커널 스택 포인터(예를 들면, __cpu_up_task_pointer 및 __cpu_up_stack_pointer)에 의해 참조될 수 있다. 이러한 커널 포인터는 해당 워커 타일의 사용 가능 여부를 마스터 타일에 알리기 전에 "Go" 단계에서 다시 참조될 수 있다. "Go" 단계에서 마스터 타일이 워커 타일로부터의 알림을 놓치면, 계속 진행하기 전에 알림을 계속 기다리므로, 커널 패닉(panic)을 일으킬 수 있다. 따라서, 어떤 실시예에서, "Auto-Stop" 단계에서, SnG는 커널 포인터를 지울 수 있다(clear)(S1510). 이에 따라, 시스템 전원을 켠 후 지속성 처리 장치의 모든 타일이 올바르게 동기화될 수 있다. 어떤 실시예에서, SnG는 각 타일의 캐시 라인을 다시 플러시할 수 있다. 또한, SnG는 각 타일과 통신하면서 지속성 지원 모듈에서 계류 중인 메모리 요청 및 캐시 데이터를 플러시하여서 계류 중인 메모리 요청을 완료할 수 있다(S1520). 어떤 실시예에서, SnG는 지속성 지원 모듈에서의 플러시를 위해서 "mflush" 명령어를 사용할 수 있다.
워커 타일 관점에서 볼 때 마지막 전원 차단 프로세스에서는 워커 타일 자신이 오프라인될 준비가 되어 있다고 마스터 타일에 보고하고 전원을 끌 수 있다(S1530). 마스터 타일이 모든 워커 타일로부터 오프라인 보고를 수신하면(S1530), SnG는 SnG의 재실행에 사용되는 레지스터를 지속성 메모리 모듈에 저장할 수 있다(S1550). 어떤 실시예에서, SnG는 SnG의 재실행에 사용되는 레지스터를 지속성 메모리 모듈의 예약된 영역에 저장할 수 있다.
어떤 실시예에서, 인터럽트 구성(interrupt configuration) 및 CPU 모드 정보와 같은 SnG의 재실행에 사용되는 레지스터는 수퍼바이저 모드와 같은 커널 모드에서는 액세스가 금지되어 있을 수 있다. 이 경우, 마스터 타일을 오프라인으로 만들기 위해 컨텍스트 전환(context switching)이 수행될 수 있다. 따라서, 마스터 타일이 모든 워커 타일로부터 오프라인 보고를 수신하면(S1530), 마스터 타일은 시스템 레벨 예외(system-level exception)을 발생시켜서 컨텍스트를 커널에서 부트로더(bootloader)로 전환할 수 있다(S1540). 부트로더는 머신 특정(machine-specific) 펌웨어를 실행하는 보호 모드(protection mode)에서 커널 모드에서 금지된 연산 세트를 처리하는 실행 파일(executable), 즉 프로그램일 수 있다. 어떤 실시예에서, 보호 모드는 머신 모드(machine mode)이고, 부트로더는 버클리 부트 로더(Berkeley boot loader, BBL)일 수 있으며, 앞으로 부트로더를 BBL로 설명한다.
따라서, BBL측 SnG는 머신 모드 레지스터(machine mode register)를 포함하여 커널측 SnG와 관련된 마스터 타일의 레지스터(예를 들면, 수퍼바이저 모드 레지스터 및 머신 모드 레지스터(s/m-mode registers))를 BBL 컨텍스트라고 하는 지속성 메모리 모듈의 예약된 영역에 저장할 수 있다(S1550). 또한, BBL측 SnG는 BBL이 사용한 레지스터와 "Go" 단계에서 머신 예외 프로그램 카운터(machine exception program counter, MEPC)라고 하는 시스템을 다시 실행할 리턴 주소를 BBL 컨텍스트에 저장할 수 있다(S1550).
또한, 시스템 전원을 다시 켤 때, "Drive-to-Idle" 단계 및 "Auto-Stop" 단계가 성공적으로 완료되었는지 확인할 수 있도록, SnG는 마지막 단계에서 커밋(commit)을 실행하고 커밋 플래그를 지속성 메모리 모듈로 플래시할 수 있다(S1560). 어떤 실시예에서, 커밋 플래그를 위해 mflush 명령을 사용할 수 있다.
어떤 실시예에서, "Stop" 단계는 시스템의 전원 이벤트 이후에 CPU 등의 프로세서에 남아 있는 대기 전력에 의해 수행될 수 있다.
다음, 시스템 전원이 켜져서 파워가 복구되면, "Go" 단계에서 지속성 처리 장치는 커밋 플래그를 검사한 후 시스템이 동작하기 위해 필요로 하는 항목을 확인할 수 있다. 도 16을 참고하면, "Auto-Stop" 단계에서 생성된 커밋이 관찰되면(S1610), SnG는 지속성 메모리 모듈에 저장된 레지스터를 복원할 수 있다(S1620).
어떤 실시예에서, SnG는 BBL 컨텍스트로부터 BBL 관련 레지스터, 머신 모드 레지스터 및 커널 레지스터를 마스터 타일로 복원할 수 있다. 이 시간 동안, 마스터 타일은 "Auto-Stop" 단계에서 저장된 BBL 컨텍스트를 읽어서 인터럽트 및 위임(delegation) 정보를 구성할 수 있다. 위임은 외부 인터럽트 및 소프트웨어 인터럽트 트랩 핸들러와 같은 특정 연산을 위해 타일의 수퍼바이저 모드를 머신 모드로 부스팅하는 것을 의미한다. BBL 컨텍스트로부터 복원된 MEPC는 커널측 SnG가 다시 실행할 EP 컷을 나타내므로, BBL측 SnG가 태스크를 완료한 후, BBL측 SnG로부터 커널로 제어가 전달될 수 있다.
다음, 마스터 타일은 워커 타일의 전원을 켜고 대상 타일의 모든 레지스터를 재구성할 수 있다. 어떤 실시예에서, 대상 타일은 실행할 준비가 되면 워킹 태스크를 배치하기 위해서 커널 포인터, 예를 들면 __cpu_up_stack_pointer 및 __cpu_up_task_pointer를 계속 확인할 수 있다. 커널 포인터는 "Auto-Stop" 단계에서 지워졌으므로, SnG는 지속성 메모리 모듈의 커널 힙을 참조하여 커널 테스크가 유휴 태스크를 가리키도록 할 수 있다(S1630). 이 시점에서 SnG는 시스템 상태를 정지(Stop) 상태에서 유휴(Idle) 상태로 되돌릴 수 있다. 이와 같이, 모든 워커 타일이 유휴 상태인 동안 마스터 타일은 SnG에서 동작할 수 있다. 다음, 마스터 타일은 지속성 메모리 모듈에서 장치 컨텍스트를 읽어서 주변 장치 정보(예를 들면, MMIO(memory mapped I/O) 레지스터)를 복원할 수 있다(S1640). 다음, 마스터 및 워커 타일은 가상 메모리 공간을 복원하고 변환 색인 버퍼(translation lookaside buffer, TLB)를 플러시하여 스케줄링(ready-to-schedule)을 준비할 수 있다(S1650).
마지막으로, SnG는 "Drive-to-Idle" 단계에 저장된 프로세스 제어 블록에 기초해서 프로세스 태스크를 스케줄링할 수 있다(S1660). 어떤 실시예에서, SnG는 커널 프로세스 태스크를 먼저 스케줄링한 다음 사용자 레벨 프로세스 태스크를 스케줄링할 수 있다. "Drive-to-Idle" 단계에 저장된 프로세서 제어 블록은 실행 환경과 레지스터를 포함하므로, 커널 스케줄러가 프로세스 태스크를 실행시킬 때, SnG는 실행 환경과 레지스터를 복구하고 가상 주소 공간을 각 프로세스의 메모리 관리 유닛(memory-management unit, MMU)에 로드할 수 있다(S1670). 이에 따라, 프로세스는 EP 컷이 지시하는 포인트를 정확하게 다시 실행할 수 있다.
어떤 실시예에서, 타일 레벨 캐시 및/또는 지속성 지원 모듈의 행 버퍼를 플러시하기 위해서 지속성 처리 장치가 구현하는 명령어(cflush 또는 mflush)가 사용될 수 있다. 어떤 실시예에서, 커널은 보호 모드(예를 들면, 머신 모드)에 의해 보호되는 영역에 액세스할 수 없는 커널 모드(예를 들면, 수퍼바이저 모드)에서 실행될 수 있으므로, 커널 레벨 SnG는 타일의 캐시 라인 및 지속성 지원 모듈의 메모리 컨트롤러에 있는 행 버퍼를 플러시할 수 없다. 따라서, 이러한 명령어를 타일에 직접 발행하기 위해, SnG를 머신 모드에서 실행할 수 있다. 어떤 실시예에서, 명령어를 타일에 발행하기 위해, 시스템 콜을 위한 테이블이 제공될 수 있다. 한 실시예에서, 이러한 테이블은 머신 모드와 수퍼바이저 모드 사이의 인터페이스를 위한 테이블일 수 있다. 한 실시예에서, 이러한 테이블은 SBI(supervisor binary interface)를 수정해서 구현될 수 있다. 아래에서는 설명의 편의상 테이블을 SBI 테이블이라 한다. 어떤 실시예에서, SBI 테이블은 지속성 메모리 모듈에 저장되어 있을 수 있다.
SBI 테이블 엔트리는 부트로더(예를 들면, BBL)에 존재하는 핸들러 위치(포인터)를 포함하고, 대응하는 인덱스는 커널이 호출하는데 사용될 수 있다. 따라서 cflush 및 mflush와 각각 연관된 두 핸들러를 추가할 수 있다. 앞으로, cflush와 연관된 핸들러를 "sbi_cflush"라 하고, mflush와 연관된 핸들러를 "sbi_mflush"라 한다. 커널 레벨 SnG는 시스템 콜과 유사하게 예외 콜(exception call, ecall)을 발행하여 예외를 발생시킬 수 있다. 예외 콜을 발행할 때, 커널은 SBI 테이블의 캐시 플러시 핸들러(sbi_cflush)에 대한 인덱스를 저장하고, 캐시 라인 또는 전체 캐시를 레지스터로 플러시할지를 지시하기 위한 인수를 설정할 수 있다. 계류 중인 모든 메모리 요청이 완료되도록 하기 위해, 커널은 BBL측 메모리 플러시 핸들러(sbi_mflush)에 대한 인덱스를 단순히 저장할 수 있다. 예외 콜이 발행되면, 예외 핸들러가 BBL에 있으므로 CPU 모드가 수퍼바이저 모드에서 머신 모드로 변경될 수 있다. 예외 핸들러는 커널이 저장하는 인덱스를 기초로 sbi_cflush 또는 sbi_mflush의 포인터를 검색하고, cflush 또는 mflush를 발행할 수 있다. BBL은 모든 타일에서 보이므로, 각 타일은 캐시 및/또는 행 버퍼를 적절하게 플러시할 수 있다.
예를 들면, 도 17에 도시한 것처럼, "Stop" 단계에서, SnG는 현재의 프로그램 카운터(PC)에서 명령어 크기(예를 들면 4 바이트) 이후의 프로그램 카운터(PC+4)를 MEPC에 저장할 수 있다(S1710). 예외가 발생되면, SnG는 저장된 인덱스(idx)로 SBI 테이블을 참조하고(S1720), 인덱스에 해당하는 핸들러를 수행하여 플러시 명령을 실행할 수 있다(S1730). 다음, "Go" 단계에서 SnG는 MPEC에 저장된 프로그램 카운터(PC+4)로 이동할 수 있다(S1740).
이상에서 설명한 실시예에 따르면, 파워 오류 시에 프로세스 태스크의 상태, 주변 장치 정보 등의 다양한 비지속성 상태 정보를 지속성 정보로 변환할 수 있으므로, 파워 복구 시에 프로세서의 모든 중지된 사용자 및 커널 프로세스 태스크를 즉시 실행할 수 있다.
이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.

Claims (24)

  1. 비휘발성 메모리를 포함하는 메모리 모듈 및 프로세서를 포함하는 컴퓨팅 장치의 지속성 지원 방법으로서,
    파워 오류 시에 정지 절차를 수행하는 단계를 포함하며,
    상기 정지 절차를 수행하는 단계는,
    실행 중인 프로세스 태스크를 스케줄링에서 제외하는 단계,
    상기 프로세스 태스크의 상태를 상기 메모리 모듈의 프로세스 제어 블록에 저장하는 단계,
    상기 프로세서의 캐시를 플러시하는 단계, 그리고
    계류 중인 메모리 요청을 플러시하는 단계
    를 포함하는 지속성 지원 방법.
  2. 제1항에서,
    파워 복구 시에 계속 절차를 수행하는 단계를 더 포함하며,
    상기 계속 절차를 수행하는 단계는 상기 프로세스 제어 블록에 기초해서 프로세스 태스크를 스케줄링하는 단계를 포함하는
    지속성 지원 방법.
  3. 제2항에서,
    상기 정지 절차를 수행하는 단계는, 상기 정지 절차와 상기 계속 절차를 수행하기 위한 프로그램과 관련된 레지스터를 상기 메모리 모듈에 저장하는 단계를 더 포함하는 지속성 지원 방법.
  4. 제3항에서,
    상기 계속 절차를 수행하는 단계는 상기 레지스터를 상기 메모리 모듈로부터 복원하는 단계를 더 포함하는 지속성 지원 방법.
  5. 제1항에서,
    상기 정지 절차를 수행하는 단계는
    주변 장치 관련 메모리 영역으로부터 주변 장치 정보를 읽는 단계, 그리고
    상기 주변 장치 정보를 상기 메모리 모듈의 장치 컨텍스트에 기록하는 단계
    를 더 포함하는 지속성 지원 방법.
  6. 제5항에서,
    파워 복구 시에 계속 절차를 수행하는 단계를 더 포함하며,
    상기 계속 절차를 수행하는 단계는 상기 장치 컨텍스트를 읽어서 상기 주변 장치 정보를 복원하는 단계를 포함하는
    지속성 지원 방법.
  7. 제1항에서,
    상기 프로세서는 복수의 코어 타일을 포함하고, 상기 복수의 코어 타일은 마스터 타일과 워커 타일을 포함하며,
    상기 실행 중인 프로세스 태스크를 스케줄링에서 제외하는 단계는
    상기 마스터 타일에서 상기 정지 절차를 구현하는 커널 프로세서를 제외한 실행 중인 프로세스 태스크를 제외하는 단계, 그리고
    상기 워커 타일에서 실행 중인 프로세스 태스크를 제외하는 단계를 포함하는
    지속성 지원 방법.
  8. 제7항에서,
    상기 정지 절차를 수행하는 단계는, 상기 메모리 요청을 플러시하는 단계 이후에,
    상기 워커 타일에서 상기 마스터 타일로 오프라인을 보고하고 전원을 끄는 단계, 그리고
    상기 워커 타일로부터 상기 오프라인을 보고받으면 상기 마스터 타일에서 컨텍스트를 전환하는 단계를 더 포함하는
    지속성 지원 방법.
  9. 제8항에서,
    상기 컨텍스트를 전환하는 단계는 시스템 레벨 예외를 발생시켜서 상기 컨텍스트를 커널에서 보호 모드의 부트로더로 전환하는 단계를 포함하는 지속성 지원 방법.
  10. 제9항에서,
    상기 정지 절차를 수행하는 단계는, 상기 보호 모드에서, 시스템을 재실행할 리턴 주소를 상기 메모리 모듈에 저장하는 단계를 더 포함하는 지속성 지원 방법.
  11. 제1항에서,
    상기 정지 절차를 수행하는 단계는
    시스템 레벨 예외를 발생시켜 컨텍스트를 커널에서 보호 모드의 부트로더로 전환하는 단계, 그리고
    상기 보호 모드에서 상기 캐시를 플러시하는 제1 플러시 명령 및 상기 메모리 요청을 플러시하는 제2 플러시 명령을 실행하는 단계를 더 포함하는
    지속성 지원 방법.
  12. 제1항에서,
    상기 실행 중인 프로세스 태스크를 스케줄링에서 제외하는 단계는 상기 실행 중인 프로세스 태스크를 유휴 태스크로 대체하는 단계를 포함하는 지속성 지원 방법.
  13. 제12항에서,
    상기 정지 절차를 수행하는 단계는 상기 유휴 태스크를 참조하는 커널 포인터를 지우는 단계를 더 포함하는 지속성 지원 방법.
  14. 제13항에서,
    파워 복구 시에 계속 절차를 수행하는 단계를 더 포함하며,
    상기 계속 절차를 수행하는 단계는 커널 포인터를 유휴 태스크로 돌린 후에, 상기 프로세스 제어 블록에 기초해서 프로세스 태스크를 스케줄링하는 단계를 포함하는
    지속성 지원 방법.
  15. 제1항에서,
    상기 프로세서의 캐시를 플러시하는 단계는 상기 메모리 모듈의 메모리 영역의 확인 없이 사용자 레벨에서 상기 캐시를 플러시하는 단계를 더 포함하는 지속성 지원 방법.
  16. 비휘발성 메모리를 포함하는 메모리 모듈, 그리고
    상기 메모리 모듈에 저장된 명령어를 실행함으로써, 파워 오류 시에 정지 절차를 수행하는 프로세서를 포함하며,
    상기 프로세서는, 상기 정지 절차에서,
    실행 중인 프로세스 태스크를 스케줄링에서 제외하고,
    상기 프로세스 태스크의 상태를 상기 메모리 모듈의 프로세스 제어 블록에 저장하고,
    상기 프로세서의 캐시를 플러시하고,
    계류 중인 메모리 요청을 플러시하는
    컴퓨팅 장치.
  17. 컴퓨팅 장치의 프로세서로부터의 메모리 요청을 스케줄링하는 스케줄러, 그리고
    상기 컴퓨팅 장치의 시스템 메모리로 사용되는 비휘발성 메모리 모듈의 메모리 공간을 관리하며, 상기 프로세서로부터 제1 플러시 명령이 있는 경우 데이터 및 계류 중인 메모리 요청을 상기 메모리 모듈로 플러시하여 상기 프로세서와 상기 비휘발성 메모리 사이에서 지속성을 지원하는 메모리 컨트롤러
    를 포함하는 지속성 지원 장치.
  18. 제17항에서,
    상기 프로세서는 RISC-V(reduced instruction set computer five) 코어 타일을 포함하는 지속성 지원 장치.
  19. 제17항에서,
    상기 메모리 컨트롤러는 상기 프로세서로부터의 제2 플러시 명령에 응답하여서 상기 프로세서의 캐시 라인의 데이터가 플러시되는 버퍼를 더 포함하는 지속성 지원 장치.
  20. 제17항에서,
    상기 제1 플러시 명령을 유지하는 레지스터를 더 포함하며,
    상기 메모리 컨트롤러는 상기 레지스터를 참조하여서 상기 제1 플러시 명령이 있는지 확인하는
    지속성 지원 장치.
  21. 제17항에서,
    상기 메모리 컨트롤러는,
    버퍼,
    상기 메모리 모듈과의 인터페이스를 위한 메모리 인터페이스 로직, 그리고
    상기 메모리 요청 중 쓰기 요청을 수신하면, 상기 메모리 인터페이스 로직을 통해 상태 읽기 요청을 상기 메모리 모듈로 발행하고, 상기 메모리 모듈에서 상기 쓰기 요청이 대상 영역이 사용 가능하지 않은 경우 상기 쓰기 요청을 상기 버퍼에 저장하는 버퍼 관리자
    를 포함하는 지속성 지원 장치.
  22. 제21항에서,
    상기 버퍼 관리자는 상기 대상 영역이 사용 가능한 경우 상기 쓰기 요청을 상기 메모리 인터페이스 로직을 통해 상기 메모리 모듈로 발행하는, 지속성 지원 장치.
  23. 제17항에서,
    상기 메모리 모듈은 복수의 메모리 모듈을 포함하며,
    상기 메모리 컨트롤러는 상기 복수의 메모리 모듈에 각각 대응하는 복수의 메모리 컨트롤러를 포함하고,
    상기 스케줄러는 메모리 요청을 상기 복수의 메모리 컨트롤러에 걸쳐 스트라이핑 및/또는 인터리빙하는
    지속성 지원 장치.
  24. 컴퓨팅 장치에 의해 실행되며, 기록 매체에 저장되어 있는 컴퓨터 프로그램으로서,
    상기 컴퓨터 프로그램은, 상기 컴퓨팅 장치가,
    파워 오류 시에,
    실행 중인 프로세스 태스크를 스케줄링에서 제외하는 처리,
    상기 프로세스 태스크의 상태를 비휘발성 메모리를 포함하는 메모리 모듈의 프로세스 제어 블록에 저장하는 처리,
    상기 프로세서의 캐시를 플러시하는 처리, 그리고
    계류 중인 메모리 요청을 플러시하는 처리
    를 실행하도록 하는 컴퓨터 프로그램.
KR1020200145403A 2020-02-13 2020-11-03 지속성 지원 장치 및 방법, 그리고 컴퓨팅 장치 KR102470888B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US17/166,417 US11656967B2 (en) 2020-02-13 2021-02-03 Method and apparatus for supporting persistence and computing device
CN202110185059.2A CN113253920A (zh) 2020-02-13 2021-02-10 用于支持持久性的方法和装置以及计算设备

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20200017925 2020-02-13
KR1020200017925 2020-02-13

Publications (2)

Publication Number Publication Date
KR20210103380A true KR20210103380A (ko) 2021-08-23
KR102470888B1 KR102470888B1 (ko) 2022-11-25

Family

ID=77499468

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200145403A KR102470888B1 (ko) 2020-02-13 2020-11-03 지속성 지원 장치 및 방법, 그리고 컴퓨팅 장치

Country Status (1)

Country Link
KR (1) KR102470888B1 (ko)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20070116831A (ko) * 2005-04-15 2007-12-11 마이크로소프트 코포레이션 인라인 비휘발성 메모리 디스크 판독 캐시 및 기입 버퍼
KR20080037283A (ko) * 2006-10-25 2008-04-30 삼성전자주식회사 플래시 메모리 장치를 포함하는 시스템 및 그것의 데이터복구 방법
KR20140098220A (ko) * 2011-12-21 2014-08-07 인텔 코오퍼레이션 프로세서로부터 메모리 서브시스템으로 데이터를 지능적으로 플러싱하기 위한 시스템 및 방법
US20170255559A1 (en) * 2016-03-02 2017-09-07 Mellanox Technologies Ltd. Control of persistent memory via a computer bus
US20190243759A1 (en) * 2018-02-05 2019-08-08 Micron Technology, Inc. CPU Cache Flushing to Persistent Memory
KR20200002581A (ko) * 2018-06-29 2020-01-08 주식회사 멤레이 메모리 제어 장치 및 이를 포함하는 메모리 시스템

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20070116831A (ko) * 2005-04-15 2007-12-11 마이크로소프트 코포레이션 인라인 비휘발성 메모리 디스크 판독 캐시 및 기입 버퍼
KR20080037283A (ko) * 2006-10-25 2008-04-30 삼성전자주식회사 플래시 메모리 장치를 포함하는 시스템 및 그것의 데이터복구 방법
KR20140098220A (ko) * 2011-12-21 2014-08-07 인텔 코오퍼레이션 프로세서로부터 메모리 서브시스템으로 데이터를 지능적으로 플러싱하기 위한 시스템 및 방법
US20170255559A1 (en) * 2016-03-02 2017-09-07 Mellanox Technologies Ltd. Control of persistent memory via a computer bus
US20190243759A1 (en) * 2018-02-05 2019-08-08 Micron Technology, Inc. CPU Cache Flushing to Persistent Memory
KR20200002581A (ko) * 2018-06-29 2020-01-08 주식회사 멤레이 메모리 제어 장치 및 이를 포함하는 메모리 시스템

Also Published As

Publication number Publication date
KR102470888B1 (ko) 2022-11-25

Similar Documents

Publication Publication Date Title
US11656967B2 (en) Method and apparatus for supporting persistence and computing device
EP3665575B1 (en) Cache-based trace recording using cache coherence protocol data
JP4448784B2 (ja) 並列計算機の同期方法及びプログラム
US20160378344A1 (en) Processor and platform assisted nvdimm solution using standard dram and consolidated storage
KR102350538B1 (ko) Ddr 메모리 에러 복구
KR102460513B1 (ko) 통합 패키지 후 복구
WO2015169145A1 (zh) 内存管理方法和设备
WO2013081616A1 (en) Hardware based memory migration and resilvering
JP2011134327A (ja) システムにおけるメモリ冗長性の制御
US8516298B2 (en) Data protection method for damaged memory cells
TW200941338A (en) Mechanism for profiling program software running on a processor
WO2011084206A1 (en) Hardware support for software controlled fast multiplexing of performance counters
CN101563674A (zh) 对来自多处理器系统上的多线程程序的存储器访问进行管理的方法和系统
CN111742302A (zh) 通过基于上层缓存中的条目来日志记录对下层缓存的流入量进行跟踪记录
EP3752922B1 (en) Trace recording by logging influxes to an upper-layer shared cache, plus cache coherence protocol transitions among lower-layer caches
CN108351826A (zh) 监视处理器的操作
US10318340B2 (en) NVRAM-aware data processing system
KR102656509B1 (ko) 시스템 온 칩(soc들)을 위한 향상된 내구성
US20230004459A1 (en) Error reporting for non-volatile memory modules
Chen et al. Exploring dynamic redundancy to resuscitate faulty PCM blocks
KR102470888B1 (ko) 지속성 지원 장치 및 방법, 그리고 컴퓨팅 장치
US11237960B2 (en) Method and apparatus for asynchronous memory write-back in a data processing system
US20220318053A1 (en) Method of supporting persistence and computing device
JP2006202285A (ja) レジスタを同期させる方法
CN108845969B (zh) 适用于不完全对称多处理微控制器的操作控制方法及操作系统

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant