KR102009259B1 - 로그 및 무 잠금(no lock)과 함께 비휘발성 메모리를 사용하는 공유 메모리에서의 하드웨어 트랜잭셔널 메모리를 위한 코히어런스 프로토콜 - Google Patents

로그 및 무 잠금(no lock)과 함께 비휘발성 메모리를 사용하는 공유 메모리에서의 하드웨어 트랜잭셔널 메모리를 위한 코히어런스 프로토콜 Download PDF

Info

Publication number
KR102009259B1
KR102009259B1 KR1020177028059A KR20177028059A KR102009259B1 KR 102009259 B1 KR102009259 B1 KR 102009259B1 KR 1020177028059 A KR1020177028059 A KR 1020177028059A KR 20177028059 A KR20177028059 A KR 20177028059A KR 102009259 B1 KR102009259 B1 KR 102009259B1
Authority
KR
South Korea
Prior art keywords
htm
transaction
memory
log
htm transaction
Prior art date
Application number
KR1020177028059A
Other languages
English (en)
Other versions
KR20170123683A (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 후아웨이 테크놀러지 컴퍼니 리미티드
Publication of KR20170123683A publication Critical patent/KR20170123683A/ko
Application granted granted Critical
Publication of KR102009259B1 publication Critical patent/KR102009259B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1441Resetting or repowering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1474Saving, restoring, recovering or retrying in transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement

Abstract

본 발명은 데이터 처리 시스템 및 데이터 처리 방법에 관한 것이다. 데이터 처리 시스템은 하드웨어 트랜잭셔널 메모리(HTM) 트랜잭션을 수행하도록 구성된다. 데이터 처리 시스템은 데이터를 영속적으로 저장하기 위한 바이트 주소지정 가능한 비휘발성 메모리, 및 상기 HTM 트랜잭션의 성공적인 커밋(commit)을 지시하는 지시자를 상기 비휘발성 메모리에 기록함으로써 상기 HTM 트랜잭션을 커밋하는 것과 관련하여 원자 HTM 기록 작업(write operation)을 실행하도록 구성된 프로세서를 포함한다.

Description

로그 및 무 잠금(no lock)과 함께 비휘발성 메모리를 사용하는 공유 메모리에서의 하드웨어 트랜잭셔널 메모리를 위한 코히어런스 프로토콜
본 발명은 데이터 처리 시스템 및 방법에 관한 것으로, 특히 데이터 처리 시스템의 공유 메모리에 대한 저장소 액세스(storage access)에 관한 것이다.
병렬 프로그래밍 컴퓨팅 환경에서, 병렬 프로세서 코어 또는 프로그램은 동일한 메모리 위치에 대해 액세스를 공유하는 경우, 이 액세스를 적절하게 관리하고 동기화해야 한다. 이러한 환경에서는 스레드(thread)들에 의한 동기화된 메모리 액세스를 관리하기 위해 트랜잭셔널 메모리 패러다임(transactional memory paradigm)을 채용할 수 있다. 트랜잭셔널 메모리 접근법에 따르면, 스레드는 그후에 트랜잭션이 커밋(commit)될 때까지 공유 메모리 위치의 내용을 변경하지 않고 트랜잭션을 추측 실행(speculatively execute)할 수 있다. 두 트랜잭션 사이에 충돌이 검출되면, 다른 트랜잭션이 커밋할 수 있도록 트랜잭션 중 하나는 중단(abort)될 수 있으며, 이때 커밋된 트랜잭션은 공유 메모리 위치의 내용을 변경할 수 있다.
더욱 구체적으로는, 종래의 멀티프로세서 컴퓨터 시스템은 하나 이상의 주소, 데이터 및 제어 버스뿐만 아니라 복수의 처리 유닛을 포함한다. 이 복수의 처리 유닛에는, 멀티프로세서 컴퓨터 시스템에서 휘발성 메모리의 가장 낮은 레벨을 나타내며 일반적으로 모든 처리 유닛에 의한 판독 및 기록 액세스를 위해 액세스 가능한 시스템 메모리가 연결된다. 시스템 메모리에 상주하는 명령어(instruction) 및 데이터에 대한 액세스 지연시간(access latency)을 줄이기 위해, 각 처리 유닛은 전형적으로 그 하위 레벨(들)이 하나 이상의 프로세서 코어에 의해 공유될 수 있는 각각의 다중 레벨 캐시 계층 구조(multi-level cache hierarchy)에 의해 추가로 지원된다.
캐시 메모리는 대개, 시스템 메모리로부터 필요한 데이터와 명령어를 로드해야 하기 때문에, 발생하는 액세스 지연시간을 줄임으로써 처리 속도를 높이기 위해 프로세서에 의해 액세스될 수 있는 메모리 블록을 일시적으로 버퍼링하는 데 이용된다. 일부 멀티프로세서 시스템에서, 캐시 계층은 두 가지 이상의 레벨을 포함한다. 레벨 1(L1) 또는 상위 레벨 캐시는 보통 특정 프로세서 코어와 연관된 전용 캐시(private cache)이며 멀티프로세서 시스템의 다른 코어는 액세스할 수 없다. 전형적으로, 로드(load) 또는 저장(store) 명령어과 같은, 메모리 액세스 명령어에 응답하여, 프로세서 코어는 먼저 상위 레벨 캐시의 디렉토리를 액세스한다. 요청받은 메모리 블록이 상위 레벨 캐시에서 발견되지 않으면, 프로세서 코어는 하위 레벨 캐시(예: 레벨 2(L2) 또는 레벨 3(L3) 캐시) 또는 요청받은 메모리 블록에 대한 시스템 메모리를 액세스한다. 최하위 레벨 캐시(예: L3 캐시)는 여러 프로세서 코어 간에 자주 공유된다.
이러한 시스템에서, 멀티프로세서 소프트웨어는 여러 소프트웨어 스레드로부터 공유 데이터 구조를 동시에 액세스한다. 공유 데이터를 동시에 액세스하는 경우, 일반적으로 소위 "제약받지 않는 경쟁(unconstrained race)" 또는 "충돌(conflict)"을 방지해야 한다. 두 메모리 액세스가 동일한 메모리 위치에 대한 것이고 그 중 적어도 하나가 기록(write)이고 이들 액세스가 발생하는 순서를 보장할 수단이 없는 경우, 두 메모리 액세스 간에 충돌이 발생한다.
멀티프로세서 소프트웨어는 잠금 변수(lock variable)를 사용하여 메모리 내의 위치의 동시 판독 및 수정을 질서정연하게 조정한다. 잠금 변수는 원자적인 방식(atomic fashion)으로, 판독되고 나서, 가능한 한 판독된 값에 기초하여, 특정 값으로 설정되는 메모리 내의 위치이다. 잠금 변수에 대해 판독-수정-기록 작업(read-modify-write operation)은 흔히 원자적인 판독-수정-기록 명령어(atomic-read-modify-write instruction)를 이용하거나, 또는 잠금 변수를 원자적으로 판독 및 수정하는 단일 명령어과 동일한 효과를 제공하는 명령어의 시퀀스에 의해 달성된다.
이러한 식으로, 원자적인 판독-수정-기록 명령어를 통해 초기의 "잠금 해제(unlocked)" 값을 판독하는 소프트웨어 스레드는 잠금을 "획득"했다고 말하며, 잠금을 해제할 때까지 잠금을 유지하는 유일한 소프트웨어 스레드가 될 것이다. 잠금을 유지하는 스레드는, 현재의 스레드가 잠금을 해제할 때까지 다른 스레드가 잠금을 취득할 수 없기 때문에, 다른 스레드와 충돌하지 않고, 잠금에 의해 보호되는 공유 메모리의 위치를 안전하게 갱신할 수 있다. 공유 위치가 적절하게 판독 및/또는 수정된 경우, 잠금을 유지하는 스레드는, 다른 스레드가 저장소 내의 공유 위치에 액세스할 수 있도록(예: 잠금 변수를 "잠금 해제" 값으로 기록함으로써) 잠금을 해제한다.
잠금은 공유 데이터에 대해 경쟁하는 스레드의 액세스를 조정하는 반면, 잠금은 잘 알려진 여러 가지 단점이 있다. 여기에는 무엇보다도, 우선 주어진 스레드가 하나 이상의 잠금을 유지하여 다른 스레드의 진행을 방지하는 경우 교착 상태의 발생 가능성(possibility of deadlock), 그리고 둘째로, 공유 데이터에 대해 충돌하는 액세스가 발생하지 않았기 때문에 잠금이 엄격하게 필요하지 않는 경우 잠금 획득의 성능 비용(performance cost)을 포함한다.
이러한 한계를 극복하기 위해, 트랜잭셔널 메모리(transactional memory)의 개념을 채용할 수 있다. 트랜잭셔널 메모리에서, 로드 및/또는 저장 명령어 세트는 "트랜잭션"으로 취급된다. 구성요소 로드 및 저장 작업(constituent load and store operation)이 다른 스레드와 충돌하지 않으면서 원자적으로 발생할 수 있는 경우 트랜잭션은 성공한다. 다른 스레드와의 충돌이 있고 그 후 재시도할 수 없을 때 트랜잭션은 실패한다. 트랜잭션이 계속 실패하면, 소프트웨어는 공유 데이터의 질서정연한 액세스를 보장하기 위해 잠금을 사용하는 것으로 다시 돌아갈 수 있다.
트랜잭셔널 메모리를 지원하기 위해, 기본 하드웨어(underlying hardware)는, 충돌에 대비하기 위해 트랜잭션을 실행할 때, 트랜잭션에 관련된 저장소 위치, 즉 트랜잭션 풋 프린트(transaction footprint)를 추적한다. 트랜잭션 풋 프린트에서 충돌이 발생하면, 트랜잭션이 중단되고 가능한 한 재기동된다(restarted). 트랜잭셔널 메모리를 사용하면, 전형적인 경우에는 잠금이 유지되지 않기 때문에(트랜잭션은 단순히 하나 이상의 저장소 액세스를 시도하고 충돌이 발생하면 다시 시작함), 스레드가 여러 개의 잠금을 유지하는 것에 기인한 교착 상태의 발생 가능성이 줄어든다. 또한, 일반적으로 잠금 획득의 처리 오버헤드가 회피된다.
트랜잭셔널 메모리는 하드웨어 트랜잭셔널 메모리(hardware transactional memory, HTM)와 소프트웨어 트랜잭셔널 메모리(software transactional memory, STM)의 형태로 알려져 있다. 하드웨어 트랜잭셔널 메모리(HTM) 시스템은 트랜잭션을 지원하기 위해 프로세서, 캐시 및 버스 프로토콜의 수정을 포함할 수 있다. 소프트웨어 트랜잭셔널 메모리(STM)는 소프트웨어 런타임 라이브러리(software runtime library) 또는 프로그래밍 언어에서 트랜잭셔널 메모리 시맨틱스(semantics)를 제공한다. 미래의 멀티코어 프로세서 세대는, 문헌 "Intel® Architecture Instruction Set Extensions Programming Reference"로부터 취할 수 있는 바와 같이, 하드웨어 트랜잭셔널 메모리(HTM)의 한 형태를 구현할 것이다.
본 발명의 목적은 개선된 데이터 처리 시스템 및 방법을 제공하는 것이다.
이 목적은 독립항의 주제에 의해 달성된다. 추가의 구현 형태가 종속항, 상세한 설명 및 도면에 제공된다.
본 발명은, 시스템 장애일지라도 하드웨어 트랜잭셔널 메모리(HTM)가 비휘발성 메모리에서 일관성(consistency) 및 영속성(persistency)을 유지할 수 있도록, HTM 커밋 내에 원자적으로 영속적인 지시(persistent indication)를 추가하고 각각의 HTM 기록(write)을 로깅(logging)하고 커밋 후에 각각의 HTM 기록을 플러싱(flushing)하는 일반적인 아이디어에 기초한다.
본 발명의 제1 측면에 따르면, 데이터 처리 시스템은 하드웨어 트랜잭셔널 메모리(hardware transactional memory, HTM) 트랜잭션을 수행하도록 구성되며, 상기 데이터 처리 시스템은,
데이터를 영속적으로 저장하기 위한 바이트 주소지정 가능한 비휘발성 메모리(byte-addressable nonvolatile memory); 및
상기 HTM 트랜잭션의 성공적인 커밋(commit)을 지시하는 지시자(indicator)를 상기 비휘발성 메모리에 기록함으로써 상기 HTM 트랜잭션을 커밋하는 것과 관련하여 원자적인(atomic) HTM 기록 작업(write operation)을 실행하도록 구성된 프로세서를 포함한다.
제1 측면의 제1 구현 형태에 따르면, 상기 프로세서는 복수의 캐시 라인에 의해 캐시 메모리에 연결되며, 상기 캐시 메모리는, 상기 프로세서가 캐시 코히어런스 프로토콜(cache coherence protocol)을 사용하여 데이터를 캐싱(caching)하기 위해 사용하도록 구성된다.
제1 측면의 제2 구현 형태에 따르면, 상기 데이터 처리 시스템은 추가로, 상기 HTM 트랜잭션의 성공적인 커밋 이전에 상기 비휘발성 메모리에 상기 HTM 트랜잭션과 연관된 기록 작업을 로깅(logging)하도록 구성된다.
제1 측면의 제3 구현 형태에 따르면, 상기 데이터 처리 시스템은 추가로, 상기 HTM 트랜잭션의 성공적인 커밋 이전에 상기 비휘발성 메모리에 상기 HTM 트랜잭션과 연관된 기록 작업의 로그를 투명하게 플러싱(flushing)함으로써, 상기 비휘발성 메모리에 상기 HTM 트랜잭션과 연관된 기록 작업을 로깅하도록 구성된다.
제1 측면의 제4 구현 형태에 따르면, 상기 데이터 처리 시스템은, 상기 HTM 트랜잭션과 연관된 기록 작업의 로그가 상기 비휘발성 메모리에 존재하고 상기 HTM 트랜잭션이 로그 상태(logged state)에 있으면, 특히 상기 지시자가 설정되어 있으면, 상기 데이터 처리 시스템의 재기동 시에 상기 로그를 재실행(redo)하고, 상기 HTM 트랜잭션의 재실행이 완료되면, 상기 HTM 트랜잭션을 언로그 상태(unlogged state)로 설정하도록, 특히 상기 지시자를 설정해제(unset)하도록 구성된 복구 유닛(recovery unit)을 더 포함한다.
제1 측면의 제5 구현 형태에 따르면, 상기 데이터 처리 시스템은 추가로, 상기 HTM 트랜잭션의 성공적인 커밋 후에 상기 원자적인 HTM 기록 작업에 의해 기록된 데이터를 상기 캐시 메모리에서 상기 비휘발성 메모리로 플러싱하도록 구성된다.
제1 측면의 제6 구현 형태에 따르면, 상기 데이터 처리 시스템은 추가로, 상기 HTM 트랜잭션의 성공적인 커밋 후에 상기 HTM 트랜잭션을 언로그 상태로 설정하도록, 특히 상기 지시자를 설정해제하도록 구성된다.
제1 측면의 제7 구현 형태에 따르면, 상기 데이터 처리 시스템은 추가로, HTM 트랜잭션의 중단하지 않으면서 상기 원자적인 HTM 기록 작업에 의해 기록된 데이터를 상기 캐시 메모리에서 상기 비휘발성 메모리로 투명하게 플러싱하도록 구성된다.
제1 측면의 제8 구현 형태에 따르면, 상기 HTM 트랜잭션의 성공적인 커밋을 지시하는 상기 지시자는 HTM 트랜잭션 식별자(transaction identifier), 특히 커밋 레코드(commit record)를 포함한다.
제2 측면에 따르면, 하드웨어 트랜잭셔널 메모리(HTM) 트랜잭션을 수행하기 위한 데이터 처리 방법은, 상기 HTM 트랜잭션의 성공적인 커밋을 지시하는 지시자를 비휘발성 메모리에 기록함으로써 상기 HTM 트랜잭션을 커밋하는 것과 관련하여 원자적인 HTM 기록 작업을 실행하는 단계를 포함한다.
제2 측면의 제1 구현 형태는, 상기 HTM 트랜잭션의 성공적인 커밋 이전에 상기 비휘발성 메모리에 상기 HTM 트랜잭션과 연관된 기록 작업의 로그를 투명하게 플러싱함으로써, 상기 비휘발성 메모리에서 상기 HTM 트랜잭션과 연관된 기록 작업을 실행하는 단계를 포함한다.
제2 측면의 제2 구현 형태는, 상기 HTM 트랜잭션과 연관된 기록 작업의 로그가 상기 비휘발성 메모리에 존재하고 상기 HTM 트랜잭션이 로그 상태에 있으면, 특히 상기 지시자가 설정되어 있으면, 상기 데이터 처리 시스템의 재기동 시에 상기 로그를 재실행하고, 상기 HTM 트랜잭션의 재실행이 완료되면, 상기 HTM 트랜잭션을 언로그 상태로 설정하는, 특히 상기 지시자를 설정해제하는 단계를 포함한다.
제2 측면의 제3 구현 형태는, 상기 HTM 트랜잭션의 성공적인 커밋 후에 상기 원자적인 HTM 기록 작업에 의해 기록된 데이터를 상기 캐시 메모리에서 상기 비휘발성 메모리로 플러싱하는 단계를 포함한다.
제2 측면의 제4 구현 형태는, 상기 HTM 트랜잭션의 성공적인 커밋 후에 상기 HTM 트랜잭션을 언로그인 상태로 설정하는, 특히 상기 지시자를 설정해제하는 단계를 포함한다.
제2 측면의 제5 구현 형태는, HTM 트랜잭션을 중단하지 않으면서 상기 원자적인 HTM 기록 작업에 의해 기록된 데이터를 상기 캐시 메모리에서 상기 비휘발성 메모리로 투명하게 플러싱하는 단계를 포함한다.
본 발명의 제3 측면에 따르면, 컴퓨터 프로그램 코드는 컴퓨터상에서 실행될 때 제2 측면 또는 그 구현 형태의 데이터 처리 방법을 수행한다.
본 발명의 추가적인 실시예를 이하의 도면과 관련하여 설명한다.
도 1은 일 실시예에 따른 데이터 처리 시스템의 개략도를 나타낸다.
도 2는 일 실시예에 따른 데이터 처리 방법의 개략도를 나타낸다.
도 3은 일 실시예에 따른 데이터 처리 시스템의 상태 다이어그램을 나타낸다.
도 4는 일 실시예에 따른 데이터 처리 시스템의 상이한 측면을 예시하고 각 단계의 구현에 관한 세부사항을 제공하는 개략도를 나타낸다.
이하의 상세한 설명에서는, 본 발명의 일부를 형성하고, 본 발명이 실시될 수 있는 구체적인 측면을 예시적으로 나타낸 첨부도면을 참조한다. 본 발명의 범위를 벗어나지 않으면서 다른 측면들이 활용될 수 있고 구조적 또는 논리적 변화가 이루어질 수 있음을 이해할 수 있을 것이다. 따라서, 이하의 상세한 설명은 제한적인 의미로 받아들여서는 안 되며, 본 발명의 범위는 첨부된 청구범위에 의해 정의된다.
설명되는 방법과 관련된 내용은 또한 그 방법을 수행하도록 구성된 대응하는 기기 또는 시스템에 대해 유효할 수 있고 그 반대도 마찬가지임을 이해할 수 있을 것이다. 예를 들어, 특정 방법의 단계가 설명되면, 대응하는 기기 또는 시스템은, 비록 그러한 유닛이 명시적으로 설명되거나 도면에 예시되어 있지 않더라도, 설명된 방법의 단계를 수행하기 위한 유닛을 포함할 수 있다. 또한, 달리 언급하지 않는 한, 본 명세서에 기재된 다양한 예시적인 측면의 특징들은 서로 결합될 수 있음을 이해할 것이다.
도 1은 일 실시예에 따른 데이터 처리 시스템(100)의 개략도를 나타낸다. 데이터 처리 시스템(100)은 하드웨어 트랜잭셔널 메모리(HTM) 트랜잭션을 수행하도록 구성된다. 데이터 처리 시스템(100)은 데이터를 영속적으로 저장하기 위한 바이트 주소지정 가능한 비휘발성 메모리(101) 및 프로세서(103)를 포함한다. 프로세서(103)는 HTM 트랜잭션의 성공적인 커밋을 지시하는 지시자를 비휘발성 메모리(101)에 기록함으로써 HTM 트랜잭션을 커밋하는 것과 관련하여 원자적인 HTM 기록 작업을 실행하도록 구성된다. 일 실시예에서, 지시자는 HTM 트랜잭션의 커밋에서의 비휘발성 비트일 수 있다.
비휘발성 메모리(NVM 또는 NVRAM)는 내구성 있는, 즉, 정전 시에도 메모리의 데이터가 영속되는, 바이트 주소지정 가능한 메모리이다. 실시예에 따르면, 로그 레코드(log record)(성공적인 커밋 지시자를 포함함) 및 애플리케이션 데이터는 NVM에 유지된다.
일 실시예에 따르면, HTM 트랜잭션은 자신 또는 다른 라이브 트랜잭션(live transaction)을 중단하지 않고서 로그 레코드를 기록하고 로그 레코드 및 애플리케이션 데이터를 NVM에 플러싱할 필요가 있다. 이는 HTM 시스템에 투명한, 특별한 유형의 플러시 명령어가 필요하며, 우리는 이를 투명한 플러시(transparent flush, TF)라고 명명한다. 주요 공급업체의 현재 아키텍처는 플러싱된 주소를 캐시에서 제거하지 않는 플러시 명령어를 사용하므로, 잠재적으로 TF 메커니즘을 구현할 수 있다. 예를 들어 X86 마이크로아키텍처에서 TSX 블록을 사용하여 HTM 트랜잭션을 실행하는 스레드는 로그 레코드를 캐시에 기록한 다음 CLWB 명령어를 사용하여 로그 레코드를 NVM의 로그 레코드 영역에 플러싱한다.
복구 프로세스는 머신(machine)이 재기동된 후 NVM에서 커밋 지시자를 판독하며 커밋 지시자가 참(true)으로 설정되어 있으면, 트랜잭션은 성공적이지만 아직 로깅되어 있다는 것을 의미하며, 그에 따라 로그 레코드를 판독하여 애플리케이션 데이터 영역에 기록한다.
일 실시예에 따르면, 지시자는 도 4의 커밋 레코드에 의해 구현될 수 있다. 성공한 커밋은 트랜잭션 기록(transaction write)이 시스템 내의 모든 처리 유닛에 원자적으로 가시화되는 지점(point)이다.
일 실시예에서, 프로세서(103)는 복수의 캐시 라인(106)에 의해 캐시 메모리(105)에 연결되고, 캐시 메모리(105)는, 프로세서(103)가 캐시 코히어런스 프로토콜을 사용하여 데이터를 캐싱하기 위해 사용하도록 구성된다.
일 실시예에서, 데이터 처리 시스템(100)은 추가로, 비휘발성 메모리(101)의 로그 레코드(Log Records) 영역에 로그 레코드를 생성하고, HTM 트랜잭션과 연관된, 캐싱된 데이터의 기록 작업을 로그 레코드 영역에 로깅하도록 구성된다. 로그 레코드의 데이터 구조는 도 4를 참조할 수 있으며, 예를 들어, 커밋 레코드(Commit Record), Self_id, 크기(Size) 및 <DATA, ADDR> 튜플(tuple)을 포함한다. Commit Record는 영속적인 성공한 커밋 지시자이다. Self_ID는 트랜잭션의 유일한 식별자이다. <DATA, ADDR> 튜플: 트랜잭션에 의해 기록된 바와 같은 단일 캐시 라인의 데이터와 주소의 로그 레코드. 크기는 하나의 트랜잭션의 로그 레코드 수이다.
일 실시예에서, 데이터 처리 시스템(100)은 HTM 트랜잭션의 커밋 이전에, 비휘발성 메모리(101)에 HTM 트랜잭션과 연관된 캐싱된 데이터의 기록 작업의 로그를 투명하게 플러싱함으로써, HTM 트랜잭션과 연관된 캐싱된 데이터의 기록 작업을 로그 레코드 영역에 로깅하도록 구성된다. 투명한 플러시(transparent flush)는 캐시 메모리(105) 및 HTM 시스템에 보이지 않는다.
일 실시예에서, 데이터 처리 시스템(100)은 커밋 레코드가 참으로 설정되고 HTM 작업과 관련된 로그 레코드 데이터가 비휘발성 메모리(101)에 존재하면, 데이터 처리 시스템(100)의 재기동 시에 로그를 재실행하도록 구성된 복구 유닛(107)을 더 포함한다. 로그를 재실행한다는 것은, 여전히 로그 상태에 있고, 시스템 장애, 예를 들어 정전 이전에 비휘발성 메모리(101)로 플러싱되지 않았을 수 있는 로그 레코드 영역으로부터 애플리케이션 데이터 영역을 재기록하는 것을 의미한다.
일 실시예에서, 데이터 처리 시스템(100)은 추가로, HTM 작업과 연관된, 수정된 애플리케이션 데이터를 HTM 트랜잭션의 커밋 후에 캐시에서 비휘발성 메모리(101)의 애플리케이션 데이터 영역으로 플러싱하도록 구성된다.
일 실시예에서, 데이터 처리 시스템(100)은 추가로, HTM 작업과 연관된, 수정된 애플리케이션 데이터를, HTM 트랜잭션의 커밋 전에 캐시에서 도 4의 101처럼 비휘발성 메모리의 로그 레코드 영역으로, 그리고 HTM 트랜잭션을 중단하지 않고서 HTM 트랜잭션의 커밋 후에, 도 4의 101처럼 비휘발성 메모리의 애플리케이션 데이터 영역으로 투명하게 플러싱하도록 구성된다.
일 실시예에서, HTM 트랜잭션의 성공적인 커밋을 지시하는 지시자는 HTM 트랜잭션 커밋 레코드를 포함한다. 커밋 레코드는 참(true) 값이 트랜잭션이 성공적으로 커밋되었음을 의미하는 부울 변수(Boolean variable)일 수 있다. 커밋 레코드가 설정되어 있는 한, 트랜잭션 기록은 로그 상태에 있고 재기동 시에 복구될 것이다.
도 2는 일 실시예에 따른 영속적인 HTM 트랜잭션의 주요 단계들의 흐름도이다.
성공한 영속성 HTM 트랜잭션의 모든 단계를 보여준다.
1. HTM 트랜잭션을 시작한다.
2. 캐시에 애플리케이션 데이터를 기록하고 NVM의 로그 레코드 영역 내의 로그 레코드에 로깅한다.
3. 트랜잭션을 성공적으로 커밋하고 동시에 NVM의 로그 레코드 영역 내의 커밋 레코드에서 지시자를 참으로 설정한다.
4. 실패하지 않으면, 수정된 애플리케이션 데이터를 캐시에서 NVM의 애플리케이션 데이터 영역으로 플러싱한다.
5. 실패하고 지시자가 참이면, 재시작 시에, NVM의 로그 레코드 영역에서 수정된 애플리케이션 데이터를 NVM의 애플리케이션 데이터 영역 내의 애플리케이션 데이터로 복제하고, 그렇지 않고 지시자가 거짓이면, 그 트랜잭션을 무시한다.
6. NVM의 로그 레코드 영역 내의 커밋 레코드에서 지시자를 거짓으로 설정한다.
이하에서는, 데이터 처리 시스템(100) 및 데이터 처리 방법(200)의 추가 실시예 및 구현 형태를 이하의 표기법 및 정의를 사용하여 더 상세하게 설명된다.
예를 들어, 프로세서(103)에 의해 실행되는 HTM 트랜잭션은 Tk로 표기된다. 데이터 처리 시스템(100)의 재기동은 데이터를 일관성있는 상태로 만들어, 커밋되지 않은 트랜잭션의 영향을 제거하고 커밋된 트랜잭션의 누락된 영향을 적용한다 (Restart, 재기동). 트랜잭션이 성공적으로 커밋되고, 캐시 내의, 그 트랜잭션의 모든 기록이 NVM(101)의 애플리케이션 데이터 영역으로 플러싱되고, 커밋 레코드가 거짓으로 설정되면 트랜잭션이 완결된다(Finalization, 완결). 따라서 그 후 재기동이 발생하면 그 트랜잭션은 무시된다. α가 캐시(105) 내의 메모리 주소라면, 투명한 플래시(Transparent Flush)라고 하는 TF(α)는, α를 비휘발성 메모리의 애플리케이션 데이터 영역 또는 로그 레코드 영역에 기록하겠지만, 이를 무효화하지 않을 것이고, 캐시 코히어런스에 아무런 영향을 미치지 않을 것이다.
일 실시예에서, HTM 트랜잭션 T에 의해 기록되는 NVM(101) 내의 데이터 항목 x(주소지정 가능한 워드)의 상태는 도 3에 도시된 다음의 세 가지 특성에 의해 정의된다. (1) "전용(Private)"/"공유(Shared)": "전용"은 x가 하나의 스레드의 L1 캐시에만 있고 다른 스레드에서 볼 수 없음을 의미한다. x가 "공유"일 때, 캐시 코히어런스로 인해 새로운 값이 보이게 된다. (2) "영속성(Persistent)"/"휘발성(Volatile)": "영속성"은 x의 마지막 기록이 NVM(101)에 있음을 의미하고; 그렇지 않으면 x의 새로운 값은 캐시(105)에서 "휘발성"이며, 정전 시에 사라질 것이다. (3) "로깅됨(Logged)"/ "소거(Clear)": x가 "로깅됨"일 때, 재기동은 비휘발성 로그로부터 x를 복구할 것이다. x가 "소거"이면, 로그 레코드가 완결되었거나 그 트랜잭션은 성공적으로 커밋되지 않았으므로, 재기동은 x에 건드리지 않는다.
도 3은 본 출원에 따른 데이터 처리 시스템, 예를 들어, 도 1에 도시된 데이터 처리 시스템(100)에 의해 실행될 수 있는 HTM 트랜잭션에서의 단일 기록의 상태 머신(state machine)을 도시한다. 일 실시예에 따르면, 이 메커니즘은 <"전용", "소거">를 원자적 <"공유", "로깅됨">으로 이행하게 하고, <"휘발성">를 <"영속성">으로 이행할 수 있도록 하여 그 항목을 판독하는 동시발생 HTM 트랜잭션을 중단하지 않게 한다. 일반적으로, "로깅됨" 특성은 전체 HTM 트랜잭션에 대한 것이다. 단일 트랜잭션의 모든 기록을 "소거"에서 "로깅됨"으로 바꾸려면, 단일 영속성 기록이 필요하다. 본 출원의 실시예에 따른 HTM 커밋에서, 모든 기록은 HTM에 의해 노출되고 동시에 로깅된다. 일 실시예에서, 각각의 기록은 영속성의 로그 레코드를 생성하지만, 성공적인 커밋까지, 기록은 재기동 프로세스에 의해 재생되지 않을 것이라는 점에서 로깅되지 않는다. 도 4는 상이한 단계에서의 작용(action)에 대한 상세 흐름도이다.
HTM 트랜잭션 Tk가 변수 x에 기록하는 경우, x는 L1 캐시, 예를 들어 프로세서(103)의, 도 1에 도시된 캐시(105)에서 트랜잭셔널로 표시되고 "전용", 즉, 프로세서(103)의 L1 캐시(105)에 배타적이다. 캐시(105)에만 있기 때문에 "휘발성이고, 트랜잭션이 아직 커밋되지 않았기 때문에, "소거", 즉 "로깅됨"이 아니다. 로깅되지 않은 것은, x가 재기동 프로세스에 의해 기록되지 않을 것이라는 것을 의미한다. 데이터 처리 시스템(100)의 중단 또는 정전 시에, x의 "휘발성" 및 "전용" 값은 폐기될 것이고 이전의 "공유" 및 "영속성" 값으로 되돌아갈 것이다.
일 실시예에서, HTM 커밋에서 x의 상태는 두 번 변경된다. 그것은 "공유" 즉, 보이게 되고(visible), 동시에 "로깅"된다. 일 실시예에서, 두 가지 변경은 모두 성공적인 커밋에서 원자적으로 일어난다. 성공적인 커밋 후에, HTM은 x의 새로운 값을 NVM(101)에 투명하게 플러싱하고 x를 소거한다. 소거는 먼저 커밋 레코드(지시자)를 거짓으로 설정하고, 두 번째 단계에서는 로그 마크(log mark)를 설정해제한다. 로그 마크의 역할은 시스템에서 하나의 트랜잭션에 의해서만 주소가 로깅되었는지를 확인하는 것이며 재기동 프로세스는 HTM 트랜잭션에 의해 주소에 기록된 마지막 값으로 푀대 한번 주소를 기록한다. 로그 마크는 실시예이며 본 특허의 청구범위의 일부가 아니다. 데이터 처리 시스템(100)의 장애가 있고 x가 "로깅"되었을 재기동되면, 프로세서(103)는 x의 커밋된 값 x를 NVM의 애플리케이션 데이터 영역 내의 로그 레코드에 기록하도록 구성된다.
일 실시예에서, NVM(101) 내의 로그 레코드는 전형적인 순차 로그(sequential log)가 아니다. 대신, 인플라이트(in-flight) 또는 HTM에 의해 커밋 되고 그 로그 레코드가 아직 재활용되지 않은 트랜잭션에 대해서만 로그 레코드를 유지할 수 있다.
당업자라면 알 수 있듯이, L1 캐시(105)가 비휘발성이면, HTM은 더 이상의 수정(modification)이 없기 때문에 영속될 것이다. 재시동 이벤트는 인플라이트 트랜잭션을 중단시킬 수 있고, 캐시(105)에 있는 동안, 커밋된 HTM 트랜잭션은 즉각 영속적이며 로깅을 필요로 하지 않을 것이다. 그러나 하드웨어 한계, 예컨대, NVM(101)의 빠른 마모와 느린 기록으로 인해, 캐시 계층은 가까운 장래에는 휘발성 SRAM에 남아있을 것이다.
도 3에 도시된 바와 같이, 일 실시예에서, 트랜잭션 Tk의 성공적인 커밋은 도 4에 도시된 바와 같이, 지시자, 즉 Tk의 커밋 레코드를 참으로 자동 설정한다. 일 실시예에서, 이는 프로세서(103)에 의해 "tx_end_log(Tk)" 명령어를 사용하여 구현될 수 있다. 이 명령어는 HTM 커밋을 수행하고 Tk의 커밋 레코드를 설정한다. 도 4는 일 실시예에 따른 NVM(101)에서의 트랜잭션 Tk의 영속적인 풋 프린트의 레이아웃을 개략적으로 나타낸다. 여기에는 Tk의 커밋 레코드로 사용될 수 있음을 지시하는 "로깅됨"이 포함된다. 명령어 "tx_end_log(Tk)"는 커밋 레코드를 NVM(101)에 기록하고, 또한 Tk의 기록 상태를 "로깅됨"으로 설정한다.
일 실시예에서, 프로세서(103)는 라이브 트랜잭션들을 중단하지 않으면서 그것들에 의해 수정된 데이터를 캐시(105)에서 NVM(103)으로 플러싱하도록 구성된다.
트랜잭션 T의 완결 중에, 예를 들어, 명령어 "tx_end_log(Tk)" 후에, 즉 HTM 커밋 후에, T에 의해 캐시(105)로부터 NVM(103)의 애플리케이션 데이터 영역으로 기록되는, 애플리케이션 데이터의 플러싱은 이 값을 판독하는 진행 중인 동시 발생 트랜잭션을 중단시키지 않는다. 일 실시예에서, 이러한 플러시는 어떠한 코히어런스 요청도 생성하지 않고, 경우 105의 데이터를 무효화하지 않는다. 여기서는 이러한 작업은 캐시 계층 구조 및 HTM 서브시스템에 영향을 미치지 않기 때문에 여기서는 투명한 플러시(TF)라고 한다.
일 실시예에서, 프로세서(103)는 HTM 트랜잭션을 시작하고 커밋하는 "tx_start()" 및 "tx_end()" 함수(function)를 포함하는 HTM 트랜잭션에 API를 제공할 수 있다. 비영속적인 HTM 실현은 이러한 함수를 포함한다. 영속성의 HTM에서, "tx_end()"는 휘발성의 경우와 마찬가지로 HTM 트랜잭션을 시작하는 것이고, "tx_end()"는 캐시에서 NVM의 로그 레코드 영역으로 트랜잭션 로그 레코드를 플러싱하는 것으로 확장되고, 그 다음에 "tx_end_log (T)" 명령어와 같은 API에서 호출되는, 동시 HTM 커밋 및 지시자 설정이 이어지고, 그 다음에 애플리케이션 데이터 자체를 캐시에서 NVM의 애플리케이션 데이터 영역으로 플러싱한다. 일 실시예에서, 머신 스토어 명령어(machine store instruction)은 전처리기에 의해 "tx_write(address, data, size)" 함수와 같은 함수로 대체될 수 있다. tx_write() 함수는 NVM의 NVM의 로그 레코드 영역에 로그 레코드를, 예컨대 비일시적인 기록에 의해 생성하고, 애플리케이션 데이터를 애플리케이션 데이터의 캐시에 기록한다. 일 실시예에서,도 4에 도시된 HTM 트랜잭션에 나타나는 로그 레코드 및 크기 필드는 트랜잭션의 일부로서 플러싱되지만, 커밋 명령의 일부로서 플러싱되지는 않는다. 그러나 동일한 캐시 라인에 대한 복수의 기록은 동일한 로그 레코드에 기록할 수 있다. 따라서, 일 실시예에서, 로그 레코드는 동일한 데이터가 여러 번 플러싱되는 것을 방지하기 위해 커밋 전에 한 번만 플러싱된다.
일 실시예에서, 프로세서(103)는, 프로세서(103)가 진행 보장을 제공하지 않는다는 의미에서 최선형 정책(best effort policy)을 따르도록 구성된다. 결과적으로, 기존의 휘발성 HTM에서 특정 횟수의 중단 후에, 트랜잭션은 글로벌 잠금(global lock) 및 커밋을 취해야 한다. 그러나 NVM을 사용하면, 잠정적인 기록(tentative write)이 이미 메모리를 오염시켰을 수 있으므로, 글로벌 잠금으로는 충분하지 않다. 따라서, 일 실시예에서, 모든 휘발성 HTM 기록에 대해 로그 엔트리 실행취소(undo log entry)가 생성된다. 다른 실시예에서, 제1 값이 NVM(101)에 기록되기 전에 완전한 재실행 로그(full redo log)가 생성된다. 제1 실시예는 기록 오버헤드 후의 판독을 감소시킨다.
앞서 이미 설명한 바와 같이, 도 1에 도시된 캐시(105)와 같은 휘발성 캐시 및 그것의 모든 기록을 캐시에 수용하는 커밋된 HTM 트랜잭션을 사용하면, 일 실시예에서, 기록이 여전히 휘발성인 경우, 프로세서(103)는 HTM 커밋 후에 재기동이 발생한 경우 복구할 수 있도록 하기 위해 기록을 로깅하도록 구성된다. 일 실시예에서, 프로세서(103)는 로그에 대한 모든 기록이 HTM 커밋 전에 NVM(101)에 도달하도록 구성되고, 모든 트랜잭셔널 기록은 캐시(105)에 남는다. 일 실시예에서, 프로세서(103)는 실행 트랜잭션을 중단하지 않고서, 즉 앞서 이미 설명한 바와 같이, 전술 한 바와 같이 투명하게, 로그를 NVM(101)에 플러싱하도록 구성된다.
일 실시예에서, 프로세서(103)는 로깅이 각각의 로깅된 변수 x에 대한 마지막 커밋된 값을 사용하여 재기동 프로세스를 제공할 수 있도록 구성된다. 일 실시예에서, 프로세서(103)는 버전을 x에 첨부하도록 구성된다. 일 실시예에서, 프로세서(103)는 x가 데이터 처리 시스템(100)에서 오직 한 번만 로깅되는 것을 확인하도록 구성된다. 복수의 로그에서의 x의 출현이 허용되면, x의 로그의 최신 버전이 유지되어야 한다.
일 실시예에서, 각각의 주소는 기껏해야 하나의 로그에 나타나도록 허용된다. 복수의 로그에서의 동일 주소의 인스턴스를 회피하기 위해, 일 실시예에서는, 각 메모리 주소가 하나의 마크에 매핑되는, 로그 마크의 휘발성 어레이가 추가된다. 일 실시예에서, 트랜잭션은 x를 기록하려고 할 때, 또한 x를 로깅된 것으로 표시한다. 실시예에서, x가 플러싱될 때까지, 다른 트랜잭션은 그것을 기록하도록 허용되지 않는다. 일 실시예에서 이유 마크(reason mark) 또는 지시자는 이미 다른 트랜잭션에 기록되었지만 아직 플러싱되지 않은 변수에 대한 기록을 방지하기 위한 것이므로, 여전히 로깅된다. 다른 모든 충돌은 HTM에 의해 직접 처리될 수 있다. 일 실시예에서, 마크 또는 지시자의 어레이는, 재기동의 경우에 로깅된 주소가 유일하고, 재기동 및 복구 프로세스가 어떠한 새로운 로그 레코드를 생성하지 않는 것으로 알려져 있기 때문에, 휘발성일 수 있다. 재기동 후에, 실시예에 따라 마크 및 지시기의 새로운 빈(empty) 어레이가 할당될 수 있다.
일 실시예에서, 마크 또는 지시자를 기록하는 것은 트랜잭션의 일부분이다. 즉, 트랜잭션 Tk는 x를 기록하고, 또한 x를 표시하며 커밋할 때, 기록 및 마킹은 둘 다 트랜잭셔널 기록이고, 중단 시에는 둘 다 취소되기 때문에 기록 및 표시(marking)은 동시를 효력을 발생할 것이다. 일 실시예에서, 마크가 설정되는 한, Tk의 로그에 나타나는 x의 값은 변경될 수 없다. 따라서, x가 캐시로부터 NVM(101) 내의 애플리케이션 데이터 영역으로 플러시되고 커밋 레코드가 거짓으로 설정된 후에, 마크는 설정해제될 수 있다. 트랜잭션 로드 명령어는 마크를 무시하고 최대 속도(full speed)으로 실행할 수 있다는 점을 강조하는 것이 중요하며, 판독 트랜잭션은 하드웨어 속도로 처리되기 때문에 이것은 본 출원 따른 HTM의 핵심 이점이다.
도 4는 일 실시예에 따른 트랜잭션 T의 로그 레코드의 영속적인 구조를 나타낸다. 일 실시예에서, T는 도 4에 도시된 바와 같은 부울 커밋 레코드를 가지며, tx_end_log에서 설정된다. 일 실시예에서, 커밋 레코드는 HTM 커밋 마이크로코드에 의해 기록되므로, 이용 가능한, 가장 빠른 비휘발성 메모리에 상주해야 한다. 일 실시예에서, 트랜잭션은 또한 self_id에 저장되는 유일한 ID를 갖는다. 일 실시예에서, 트랜잭션은 로그 레코드 세트를 갖는다. 일 실시예에서, 도 4에 도시된 바와 같이, 각각의 로그 레코드는 수정된 캐시 라인에서의 데이터 및 시스템 메모리에서의 라인의 주소로 구성된다. 일 실시예에서, 데이터의 최대 총 크기는 L1 캐시(105)의 크기와 동일하며, 이는 기록되고 따라서 로깅된 데이터의 최대 크기이다. 일 실시예에서, 크기 필드는 트랜잭션 로그 내의 로그 레코드의 수이다. 일 실시예에서, 로깅과 크기는 결합될 수 있으며, 크기가 0이면 트랜잭션이 로깅되지 않는다. 그러나 여기서는 명확하게 하기 위해 별도로 취급된다. 일 실시예에서, 도 4로부터, T의 모든 로그 레코드 영역은 NVM(101)에 단 한 번만 플러싱되므로, 캐시 라인이 동일한 트랜잭션에서 여러 번 기록되면, 이 라인의 데이터는 T의 커밋 전에 로그에 단 한 번만 플러싱된다.
일 실시예에서, NVM 내의 애플리케이션 데이터의 주소 및 대응하는 데이터인, 로그 레코드의 DATA.ADDR 필드는, 재기동 프로세스 또는 완결이 어떤 주소 및 애플리케이션 데이터가 기록 또는 플러싱되는지를 알 수 있도록 해준다. 일 실시예에서, 주소는 별도의 어레이에 있고 캐시에 단편화(fragmentation)를 회피하기 위해 데이터에 첨부되지 않는다. 일 실시예에서, 주소의 매핑 그 자체는 기록 기구 사용(instrumentation) 및 완결 시에 마크를 점유하고 해방하는 데 사용된다.
구현 과정에서, 전술한 방법의 단계는 프로세서에서 하드웨어 집적 논리 회로를 사용하거나 또는 소프트웨어 형태의 명령을 사용하여 구현될 수 있다. 본 발명의 실시예를 참조하여 개시된 방법의 단계는 하드웨어 프로세서에 의해 직접적으로 수행되거나, 프로세서의 하드웨어 및 소프트웨어 모듈의 조합을 사용하여 수행될 수 있다. 소프트웨어 모듈은 RAM(random access memory), 플래시 메모리(flash memory), ROM(read-only memory), PROM(programmable read-only memory), 전기적으로 삭제할 수 있는 프로그램 가능한 메모리(electrically erasable programmable memory), 레지스터(register) 등 종래의 기존 저장 매체에 위치할 수 있다. 저장 매체는 메모리 내에 위치하고, 프로세서는 메모리 내의 명령을 판독하고, 프로세서의 하드웨어와 결합하여 전술한 방법의 단계를 완료한다.
본 발명의 구체적인 특징 또는 측면은 여러 구현예 또는 실시예 중 오직 하나와 관련하여 개시하였지만, 그러한 특징 또는 측면은 임의의 주어진 또는 특정 애플리케이션에 바람직하고 유리할 수 있을 때 다른 구현예 또는 실시예 중 하나 이상의 다른 특징 또는 측면과 결합될 수 있다. 또한, 용어 "포함한다(includ)", "갖는다(have)", "가지는(with)", 또는 그 다른 변형이 상세한 설명이나 청구범위에서 사용된다는 점에서, 이러한 용어는 "포함한다(comprise)"라는 용어와 유사한 방식으로 포괄적인 것으로 의도된다. 또한, "예시적인", "예를 들어" 및 "예컨대"는 최선 또는 최적이라기보다, 단지 예로서 의도된다. 용어 "결합(coupled)"과 "연결(connected)"은, 파생어(derivatives)와 함께 사용될 수 있다. 이해해야 할 것은, 두 요소가 직접 물리적 또는 전기적 접촉 상태인지, 또는 서로 직접 접촉하지 않는 상태인지에 관계없이 서로 협력하거나 상호작용한다는 것을 나타내는 데 사용되었을 수 있다는 것이다.
본 명세서에서는 구체적인 측면을 예시하고 설명하였지만, 당업자라면 다양한 대안 및/또는 등가의 구현예가, 본 발명의 범위를 벗어나지 않으면서 도시되고 설명된 구체적인 측면을 대체할 수 있음을 이해할 수 있다. 본 출원은 여기에 논의된 측정 측면의 임의의 개조 또는 변형을 포함하도록 의도된다.
이하의 청구범위에서 요소들은 대응하는 라벨 부여와 함께 특정 순서로 열거되어 있지만, 청구항 열거가 이들 요소의 일부 또는 전부를 구현하기 위한 특정 순서를 의미하고 있지 않은 한, 이들 요소는 반드시 그 특정 순서로 구현되는 것에 한정되도록 의도되지 않는다.
여러 가지 대안, 수정, 및 변형이 상기한 교시에 비추어 당업자에게 명백할 것이다. 물론, 당업자는 본 명세서에 기재된 것 이외의 본 발명의 다양한 애플리케이션이 있다는 것을 쉽게 인식한다. 본 발명을 하나 이상의 특정 실시예를 참조하여 설명하였지만, 당업자라면 본 발명의 범위를 벗어나지 않으면서 다양한 변경이 이루어질 수 있음을 인식할 수 있다. 따라서, 첨부된 특허범위 및 그 등가물의 범위 내에서, 본 발명은 본 명세서에 구체적으로 기재된 것과 다르게 실시될 수 있다는 것을 이해해야 한다.

Claims (16)

  1. 하드웨어 트랜잭셔널 메모리(hardware transactional memory, HTM) 트랜잭션을 수행하도록 구성된 데이터 처리 시스템으로서,
    데이터를 영속적으로 저장하기 위한 바이트 주소지정 가능한 비휘발성 메모리(byte-addressable nonvolatile memory);
    상기 HTM 트랜잭션의 성공적인 커밋(commit)을 지시하는 지시자(indicator)를 상기 비휘발성 메모리에 기록함으로써 상기 HTM 트랜잭션을 커밋하는 것과 관련하여 원자적인(atomic) HTM 기록 작업(write operation)을 실행하도록 구성되고, 추가로, 상기 HTM 트랜잭션의 성공적인 커밋 이전에 상기 비휘발성 메모리에 상기 HTM 트랜잭션과 연관된 기록 작업(write operation)을 로깅(logging)하고, 상기 HTM 트랜잭션의 성공적인 커밋 후에, 상기 원자적인 HTM 기록 작업에 의해 기록된 데이터를 캐시 메모리에서 상기 비휘발성 메모리로 플러싱하고, 상기 HTM 트랜잭션을 언로그 상태로 설정하며, 상기 지시자를 설정해제하도록 구성된 프로세서; 및
    상기 HTM 트랜잭션과 연관된 기록 작업의 로그가 상기 비휘발성 메모리에 존재하고, 상기 HTM 트랜잭션이 로그 상태(logged state)에 있으며, 상기 지시자가 설정되어 있으면, 상기 데이터 처리 시스템의 재기동 시에 상기 로그를 재실행(redo)하고, 상기 HTM 트랜잭션의 재실행이 완료되면, 상기 HTM 트랜잭션을 언로그 상태(unlogged state)로 설정하며, 상기 지시자를 설정해제(unset)하도록 구성된 복구 유닛
    을 포함하는 데이터 처리 시스템.
  2. 제1항에 있어서,
    상기 프로세서는 복수의 캐시 라인에 의해 캐시 메모리에 연결되며, 상기 캐시 메모리는, 상기 프로세서가 캐시 코히어런스 프로토콜(cache coherence protocol)을 사용하여 데이터를 캐싱(caching)하기 위해 사용하도록 구성되는, 데이터 처리 시스템.
  3. 제1항에 있어서,
    상기 HTM 트랜잭션의 성공적인 커밋 이전에 상기 비휘발성 메모리에 상기 HTM 트랜잭션과 연관된 기록 작업의 로그를 투명하게 플러싱(flushing)함으로써, 상기 비휘발성 메모리에 상기 HTM 트랜잭션과 연관된 기록 작업을 로깅하도록 구성되는 데이터 처리 시스템.
  4. 삭제
  5. 삭제
  6. 제1항에 있어서,
    추가로, HTM 트랜잭션의 중단하지 않으면서 상기 원자적인 HTM 기록 작업에 의해 기록된 데이터를 캐시 메모리에서 상기 비휘발성 메모리로 투명하게 플러싱하도록 구성되는 데이터 처리 시스템.
  7. 제1항에 있어서,
    상기 HTM 트랜잭션의 성공적인 커밋을 지시하는 상기 지시자는 HTM 트랜잭션 식별자(transaction identifier), 커밋 레코드(commit record)를 포함하는, 데이터 처리 시스템.
  8. 프로세서를 포함하는 데이터 처리 시스템에 의해 수행되는, 하드웨어 트랜잭셔널 메모리(HTM) 트랜잭션을 수행하기 위한 데이터 처리 방법으로서,
    상기 HTM 트랜잭션의 성공적인 커밋을 지시하는 지시자를 비휘발성 메모리에 기록함으로써 상기 HTM 트랜잭션을 커밋하는 것과 관련하여 원자적인 HTM 기록 작업을 실행하는 단계; 및
    상기 HTM 트랜잭션과 연관된 기록 작업의 로그가 상기 비휘발성 메모리에 존재하고, 상기 HTM 트랜잭션이 로그 상태에 있으며, 상기 지시자가 설정되어 있으면, 상기 데이터 처리 시스템의 재기동 시에 상기 로그를 재실행하고, 상기 HTM 트랜잭션의 재실행이 완료되면, 상기 HTM 트랜잭션을 언로그 상태로 설정하며, 상기 지시자를 설정해제하는 단계
    를 포함하고,
    상기 HTM 트랜잭션의 성공적인 커밋 이전에 상기 비휘발성 메모리에 상기 HTM 트랜잭션과 연관된 기록 작업(write operation)을 로깅(logging)하는 단계; 및
    상기 HTM 트랜잭션의 성공적인 커밋 후에, 상기 원자적인 HTM 기록 작업에 의해 기록된 데이터를 캐시 메모리에서 상기 비휘발성 메모리로 플러싱하고, 상기 HTM 트랜잭션을 언로그인 상태로 설정하며, 상기 지시자를 설정해제하는 단계
    를 더 포함하는 데이터 처리 방법.
  9. 제8항에 있어서,
    상기 HTM 트랜잭션의 성공적인 커밋 이전에 상기 비휘발성 메모리에 상기 HTM 트랜잭션과 연관된 기록 작업의 로그를 투명하게 플러싱함으로써, 상기 비휘발성 메모리에서 상기 HTM 트랜잭션과 연관된 기록 작업을 실행하는 단계를 포함하는 데이터 처리 방법.
  10. 삭제
  11. 삭제
  12. 제8항에 있어서,
    HTM 트랜잭션을 중단하지 않으면서 상기 원자적인 HTM 기록 작업에 의해 기록된 데이터를 캐시 메모리에서 상기 비휘발성 메모리로 투명하게 플러싱하는 단계를 포함하는 데이터 처리 방법.
  13. 컴퓨터상에서 실행될 때 제8항, 제9항, 및 제12항 중 어느 한 항에 따른 데이터 처리 방법을 수행하기 위한 컴퓨터 프로그램 코드를 포함하는, 컴퓨터로 판독할 수 있는 저장 매체.
  14. 삭제
  15. 삭제
  16. 삭제
KR1020177028059A 2015-07-22 2016-07-21 로그 및 무 잠금(no lock)과 함께 비휘발성 메모리를 사용하는 공유 메모리에서의 하드웨어 트랜잭셔널 메모리를 위한 코히어런스 프로토콜 KR102009259B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EPPCT/EP2015/066802 2015-07-22
PCT/EP2015/066802 WO2017012667A1 (en) 2015-07-22 2015-07-22 Hardware transactional memory in non volatile memory with log and no lock
PCT/EP2016/067403 WO2017013202A1 (en) 2015-07-22 2016-07-21 Coherence protocol for hardware transactional memory in shared memory using non volatile memory with log and no lock

Publications (2)

Publication Number Publication Date
KR20170123683A KR20170123683A (ko) 2017-11-08
KR102009259B1 true KR102009259B1 (ko) 2019-08-09

Family

ID=53716497

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177028059A KR102009259B1 (ko) 2015-07-22 2016-07-21 로그 및 무 잠금(no lock)과 함께 비휘발성 메모리를 사용하는 공유 메모리에서의 하드웨어 트랜잭셔널 메모리를 위한 코히어런스 프로토콜

Country Status (7)

Country Link
US (1) US11614959B2 (ko)
EP (1) EP3274826A1 (ko)
JP (1) JP6491348B2 (ko)
KR (1) KR102009259B1 (ko)
CN (2) CN113505088A (ko)
SG (1) SG11201707261TA (ko)
WO (2) WO2017012667A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10303477B2 (en) * 2015-06-26 2019-05-28 Intel Corporation Persistent commit processors, methods, systems, and instructions
US10430186B2 (en) * 2017-10-27 2019-10-01 Vmware, Inc. Speeding up transactions in non-volatile memory using hardware transactional memory
US11307854B2 (en) * 2018-02-07 2022-04-19 Intel Corporation Memory write log storage processors, methods, systems, and instructions
US10678587B2 (en) 2018-02-16 2020-06-09 Oracle International Corporation Persistent multi-word compare-and-swap
US10445238B1 (en) * 2018-04-24 2019-10-15 Arm Limited Robust transactional memory
US11137373B2 (en) * 2018-05-24 2021-10-05 Hf Scientific, Inc. QCM measurement of scale formation
CN108897642B (zh) * 2018-06-27 2020-11-27 清华大学 持久性事务内存系统中日志机制的优化方法及装置
KR20200005229A (ko) * 2018-07-06 2020-01-15 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
US10754776B2 (en) * 2018-07-30 2020-08-25 International Business Machines Corporation Cache balance when using hardware transactional memory
US10846222B1 (en) 2019-07-01 2020-11-24 Vmware, Inc. Dirty data tracking in persistent memory systems
US11144221B1 (en) * 2020-04-10 2021-10-12 Dell Products L.P. Efficient resilience in a metadata paging array for in-flight user data
CN112256200A (zh) * 2020-10-21 2021-01-22 宝能(广州)汽车研究院有限公司 数据读写方法和存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100954623B1 (ko) * 2005-12-30 2010-04-27 인텔 코오퍼레이션 무한 트랜잭션 메모리 시스템

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5369757A (en) * 1991-06-18 1994-11-29 Digital Equipment Corporation Recovery logging in the presence of snapshot files by ordering of buffer pool flushing
US5897656A (en) * 1996-09-16 1999-04-27 Corollary, Inc. System and method for maintaining memory coherency in a computer system having multiple system buses
US8001548B2 (en) 2008-10-20 2011-08-16 Microsoft Corporation Transaction processing for side-effecting actions in transactional memory
US9785462B2 (en) 2008-12-30 2017-10-10 Intel Corporation Registering a user-handler in hardware for transactional memory event handling
CN101510162B (zh) * 2009-03-26 2011-11-02 浙江大学 一种基于延时策略的软件事务内存的实现方法
US8352688B2 (en) 2010-11-15 2013-01-08 Advanced Micro Devices, Inc. Preventing unintended loss of transactional data in hardware transactional memory systems
WO2013039494A1 (en) * 2011-09-14 2013-03-21 Hewlett-Packard Development Company, L.P. Imparting durability to a transactional memory system
US9213501B2 (en) * 2013-05-23 2015-12-15 Netapp, Inc. Efficient storage of small random changes to data on disk
US9146774B2 (en) * 2013-12-12 2015-09-29 International Business Machines Corporation Coalescing memory transactions
CN104657153B (zh) * 2015-03-19 2017-10-17 哈尔滨工业大学 一种基于签名技术的硬件事务内存系统

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100954623B1 (ko) * 2005-12-30 2010-04-27 인텔 코오퍼레이션 무한 트랜잭션 메모리 시스템

Also Published As

Publication number Publication date
US20180143850A1 (en) 2018-05-24
CN107851037A (zh) 2018-03-27
JP2018516394A (ja) 2018-06-21
WO2017013202A1 (en) 2017-01-26
EP3274826A1 (en) 2018-01-31
CN107851037B (zh) 2021-06-08
WO2017012667A1 (en) 2017-01-26
KR20170123683A (ko) 2017-11-08
SG11201707261TA (en) 2017-10-30
CN113505088A (zh) 2021-10-15
US11614959B2 (en) 2023-03-28
JP6491348B2 (ja) 2019-03-27

Similar Documents

Publication Publication Date Title
KR102009259B1 (ko) 로그 및 무 잠금(no lock)과 함께 비휘발성 메모리를 사용하는 공유 메모리에서의 하드웨어 트랜잭셔널 메모리를 위한 코히어런스 프로토콜
US9195600B2 (en) Mechanisms to accelerate transactions using buffered stores
US10445238B1 (en) Robust transactional memory
KR102284957B1 (ko) 트랜잭션 데이터 처리 실행 모드에 대한 호출 스택 유지
Avni et al. Hardware transactions in nonvolatile memory
US8301844B2 (en) Consistency evaluation of program execution across at least one memory barrier
TWI801603B (zh) 處理獨佔式載入指令的資料處理設備、方法及電腦程式
US10671400B2 (en) Enhanced managed runtime environments that support deterministic record and replay
WO2017052845A1 (en) Making volatile isolation transactions failure-atomic in non-volatile memory
WO2022053774A1 (en) Draining operation for draining dirty cache lines to persistent memory
US11513962B2 (en) Draining operation to cause store data to be written to persistent memory
US20240103760A1 (en) Systems and methods for hardware-based asynchronous persistence
WO2017074451A1 (en) Resuming execution in response to a failure
Giles et al. Free atomic consistency in storage class memory with software based write-aside persistence

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant