KR20230172394A - 캐시 일관된 상호 연결 저장 장치에서 raid 회로를 사용하는 중복 배열 독립 디스크 시스템 및 방법 - Google Patents

캐시 일관된 상호 연결 저장 장치에서 raid 회로를 사용하는 중복 배열 독립 디스크 시스템 및 방법 Download PDF

Info

Publication number
KR20230172394A
KR20230172394A KR1020230056354A KR20230056354A KR20230172394A KR 20230172394 A KR20230172394 A KR 20230172394A KR 1020230056354 A KR1020230056354 A KR 1020230056354A KR 20230056354 A KR20230056354 A KR 20230056354A KR 20230172394 A KR20230172394 A KR 20230172394A
Authority
KR
South Korea
Prior art keywords
data
raid
storage device
buffer
circuit
Prior art date
Application number
KR1020230056354A
Other languages
English (en)
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 KR20230172394A publication Critical patent/KR20230172394A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • 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
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0828Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0632Configuration or reconfiguration of storage systems by initialisation or re-initialisation of storage systems
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0665Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/26Using a specific storage system architecture
    • G06F2212/261Storage comprising a plurality of storage devices
    • G06F2212/262Storage comprising a plurality of storage devices configured as RAID
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7208Multiple device management, e.g. distributing data over multiple flash devices

Abstract

본 발명은 블록 레벨 프로토콜 및 바이트 레벨 프로토콜을 포함하는 캐시 일관성 상호 연결 프로토콜을 지원하는 제1 스토리지 장치, 캐시 일관성 상호 연결 프로토콜을 지원하는 제2 스토리지 장치 및 제1 스토리지 장치 및 제2 스토리지 장치와 통신하는 RAID(Redundant Array of Independent Disk) 회로를 포함하고, RAID 회로는 제1 스토리지 장치 및 제2 스토리지 장치에 RAID 레벨을 적용하고, 바이트 레벨 프로토콜을 사용하여 요청을 수신하고 제1 스토리지 장치의 데이터에 액세스하도록 구성된 시스템을 제공한다.

Description

캐시 일관된 상호 연결 저장 장치에서 RAID 회로를 사용하는 중복 배열 독립 디스크 시스템 및 방법{SYSTEMS AND METHODS FOR A REDUNDANT ARRAY OF INDEPENDENT DISKS (RAID) USING A RAID CIRCUIT IN CACHE COHERENT INTERCONNECT STORAGE DEVICES}
본 발명은 일반적으로 스토리지에 관한 것으로, 보다 상세하게는 캐시 일관성 상호 연결 프로토콜(cache coherent interconnect protocol)을 지원하는 스토리지 장치를 사용하여 RAID(Redundant Array of Independent Disks)를 지원하는 것에 관한 것이다.
RAID(Redundant Array of Independent Disks)는 두 개 이상의 스토리지 장치 세트를 단일 스토리지 장치로 나타낼 수 있다. RAID 구성은 스트라이핑(단일 스토리지 장치인 것처럼 두 개 이상의 스토리지 장치의 저장 공간 사용), 패리티(데이터가 올바른지 이중으로 확인하는 메커니즘 제공) 또는 둘 다를 지원할 수 있다. 그러나 RAID의 이점을 활용하기 위해 데이터에 대한 액세스는 RAID 컨트롤러(하드웨어 또는 소프트웨어)를 통해 진행될 수 있다. RAID 컨트롤러를 우회하면 부정확한 데이터 또는 데이터 손상이 발생할 수 있다.
RAID 구성에서 데이터에 대한 액세스를 개선하는 방법이 필요한다.
본 발명이 해결하고자 하는 일 과제는, 캐시 일관성 상호 연결 프로토콜을 지원하는 스토리지 장치를 제공하는 데에 있다.
상술한 과제를 해결하기 위한 실시 예는, 블록 레벨 프로토콜 및 바이트 레벨 프로토콜을 포함하는 캐시 일관성 상호 연결 프로토콜을 지원하는 제1 스토리지 장치, 상기 캐시 일관성 상호 연결 프로토콜을 지원하는 제2 스토리지 장치 및 상기 제1 스토리지 장치 및 상기 제2 스토리지 장치와 통신하는 RAID(Redundant Array of Independent Disk) 회로를 포함하고, 상기 RAID 회로는 상기 제1 스토리지 장치 및 상기 제2 스토리지 장치에 RAID 레벨을 적용하고, 상기 바이트 레벨 프로토콜을 사용하여 요청을 수신하고 상기 제1 스토리지 장치의 데이터에 액세스하도록 구성된 시스템을 포함한다.
상술한 과제를 해결하기 위한 실시 예는, RAID(Redundant Array of Independent Disks) 회로에서 바이트 주소를 포함하는 로드 요청을 수신하는 단계, 상기 바이트 주소에 적어도 부분적으로 기초하여 상기 RAID 회로의 버퍼에 데이터를 위치시키는 단계 및 상기 RAID 회로에서 상기 데이터를 반환하는 단계를 포함하는 방법을 포함한다.
상술한 과제를 해결하기 위한 실시 예는, RAID(Redundant Array of Independent Disks) 회로에서 바이트 주소 및 제1 데이터를 포함하는 저장 요청을 수신하는 단계, 업데이트된 제2 데이터를 생성하기 위해 상기 바이트 주소 및 상기 제1 데이터에 적어도 부분적으로 기초하여 상기 RAID 회로의 버퍼에서 제2 데이터를 업데이트하는 단계 및 상기 RAID 회로에서 결과를 반환하는 단계를 포함하는 방법을 포함한다.
본 발명에 따른 일 실시 예는, 캐시 일관성 상호 연결 프로토콜을 지원하는 스토리지 장치를 제공한다.
아래에 설명된 도면은 본 발명의 실시예가 구현될 수 있는 방법의 예이며 본 발명의 실시예를 제한하려는 의도가 아닙니다. 본 개시내용의 개별 실시예는 특정 도면에 도시되지 않은 요소를 포함할 수 있고 및/또는 특정 도면에 도시된 요소를 생략할 수 있다. 도면은 예시를 제공하기 위한 것이며 축척이 맞지 않을 수 있습니다.
도 1은 본 발명의 실시예에 따라 중복 배열 독립 디스크(RAID)로 구성될 수 있는 캐시 일관성 상호 연결 스토리지 장치를 포함하는 기계를 도시한다.
도 2는 본 발명의 실시예에 따른 도 1의 기계의 세부사항을 도시한다.
도 3은 본 발명의 실시예에 따른 도 1의 RAID의 사용을 도시한다.
도 4는 본 발명의 실시예에 따라 2개의 상이한 프로토콜을 사용하여 도 1의 스토리지 장치로부터 데이터가 어떻게 액세스될 수 있는지를 도시한다.
도 5는 본 발명의 실시예에 따라 RAID 주소 범위가 도 1의 스토리지 장치의 개별 주소 범위에 어떻게 매핑될 수 있는지를 도시한다.
도 6은 본 발명의 실시예에 따른 도 1의 RAID 엔진에 있는 버퍼의 세부사항을 도시한다.
도 7은 본 발명의 실시예에 따라 로드 요청이 도 1의 RAID 엔진에 의해 어떻게 처리될 수 있는지를 도시한다.
도 8은 본 발명의 실시예에 따라 저장 요청이 도 1의 RAID 엔진에 의해 어떻게 처리될 수 있는지를 도시한다.
도 9는 본 발명의 실시예에 따라, 도 1의 RAID의 초기화의 일부로서 RAID 구성을 로드하기 위한 예시적인 절차의 흐름도를 도시한다.
도 10은 본 발명의 실시예에 따라 도 1의 RAID의 초기화를 수행하기 위한 예시적인 절차의 흐름도를 도시한다.
도 11은 본 발명의 실시예에 따라 도 5의 RAID 주소 범위의 사용을 관리하기 위한 예시적인 절차의 흐름도를 도시한다.
도 12는 본 발명의 실시예에 따라 도 1의 RAID를 사용하여 로드 요청을 처리하기 위한 예시적인 절차의 흐름도를 도시한다.
도 13은 본 발명의 실시예에 따라 로드 동작에서 요청된 데이터를 찾기 위한 예시적인 절차의 흐름도를 도시한다.
도 14는 본 발명의 실시예에 따라 도 1의 RAID를 사용하여 저장 요청을 처리하기 위한 예시적인 절차의 흐름도를 도시한다.
도 15는 본 발명의 실시예에 따라 도 6의 버퍼에 데이터를 저장하는 것을 처리하기 위한 예시적인 절차의 흐름도를 도시한다.
이제 본 발명의 실시 예를 상세히 참조할 것이며, 그 예는 첨부된 도면에 도시되어 있다. 다음의 상세한 설명에서, 본 발명의 완전한 이해를 가능하게 하기 위해 다수의 특정 세부사항이 제시된다. 그러나, 당업자는 이러한 특정 세부 사항 없이 본 발명을 실시할 수 있음을 이해해야 한다. 다른 경우에, 잘 알려진 방법, 절차, 구성 요소, 회로 및 네트워크는 실시 예의 측면을 불필요하게 모호하게 하지 않도록 상세히 설명되지 않았다.
제1, 제2 등의 용어가 본 명세서에서 다양한 요소를 설명하기 위해 사용될 수 있지만, 이들 요소가 이러한 용어에 의해 제한되어서는 안된다는 것이 이해될 것이다. 이 용어는 한 요소를 다른 요소와 구별하는 데에만 사용된다. 예를 들어, 본 발명의 범위를 벗어나지 않으면서 제1 모듈은 제2 모듈로 명명될 수 있고, 유사하게 제2 모듈도 제1 모듈로 명명될 수 있다.
본 명세서에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 본 발명의 설명 및 첨부된 특허청구범위에서 사용된 바와 같이, 단수형 표현은 문맥상 명백하게 달리 나타내지 않는 한 복수형도 포함하는 것으로 의도된다. 또한, 본 명세서에서 사용되는 "및/또는"이라는 용어는 관련된 나열된 항목 중 하나 이상의 임의의 및 모든 가능한 조합을 지칭하고 포함하는 것으로 이해될 것이다. "포함하다" 및/또는 "포함하는"이라는 용어는 본 명세서에서 사용될 때 명시된 특징, 정수, 단계, 동작, 요소 및/또는 구성요소의 존재를 지정한다는 것이 추가로 이해될 것이나, 하나 이상의 다른 기능, 정수, 단계, 작업, 요소, 구성 요소 및/또는 이들의 그룹의 존재 또는 추가를 배제하지 않는다. 도면의 구성요소 및 특징은 반드시 축척에 맞게 그려지지는 않는다.
캐시 일관성 상호 연결 프로토콜을 지원하는 스토리지 장치가 점점 보편화되고 있다. 이러한 스토리지 장치는 서로 다른 레벨의 세분성(granularity)으로 서로 다른 프로토콜을 사용하여 데이터에 대한 액세스를 허용한다. 데이터는 다른 스토리지 장치와 같이 블록 단위로 액세스하거나 메모리 장치와 같이 바이트 단위로 액세스할 수 있다.
RAID(Redundant Array of Independent Disks)를 사용하면 두 개 이상의 디스크를 하나의 더 큰 디스크로 표시할 수 있다. 다른 레벨의 RAID는 개별 장치에 대한 증가된 스토리지, 스토리지 장치의 오류로 인한 데이터 손실을 방지하기 위한 리던던시(Redundancy) 또는 두 가지 모두를 제공할 수 있다.
RAID 기술은 데이터에 대한 바이트 레벨 액세스를 지원하지 않을 수 있다. 응용 프로그램이 스토리지 장치의 데이터에 액세스하기 위해 바이트 레벨 프로토콜을 사용하는 경우 이러한 액세스는 RAID 기술을 우회할 수 있다. 이러한 방식으로 하나의 스토리지 장치에서 1비트를 변경하면 RAID 어레이의 데이터를 읽을 수 없게 되어 저장된 데이터가 잠재적으로 쓸모 없게 될 수 있다. 예를 들어 어레이 전체의 데이터에 대한 패리티 검사가 더 이상 데이터의 오류를 감지 및/또는 수정하지 못할 수 있다. (패리티 데이터는 단일 비트가 변경되면 데이터를 복구할 수 있지만 충분한 비트가 변경되면 오류 감지 및 수정이 불가능할 수 있다. 그리고 사용 가능한 패리티 데이터가 없으면 단일 비트 오류라도 데이터를 손상시킬 수 있다.)
본 발명의 실시 예는 RAID 엔진을 사용하여 이러한 문제를 해결한다. RAID 엔진은 단일 주소 범위로 나타나도록 개별 스토리지 장치의 주소 범위를 결합한다. RAID 엔진은 버퍼를 포함할 수 있으며, 이는 휘발성 스토리지, 배터리 지원 휘발성 스토리지 또는 비휘발성 스토리지일 수 있다. 특정 주소에 대한 로드 요청을 받으면 RAID 엔진은 RAID의 개별 스토리지 장치에서 적절한 데이터를 버퍼로 읽은 다음 특정 주소에서 데이터를 반환할 수 있다. 특정 주소에 대한 저장 요청을 수신하면 RAID 엔진은 스토리지 장치에서 버퍼로 데이터를 로드하고 버퍼의 데이터에 대한 저장 요청을 수행한 다음 개별 스토리지 장치에 쓰기를 실행하여 업데이트를 기록(commit)할 수 있다. RAID 엔진은 이러한 방식으로 데이터의 패리티, 암호화, 압축 등을 처리하여 RAID 구성의 무결성(integrity)이 유지되도록 한다. RAID 엔진은 블록 레벨 프로토콜을 사용하여 읽기 및 쓰기 요청을 처리하기 위해 유사한 방식으로 사용될 수도 있다.
RAID 엔진은 원하는 RAID 레벨을 지원할 수 있다.
또한 RAID 스토리지 장치에 데이터를 쓸 때 데이터를 버퍼에 저장하면 RAID 엔진이 호스트에 더 빠르게 응답하고 나중에 개별 스토리지 장치에 대한 쓰기를 처리할 수 있다. 따라서 RAID 엔진은 호스트가 처리를 계속할 수 있도록 하고 편리한 시간(예: 부하가 낮을 때)에 스토리지 장치에 대한 실제 쓰기를 처리할 수 있다.
RAID 엔진을 사용하는 또 다른 이점은 데이터가 여러 스토리지 장치에 분산될 수 있기 때문에 저장 작업이 여러 스토리지 장치에서 병렬로 실행될 수 있다는 것이다.
도 1은 본 발명의 실시 예에 따라 중복 배열 독립 디스크(RAID)로 구성될 수 있는 캐시 일관성 상호 연결 스토리지 장치를 포함하는 기계를 도시한다. 도 1에서, 호스트 또는 시스템이라고도 지칭될 수 있는 기계(105)는 프로세서(110), 메모리(115) 및 스토리지 장치(120-1 및 120-2)(집합적으로 스토리지 장치(120)로 지칭될 수 있음)를 포함할 수 있다. 프로세서(110)는 임의의 다양한 프로세서일 수 있다. (프로세서(110)는 이하에서 논의되는 다른 구성요소와 함께 예시의 편의를 위해 기계 외부에 도시되어 있다: 본 발명의 실시 예는 기계 내에 이러한 구성요소를 포함할 수 있다) 도 1은 단일 프로세서(110)를 도시하지만, 기계(105)는 임의의 수의 프로세서를 포함할 수 있으며, 이들 각각은 단일 코어 또는 다중 코어 프로세서일 수 있으며, 각각은 RISC(Reduced Instruction Set Computer) 아키텍처 또는 CISC(Complex Instruction Set Computer) 아키텍처 및 이들의 조합으로 구현할 수 있다.
프로세서(110)는 메모리(115)에 결합될 수 있다. 메모리(115)는 플래시 메모리, DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), 영구 랜덤 액세스 메모리, FRAM(Ferroelectric Random Access Memory) 또는 비휘발성 랜덤 액세스 메모리(NVRAM), MRAM(Magnetoresistive Random Access Memory) 등과 같은 다양한 메모리일 수 있다. 메모리(115)는 필요에 따라 휘발성 또는 비휘발성 메모리일 수 있다. 메모리(115)는 또한 상이한 메모리 유형의 임의의 원하는 조합일 수 있고, 메모리 컨트롤러(125)에 의해 관리될 수 있다. 메모리(115)는 "단기(short-term)"로 지칭될 수 있는 데이터, 즉 장기간 동안 저장될 것으로 예상되지 않는 데이터를 저장하는 데 사용될 수 있다. 단기 데이터의 예는 임시 파일, 애플리케이션에 의해 로컬로 사용되는 데이터(다른 저장 위치에서 복사되었을 수 있음) 등을 포함할 수 있다.
본 발명의 일부 실시 예에서, 기계(105)는 영구 메모리 장치(도 1에 도시되지 않음)를 포함할 수 있다. 이 영구 메모리 장치는 메모리(115) 대신에 또는 추가로 사용될 수 있다.
프로세서(110) 및 메모리(115)는 또한 다양한 애플리케이션이 실행될 수 있는 운영 체제를 지원할 수 있다. 이들 애플리케이션은 메모리(115)로부터 데이터를 읽거나 메모리(115)에 데이터를 쓰기 위한 요청(명령이라고도 함)을 발행할 수 있다. 스토리지 장치(120-1 및/또는 120-2)(집합적으로 스토리지 장치(120)라고 함)가 어떤 종류의 파일 시스템을 통해 데이터를 읽거나 쓰는 애플리케이션을 지원하는 데 사용될 때, 스토리지 장치(120)는 장치 드라이버(130)를 사용하여 액세스될 수 있다. 도 1은 2개의 스토리지 장치(120-1 및 120-2)를 도시하지만, 기계(105)에는 임의의 개수의 스토리지 장치가 있을 수 있다(단지 하나의 스토리지 장치(120)만 있는 경우에는 일반적으로 RAID 구성이 사용되지 않음). 스토리지 장치(120)는 예를 들어 NVMe(Non-Volatile Memory Express) 프로토콜을 포함하는 임의의 원하는 프로토콜 또는 프로토콜들을 각각 지원할 수 있다. 상이한 스토리지 장치(120)는 상이한 프로토콜 및/또는 인터페이스를 지원할 수 있다. 특히, 스토리지 장치(120)는 스토리지 장치(120) 상의 데이터에 대한 블록 레벨(또는 임의의 다른 더 높은 레벨의 입도) 액세스 및 바이트 레벨(또는 임의의 다른 더 낮은 레벨의 입도) 액세스 모두를 지원할 수 있는 캐시 일관성 상호 연결 프로토콜을 지원할 수 있다. 이러한 캐시 일관성 상호 연결 프로토콜의 예는 cxl.io 프로토콜을 사용하여 블록에서 데이터 액세스를 지원하고 cxl.memory 프로토콜을 사용하여 바이트에서 데이터 액세스를 지원하는 CXL(Compute Express Link) 프로토콜이다.
도 1은 "스토리지 장치"라는 일반적인 용어를 사용하고, 본 발명의 실시 예는 캐시 일관성 상호 연결 프로토콜을 지원할 수 있는 임의의 스토리지 장치 형식을 포함할 수 있으며, 그 예는 하드 디스크 드라이브 및 솔리드 스테이트 드라이브(SSD)를 포함할 수 있다. 아래의 " 솔리드 스테이트 드라이브(SSD)", "하드 디스크 드라이브" 또는 "스토리지 장치"에 대한 모든 참조는 본 발명의 그러한 다른 실시 예를 포함하는 것으로 이해되어야 한다. 또한, 서로 다른 유형의 스토리지 장치가 혼합될 수 있다. 예를 들어, 하나의 스토리지 장치(120)는 하드 디스크 드라이브일 수 있고, 다른 스토리지 장치(120)는 SSD일 수 있다.
전술한 바와 같이, 스토리지 장치(120)는 RAID로 구성될 수 있다. RAID가 사용될 때, 기본 하드웨어인 스토리지 장치(120)는 프로세서(110)로부터 숨겨질 수 있다. 대신, RAID 구성은 단일 스토리지 장치처럼 보이지만 RAID 구성에 포함된 다양한 스토리지 장치(120)에 걸친 스토리지 장치를 포함하는 "가상" 장치를 보여준다. (일부 스토리지 장치(120)는 RAID의 일부일 수 있고 나머지는 그렇지 않을 수 있다: RAID에 포함되지 않은 스토리지 장치(120)는 장치 드라이버(130) 및 종래의 액세스 기술을 사용하여 액세스될 수 있다)
RAID를 사용하는 방법에는 여러 가지가 있다. 이들 상이한 방식은 스토리지 장치(120)가 사용되는 상이한 방식을 나타내는 상이한 번호를 갖는 "레벨(level)"로 알려져 있다. 스트라이프 세트 또는 스트라이프된 볼륨이라고도 하는 RAID 레벨 0은 실제로 리던던시를 제공하지 않는다. 대신에, 데이터는 스토리지 장치(120)에 걸쳐 기록된다. 2개의 스토리지 장치를 갖는 본 발명의 실시 예에서, 데이터의 절반은 스토리지 장치(120-1)에 기록되고, 데이터의 절반은 스토리지 장치(120-2)에 기록된다. RAID 레벨 0에서 사용 가능한 총 스토리지는 일반적으로 가장 작은 스토리지 장치의 크기에 RAID의 스토리지 장치 수를 곱한 것과 같다: 크기가 다른 스토리지 장치를 혼합하면 RAID 레벨 0 작동 방식으로 인해 일부 스토리지에 액세스하지 못할 수 있다. RAID 레벨 0은 성능을 향상시킨다: 각각의 스토리지 장치(120)는 데이터의 일부만을 쓰고 읽기 때문에, 각각의 스토리지 장치(120)는 RAID의 다른 스토리지 장치(120)와 병렬로 자신의 부분에 액세스할 수 있어 더 빠른 읽기 및/또는 쓰기가 가능하다. 그러나 데이터가 여러 스토리지 장치에 분할되어 있기 때문에 시스템의 개별 스토리지 장치에 오류가 발생하면 저장된 모든 데이터가 손실될 수 있다.
미러링이라고도 하는 RAID 레벨 1은 여러 스토리지 장치에 동일한 데이터를 저장한다. 즉, 스토리지 장치(120-1)에 저장된 데이터는 스토리지 장치(120-2)에도 저장되며, 그 반대도 마찬가지이다. RAID 레벨 1에서 사용 가능한 총 공간은 일반적으로 가장 작은 스토리지 장치의 크기이다. RAID에 다른 스토리지 장치를 포함해도 사용 가능한 저장 용량이 증가하지 않는다(다른 스토리지 장치는 미러이므로). RAID의 다양한 스토리지 장치에서 데이터를 읽을 수 있으므로 읽기 성능이 향상될 수 있다. 그러나 쓰기 요청으로 인해 모든 데이터가 각 스토리지 장치에 기록되기 때문에 쓰기 성능은 변경되지 않을 수 있다. 2개(또는 그 이상)의 데이터 복사본을 유지함으로써 리던던시가 제공된다. 임의의 개별 스토리지 장치(120)가 실패하면 데이터는 RAID의 다른 스토리지 장치(120)로부터 액세스될 수 있다.
RAID 레벨 5는 분산 패리티가 있는 블록 레벨 스트라이핑을 제공한다. 즉, 데이터가 스토리지 장치(120)에 걸쳐 스트라이프에 기록될 때, 데이터는 하나의 스토리지 장치(120)를 제외한 모든 스토리지 장치에 기록된다: 마지막 스토리지 장치(120)는 해당 스트라이프에 대한 다른 스토리지 장치에 저장된 데이터에 기초하여 패리티 데이터를 저장한다. 개별 스토리지 장치(120)는 패리티 데이터를 저장하는 데 전용되지 않으며, 패리티 데이터는 모든 스토리지 장치(120)에 걸쳐 회전될 수 있다. (하나의 스토리지 장치(120)를 패리티 데이터 저장 전용으로 사용하는 것은 RAID 레벨 4이다) RAID 레벨 5는 적어도 3개의 스토리지 장치(120)를 사용한다: 사용 가능한 총 스토리지 장치는 일반적으로 가장 작은 스토리지 장치의 크기에 RAID의 총 스토리지 장치 수보다 1작은 수를 곱한 값이다. 예를 들어 RAID에 500GB 스토리지 장치 3개가 포함된 경우 사용 가능한 총 저장 공간은 약 (3 - 1) × 500GB = 1000GB = 1TB이다. RAID의 다양한 스토리지 장치(스트라이프에 대한 패리티 정보를 저장하는 스토리지 장치 제외)에서 데이터를 읽을 수 있으므로 읽기 성능이 향상될 수 있다. 데이터가 스토리지 장치(120)에 걸쳐 기록될 수 있기 때문에 기록 성능도 개선될 수 있다. 다만, 다른 스토리지 장치(120)에 기록된 데이터로부터 패리티 정보를 생성할 수 있으므로, 패리티 정보 생성에 약간의 시간이 더 소요될 수 있다. 하나의 스토리지 장치에 오류가 발생한 경우 다른 스토리지 장치의 데이터를 사용하여 손실된 데이터를 다시 계산할 수 있다(패리티 정보를 사용하여 오류가 발생한 스토리지 장치의 데이터를 재구성할 수 있음).
RAID 레벨 6은 패리티 정보가 RAID의 두 스토리지 장치에 저장된다는 점을 제외하면 RAID 레벨 5와 유사한다. 이와 같이, RAID 레벨 6은 적어도 4개의 스토리지 장치를 사용하지만, RAID 레벨 6은 RAID에서 2개의 스토리지 장치(120)의 장애를 허용할 수 있다. 사용 가능한 총 스토리지는 일반적으로 가장 작은 스토리지 장치의 크기에 RAID의 총 스토리지 장치 수에2 작은 수를 곱한 값이다. 예를 들어 RAID에 500GB 스토리지 장치 4개가 포함된 경우 사용 가능한 총 저장 공간은 약 (4 - 2) × 500GB = 1000GB = 1TB이다. 읽기 및 쓰기 성능은 RAID 레벨 5와 유사할 수 있다.
RAID 레벨 0, 1, 5 및 6은 보다 일반적인 RAID 레벨에 속하지만 다른 RAID 레벨도 존재한다. 또한, 스토리지 장치(120)를 이러한 레벨의 조합으로 구성하는 것이 가능할 수 있다. 예를 들어 RAID 레벨 10은 미러 스트라이프이다. 즉, 스토리지 장치 세트는 다양한 미러 세트를 포함하는 RAID 레벨 0 스트라이프와 함께 RAID 레벨 1 구성으로 배열될 수 있다. RAID 레벨 10은 미러링과 스트라이핑의 이점을 모두 제공하지만 다음과 같은 추가 스토리지 장치가 필요한다: 예를 들어, RAID 레벨 10은 최소 4개의 스토리지 장치를 사용하며 총 용량은 가장 작은 스토리지 장치의 크기에 스트라이프에 사용된 미러 세트의 수를 곱한 값이다.
본 발명의 목적을 위해, "패리티 정보"라는 용어는 패리티 정보(예를 들어, RAID 레벨 5 또는 6에서 사용될 수 있음) 또는 데이터 미러(예를 들어 RAID 레벨 1에서 사용될 수 있음)인지 여부에 관계없이 RAID에 대한 정보의 모든 형태를 포함하는 것으로 이해되어야 한다.
일부 실시 예는 RAID에 추가 스토리지 장치를 추가하는 기능을 제공할 수 있다. 그러나 추가 스토리지 장치로 인해 사용 가능한 총 스토리지가 증가하는지 여부는 사용 중인 RAID 레벨에 따라 달라질 수 있다. 예를 들어 RAID 레벨 0에 다른 스토리지 장치를 추가하면 스토리지 용량이 증가할 수 있지만(여전히 리던던시는 제공되지 않음) RAID 레벨 1에 다른 스토리지 장치를 추가하면 리던던시는 증가하지만 총 스토리지 용량은 증가하지 않는다. RAID 레벨 5 또는 6에 추가 스토리지 장치를 추가하면 사용 가능한 총 스토리지가 어느 정도 증가할 수 있다. 새 스토리지 장치를 추가하기 위해 RAID를 종료하지 않고 새 스토리지 장치를 RAID에 추가할 수 있는지 여부는 RAID 구현 방식에 따라 다를 수 있다.
RAID 엔진(135)은 RAID를 구성하고 사용하기 위해 스토리지 장치(120)의 사용을 관리할 수 있다. 즉, RAID 엔진(135)은 스토리지 장치(120)로부터 데이터에 액세스하라는 요청을 수신하고, 데이터가 실제로 스토리지 장치(120)에 저장되는 위치를 결정하고, 데이터를 읽거나 쓰고, 오류 정정(예를 들어, 패리티 정보를 사용하여)을 처리하는 등의 작업을 수행할 수 있다. RAID 엔진(135)은 하드웨어로 구현될 수 있으며 RAID 회로라고도 불릴 수 있다.
패브릭 관리자(140)는 RAID 엔진(135)을 초기화하는 데 사용될 수 있다. 예를 들어, 패브릭 관리자(140)는 어떤 RAID 레벨이 사용될 것인지 결정하고, 어떤 스토리지 장치(120)가 사용 가능한지 식별하고, 기계(105)에 대한 RAID 초기화에 관련된 다른 동작을 수행할 수 있다. 패브릭 관리자(140)는 아래의 도 5 및 도 9 내지 도 11을 참조하여 더 논의된다.
본 발명의 일부 실시 예에서, RAID 엔진(135)은 스토리지 장치(120)에 직접 연결되거나 직접 통신할 수 있다. 그러나 본 발명의 일부 실시 예에서, 스위치(145)는 프로세서(110), RAID 엔진(135), 패브릭 관리자(140) 및/또는 스토리지 장치(120) 사이의 중개자로서 작용할 수 있다. 스위치(145)는 기계(105)의 한 구성 요소에서 다른 구성 요소로 이동하려는 데이터가 의도한 목적지에 도달하도록 올바르게 라우팅되도록 보장할 책임이 있다. 스위치(145)가 캐시 일관성 상호 연결 프로토콜 스토리지 장치(120)와 통신할 수 있으므로, 스위치(145)는 캐시 일관성 상호 연결 프로토콜 스위치일 수 있다. 또한, 스위치(145)가 RAID 엔진(135)과 통신할 수 있으므로, 스위치(145)는 RAID 인식 스위치일 수 있다.
도 1은 스위치(145) 외부에 있는 RAID 엔진(135) 및 패브릭 관리자(140)를 도시하지만, 공개 스위치(145)의 일부 실시 예에서 RAID 엔진(135) 및 패브릭 관리자(140) 중 하나 또는 둘 모두를 포함할 수 있다.
도 1에 도시되지 않은 것은 회로 기판이다. 마더보드, 백플레인 또는 미드플레인일 수 있는 이 회로 보드는 프로세서(110), 메모리(115), 스토리지 장치(120), RAID 엔진(135), 패브릭 관리자(140) 및/또는 스위치(145)가 설치될 수 있는 슬롯을 포함할 수 있다. 구현에 따라 이러한 구성 요소 중 하나 이상이 슬롯에 설치되지 않고 회로 보드에 직접 설치될 수 있다. 또한, 본 발명의 실시 예는 이러한 회로 기판에 걸쳐 설치된 구성요소와 상호 연결되는 다수의 회로 기판을 포함할 수 있다.
도 2는 본 발명의 실시 예에 따른 도 1의 기계의 세부사항을 도시한다. 도 2에서, 전형적으로, 기계(105)는 하나 이상의 프로세서(110)를 포함하며, 이는 기계의 구성 요소의 동작을 조정하는 데 사용될 수 있는 메모리 제어기(125) 및 클록(205)을 포함할 수 있다. 프로세서(110)는 또한 예로서 랜덤 액세스 메모리(RAM), 읽기 전용 메모리(ROM) 또는 다른 상태 보존 매체를 포함할 수 있는 메모리(115)에 결합될 수 있다. 프로세서(110)는 또한 스토리지 장치(120) 및 예를 들어 이더넷 커넥터 또는 무선 커넥터일 수 있는 네트워크 커넥터(210)에 결합될 수 있다. 프로세서(110)는 또한 버스(215)에 연결될 수 있으며, 버스(215)에는 사용자 인터페이스(220) 및 다른 구성요소 중에서 I/O 엔진(225)을 사용하여 관리될 수 있는 입력/출력(I/O) 인터페이스 포트가 부착될 수 있다.
도 3은 본 발명의 실시 예에 따른 도 1의 RAID의 사용을 도시한다. 도 3에서, 프로세서(110)는 애플리케이션(305)을 실행하고 있을 수 있다. (본 발명의 일부 실시 예에서, 프로세서(110)는 다수의 애플리케이션, 운영 체제 또는 다른 소스로부터 다수의 스레드를 실행할 수 있다.) 애플리케이션(305)은 요청(310-1 및 310-2)(집합적으로 요청(310)이라고 함)과 같은 요청을 전송하여 스토리지 장치(120)로부터 데이터에 액세스할 수 있다. (본 명세서에서, "액세스"라는 용어는 스토리지 장치(120)로부터 데이터를 읽는 것, 스토리지 장치(120)에 데이터를 쓰는 것, 또는 스토리지 장치(120) 내에서 특히 스토리지 장치(120)에 저장된 데이터를 포함하는 임의의 다른 동작을 수행하는 것을 설명하기 위한 것이다) 요청(310)은 RAID 엔진(135)에 요청을 전달할 수 있는 스위치(145)에서 수신될 수 있다. RAID 엔진(135)은 스토리지 장치(120)의 데이터에 액세스하는 방법을 정확하게 결정할 수 있고 구현된 RAID 레벨에 적합한 명령을 발행할 수 있다.
본 발명의 일부 실시 예에서, 도 1의 기계(105)는 다양한 기능을 실행하도록 설계된 가속기와 같은 컴퓨팅 모듈을 포함할 수 있다. 그러한 컴퓨팅 모듈이 기계(105)에 포함되어 있으면, 본 발명의 일부 실시 예에서 컴퓨팅 모듈은 RAID 엔진(135)과 통신하여 스토리지 장치(120)로부터의 데이터에 액세스할 수 있으므로, 컴퓨팅 모듈은 데이터가 스토리지 장치(120)에 저장되는 방법(특히, 구현되는 RAID 레벨에 기초하여 스토리지 장치(120)로부터 데이터에 액세스하는 방법)을 알 필요가 없다.
위에서 언급한 바와 같이, 스토리지 장치(120)는 스토리지 장치(120) 상의 데이터에 대한 블록 레벨 및 바이트 레벨 액세스 모두를 지원할 수 있는 캐시 일관성 상호 연결 프로토콜을 지원할 수 있다. 즉, 애플리케이션은 스토리지 장치(120)로부터 블록(섹터 또는 기타 동등한 개념)을 읽기 위한 읽기 요청을 발행하거나 스토리지 장치(120)의 특정 바이트 주소에서 시작하여 특정 바이트(또는 바이트 세트)를 읽기 위한 로드 요청을 발행함으로써 스토리지 장치(120)로부터 데이터를 읽을 수 있다. 마찬가지로, 애플리케이션은 스토리지 장치(120)에 블록을 쓰기 위한 쓰기 요청을 발행하거나 스토리지 장치의 특정 주소에서 시작하여 특정 바이트(또는 바이트 세트)에 데이터를 쓰기 위한 요청을 저장함으로써 스토리지 장치(120)에 데이터를 쓸 수 있다. 본 명세서에서, 읽기 및 쓰기 요청은 스토리지 장치(120) 상의 파일로부터 데이터에 액세스하는 것과 같은 블록 레벨 요청으로 처리될 수 있고, 로드 및 저장 요청은 도 1의 메모리(115)로부터 바이트에 액세스하는 것과 같은 바이트 레벨 요청으로 처리될 수 있다. 도 4는 이들 상이한 형태의 액세스를 도시한다.
도 4에서, 블록 레벨 프로토콜(405-1)은 블록 레벨 요청을 실행하는 데 사용될 수 있고, 바이트 레벨 프로토콜(405-2)은 바이트 레벨 요청을 실행하는 데 사용될 수 있다. 블록 레벨 프로토콜(405-1) 및 바이트 레벨 프로토콜(405-2)은 집합적으로 프로토콜(405)로 지칭될 수 있다. 도 4는 이러한 다양한 요청에 대해 사용되는 스토리지 장치(120) 상에 상이한 물리적 포트 또는 인터페이스가 있음을 제안하려는 의도가 아님을 유의해야 한다: 모든 요청은 동일한 물리적 연결, 인터페이스 및/또는 스토리지 장치(120)의 포트를 통과할 수 있다. 도 4는 스토리지 장치(120)가 어떤 프로토콜(405)이 사용되는지에 따라 이러한 요청을 다르게 처리할 수 있음을 제안하려는 의도일 뿐이다.
스토리지 장치(120)는 전체 스토리지 장치(410)를 제공할 수 있다. 스토리지 장치(410)는 블록으로 분할될 수 있다. 예를 들어, 스토리지 장치(120)는 블록(415-1 내지 415-4)(집합적으로 블록(415)으로 지칭될 수 있음)을 포함할 수 있다. 본 발명의 일부 실시 예에서, 블록(415)은 페이지로 분할될 수 있으며, 페이지는 블록 레벨 프로토콜(405-1)을 사용하여 액세스될 수 있는 데이터의 가장 작은 단위이다. 그러나 데이터가 스토리지 장치(120)에서 지워질 때 지워질 수 있는 데이터의 최소 단위는 블록일 수 있다. 따라서, 스토리지 장치(120)로부터의 데이터 액세스를 블록 단위로 논의하는 것이 편리하며, 그 이유는 블록이 모든 가능한 명령이 발행될 수 있는 스토리지 장치의 최소 단위일 수 있기 때문이다. 본 발명의 실시 예는 스토리지 장치(120)가 어떻게 기능할 수 있는지에 따라 블록 이외의 단위(예를 들어, 페이지)로 분할된 스토리지 장치(410)를 포함할 수 있다.
도 3의 애플리케이션(305)은 한 번에 블록(또는 액세스될 블록을 식별하는 페이지) 데이터를 읽거나 쓰기 위해 도 1의 읽기 또는 쓰기 요청(310-1)을 발행할 수 있다. 따라서, 예를 들어, 도 4는 블록(415-3)으로부터의 데이터에 액세스하기 위해 사용되는 블록 레벨 프로토콜(405-1)을 도시한다. 함께, 블록(415)은 스토리지 장치(120)의 사용 가능한 스토리지 장치를 나타낼 수 있다.
그러나 스토리지 장치(120)가 캐시 일관성 있는 상호 연결 프로토콜을 지원할 수 있기 때문에 스토리지 장치(120) 상의 데이터의 개별 바이트에 액세스하기 위해 바이트 레벨 프로토콜(405-2)도 사용될 수 있다. 스토리지 장치(120)는 도 1의 메모리(115)에 의해 노출된 메모리의 확장일 뿐인 것으로 도 3의 애플리케이션(305)에 나타날 수 있는 주소 범위를 노출할 수 있다. 따라서, 도 3의 애플리케이션(305)은 스토리지 장치(120) 내의 특정 바이트에 데이터를 로드 또는 저장하기 위한 명령을 발행할 수 있다. 예를 들어, 도 4는 블록(415-4) 내의 바이트(420)에 액세스하기 위해 사용되는 바이트 레벨 프로토콜(405-2)을 도시한다.
전술한 바와 같이, 전형적으로 블록 또는 페이지는 스토리지 장치(120) 내에서 액세스될 수 있는 데이터의 가장 작은 단위이다. 바이트 레벨 프로토콜(405-2)을 사용하여 개별 바이트에 대한 액세스를 가능하게 하기 위해, 스토리지 장치(120)는 DRAM과 같은 다른 형태의 메모리를 포함할 수 있다. 바이트 레벨 프로토콜(405-2)을 사용하는 요청이 수신되면, 스토리지 장치(120)는 요청된 주소가 이 메모리 어딘가에 이미 로드되어 있는지 확인하기 위해 확인할 수 있다. 그렇지 않은 경우, 스토리지 장치(120)는 저장 매체로부터 블록을 읽고 메모리에 데이터를 저장할 수 있다. (이 메모리는 스토리지 장치(120)의 총 사용 가능한 스토리지 장치보다 작을 수 있다. 필요한 경우 스토리지 장치(120)는 데이터가 이 메모리에 로드될 공간을 만들기 위해 이 메모리에서 다시 저장 매체로 데이터를 플러시할 수도 있다) 그런 다음 스토리지 장치(120)는 이 메모리로부터 바이트 레벨 프로토콜(405-2)을 사용하여 요청에서 식별된 특정 바이트 주소에 액세스할 수 있다.
이 다른 형태의 메모리는 휘발성 또는 비휘발성 스토리지 장치일 수 있으며, 본 발명의 실시 예에 따라 영구적이거나 그렇지 않을 수 있다. 휘발성 메모리가 사용되는 경우, 스토리지 장치(120)는 전원 중단으로부터 보호하기 위해 일부 백업 전원을 포함할 필요가 있을 수 있거나 스토리지 장치(120)는 저장 명령이 비휘발성 저장 매체에 즉시 기록되도록 보장할 필요가 있을 수 있다.
일반적인 RAID 구현은 스토리지 장치에서 데이터 읽기 및 쓰기 요청을 처리한다. 일반적인 RAID 구현은 메모리 요청을 처리하지 않는다. 따라서 바이트 레벨 프로토콜(405-2)을 사용하는 요청은 올바른 데이터 처리가 되지 않을 수 있다. 로드 요청으로 인해 잘못된 데이터가 반환될 수 있다(예를 들어, 로드 요청에 첨부된 바이트 주소가 실제로 RAID 5 구성에 대한 패리티 정보를 저장하는 경우 반환될 수 있는 데이터는 실제로 도 3의 애플리케이션(305)에 의해 기록된 데이터가 아니다) 저장 요청은 실제로 도 1의 스토리지 장치(120)에 저장된 데이터에 오류를 도입할 수 있다. RAID 레벨 1 구성을 사용하면 어떤 종류의 오류가 있는지 감지하기 위해 올바른 데이터를 저장하는 스토리지 장치(120)를 결정하는 것이 불가능할 수 있다. RAID 레벨 5 또는 6 구성에서 패리티 정보를 사용하더라도 문제를 방지할 수 없다. 이러한 요청이 충분히 발행되면 도 1의 RAID 엔진(135)이 올바른 데이터를 결정하는 것이 불가능할 수 있다. 따라서, 블록 레벨 프로토콜(405-1) 및 바이트 레벨 프로토콜(405-2) 모두를 지원하는 스토리지 장치(120)를 사용할 때, RAID 엔진(135)은 그들이 메모리에 액세스하는 것처럼 보이지만 실제로는 도 1의 스토리지 장치(120)에 액세스하고 있는 요청을 가로챌 필요가 있을 수 있다.
도 1의 스토리지 장치(120) 상의 데이터에 실제로 액세스하는 메모리 요청을 차단할 수 있도록, 도 1의 RAID 엔진(135)은 도 1의 스토리지 장치(120) 상의 이용 가능한 스토리지 장치를 나타내는 주소 범위를 설정할 수 있다. 이 RAID 주소 범위는 도 1의 스토리지 장치(120)에 대한 개별 주소 범위 대신 시스템에 등록될 수 있다. 이러한 방식으로, 도 1의 RAID 엔진(135)은 도 1의 스토리지 장치(120)의 주소 범위를 숨길 수 있다. 도 5는 이것이 어떻게 행해질 수 있는지를 예시한다.
도 5는 본 발명의 실시 예에 따라 RAID 주소 범위가 도 1의 스토리지 장치(120)의 개별 주소 범위에 어떻게 매핑될 수 있는지를 도시한다. RAID 초기화 동안, 도 1의 패브릭 관리자(140)는 도 1의 각각의 스토리지 장치(120)에 의해 노출된 주소 범위(505-1 및 505-2)를 결정할 수 있다(주소 범위(505-1 및 505-2는 집합적으로 주소 범위(505)로 지칭될 수 있음)). 도 1의 패브릭 관리자(140)는 개별 스토리지 장치의 주소 범위를 포함하기에 충분히 클 수 있는 RAID 주소 범위(510)를 생성할 수 있다. 주소 범위(510)의 임의의 주소는 주소 범위(505) 중 하나의 대응하는 주소를 가질 수 있으며, 그 반대도 마찬가지이다. 도 1의 패브릭 관리자(140)는 RAID 주소 범위(510)를 시스템에 등록할 수 있다(예를 들어, RAID 주소 범위(510)를 메모리 맵 또는 도 1의 기계(105)의 시스템 메모리에 추가함으로써). 도 1의 스토리지 장치(120)에 대한 주소 범위(505)가 별도로 시스템에 등록된 경우, 도 1의 패브릭 관리자(140)는 또한 시스템으로부터 주소 범위(505)를 등록 취소할 수 있고, 이에 따라 도 3의 애플리케이션(305)은 도 4의 바이트 레벨 프로토콜(405-2)을 사용하여 도 1의 스토리지 장치(120)의 바이트 주소에 액세스하려고 시도하지 않을 수 있다.
도 5는 RAID 주소 범위(510)가 개별 주소 범위(505)에 대응하는 연속 주소 블록을 포함하는 것을 제안하지만, 본 발명의 실시 예는 RAID 주소 범위(510)의 주소가 주소 범위(505)의 주소에 대응할 수 있는 방법을 관리하는 다른 방식을 포함할 수 있다. 예를 들어 주소 범위(505)의 주소는 RAID 주소 범위(510)에서 인터리브(interleave)될 수 있다.
도 6은 본 발명의 실시 예에 따른 도 1의 RAID 엔진(135)의 버퍼의 세부사항을 도시한다. 도 6에서, RAID 엔진(135)은 다양한 구성요소를 포함할 수 있다. RAID 엔진(135)은 읽기 회로(605), 쓰기 회로(610) 및 버퍼(615)를 포함하는 것으로 도시되어 있다. 읽기 회로(605)는 도 4의 블록 레벨 프로토콜(405-1)을 사용하여 스토리지 장치(120)로부터 데이터를 판독할 수 있다. 유사하게, 쓰기 회로(610)는 도 4의 블록 레벨 프로토콜(405-1)을 사용하여 스토리지 장치(120)에 데이터를 기록할 수 있다.
버퍼(615)는 도 3의 애플리케이션(305)이 도 4의 바이트 레벨 프로토콜(405-2)을 사용하여 로드 또는 저장 요청을 발행할 때 데이터에 대한 액세스를 관리하는 데 사용될 수 있다. 도 5의 RAID 주소 범위(510)에 바이트 주소의 존재에 기초하여, RAID 엔진(135)은 요청이 스토리지 장치(120) 중 하나의 데이터에 액세스한다고 결정할 수 있다. RAID 엔진(135)은 데이터를 버퍼(615)에 로드할 수 있다. 본질적으로, 버퍼(615)는 도 4의 바이트 레벨 프로토콜(405-2)을 사용하는 요청을 처리하기 위해 스토리지 장치에 의해 사용되는 메모리와 동일하지만 대신에 RAID 엔진(135)에 의해 사용된다. 버퍼(615)는 휘발성 메모리 또는 비휘발성 메모리일 수 있으며; 버퍼(615)는 영구적이거나 그렇지 않을 수 있다. 도 4의 바이트 레벨 프로토콜(405-2)을 사용하여 요청을 처리하기 위해 스토리지 장치(120)에 의해 사용되는 메모리와 같이, 버퍼(615)가 비휘발성 또는 영구 메모리가 아닌 경우, RAID 엔진은 전원 중단의 경우에 버퍼(615)의 데이터를 다시 스토리지 장치(120)로 플러시하기에 충분한 전력을 제공하기 위해 배터리 또는 커패시터와 같은 백업 전원(도 6에 도시되지 않음)을 포함할 수 있다.
버퍼(615)는 스트라이프(620-1 내지 620-3)(집합적으로 스트라이프(620)라고 함)에 데이터를 저장할 수 있다. 각 스트라이프에는 각 스토리지 장치의 데이터 일부가 포함될 수 있다. 스트라이프(620)는 RAID 엔진(135)이 스토리지 장치(120)에 데이터를 저장하는 방법과 유사할 수 있다. 예를 들어, RAID 레벨 0 구성이 사용되는 경우, 각각의 스토리지 장치(120)로부터의 스트라이프(620)의 데이터는 판독되어 버퍼(615)로 로드될 수 있고; RAID 레벨 1 구성이 사용되는 경우, 스트라이프(620)의 데이터는 스토리지 장치(120) 중 하나로부터의 데이터를 포함할 수 있다(나머지 스토리지 장치(120)의 데이터는 스트라이프(620)에 로드된 데이터의 오류를 확인하고 수정하는 데 사용됨); RAID 레벨 5 구성을 사용하는 경우, 스트라이프(620)의 데이터는 스토리지 장치(120)로부터의 비-패리티(non-parity) 데이터(패리티 정보는 스트라이프(620)에 로드된 데이터의 오류를 확인하고 수정하는 데 사용됨) 등을 포함할 수 있다.
RAID 엔진(135)은 요청과 함께 제공된 바이트 주소에 기초하여 요청된 데이터를 저장하는 스트라이프(620)를 식별할 수 있다. 스트라이프(620)가 현재 버퍼(615)에 로드되지 않은 경우, RAID 엔진(135)은 스토리지 장치(120) 전체에서 스트라이프를 판독하고 데이터를 스트라이프(620)에 저장할 수 있다. 그런 다음 RAID 엔진(135)은 버퍼(615)로부터의 요청에 기초하여 개별 바이트(들)에 액세스하고 그 데이터를 도 3의 애플리케이션(305)으로 반환할 수 있다.
스토리지 장치(120)가 도 4의 바이트 레벨 프로토콜(405-2)을 사용하여 요청을 처리하기 위해 사용할 수 있는 메모리와 같이, 버퍼(615)는 RAID 레벨 구성을 사용하는 스토리지 장치(120)의 총 가용 스토리지 장치보다 작을 수 있다. 본 발명의 일부 실시 예에서, 버퍼(615)는 새로운 데이터를 위한 공간을 만들기 위해 어떤 스트라이프(620)를 축출할지 결정하기 위해 임의의 원하는 기술을 사용할 수 있다. 예를 들어, 버퍼(615)는 최소 최근 사용(LRU) 알고리즘, 최소 빈도 사용(LFU) 알고리즘, 또는 새로운 데이터를 위한 공간을 만들기 위해 버퍼(615)로부터 축출할 스트라이프(620)를 선택하기 위해 임의의 다른 원하는 알고리즘을 사용할 수 있다.
도 6은 스트라이프(620-1)를 위한 공간을 만들기 위해 제거되는 스트라이프(620-3)를 도시한다. 스트라이프(620-3)의 데이터는 부분으로 분할될 수 있으며, 각 부분은 상이한 스토리지 장치(120)에 저장될 수 있다. 예를 들어, 스트라이프(620-3)는 데이터(625-1, 625-2, 625-3) (집합적으로 데이터(625)라고 부를 수 있음)로 분할되어 스토리지 장치(120-1, 120-2, 120-3)에 각각 기록될 수 있다. 데이터(625)는 실제 데이터이거나 스트라이프(620-3)의 데이터로부터 적절히 생성된 패리티 정보일 수 있다. 미러링을 포함한 RAID 구성(예: RAID 레벨 1)을 사용하는 경우 각 데이터(625)는 고유하지 않을 수 있다.
스트라이프(620-3)의 데이터가 스토리지 장치(120)에 기록되면 데이터(데이터(625)와 같은)가 스트라이프(620-1)에 로드될 수 있다. 본질적으로, 스트라이프(620-3)를 축출(evict)하는 동작과 스트라이프(620-1)를 로딩하는 동작은 미러링과 같다: 데이터는 쓰여지거나 읽혀지고, 패리티 정보 또는 다른 리던던시 정보는 읽혀진 데이터가 정확한지 확인하기 위해 쓰여지거나 사용된다.
스트라이프(620-3)의 축출은 데이터를 스토리지 장치(120)에 기록하는 것을 포함할 필요가 없을 수 있음에 유의해야 한다. 예를 들어, 스트라이프(620-3)의 데이터가 스토리지 장치(120)에 걸친 스트라이프로서 이미 저장되어 있는 경우, 스트라이프(620-3)를 축출하는 것은 버퍼(615)로부터 스트라이프(620-3)를 삭제하는 것만을 포함할 수 있다. ("삭제"라는 용어는 실제로 스트라이프 620-3에서 데이터를 지우는 것, 스트라이프(620-3)의 데이터를 무효화됨으로 표시하는 것(그러나 실제로 스트라이프(620-3)에서 데이터를 지우지는 않음), 또는 현재 스트라이프(620-3)에 있는 데이터가 실제로 어떤 식으로든 버퍼(615)에서 제거되었는지 여부에 관계없이 스트라이프(620-3)가 새로운 데이터를 저장하는 데 사용할 수 있음을 표시하는 것으로 광범위하게 이해될 수 있다)
도 6은 데이터가 버퍼(615)의 스트라이프(620-1)에 로드되고 버퍼(615)의 스트라이프(620-3)로부터 축출되는 것을 제안하지만, 본 발명의 실시 예는 버퍼(615)의 임의의 스트라이프(620)로부터 데이터를 축출 및/또는 데이터를 로딩하는 것을 포함할 수 있다. 예를 들어, 버퍼(615)는 스트라이프(620)의 액세스에 관한 정보를 추적하는 테이블(도 6에 도시되지 않음)을 포함할 수 있다: 이 정보는 축출할 스트라이프(620) 및/또는 데이터를 로드할 스트라이프(620)를 선택하는 데 사용될 수 있다. 스트라이프(620-1)가 항상 데이터를 로드하는 데 사용되거나 스트라이프(620-3)의 데이터가 항상 제거되어야 한다는 요구 사항은 없다.
전술한 바와 같이, RAID 엔진(135)은 하나 이상의 스토리지 장치(120)에 패리티 정보를 기록할 수 있다. 오류 핸들러(630)는 스토리지 장치(120)에 기록될 적절한 패리티 정보를 생성할 수 있다. 예를 들어, 도 1의 기계(105)가 RAID 레벨 5 구성을 사용하도록 구성되었다고 가정한다. 즉, 스트라이프(스트라이프 620-3)가 스토리지 장치(120)에 저장되면 두 개의 스토리지 장치(120)가 실제 데이터를 수신할 수 있고, 제3 스토리지 장치(120)는 패리티 정보를 저장할 수 있다. 이와 같이 하나의 스토리지 장치(120)의 데이터가 손상되거나 하나의 스토리지 장치(120)에 장애가 발생하면 패리티 정보를 이용하여 스트라이프를 재구성할 수 있다. 따라서 스트라이프(620-3)의 경우 데이터(625-1 및625-2)가 실제 데이터이고 데이터(625-3)이 패리티 정보라고 가정한다. 오류 핸들러(630)는 스트라이프(620-3)를 스토리지 장치(120)에 기록하기 위해 데이터(625-1 및 625-2)에 기초하여 데이터(625-3)에 대한 패리티 정보를 생성할 수 있다.
위의 논의는 패리티 정보를 생성하는 데 초점을 맞추었지만, 본 발명의 실시 예는 임의의 원하는 형태의 에러 처리로 확장될 수 있다. 예를 들어, 도 1의 기계(105)을 사용하여 구현된 RAID 레벨이 데이터의 미러링을 포함하는 경우, 오류 핸들러(630)는 일부 데이터를 미러 드라이브에 복사할 수 있다.
오류 핸들러(630)는 또한 오류 정정을 수행할 수 있음에 유의해야 한다. 예를 들어, 어떤 시점에서 데이터(625)가 스트라이프(620-1)에 로드되고 있다고 가정한다. 읽기 회로(605)는 데이터(625)를 판독할 수 있고, 오류 핸들러(630)는 데이터(625-1 및 625-2)가 올바른지 확인하기 위해 (예를 들어) 데이터(625-3)의 패리티 정보를 사용할 수 있다. 오류 핸들러(630)가 어딘가(데이터(625) 중 임의의 것일 수 있는) 오류가 있다고 결정하면, 오류 핸들러(630)는 데이터 스트라이프(620-1)가 버퍼(615)에 로드된 것으로 간주되기 전에 오류를 수정하려고 시도할 수 있다. 이러한 방식으로, 오류 핸들러(630)는 또한 데이터가 액세스되고 있을 때 에러 정정을 지원할 수 있다.
도 7은 본 발명의 실시 예에 따라 로드 요청이 도 1의 RAID 엔진(135)에 의해 어떻게 처리될 수 있는지를 보여준다. 도 7에서, 애플리케이션(305)은 로드 요청(705)을 전송할 수 있다. 로드 요청(705)은 바이트 주소(710)를 포함할 수 있으며, 이는 요청되는 데이터를 저장하는 바이트 주소를 지정한다. 바이트 주소(710)는 로드될 데이터의 가능한 크기뿐만 아니라 특정 주소를 식별하는 가능한 모든 형식을 나타내는 것으로 이해되어야 한다. 따라서, 예를 들어 바이트 주소(710)는 특정 주소를 직접 지정하고 한 바이트가 로드될 것임을 나타낼 수 있다. 또는 바이트 주소(710)는 블록에 대한 기본 주소(또는 해당 블록에 대한 기본 주소에 매핑될 수 있는 식별자), 해당 기본 주소로부터의 오프셋 및 로드할 바이트 수를 포함할 수 있다.
RAID 엔진(135)이 로드 요청(705)을 수신할 때, RAID 엔진(135)은 바이트 주소(710)를 포함하는 스트라이프가 현재 버퍼(615)에 로드되어 있는지를 결정할 수 있다. 그렇지 않다면, RAID 엔진(135)은 읽기 회로(605)를 사용하여 스토리지 장치(120)로부터 버퍼(615)로 스트라이프를 판독할 수 있다. 버퍼(615)가 이전에 가득 차 있었다면, RAID 엔진(135)은 위의 도 6을 참조하여 설명된 바와 같이 버퍼(615)로부터 축출할 스트라이프를 선택할 수 있다.
위의 도 6을 참조하여 논의된 바와 같이, 도 6의 오류 핸들러(630)는 스트라이프가 버퍼(615)에 로드될 때 데이터가 올바른지 확인하는 데 사용될 수 있다. 데이터(625)가 도 6의 읽기 회로(605)에 의해 판독될 때 오류를 포함하는 경우, 도 6의 오류 핸들러(630)는 스트라이프가 버퍼(615)에 완전히 로드되기 전에 이러한 오류를 수정하려고 시도할 수 있다(또는 오류가 수정되지 않을 수 있는 경우 읽기 실패를 보고할 수 있음).
바이트 주소(710)를 포함하는 스트라이프가 버퍼(615)에 로드되면, RAID 엔진(135)은 버퍼(615)의 스트라이프로부터 데이터에 액세스할 수 있다. RAID 엔진(135)은 데이터(715)를 다시 애플리케이션(305)으로 반환할 수 있다.
도 8은 본 발명의 실시 예에 따라 저장 요청이 도 1의 RAID 엔진(135)에 의해 어떻게 처리될 수 있는지를 도시한다. 도 8에서, 애플리케이션(305)은 저장 요청(805)을 전송할 수 있다. 저장 요청(805)은 요청되는 데이터를 저장하는 바이트 주소를 특정하는 바이트 주소(810) 및 저장될 데이터(815)를 포함할 수 있다. 도 7의 바이트 주소(710)와 마찬가지로, 바이트 주소(810)는 특정 주소를 식별하는 가능한 모든 형태와 로드될 데이터의 가능한 크기를 나타내는 것으로 이해되어야 한다. 따라서, 예를 들어 바이트 주소(810)는 특정 주소를 직접 지정하고 한 바이트가 로드될 것임을 나타낼 수 있다. 또는 바이트 주소(810)는 블록에 대한 기본 주소(또는 해당 블록에 대한 기본 주소에 매핑될 수 있는 식별자), 해당 기본 주소로부터의 오프셋 및 로드할 바이트 수를 포함할 수 있다.
RAID 엔진(135)이 저장 요청(805)을 수신할 때, RAID 엔진(135)은 바이트 주소(810)를 포함하는 스트라이프가 현재 버퍼(615)에 로드되어 있는지를 결정할 수 있다. 그렇지 않다면, RAID 엔진(135)은 읽기 회로(605)를 사용하여 스토리지 장치(120)로부터 버퍼(615)로 스트라이프를 판독할 수 있다. 버퍼(615)가 이전에 가득 차 있었다면, RAID 엔진(135)은 위의 도 6을 참조하여 설명된 바와 같이 버퍼(615)로부터 축출할 스트라이프를 선택할 수 있다.
위의 도 6을 참조하여 논의된 바와 같이, 도 6의 오류 핸들러(630)는 스트라이프가 버퍼(615)에 로드될 때 데이터가 올바른지 확인하는 데 사용될 수 있다. 데이터(625)가 도 6의 읽기 회로(605)에 의해 판독될 때 오류를 포함하는 경우, 도 6의 오류 핸들러(630)는 스트라이프가 버퍼(615)에 완전히 로드되기 전에 이러한 오류를 수정하려고 시도할 수 있다(또는 오류가 수정되지 않을 수 있는 경우 읽기 실패를 보고할 수 있음).
바이트 주소(815)를 포함하는 스트라이프가 버퍼(615)에 로드되면, RAID 엔진(135)은 데이터(815)를 사용하여 버퍼(615)의 스트라이프를 업데이트할 수 있다. 즉, 하나 이상의 데이터(625)가 데이터(815)를 사용하여 업데이트될 수 있다. 예를 들어, 데이터(815)가 데이터(625-1) 내에 완전히 맞으면 데이터(625-1)가 업데이트될 수 있다. 대안적으로, 데이터(815)가 여러 데이터(625)에 걸쳐 있을 만큼 충분히 큰 경우(예를 들어, 데이터(815)의 한 부분이 데이터(625-1)의 일부를 업데이트하고 데이터(815)의 다른 부분이 데이터(625-2)의 일부를 업데이트하는 경우), 그런 다음 여러 데이터(625)가 데이터(815)에 의해 업데이트될 수 있다. 또한, 데이터(625-1)를 포함하는 스트라이프가 미러링된 데이터 또는 패리티 정보를 포함하는 경우, 데이터(625-2 및/또는 625-3)는 데이터(625-1)를 업데이트하는 데이터(815)를 설명하기 위해 업데이트될 수도 있다.
RAID 엔진(135)이 버퍼(615)에 있는 스트라이프의 데이터를 업데이트한 후, RAID 엔진(135)은 결과(820)를 다시 애플리케이션(305)으로 반환할 수 있다.
버퍼(615)는 이제 스토리지 장치(120)에 아직 기록되지 않은 스트라이프에 데이터를 저장할 수 있으므로, 어떤 시점에서 RAID 엔진(135)은 버퍼(615)의 스트라이프에 대한 변경 사항을 스토리지 장치(120)에 기록할 수 있다. 따라서, 어떤 시점에서 RAID 엔진(135)은 도 6의 쓰기 회로(610)(및 아마도 도 6의 오류 핸들러(630))를 사용하여 업데이트된 스트라이프의 데이터를 스토리지 장치(120)에 실제로 기록할 수 있다.
본 발명의 일부 실시 예에서, RAID 엔진(135)은 도 6의 쓰기 회로(610)를 사용하여 버퍼(615)의 스트라이프의 데이터가 업데이트되자마자 업데이트된 스트라이프를 버퍼(615)에 기록할 수 있다. 본 발명의 일부 실시 예에서, 도 6의 쓰기 회로(610)는 RAID 엔진(135)이 애플리케이션(305)에 결과(820)를 반환하기 전에 업데이트 스트라이프의 데이터를 스토리지 장치(120)에 기록할 수 있다. 본 발명의 다른 실시 예에서, RAID 엔진(135)은 결과(820)를 애플리케이션(305)에 반환할 수 있고(그래서 애플리케이션(305)이 실행을 계속할 수 있도록), 도 6의 쓰기 회로(610)를 사용하여 업데이트된 스트라이프의 데이터를 스토리지 장치(120)에 기록할 수 있다. 본 발명의 또 다른 실시 예에서, RAID 엔진(135)은 데이터를 기록하는 것이 편리하거나 필요할 때까지 스토리지 장치(120)에 데이터를 기록하기 위해 도 6의 쓰기 회로(610)를 사용하는 것을 지연시킬 수 있다. 예를 들어, RAID 엔진(135)은 스토리지 장치(120)의 이용률이 감소할 때까지 대기할 수 있어서 스토리지 장치(120)에 발행된 쓰기 명령이 실행될 수 있는 다른 프로세스에 최소한의 영향을 미치면서(또는 전혀 영향을 주지 않고) 실행될 수 있다. 또는, 업데이트된 데이터를 포함하는 스트라이프가 버퍼(615)로부터의 축출을 위해 선택되면, RAID 엔진(135)은 기록이 더 이상 지연되지 않을 수 있기 때문에 업데이트된 스트라이프의 데이터를 스토리지 장치(120)에 기록하기 위해 도 6의 쓰기 회로(610)를 사용할 수 있다. RAID 엔진(135)이 결과(820)를 다시 애플리케이션(305)으로 보낼 때까지 RAID 엔진(135)이 스토리지 장치(120)에 대한 업데이트 기록을 지연시키는 경우, 버퍼 회로(615)는 데이터 손실을 유발하는 전원 중단을 방지하기 위해 백업 전원을 필요로 할 수 있다: 버퍼(615)에 대한 전력이 중단되면, RAID 엔진(135)은 그러한 업데이트가 손실되기 전에 임의의 업데이트된 데이터(저장 요청(805)에 의해 업데이트된 스트라이프와 같은)가 스토리지 장치(120)에 기록되도록 보장할 수 있다.
위의 모든 논의는 RAID 엔진(135)이 블록 레벨 프로토콜 요청이 아니라 바이트 레벨 프로토콜 요청을 처리할 수 있는 방법에 초점을 맞추고 있음에 유의해야 한다. 본 발명의 실시 예는 효과적으로 블록 레벨 프로토콜 요청과 바이트 레벨 프로토콜 요청을 동등하게 만들고, 둘 다 유사하게 처리될 수 있다. 다시 말해서, 본 발명의 실시 예는 바이트 레벨 프로토콜 요청을 (RAID 구현을 우회하지 않고 바이트 레벨 프로토콜 요청을 사용하여 데이터에 액세스할 수 있게 하는) 블록 레벨 프로토콜 요청으로 효과적으로 변환하며, 변환은 도 3의 애플리케이션(305)과 같은 상위 레벨 프로세스로부터 숨겨진다.
도 9는 본 발명의 실시 예에 따라, 도 1의 RAID의 초기화의 일부로서 RAID 구성을 로드하기 위한 예시적인 절차의 흐름도를 도시한다. 블록(905)에서, 도 1의 패브릭 관리자(140)는 RAID 구성을 로드할 수 있다. RAID 구성은 원하는 비휘발성 스토리지에 저장할 수 있다. 예를 들어, RAID 구성은 도 1의 스토리지 장치(120) 중 하나에 저장될 수 있다. 또는, RAID 구성은 도 1의 패브릭 관리자(140), 도 1의 RAID 엔진(140) 또는 도 1의 스위치(145)의 비휘발성 저장소와 같은 로컬 저장 영역에 저장될 수 있다. 이러한 비휘발성 스토리지의 예는 NAND 플래시 스토리지, ROM(read-only memory), PROM(programmable ROM), EPROM(erasable programmable ROM) 또는 EEPROM(electrically erasable programmable ROM); 다른 형태의 비휘발성 스토리지를 사용하여 RAID 구성을 저장할 수도 있다.
도 10은 본 발명의 실시 예에 따라 도 1의 RAID의 초기화를 수행하기 위한 예시적인 절차의 흐름도를 도시한다. 도 10의 블록(1005)에서, 도 1의 패브릭 관리자(140)는 RAID에 포함하기 위해 도 1의 스토리지 장치(120-1)를 식별할 수 있다. 전술한 바와 같이, 도 1의 스토리지 장치(120-1)는 캐시 일관성 상호 연결 프로토콜을 지원할 수 있다. 유사하게, 블록(1010)에서, 도 1의 패브릭 관리자(140)는 RAID에 포함하기 위해 도 1의 스토리지 장치(120-2)를 식별할 수 있다. 전술한 바와 같이, 도 1의 스토리지 장치(120-2)는 캐시 일관성 상호 연결 프로토콜을 지원할 수 있다.
블록(1015)에서, 도 1의 패브릭 관리자(140)는 도 1의 스토리지 장치(120-1)에 대한 도 5의 주소 범위(505-1)를 결정할 수 있다. 블록(1020)에서, 도 1의 패브릭 관리자(140)는 도 1의 스토리지 장치(120-2)에 대한 도 5의 주소 범위(505-2)를 결정할 수 있다. 마지막으로, 블록(1025)에서, 도 1의 패브릭 관리자(140)는 도 5의 주소 범위(505)에 기초하여 도 5의 RAID 주소 범위(510)를 생성할 수 있다.
도 11은 본 발명의 실시 예에 따라 도 5의 RAID 주소 범위(510)의 사용을 관리하기 위한 예시적인 절차의 흐름도를 도시한다. 도 11의 블록(1105)에서, 도 1의 패브릭 관리자(140)는 메모리 맵으로 도 5의 RAID 주소 범위(510)를 등록할 수 있고, 이에 따라, 도 1의 기계(105)(더 구체적으로, 도 1의 기계(105)과 상호 작용하는 프로세스)는 메모리 요청에 대해 이용 가능한 것으로서 도 5의 RAID 주소 범위(510)를 "볼(see)" 수 있다. 블록(1110)에서, 도 5의 주소 범위(505-1 및/또는 505-2)가 도 1의 기계(105)의 메모리 맵에 등록된 경우, 도 1의 패브릭 관리자(140)는 도 1의 기계(105)의 메모리 맵으로부터 도 1의 주소 범위(505)를 등록 해제할 수 있다. 블록(1110)은 도 1의 주소 범위(505)가 점선(1115)으로 도시된 바와 같이 도 1의 기계(105)의 메모리 맵에 이전에 등록되지 않은 경우 생략될 수 있음에 유의한다.
도 12는 본 발명의 실시 예에 따라 도 1의 RAID를 사용하여 로드 요청(705)을 처리하기 위한 예시적인 절차의 흐름도를 도시한다. 도 12의 블록(1205)에서, 도 1의 RAID 엔진(135)은 도 7의 로드 요청(705)을 수신할 수 있다. 위에서 도 7을 참조하여 논의된 바와 같이, 도 7의 로드 요청(705)은 도 7의 바이트 주소(710)를 포함할 수 있다. 블록(1210)에서, 도 1의 RAID 엔진(135)은 도 6의 버퍼(615), 즉, 도 7의 바이트 주소(710)에 데이터를 위치시킬(locate) 수 있다. 마지막으로, 블록(1215)에서, RAID 엔진은 도 6의 버퍼(615)로부터 추출된 도 7의 데이터(715)를 도 7의 로드 요청(705)을 발행한 프로세스로 반환할 수 있다.
도 13은 본 발명의 실시 예에 따라 도 7의 로드 요청(705)에서 요청된 데이터를 찾기 위한 예시적인 절차의 흐름도를 도시한다. 블록(1305)에서, 도 6의 읽기 회로(605)는 도 1의 스토리지 장치들(120)로부터 도 6의 데이터(625)를 판독할 수 있다. 도 1의 RAID 엔진(135)은 도 6의 스트라이프(620)에 있는 스토리지 장치(120)로부터 판독된 데이터(625)를 도 6의 버퍼(615)에 저장할 수 있다. 점선(1315)으로 도시된 바와 같이, 블록(1305 및 1310)은 도 1의 스토리지 장치(120)로부터 어떤 데이터가 판독되어야 하는지에 따라 두 번 이상 수행될 수 있음에 유의한다. 블록(1320)에서, 도 6의 오류 핸들러(630)는 도 6의 읽기 회로(605)에 의해 판독된 데이터가 에러를 포함하지 않는지(또는 가능한 경우 검출된 임의의 에러를 정정하는지)를 검증할 수 있다. 경우에 따라 오류 처리가 수행되지 않을 수 있다. 예를 들어 RAID 레벨 0 구성에서는 오류 수정을 수행하는 데 사용할 수 있는 리던던시가 없다. 이러한 상황에서 블록(1320)은 점선(1325)으로 도시된 바와 같이 생략될 수 있다. 마지막으로, 블록(1330)에서, 도 1의 RAID 엔진(135)은 도 7의 바이트 주소(710)를 사용하여 도 6의 버퍼(615)에서 도 6의 스트라이프(620)에 요청된 데이터를 위치시킬 수 있다.
도 14는 본 발명의 실시 예에 따라 도 1의 RAID를 사용하여 도 8의 저장 요청(805)을 처리하기 위한 예시적인 절차의 흐름도를 도시한다. 도 14의 블록(1405)에서, 도 1의 RAID 엔진(135)은 도 8의 저장 요청(805)을 수신할 수 있다. 위에서 도 8을 참조하여 논의된 바와 같이, 도 8의 저장 요청(805)은 도 8의 데이터(815) 및 도 8의 데이터(815)가 저장될 도 8의 바이트 어드레스(810)를 포함할 수 있다. 블록(1410)에서, 도 1의 RAID 엔진(135)은 도 8의 바이트 주소(810) 및 도 8의 데이터(815)에 기초하여 도 6의 버퍼(615)에서 도 6의 스트라이프(620)를 업데이트할 수 있다. 블록(1410)에서 RAID 엔진은 도 6의 버퍼(615)에 있는 도 6의 스트라이프(620)의 다른 데이터를 업데이트할 수도 있다. 예를 들어, 미러링된 데이터 및/또는 패리티 정보도 업데이트할 수 있다. 마지막으로, 블록(1415)에서, 도 1의 RAID 엔진(135)은 도 8의 저장 요청(805)을 발행한 프로세스에 도 8의 결과(820)를 반환할 수 있다.
도 15는 본 발명의 실시 예에 따라 도 6의 버퍼(615)에 데이터를 저장하는 것을 처리하기 위한 예시적인 절차의 흐름도를 도시한다. 도 15의 블록(1505)에서, 읽기 회로(605)는 도 1의 스토리지 장치(120)로부터 도 6의 데이터(625)를 판독하여 도 6의 버퍼(615)에 도 6의 스트라이프(620)를 저장할 수 있다. 업데이트될 데이터를 포함하는 도 6의 스트라이프(620)가 파선(1510)에 의해 도시된 바와 같이 이미 도 6의 버퍼(615)에 로드될 때 블록(1505)은 생략될 수 있다. 블록(1515)에서, 도 1의 RAID 엔진(135)은 도 8의 바이트 어드레스(810) 및 도 8의 데이터(815)에 기초하여 도 6의 버퍼(615) 내의 도 6의 스트라이프(620)의 데이터를 업데이트할 수 있다. 블록(1520)에서, 도 1의 RAID 엔진(135)은 업데이트된 데이터를 전력 중단으로부터 보호할 수 있다. 이러한 보호는 예를 들어 백업 전원에 의해 제공되어 도 6의 버퍼(615)의 데이터가 스토리지 장치(120)에 기록될 수 있도록 보장할 수 있다. 도 6의 버퍼(615)의 업데이트된 스트라이프가 도 1의 스토리지 장치(120)에 기록된 후까지 도 8의 저장 동작(805)이 완료된 것으로 간주되지 않으면, 블록(1520)은 점선(1525)으로 도시된 바와 같이 생략될 수 있다. 마지막으로, 도 6의 RAID 엔진(135)이 블록(1515)에서 설명한 바와 같이 도 6의 버퍼(615)에서 도 6의 스트라이프(620)의 데이터를 업데이트한 후 일정 시간이 될 수 있는 블록(1530)에서, 도 6의 쓰기 회로(610)는 도 6의 버퍼(615)에 있는 도 6의 스트라이프(620)의 업데이트된 데이터를 도 1의 스토리지 장치(120)에 기록할 수 있다.
도 9 내지 도 15에서, 본 발명의 일부 실시 예가 도시된다. 그러나 당업자는 블록의 순서를 변경하거나, 블록을 생략하거나, 도면에 도시되지 않은 링크를 포함함으로써, 본 발명의 다른 실시 예가 또한 가능하다는 것을 인식할 것이다. 이러한 순서도의 모든 변형은 명시적으로 기술되었는지 여부에 상관없이 본 발명의 실시 예로 간주된다.
본 발명의 실시 예는 캐시 일관성 상호 연결 프로토콜 스토리지 장치에 저장된 데이터에 대한 처리 바이트 레벨 프로토콜 요청을 지원할 수 있는 중복 배열 독립 디스크(RAID) 엔진을 포함한다. RAID 엔진은 RAID 구성에서 스토리지 장치의 데이터에 액세스하는 바이트 레벨 프로토콜 요청을 식별할 수 있다. 데이터는 요청된 특정 데이터가 검색되고 반환될 수 있는 버퍼로 로드될 수 있다. 본 발명의 실시 예는 RAID 구성에 포함된 스토리지 장치에 저장된 데이터에 대한 바이트 레벨 요청을 처리하도록 설비되지 않은 구성에 비해 기술적 이점을 제공한다.
Compute Express Link(CXL) 솔리드 스테이트 드라이브(SSD)는 블록 장치로 노출될 수 있다. 그런 다음 사용자는 CXL 블록 장치 인터페이스를 사용하여 RAID(Redundant Array of Independent Disks)의 일부로 CXL SSD를 사용할 수 있다.
그러나 CXL SSD가 RAID 어레이의 일부인 경우 잠재적인 문제가 있다. 첫째, RAID 어레이의 개별 SSD에 쓰면 RAID 어레이의 데이터를 읽을 수 없게 될 수 있다. 둘째, RAID 어레이의 일부가 아닌 개별 SSD에서 데이터를 읽는 경우 사용된 RAID 레벨에서 제공하는 패리티를 사용하여 데이터를 확인하지 못할 수 있다.
또한 CXL.mem(또는 CXL.memory) 경로는 자체적으로 RAID를 지원하지 않는다. 소프트웨어를 사용하여 RAID 어레이의 각 개별 CXL 장치를 매핑하고 소프트웨어를 체크인하는 것은 느리고 상당한 양의 소프트웨어 적응이 필요한다.
이러한 문제를 해결하기 위해, 본 발명의 실시 예는 CXL.mem 경로에 대한 도 1의 하드웨어 RAID 엔진(135)을 포함할 수 있다. 본 발명의 실시 예를 사용하여, 하드웨어 RAID 엔진에 의해 제공되는 주소 범위를 사용하기 위해 소프트웨어가 사용될 수 있다.
본 발명의 실시 예의 장점은 CXL.mem 경로 및 CXL.io 경로 모두에서 RAID를 지원하는 방법과 RAID 기능을 사용하여 CXL.mem 경로 오류를 감지 및 복구하는 기능을 포함한다. 애플리케이션 변경이 필요하지 않으며 새 아키텍처에서 안정성이 향상될 수 있다.
본 발명의 실시 예는 CXL.mem 경로를 사용하여 RAID 구성을 지원한다. 본 발명의 실시 예는 소프트웨어 복잡성을 감소시킬 수 있고, 애플리케이션 변경 또는 재컴파일을 피할 수 있다. 또한 CXL.mem을 사용하는 애플리케이션의 안정성이 향상될 수 있다. 마지막으로 일부 RAID 구성에서는 장치 간에 트래픽을 분산하여 성능을 향상시킬 수 있다.
다음 논의는 본 발명의 특정 측면이 구현될 수 있는 적절한 기계 또는 기계들에 대한 간략하고 일반적인 설명을 제공하기 위한 것이다. 기계 또는 기계들은 적어도 부분적으로 키보드, 마우스 등과 같은 기존 입력 장치의 입력뿐만 아니라 다른 기계로부터 수신된 지시, 가상 현실(VR) 환경과의 상호 작용, 생체 인식, 피드백 또는 기타 입력 신호에 의해 제어될 수 있다. 본 명세서에서 사용되는 바와 같이, "머신"이라는 용어는 단일 머신, 가상 머신, 또는 통신적으로 결합된 머신, 가상 머신 또는 함께 작동하는 장치의 시스템을 광범위하게 포함하도록 의도된다. 예시적인 기계는 개인용 컴퓨터, 워크스테이션, 서버, 휴대용 컴퓨터, 핸드헬드 장치, 전화, 태블릿 등과 같은 컴퓨팅 장치뿐만 아니라 자동차, 기차, 택시 등과 같은 개인 또는 대중 교통과 같은 운송 장치를 포함한다.
머신 또는 머신들은 프로그래밍 가능 또는 프로그래밍 불가능 논리 장치 또는 어레이, ASIC(Application Specific Integrated Circuits), 임베디드 컴퓨터, 스마트 카드 등과 같은 임베디드 컨트롤러를 포함할 수 있다. 기계 또는 기계들은 네트워크 인터페이스, 모뎀 또는 기타 통신 결합을 통한 것과 같이 하나 이상의 원격 기계에 대한 하나 이상의 연결을 이용할 수 있다. 기계는 인트라넷, 인터넷, 근거리 통신망, 광역 통신망 등과 같은 물리적 및/또는 논리적 네트워크를 통해 상호 연결될 수 있다. 당업자는 네트워크 통신이 다양한 유선 및/또는 무선 단거리 또는 장거리 캐리어 및 프로토콜(무선 주파수(RF), 위성, 마이크로웨이브, 전기전자공학회(IEEE) 802.11, Bluetooth®, 광학, 적외선, 케이블, 레이저 등)을 이용할 수 있음을 이해할 것이다.
본 발명의 실시 예는 기계에 의해 액세스될 때 기계가 작업을 수행하거나 추상적 데이터 유형을 정의하게 되는 기능, 또는 저레벨 하드웨어 컨텍스트, 절차, 데이터 구조, 애플리케이션 프로그램 등을 포함하는 관련 데이터를 참조하거나 이와 관련하여 설명될 수 있다. 관련 데이터는 예를 들어 휘발성 및/또는 비휘발성 메모리(예를 들어, RAM, ROM 등) 또는 하드 드라이브, 플로피 디스크, 광 스토리지 장치, 테이프, 플래시 메모리, 메모리 스틱, 디지털 비디오 디스크, 생물학적 스토리지 장치 등을 포함하는 다른 스토리지 장치 및 관련 저장 매체에 저장될 수 있다. 관련 데이터는 패킷, 직렬 데이터, 병렬 데이터, 전파 신호 등의 형태로 물리적 및/또는 논리적 네트워크를 포함하는 전송 환경을 통해 전달될 수 있으며 압축 또는 암호화된 형식으로 사용될 수 있다. 연결된 데이터는 분산 환경에서 사용될 수 있으며 기계 액세스를 위해 로컬 및/또는 원격으로 저장될 수 있다.
본 발명의 실시 예는 하나 이상의 프로세서에 의해 실행 가능한 명령을 포함하는 유형의 비일시적 기계 읽기 가능 매체를 포함할 수 있으며, 명령은 여기에 설명된 바와 같은 개시의 요소를 수행하기 위한 명령을 포함한다.
전술한 방법의 다양한 동작은 다양한 하드웨어 및/또는 소프트웨어 컴포넌트(들), 회로 및/또는 모듈(들)과 같은 동작을 수행할 수 있는 임의의 적절한 수단에 의해 수행될 수 있다. 소프트웨어는 논리 기능을 구현하기 위한 실행 가능한 명령의 정렬된 목록을 포함할 수 있으며 명령 실행 시스템, 장치 또는 단일 또는 다중 코어 프로세서 또는 프로세서 포함 시스템과 같은 장치에 의해 또는 이와 관련하여 사용하기 위한 임의의 "프로세서 읽기 가능 매체"로 구현될 수 있다.
본 명세서에 개시된 실시 예와 관련하여 설명된 방법 또는 알고리즘의 블록 또는 단계 및 기능은 하드웨어, 프로세서에 의해 실행되는 소프트웨어 모듈 또는 이 둘의 조합으로 직접 구현될 수 있다. 소프트웨어로 구현되는 경우 기능은 유형의 비일시적 컴퓨터 읽기 가능 매체에 하나 이상의 명령 또는 코드로 저장되거나 전송될 수 있다. 소프트웨어 모듈은 RAM(Random Access Memory), 플래시 메모리, ROM(Read Only Memory), EPROM(Electrically Programmable ROM), EEPROM(Electrically Erasable Programmable ROM), 레지스터, 하드 디스크, 이동식 디스크, CD ROM, 또는 당업계에 알려진 임의의 다른 형태의 저장 매체에 상주할 수 있다.
예시된 실시 예를 참조하여 본 발명의 원리를 설명하고 예시하였지만, 예시된 실시 예는 이러한 원리를 벗어나지 않고 배열 및 세부 사항에서 수정될 수 있고 임의의 원하는 방식으로 결합될 수 있음을 인식할 것이다. 그리고, 전술한 논의는 특정 실시 예에 초점을 맞추었지만, 다른 구성이 고려된다. 특히, 본 명세서에서 "본 발명의 일 실시 예에 따른" 등과 같은 표현이 사용되더라도, 이러한 문구는 일반적으로 실시 예 가능성을 언급하는 것을 의미하며, 본 발명을 특정 실시 예 구성으로 제한하려는 의도가 아니다. 본 명세서에서 사용된 바와 같이, 이들 용어는 다른 실시 예로 결합 가능한 동일하거나 상이한 실시 예를 지칭할 수 있다.
전술한 예시적인 실시 예는 그 개시를 제한하는 것으로 해석되어서는 안 된다. 몇 가지 실시 예가 설명되었지만, 당업자는 본 발명의 새로운 교시 및 이점으로부터 실질적으로 벗어나지 않고 이러한 실시 예에 대한 많은 수정이 가능하다는 것을 쉽게 이해할 것이다. 따라서, 이러한 모든 수정은 청구항에 정의된 바와 같이 본 발명의 범위 내에 포함되도록 의도된다.
본 발명의 실시 예는 제한 없이 다음 진술로 확장될 수 있다.
진술 1. 본 발명의 실시 예는 다음을 포함하는 시스템을 포함한다:
블록 레벨 프로토콜 및 바이트 레벨 프로토콜을 포함하는 캐시 일관성 상호 연결 프로토콜을 지원하는 제1 스토리지 장치;
상기 캐시 일관성 상호 연결 프로토콜을 지원하는 제2 스토리지 장치; 및
상기 제1 스토리지 장치 및 상기 제2 스토리지 장치와 통신하는 RAID(Redundant Array of Independent Disk) 회로,
상기 제1 스토리지 장치 및 상기 제2 스토리지 장치에 RAID 레벨을 적용하는 상기 RAID 회로,
상기 바이트 레벨 프로토콜을 사용하여 요청을 수신하고 상기 제1 스토리지 장치의 데이터에 액세스하도록 구성된 RAID 회로.
진술 2. 본 발명의 실시 예는 진술 1에 따른 시스템을 포함하고, 상기 RAID 회로는 상기 바이트 레벨 프로토콜을 사용하여 요청을 수신하고 상기 RAID 레벨을 유지하면서 상기 제1 스토리지 장치 상의 데이터에 액세스하도록 구성된다.
진술 3. 본 발명의 실시 예는 진술 1에 따른 시스템을 포함하며, 상기 시스템은 프로세서를 더 포함하고, 상기 프로세서는 상기 RAID 회로에 전송된 상기 요청을 발행하도록 구성된다.
진술 4. 본 발명의 실시 예는 진술 1에 따른 시스템을 포함하며, 상기 캐시 일관성 상호 연결 프로토콜은 CXL(Compute Express Link) 프로토콜을 포함한다.
진술 5. 본 발명의 실시 예는 진술 1에 따른 시스템을 포함하며, 여기서:
상기 제1 스토리지 장치는 제1 SSD(Solid State Drive)(120)를 포함하고; 및
상기 제2 스토리지 장치는 제2 SSD를 포함한다.
진술 6. 본 발명의 실시 예는 진술 1에 따른 시스템을 포함하고, 캐시 일관성 상호 연결 스위치를 더 포함하고, 상기 캐시 일관성 상호 연결 스위치는 상기 제1 스토리지 장치, 상기 제2 스토리지 장치 및 상기 RAID 회로에 연결된다.
진술 7. 본 발명의 실시 예는 진술 6에 따른 시스템을 포함하며, 상기 캐시 일관성 상호 연결 스위치는 상기 RAID 회로를 포함한다.
진술 8. 본 발명의 실시 예는 진술 1에 따른 시스템을 포함하며, 여기서 상기 RAID 회로는 RAID 레벨 0, RAID 레벨 1, RAID 레벨 5 또는 RAID 레벨 6 중 적어도 하나를 지원하도록 구성된다.
진술 9. 본 발명의 실시 예는 진술 1에 따른 시스템을 포함하며, 여기서:
상기 시스템은 제1 슬롯 및 제2 슬롯을 포함하는 회로 기판을 더 포함하고;
상기 제1 스토리지 장치는 상기 제1 슬롯에 설치되고; 및
상기 제2 스토리지 장치는 상기 제2 슬롯에 설치된다.
진술 10. 본 발명의 실시 예는 진술 9에 따른 시스템을 포함하며, 여기서:
상기 회로 기판은 제3 슬롯을 더 포함하고; 및
상기 RAID 회로는 제3 슬롯에 설치된다.
진술 11. 본 발명의 실시 예는 진술 10에 따른 시스템을 포함하고, 캐시 일관성 상호 연결 스위치를 더 포함하고, 상기 캐시 코히런트 인터커넥트 스위치는 상기 제1 스토리지 장치, 상기 제2 스토리지 장치 및 상기 RAID 회로에 연결되고, 상기 캐시 코히런트 인터커넥트 스위치는 상기 제3 슬롯에 설치되며, 상기 캐시 코히런트 인터커넥트 스위치는 상기 RAID 회로를 포함한다.
진술 12. 본 발명의 실시 예는 진술 10에 따른 시스템을 포함하며, 여기서:
상기 회로 기판은 제4 슬롯을 더 포함하고; 및
상기 시스템은 캐시 일관성 상호 연결 스위치를 더 포함하고, 상기 캐시 코히런트 상호 연결 스위치는 상기 제1 스토리지 장치, 상기 제2 스토리지 장치 및 상기 RAID 회로에 연결되고, 상기 캐시 일관성 상호 연결 스위치는 제4 슬롯에 설치된다.
진술 13. 본 발명의 실시 예는 진술 1에 따른 시스템을 포함하며, 상기 RAID 회로를 구성하기 위한 패브릭 관리자를 더 포함한다.
진술 14. 본 발명의 실시 예는 진술 13에 따른 시스템을 포함하며, 상기 패브릭 관리자는 상기 제1 스토리지 장치 및 상기 제2 스토리지 장치를 식별하고 RAID 레벨을 사용하도록 상기 RAID 회로를 구성하도록 구성된다.
진술 15. 본 발명의 실시 예는 진술 13에 따른 시스템을 포함하고, 상기 패브릭 관리자는 상기 제1 스토리지 장치의 제1 주소 범위 및 상기 제2 스토리지 장치의 제2 주소 범위를 결정하고 상기 제1 주소 범위 및 상기 제2 주소 범위를 RAID 주소 범위에 매핑하도록 구성된다.
진술 16. 본 발명의 실시 예는 진술 15에 따른 시스템을 포함하고, 여기서 상기 패브릭 관리자는 프로세서에 액세스 가능한 상기 RAID 주소 범위를 결정하도록 더 구성된다.
진술 17. 본 발명의 실시 예는 진술 16에 따른 시스템을 포함하고, 여기서 상기 패브릭 관리자는 상기 RAID 주소 범위를 메모리 맵에 추가하도록 추가로 구성된다.
진술 18. 본 발명의 실시 예는 진술 16에 따른 시스템을 포함하고, 여기서 상기 제1 주소 범위 및 상기 제2 주소 범위는 상기 프로세서로부터 숨겨진다.
진술 19. 본 발명의 실시 예는 진술 1에 따른 시스템을 포함하며, 여기서 상기 RAID 회로는 버퍼를 포함한다.
진술 20. 본 발명의 실시 예는 진술 19에 따른 시스템을 포함하고, 상기 버퍼에 백업 전력을 제공하도록 구성된 백업 전력원을 더 포함한다.
진술 21. 본 발명의 실시 예는 진술 20에 따른 시스템을 포함하며, 상기 백업 전원은 배터리 또는 커패시터를 포함한다.
진술 22. 본 발명의 실시 예는 진술 19에 따른 시스템을 포함하고, 상기 RAID 회로는 로드 요청에 적어도 부분적으로 기초하여 상기 버퍼로부터 데이터를 반환하도록 구성되고, 상기 로드 요청은 바이트 주소를 포함한다.
진술 23. 본 발명의 실시 예는 진술 22에 따른 시스템을 포함하고, 상기 로드 요청은 바이트 레벨 프로토콜 로드 요청을 포함한다.
진술24. 본 발명의 실시 예는 진술 22에 따른 시스템을 포함하며, 프로세서를 더 포함하고, 상기 프로세서는 상기 RAID 회로에 전송된 상기 로드 요청을 발행하도록 구성된다.
진술 25. 본 발명의 실시 예는 진술 22에 따른 시스템을 포함하고, 상기 RAID 회로는 읽기 회로를 더 포함하고, 상기 읽기 회로는 적어도 부분적으로 상기 바이트 주소 및 상기 RAID 회로의 RAID 레벨에 기초하여 상기 제1 스토리지 장치로부터 상기 버퍼로 제2 데이터를 판독하고 상기 제2 스토리지 장치로부터 상기 버퍼로 제3 데이터를 판독하도록 구성된다.
진술 26. 본 발명의 실시 예는 진술 25에 따른 시스템을 포함하며, 여기서 상기 제2 데이터는 상기 데이터를 포함한다.
진술 27. 본 발명의 실시 예는 진술 26에 따른 시스템을 포함하고, 여기서:
상기 데이터는 제1 부분 및 제2 부분을 포함하고,
상기 제2 데이터는 상기 데이터의 상기 제1 부분을 포함하고; 및
상기 제3 데이터는 상기 데이터의 상기 제2 부분을 포함한다.
진술 28. 본 발명의 실시 예는 진술 25에 따른 시스템을 포함하며, 상기 RAID 회로는 오류 핸들러를 더 포함하고, 상기 오류 핸들러는 상기 제2 데이터를 검증하기 위해 상기 제3 데이터의 패리티 정보를 사용하도록 구성된다.
진술 29. 본 발명의 실시 예는 진술 19에 따른 시스템을 포함하고, 여기서 상기 RAID 회로는 저장 요청에 적어도 부분적으로 기초하여 상기 버퍼에 데이터를 기록하도록 구성되고, 상기 저장 요청은 바이트 주소 및 상기 데이터를 포함한다.
진술 30. 본 발명의 실시 예는 진술 29에 따른 시스템을 포함하고, 상기 저장 요청은 바이트 레벨 프로토콜 저장 요청을 포함한다.
진술 31. 본 발명의 실시 예는 진술 29에 따른 시스템을 포함하고, 프로세서를 더 포함하고, 상기 프로세서는 상기 RAID 회로에 전송된 상기 저장 요청을 발행하도록 구성된다.
진술 32. 본 발명의 실시 예는 진술 29에 따른 시스템을 포함하며, 상기 RAID 회로는 쓰기 회로를 더 포함하고, 상기 쓰기 회로는 RAID 회로의 RAID 레벨 및 바이트 주소에 적어도 부분적으로 기초하여 상기 버퍼로부터의 제2 데이터를 상기 제1 스토리지 장치에 기록하고 상기 버퍼로부터의 제3 데이터를 상기 제2 스토리지 장치에 기록하도록 구성된다.
진술 33. 본 발명의 실시 예는 진술 32에 따른 시스템을 포함하고, 상기 RAID 회로는 오류 핸들러를 더 포함하고, 상기 오류 핸들러는 상기 제2 데이터를 검증하기 위해 상기 제3 데이터에 패리티 정보를 기록하도록 구성된다.
진술 34. 본 발명의 실시 예는 진술 29에 따른 시스템을 포함하고,
상기 RAID 회로는 읽기 회로를 더 포함하고, 상기 읽기 회로는 적어도 부분적으로 상기 바이트 주소 및 상기 RAID 회로의 RAID 레벨에 기초하여 상기 제1 스토리지 장치로부터 상기 버퍼로 제2 데이터를 판독하고 상기 제2 스토리지 장치로부터 상기 버퍼로 제3 데이터를 판독하도록 구성된다.
진술 35. 본 발명의 실시 예는 진술 34에 따른 시스템을 포함하며, 여기서 상기 제2 데이터는 상기 데이터로 대체될 제4 데이터를 포함한다.
진술 36. 본 발명의 실시 예는 진술 34에 따른 시스템을 포함하며, 여기서:
상기 데이터는 제1 부분과 제2 부분을 포함한다.
상기 제2 데이터는 상기 데이터의 상기 제1 부분으로 교체될 제4 데이터를 포함하고; 및
상기 제3 데이터는 데이터의 상기 제2 부분으로 대체될 제5 데이터를 포함한다.
진술 37. 본 발명의 실시 예는 진술 34에 따른 시스템을 포함하며, 상기 RAID 회로는 오류 핸들러를 더 포함하고, 상기 오류 핸들러는 상기 제2 데이터를 검증하기 위해 상기 제3 데이터의 패리티 정보를 사용하도록 구성된다.
진술 38. 본 발명의 실시 예는 진술 1에 따른 시스템을 포함하고, 컴퓨팅 모듈을 더 포함하고, 상기 컴퓨팅 모듈은 상기 RAID 회로를 통해 상기 제1 스토리지 장치 또는 상기 제2 스토리지 장치로부터 데이터에 액세스하도록 구성된다.
진술 39. 본 발명의 실시 예는 다음을 포함하는 방법을 포함한다:
캐시 일관된 상호 연결 프로토콜을 지원하는 제1 스토리지 장치를 식별하는 단계;
상기 캐시 일관된 상호 연결 프로토콜을 지원하는 제2 스토리지 장치를 식별하는 단계;
상기 제1 스토리지 장치의 제1 주소 범위를 결정하는 단계;
상기 제2 스토리지 장치의 제2 주소 범위를 결정하는 단계; 및
상기 제1 주소 범위 및 상기 제2 주소 범위에 적어도 부분적으로 기초하여 RAID 회로에 대한 RAID(Redundant Array of Independent Disks) 주소 범위를 생성하는 단계.
진술 40. 본 발명의 실시 예는 진술 39에 따른 방법을 포함하고, 상기 RAID 회로를 포함하는 시스템의 메모리 맵에 상기 RAID 주소 범위를 등록하는 단계를 더 포함한다.
진술 41. 본 발명의 실시 예는 진술 40에 따른 방법을 포함하고, 상기 메모리 맵으로 상기 제1 주소 범위 및 상기 제2 주소 범위를 등록 취소하는 단계를 더 포함한다.
진술 42. 본 발명의 실시 예는 진술 39에 따른 방법을 포함하고, 비휘발성 스토리지로부터 RAID 구성을 로딩하는 단계를 더 포함한다.
진술 43. 본 발명의 실시 예는 다음을 포함하는 방법을 포함한다:
RAID(Redundant Array of Independent Disks) 회로에서 바이트 주소를 포함하는 로드 요청을 수신하는 단계;
상기 바이트 주소에 적어도 부분적으로 기초하여 상기 RAID 회로의 버퍼에 데이터를 위치시키는 단계; 및
상기 RAID 회로에서 데이터를 반환하는 단계.
진술 44. 본 발명의 실시 예는 진술 43에 따른 방법을 포함하고, 상기 로드 요청은 바이트 레벨 프로토콜 로드 요청을 포함한다.
진술 45. 본 발명의 실시 예는 진술 43에 따른 방법을 포함하며, 여기서:
상기 RAID 회로에서 상기 로드 요청을 수신하는 단계은 상기 RAID 회로에서 프로세서로부터 상기 로드 요청을 수신하는 단계를 포함하고; 및
상기 RAID 회로에서 상기 데이터를 반환하는 단계는 상기 RAID 회로에서 상기 프로세서로 상기 데이터를 반환하는 단계를 포함한다.
진술 46. 본 발명의 실시 예는 진술 43에 따른 방법을 포함하며, 상기 RAID 회로의 상기 버퍼에서 상기 바이트 주소에 대한 상기 데이터를 위치시키는 단계는 다음을 포함한다:
캐시 일관성 상호 연결 프로토콜을 지원하는 상기 제1 스토리지 장치로부터 제2 데이터를 판독하는 단계;
캐시 일관성 상호 연결 프로토콜을 지원하는 상기 제2 스토리지 장치로부터 제3 데이터를 판독하는 단계;
상기 버퍼에 상기 제2 데이터를 저장하는 단계; 및
상기 제3 데이터를 버퍼에 저장하는 단계.
진술 47. 본 발명의 실시 예는 진술 46에 따른 방법을 포함하며, 상기 RAID 회로의 상기 버퍼에서 상기 바이트 주소에 대한 상기 데이터를 위치시키는 단계는 상기 제2 데이터에서 상기 데이터를 위치시키는 단계를 더 포함한다.
진술 48. 본 발명의 실시 예는 진술 47에 따른 방법을 포함하고, 여기서 상기 제2 데이터에 상기 데이터를 위치시키는 단계는 상기 제2 데이터에 대한 주소 범위에 상기 바이트 주소를 위치시키는 단계를 포함한다.
진술 49. 본 발명의 실시 예는 진술 46에 따른 방법을 포함하며, 여기서:
데이터는 제1 부분과 제2 부분을 포함한다.
제2 데이터는 데이터의 제1 부분을 포함하고; 및
제3 데이터는 데이터의 제2 부분을 포함한다.
진술 50. 본 발명의 실시 예는 진술 46에 따른 방법을 포함하며, RAID 회로의 버퍼에서 바이트 주소에 대한 데이터를 위치시키는 단계는 제3 데이터의 패리티 정보를 사용하여 제2 데이터를 검증하는 단계를 더 포함한다.
진술 51. 본 발명의 실시 예는 다음을 포함하는 방법을 포함한다:
RAID(Redundant Array of Independent Disks) 회로에서 바이트 주소 및 제1 데이터를 포함하는 저장 요청을 수신하는 단계;
업데이트된 제2 데이터를 생성하기 위해 상기 바이트 주소 및 상기 제1 데이터에 적어도 부분적으로 기초하여 상기 RAID 회로의 버퍼에서 제2 데이터를 업데이트하는 단계; 및
상기 RAID 회로에서 결과를 반환하는 단계.
진술 52. 본 발명의 실시 예는 진술 51에 따른 방법을 포함하고, 여기서 상기 저장 요청은 바이트 레벨 프로토콜 저장 요청을 포함한다.
진술 53. 본 발명의 실시 예는 진술 51에 따른 방법을 포함하며, 여기서:
상기 RAID 회로에서 상기 저장 요청을 수신하는 단계는 프로세서로부터 RAID 회로에서 로드 요청을 수신하는 단계를 포함하고; 및
RAID 회로에서 결과를 반환하는 단계는 RAID 회로에서 프로세서로 결과를 반환하는 단계를 포함한다.
진술 54. 본 발명의 실시 예는 진술 51에 따른 방법을 포함하고, 업데이트된 제2 데이터를 캐시 일관성 상호 연결 프로토콜을 지원하는 제1 스토리지 장치에 기록하는 단계를 더 포함한다.
진술 55. 본 발명의 실시 예는 선언문 54에 따른 방법을 포함하고, 업데이트된 제2 데이터를 캐시 일관성 있는 상호 연결 프로토콜을 지원하는 제1 스토리지 장치에 기록하는 단계는 업데이트된 제2 데이터를 상기 RAID 회로로부터의 결과 반환에 적어도 부분적으로 기초하여 캐시 일관성 있는 상호 연결 프로토콜을 지원하는 제1 스토리지 장치에 기록하는 단계를 포함한다.
진술 56. 본 발명의 실시 예는 진술 55에 따른 방법을 포함하고,
업데이트된 제2 데이터를 RAID 회로로부터의 결과 반환에 적어도 부분적으로 기초하여 캐시 일관성 있는 상호 연결 프로토콜을 지원하는 제1 스토리지 장치에 기록하는 단계는 백업 전원을 사용하여 버퍼에 대한 전력 중단으로부터 보호하는 단계를 포함한다.
진술 57. 본 발명의 실시 예는 진술 51에 따른 방법을 포함하며, 다음을 더 포함한다: 업데이트된 제3 데이터를 생성하기 위해 제1 데이터에 적어도 부분적으로 기초하여 RAID 회로의 버퍼에서 제3 데이터를 업데이트하는 단계; 및
업데이트된 제3 데이터를 캐시 일관성 상호 연결 프로토콜을 지원하는 제2 스토리지 장치에 기록한다.
진술 58. 본 발명의 실시 예는 진술 57에 따른 방법을 포함하고, 업데이트된 제3 데이터를 생성하기 위해 제1 데이터에 적어도 부분적으로 기초하여 RAID 회로의 버퍼에서 제3 데이터를 업데이트하는 단계는 제1 데이터에 적어도 부분적으로 기초하여 업데이트된 제3 데이터로서 패리티 정보를 생성하는 단계를 포함한다.
진술 59. 본 발명의 실시 예는 진술 57에 따른 방법을 포함하고, 상기 제2 스토리지 장치로부터 상기 버퍼로 상기 제3 데이터를 판독하는 단계를 더 포함한다.
진술 60. 본 발명의 실시 예는 진술 51에 따른 방법을 포함하고, 상기 제1 스토리지 장치로부터 상기 버퍼로 상기 제2 데이터를 판독하는 단계를 더 포함한다.
진술 61. 본 발명의 실시 예는 비일시적 저장 매체를 포함하는 물품을 포함하며, 비일시적 저장 매체는 기계에 의해 실행될 때 다음을 초래하는 명령어를 저장한다:
캐시 일관된 상호 연결 프로토콜을 지원하는 제1 스토리지 장치를 식별하는 단계;
캐시 일관된 상호 연결 프로토콜을 지원하는 제2 스토리지 장치를 식별하는 단계;
상기 제1 스토리지 장치의 제1 주소 범위를 결정하는 단계;
상기 제2 스토리지 장치의 제2 주소 범위를 결정하는 단계; 및
제1 주소 범위 및 제2 주소 범위에 적어도 부분적으로 기초하여 RAID 회로에 대한 RAID(Redundant Array of Independent Disks) 주소 범위를 생성하는 단계.
진술 62. 본 발명의 실시 예는 진술 61에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때 RAID 회로를 포함하는 시스템의 메모리 맵에 RAID 주소 범위를 등록하게 되는 추가 명령을 저장하고 있다.
진술 63. 본 발명의 실시 예는 진술 62에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때 메모리 맵에 제1 주소 범위 및 제2 주소 범위를 등록 취소하는 추가 명령을 저장하고 있다.
진술 64. 본 발명의 실시 예는 진술 61에 따른 물품을 포함하고, 비일시적 저장 매체에는 기계에 의해 실행될 때 비휘발성 스토리지 장치에서 RAID 구성을 로드하는 추가 명령이 저장되어 있다.
진술 65. 본 발명의 실시 예는 비일시적 저장 매체를 포함하는 물품을 포함하며, 비일시적 저장 매체는 머신에 의해 실행될 때 다음과 같은 결과를 초래하는 명령어를 저장한다:
RAID(Redundant Array of Independent Disks) 회로에서 바이트 주소를 포함하는 로드 요청을 수신하는 단계;
바이트 주소에 적어도 부분적으로 기초하여 RAID 회로의 버퍼에 데이터를 위치시키는 단계; 및
RAID 회로에서 데이터를 반환하는 단계.
진술 66. 본 발명의 실시 예는 진술 65에 따른 물품을 포함하고, 상기 로드 요청은 바이트 레벨 프로토콜 로드 요청을 포함한다.
진술 67. 본 발명의 실시 예는 진술 65에 따른 물품을 포함하며, 여기서:
RAID 회로에서 로드 요청을 수신하는 단계는 프로세서로부터 RAID 회로에서 로드 요청을 수신하는 단계를 포함하고; 및
RAID 회로에서 데이터를 반환하는 단계는 RAID 회로에서 프로세서로 데이터를 반환하는 단계를 포함한다.
진술 68. 본 발명의 실시 예는 진술 65에 따른 물품을 포함하며, RAID 회로의 버퍼에서 바이트 주소에 대한 데이터를 위치시키는 단계는 다음을 포함한다:
캐시 일관성 상호 연결 프로토콜을 지원하는 제1 스토리지 장치로부터 제2 데이터를 판독하는 단계;
캐시 일관성 상호 연결 프로토콜을 지원하는 제2 스토리지 장치로부터 제3 데이터를 판독하는 단계;
버퍼에 제2 데이터를 저장하는 단계; 및
제3 데이터를 버퍼에 저장하는 단계.
진술 69. 본 발명의 실시 예는 진술 68에 따른 물품을 포함하며, RAID 회로의 버퍼에서 바이트 주소에 대한 데이터를 위치시키는 단계는 제2 데이터에서 데이터를 위치시키는 단계를 더 포함한다.
진술 70. 본 발명의 실시 예는 진술 69에 따른 물품을 포함하며, 제2 데이터에서 데이터를 위치시키는 단계는 제2 데이터에 대한 주소 범위에서 바이트 주소를 위치시키는 단계를 포함한다.
진술 71. 본 발명의 실시 예는 진술 68에 따른 물품을 포함하며, 여기서:
데이터는 제1 부분과 제2 부분을 포함한다.
제2 데이터는 데이터의 제1 부분을 포함하고; 및
제3 데이터는 데이터의 제2 부분을 포함한다.
진술 72. 본 발명의 실시 예는 진술 68에 따른 물품을 포함하고, RAID 회로의 버퍼에 바이트 주소에 대한 데이터를 위치시키는 단계는 제3 데이터의 패리티 정보를 사용하여 제2 데이터를 확인하는 단계를 더 포함한다.
진술 73. 본 발명의 실시 예는 비일시적 저장 매체를 포함하는 물품을 포함하며, 비일시적 저장 매체는 기계에 의해 실행될 때 다음을 초래하는 명령어를 저장한다:
RAID(Redundant Array of Independent Disks) 회로에서 바이트 주소 및 제1 데이터를 포함하는 저장 요청을 수신하는 단계;
업데이트된 제2 데이터를 생성하기 위해 바이트 주소 및 제1 데이터에 적어도 부분적으로 기초하여 RAID 회로의 버퍼에서 제2 데이터를 업데이트하는 단계; 및
RAID 회로에서 결과를 반환하는 단계.
진술 74. 본 발명의 실시 예는 진술 73에 따른 물품을 포함한다. 저장 요청은 바이트 레벨 프로토콜 저장 요청을 포함한다.
진술 75. 본 발명의 실시 예는 진술 73에 따른 물품을 포함하며, 여기서:
RAID 회로에서 저장 요청을 수신하는 단계는 프로세서로부터 RAID 회로에서 로드 요청을 수신하는 단계를 포함하고; 및
RAID 회로에서 결과를 반환하는 단계는 RAID 회로에서 프로세서로 결과를 반환하는 단계를 포함한다.
진술 76. 본 발명의 실시 예는 진술 73에 따른 물품을 포함한다.
비일시적 저장 매체는 기계에 의해 실행될 때 업데이트된 제2 데이터를 캐시 일관된 상호 연결 프로토콜을 지원하는 제1 스토리지 장치에 기록하게 되는 추가 명령을 저장하고 있다.
진술 77. 본 발명의 실시 예는 진술 76에 따른 물품을 포함하고, 업데이트된 제2 데이터를 캐시 일관성 있는 상호 연결 프로토콜을 지원하는 제1 스토리지 장치에 기록하는 단계는 업데이트된 제2 데이터를 RAID 회로로부터의 결과 반환에 적어도 부분적으로 기초하여 캐시 일관성 있는 상호 연결 프로토콜을 지원하는 제1 스토리지 장치에 기록하는 단계를 포함한다.
진술 78. 본 발명의 실시 예는 진술 77에 따른 물품을 포함하고, 업데이트된 제2 데이터를 RAID 회로로부터의 결과 반환에 적어도 부분적으로 기초하여 캐시 일관성 있는 상호 연결 프로토콜을 지원하는 제1 스토리지 장치에 기록하는 단계는 백업 전원을 사용하여 버퍼에 대한 전력 중단으로부터 보호하는 단계를 포함한다.
진술 79. 본 발명의 실시 예는 명령문 73에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때 다음과 같은 추가 명령을 저장하고 있다:
업데이트된 제3 데이터를 생성하기 위해 제1 데이터에 적어도 부분적으로 기초하여 RAID 회로의 버퍼에서 제3 데이터를 업데이트하는 단계; 및
업데이트된 제3 데이터를 캐시 일관성 상호 연결 프로토콜을 지원하는 제2 스토리지 장치에 기록하는 단계.
진술 80. 본 발명의 실시 예는 진술 79에 따른 물품을 포함하고, 업데이트된 제3 데이터를 생성하기 위해 제1 데이터에 적어도 부분적으로 기초하여 RAID 회로의 버퍼에서 제3 데이터를 업데이트하는 단계는 제1 데이터에 적어도 부분적으로 기초하여 업데이트된 제3 데이터로서 패리티 정보를 생성하는 단계를 포함한다.
진술 81. 본 발명의 실시 예는 진술 79에 따른 물품을 포함하고, 비일시적 저장 매체는 머신에 의해 실행될 때 제2 스토리지 장치로부터 버퍼로 제3 데이터를 판독하게 되는 추가 명령을 저장하고 있다.
진술 82. 본 발명의 실시 예는 진술 73에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때 제1 스토리지 장치로부터 버퍼로 제2 데이터를 판독하게 되는 추가 명령을 저장하고 있다.
결과적으로, 본 명세서에 기술된 실시 예에 대한 다양한 변경의 관점에서, 이 상세한 설명 및 수반되는 자료는 단지 예시를 위한 것이며 본 발명의 범위를 제한하는 것으로 간주되어서는 안 된다. 따라서 개시로서 청구되는 것은 다음 청구범위 및 그에 상응하는 것의 범위 및 사상 내에 올 수 있는 모든 수정이다.

Claims (20)

  1. 블록 레벨 프로토콜 및 바이트 레벨 프로토콜을 포함하는 캐시 일관성 상호 연결 프로토콜을 지원하는 제1 스토리지 장치;
    상기 캐시 일관성 상호 연결 프로토콜을 지원하는 제2 스토리지 장치; 및
    상기 제1 스토리지 장치 및 상기 제2 스토리지 장치와 통신하는 RAID(Redundant Array of Independent Disk) 회로를 포함하고,
    상기 RAID 회로는 상기 제1 스토리지 장치 및 상기 제2 스토리지 장치에 RAID 레벨을 적용하고, 상기 바이트 레벨 프로토콜을 사용하여 요청을 수신하고 상기 제1 스토리지 장치의 데이터에 액세스하도록 구성된 시스템.
  2. 제1 항에 있어서,
    상기 캐시 일관성 상호 연결 프로토콜은 CXL(Compute Express Link) 프로토콜을 포함하는 시스템.
  3. 제1 항에 있어서,
    캐시 일관성 상호 연결 스위치를 더 포함하고,
    상기 캐시 일관성 상호 연결 스위치는 상기 제1 스토리지 장치, 상기 제2 스토리지 장치 및 상기 RAID 회로에 연결되는 시스템.
  4. 제1 항에 있어서,
    상기 RAID 회로를 구성하기 위한 패브릭 관리자를 더 포함하는 시스템.
  5. 제4 항에 있어서,
    상기 패브릭 관리자는 상기 제1 스토리지 장치 및 상기 제2 스토리지 장치를 식별하고 RAID 레벨을 사용하도록 상기 RAID 회로를 구성하도록 구성된 시스템.
  6. 제4 항에 있어서,
    상기 패브릭 관리자는 상기 제1 스토리지 장치의 제1 주소 범위 및 상기 제2 스토리지 장치의 제2 주소 범위를 결정하고 상기 제1 주소 범위 및 상기 제2 주소 범위를 RAID 주소 범위에 매핑하도록 구성된 시스템.
  7. 제6 항에 있어서,
    여기서 상기 패브릭 관리자는 프로세서에 액세스 가능한 상기 RAID 주소 범위를 결정하도록 더 구성된 시스템.
  8. 제1 항에 있어서,
    상기 RAID 회로는 버퍼를 포함하는 시스템.
  9. 제8 항에 있어서,
    상기 버퍼에 백업 전력을 제공하도록 구성된 백업 전력원을 더 포함하는 시스템.
  10. RAID(Redundant Array of Independent Disks) 회로에서 바이트 주소를 포함하는 로드 요청을 수신하는 단계;
    상기 바이트 주소에 적어도 부분적으로 기초하여 상기 RAID 회로의 버퍼에 데이터를 위치시키는 단계; 및
    상기 RAID 회로에서 상기 데이터를 반환하는 단계를 포함하는 방법.
  11. 제10 항에 있어서,
    상기 RAID 회로의 상기 버퍼에서 상기 바이트 주소에 대한 상기 데이터를 위치시키는 단계는:
    캐시 일관성 상호 연결 프로토콜을 지원하는 상기 제1 스토리지 장치로부터 제2 데이터를 판독하는 단계;
    캐시 일관성 상호 연결 프로토콜을 지원하는 상기 제2 스토리지 장치로부터 제3 데이터를 판독하는 단계;
    상기 버퍼에 상기 제2 데이터를 저장하는 단계; 및
    상기 제3 데이터를 버퍼에 저장하는 단계를 포함하는 방법.
  12. 제11 항에 있어서,
    상기 RAID 회로의 상기 버퍼에서 상기 바이트 주소에 대한 상기 데이터를 위치시키는 단계는 상기 제2 데이터에서 상기 데이터를 위치시키는 단계를 더 포함하는 방법.
  13. 제11 항에 있어서,
    상기 RAID 회로의 상기 버퍼에서 상기 바이트 주소에 대한 상기 데이터를 위치시키는 단계는 상기 제3 데이터의 패리티 정보를 사용하여 상기 제2 데이터를 검증하는 단계를 더 포함하는 방법.
  14. RAID(Redundant Array of Independent Disks) 회로에서 바이트 주소 및 제1 데이터를 포함하는 저장 요청을 수신하는 단계;
    업데이트된 제2 데이터를 생성하기 위해 상기 바이트 주소 및 상기 제1 데이터에 적어도 부분적으로 기초하여 상기 RAID 회로의 버퍼에서 제2 데이터를 업데이트하는 단계; 및
    상기 RAID 회로에서 결과를 반환하는 단계를 포함하는 방법.
  15. 제14 항에 있어서,
    상기 업데이트된 제2 데이터를 캐시 일관성 상호 연결 프로토콜을 지원하는 제1 스토리지 장치에 기록하는 단계를 더 포함하는 방법.
  16. 제15 항에 있어서,
    상기 업데이트된 제2 데이터를 상기 캐시 일관성 있는 상호 연결 프로토콜을 지원하는 상기 제1 스토리지 장치에 기록하는 단계는 상기 업데이트된 제2 데이터를 상기 RAID 회로로부터의 결과 반환에 적어도 부분적으로 기초하여 상기 캐시 일관성 있는 상호 연결 프로토콜을 지원하는 상기 제1 스토리지 장치에 기록하는 단계를 포함하는 방법.
  17. 제16 항에 있어서,
    상기 업데이트된 제2 데이터를 상기 RAID 회로로부터의 결과 반환에 적어도 부분적으로 기초하여 상기 캐시 일관성 있는 상호 연결 프로토콜을 지원하는 상기 제1 스토리지 장치에 기록하는 단계는 백업 전원을 사용하여 상기 버퍼에 대한 전력 중단으로부터 보호하는 단계를 포함하는 방법.
  18. 제14 항에 있어서,
    업데이트된 제3 데이터를 생성하기 위해 상기 제1 데이터에 적어도 부분적으로 기초하여 상기 RAID 회로의 상기 버퍼에서 제3 데이터를 업데이트하는 단계; 및
    상기 업데이트된 제3 데이터를 상기 캐시 일관성 상호 연결 프로토콜을 지원하는 제2 스토리지 장치에 기록하는 단계를 더 포함하는 방법.
  19. 제18 항에 있어서,
    상기 업데이트된 제3 데이터를 생성하기 위해 상기 제1 데이터에 적어도 부분적으로 기초하여 상기 RAID 회로의 상기 버퍼에서 상기 제3 데이터를 업데이트하는 단계는 상기 제1 데이터에 적어도 부분적으로 기초하여 상기 업데이트된 제3 데이터로서 패리티 정보를 생성하는 단계를 포함하는 방법.
  20. 제14 항에 있어서,
    상기 제1 스토리지 장치로부터 상기 버퍼로 상기 제2 데이터를 판독하는 단계를 더 포함하는 방법.
KR1020230056354A 2022-06-15 2023-04-28 캐시 일관된 상호 연결 저장 장치에서 raid 회로를 사용하는 중복 배열 독립 디스크 시스템 및 방법 KR20230172394A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202263352629P 2022-06-15 2022-06-15
US63/352,629 2022-06-15
US17/885,519 US20230409480A1 (en) 2022-06-15 2022-08-10 Systems and methods for a redundant array of independent disks (raid) using a raid circuit in cache coherent interconnect storage devices
US17/885,519 2022-08-10

Publications (1)

Publication Number Publication Date
KR20230172394A true KR20230172394A (ko) 2023-12-22

Family

ID=86646665

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020230056354A KR20230172394A (ko) 2022-06-15 2023-04-28 캐시 일관된 상호 연결 저장 장치에서 raid 회로를 사용하는 중복 배열 독립 디스크 시스템 및 방법

Country Status (4)

Country Link
US (1) US20230409480A1 (ko)
EP (1) EP4293493A1 (ko)
KR (1) KR20230172394A (ko)
TW (1) TW202401232A (ko)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10540231B2 (en) * 2018-04-04 2020-01-21 International Business Machines Corporation Log-structured array (LSA) partial parity eviction and reassembly
US10909012B2 (en) * 2018-11-12 2021-02-02 H3 Platform, Inc. System having persistent memory

Also Published As

Publication number Publication date
US20230409480A1 (en) 2023-12-21
TW202401232A (zh) 2024-01-01
EP4293493A1 (en) 2023-12-20

Similar Documents

Publication Publication Date Title
EP3519969B1 (en) Physical media aware spacially coupled journaling and replay
US8819338B2 (en) Storage system and storage apparatus
US9384065B2 (en) Memory array with atomic test and set
US8051367B2 (en) Storage sub-system and method for controlling the same
US9378096B1 (en) System and method for cache management
CN105843551B (zh) 高性能和大容量储存重复删除中的数据完整性和损耗电阻
US9824041B2 (en) Dual access memory mapped data structure memory
US20150095696A1 (en) Second-level raid cache splicing
US9304685B2 (en) Storage array system and non-transitory recording medium storing control program
US20100083247A1 (en) System And Method Of Providing Multiple Virtual Machines With Shared Access To Non-Volatile Solid-State Memory Using RDMA
US20190324859A1 (en) Method and Apparatus for Restoring Data after Power Failure for An Open-Channel Solid State Drive
WO2009143381A2 (en) Use of rdma to access non-volatile solid-state memory in a network storage system
US8990542B2 (en) Efficient metadata protection system for data storage
US20200264954A1 (en) Method and apparatus for consistent and highly available data storage using local and fabric attached non-volatile memory storage devices
KR20200041815A (ko) FPGA+SSD 내부의 임베디드 PCIe 스위치로 이레이저 코드 데이터 보호 기능을 지원하는 시스템
US8909886B1 (en) System and method for improving cache performance upon detecting a migration event
US20150356108A1 (en) Storage system and storage system control method
EP4293493A1 (en) Systems and methods for a redundant array of independent disks (raid) using a raid circuit in cache coherent interconnect storage devices
US11347583B2 (en) Techniques for correcting errors in cached pages
CN117234414A (zh) 用于支持独立磁盘冗余阵列的系统和方法
US11481132B2 (en) Removing stale hints from a deduplication data store of a storage system
US20230409196A1 (en) Systems and methods for a redundant array of independent disks (raid) using a decoder in cache coherent interconnect storage devices
US9098204B1 (en) System and method for improving cache performance
US9141484B2 (en) Transiently maintaining ECC
US8966190B1 (en) System and method for assigning control of a logical unit number