KR20230051087A - 데이터를 저장하기 위한 방법, 스토리지 장치, 및 시스템 - Google Patents

데이터를 저장하기 위한 방법, 스토리지 장치, 및 시스템 Download PDF

Info

Publication number
KR20230051087A
KR20230051087A KR1020220127610A KR20220127610A KR20230051087A KR 20230051087 A KR20230051087 A KR 20230051087A KR 1020220127610 A KR1020220127610 A KR 1020220127610A KR 20220127610 A KR20220127610 A KR 20220127610A KR 20230051087 A KR20230051087 A KR 20230051087A
Authority
KR
South Korea
Prior art keywords
storage device
storage
request
peer
host
Prior art date
Application number
KR1020220127610A
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 KR20230051087A publication Critical patent/KR20230051087A/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/0688Non-volatile semiconductor memory arrays
    • 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/061Improving I/O performance
    • 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
    • G06F3/0607Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
    • 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
    • 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/0635Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
    • 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/0658Controller construction 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/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W4/00Services specially adapted for wireless communication networks; Facilities therefor
    • H04W4/80Services using short range communication, e.g. near-field communication [NFC], radio-frequency identification [RFID] or low energy communication
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

방법은, 스토리지 장치에서, 장치 표시를 포함하는 입력 및/또는 출력(I/O) 요청을 수신하는 단계, 스토리지 장치에서, 장치 표시가 스토리지 장치를 나타낸다는 결정을 수행하는 단계, 그리고 결정에 기초하여 스토리지 장치에 의해 상기 I/O 요청을 서비스하는 단계를 포함할 수 있다. 장치 표시는 I/O 요청에 대한 어드레스를 포함할 수 있다. 방법은 스토리지 시스템에 제2 스토리지 장치를 설치하는 단계를 포함할 수 있다. 제2 저장 장치는 원활하게(또는 끊김 없이) 설치될 수 있다. 제1 스토리지 장치 및 상기 제2 스토리지 장치는 피어 장치들일 수 있다. 방법은 제1 스토리지 장치에서, 제2 장치 표시를 포함하는 제2 I/O 요청을 수신하는 단계, 제1 스토리지 장치에 의해, 제2 장치 표시가 제2 스토리지 장치를 나타낸다는 제2 결정을 수행하는 단계, 그리고 제1 스토리지 장치에 의해, 제2 결정에 기초하여 제2 I/O 요청을 제2 스토리지 장치로 전달하는 단계를 더 포함할 수 있다.

Description

데이터를 저장하기 위한 방법, 스토리지 장치, 및 시스템{METHOD FOR STORING DATA, STROAGE DEVICE, AND SYSTEM}
본 개시는 일반적으로 스토리지 시스템에 관한 것으로, 보다 구체적으로는 근접 스토리지 탄력성에 대한 시스템들, 방법들 및 장치들에 관한 것이다.
스토리지 시스템은 초기 양의 스토리지 용량을 애플리케이션에 제공할 수 있다. 스토리지 용량은 하나 이상의 스토리지 장치들에 분산될 수 있다. 애플리케이션이 시스템에서 제공하는 초기 용량보다 더 많은 스토리지 용량을 필요로 하는 경우 시스템은 예를 들어 하나 이상의 추가 스토리지 장치들을 추가하여 추가 스토리지 용량을 제공할 수 있다. 예를 들어 클라이언트 및/또는 스토리지 서버에서 스토리지 시스템의 소프트웨어 계층은 메타데이터를 관리하여 애플리케이션의 데이터가 저장된 스토리지 장치 또는 장치들을 추적할 수 있다. 소프트웨어 계층은 하나 이상의 스토리지 장치들에 대한 애플리케이션의 액세스를 규제할 수도 있다.
이 배경 기술 부분에 개시된 상기 정보는 발명 원리의 배경에 대한 이해를 향상시키기 위한 것일 뿐이며 따라서 선행 기술을 구성하지 않는 정보를 포함할 수 있다.
본 개시의 목적은 탄력성을 갖는 스토리지 장치의 방법, 스토리지 장치 및 스토리지 시스템을 제공하는데 있다.
데이터를 저장하기 위한 방법은, 스토리지 장치에서, 장치 표시를 포함하는 입력 및/또는 출력(I/O) 요청을 수신하는 단계, 스토리지 장치에서, 장치 표시가 스토리지 장치를 나타낸다는 결정을 수행하는 단계, 그리고 결정에 기초하여 스토리지 장치에 의해 상기 I/O 요청을 서비스하는 단계를 포함할 수 있다. 장치 표시는 I/O 요청에 대한 어드레스를 포함할 수 있다. 스토리지 장치는 제1 스토리지 장치일 수 있고, 제1 스토리지 장치는 스토리지 시스템에 설치될 수 있고, 방법은 스토리지 시스템에 제2 스토리지 장치를 설치하는 단계를 더 포함할 수 있다. 제2 저장 장치는 원활하게(또는 끊김 없이) 설치될 수 있다. 제1 스토리지 장치 및 상기 제2 스토리지 장치는 피어 장치들일 수 있다. I/O 요청은 제1 I/O 요청일 수 있고, 장치 표시는 제1 장치 표시일 수 있고, 결정은 제1 결정일 수 있고, 방법은 제1 스토리지 장치에서, 제2 장치 표시를 포함하는 제2 I/O 요청을 수신하는 단계, 제1 스토리지 장치에 의해, 제2 장치 표시가 제2 스토리지 장치를 나타낸다는 제2 결정을 수행하는 단계, 그리고 제1 스토리지 장치에 의해, 제2 결정에 기초하여 제2 I/O 요청을 제2 스토리지 장치로 전달하는 단계를 더 포함할 수 있다. 방법은 제2 스토리지 장치에 의해 제2 I/O 요청을 서비스하는 단계를 더 포함할 수 있다. 제1 결정을 수행하는 단계는 데이터 구조의 제1 스토리지 장치에 대한 제1 엔트리에 기초할 수 있고, 방법은 제2 스토리지 장치의 설치에 기초하여, 데이터 구조에 제2 스토리지 장치에 대한 제2 엔트리를 추가하는 단계를 더 포함할 수 있다. 제2 결정을 수행하는 단계는 상기 제2 엔트리에 기초할 수 있다. 제1 엔트리는 제1 스토리지 장치에 대한 제1 어드레스 범위를 포함하고, 제2 엔트리는 제2 스토리지 장치에 대한 제2 어드레스 범위를 포함할 수 있다. 데이터 구조의 적어도 일부는 제1 엔트리를 포함할 수 있고, 제2 엔트리는 제1 스토리지 장치 및 제2 스토리지 장치에 저장될 수 있다. 방법은 제1 I/O 요청을 제1 I/O 큐에 저장하는 단계, 그리고 제1 I/O 큐에 제2 I/O 요청을 저장하는 단계를 더 포함할 수 있다. 방법은 제1 I/O 요청을 제1 I/O 큐에 저장하는 단계, 그리고 제1 스토리지 장치에 의해, 제2 I/O 큐에 제2 I/O 요청을 전달하는 단계를 더 포함할 수 있다. 제1 I/O 큐는 제1 스토리지 장치에 위치할 수 있고, 제2 I/O 큐는 제2 스토리지 장치에 위치할 수 있다. 방법은 제1 스토리지 장치로부터 제2 스토리지 장치로 데이터의 적어도 일부를 복사하는 단계를 더 포함할 수 있다.
스토리지 장치는 스토리지 매체, 통신 인터페이스, 및 요청 로직을 포함하는 제어 회로를 포함하고, 요청 로직은 통신 인터페이스를 사용하여, 장치 표시를 포함하는 입력 및/또는 출력(I/O) 요청을 수신하고, 장치 표시가 스토리지 장치를 나타낸다는 결정을 수행하고, 그리고 스토리지 매체를 사용하여, 결정에 기초하여 I/O 요청을 서비스하도록 구성될 수 있다. 스토리지 장치는 제1 스토리지 장치일 수 있고, I/O 요청은 제1 I/O 요청일 수 있고, 장치 표시는 제1 장치 표시일 수 있고, 결정은 제1 결정일 수 있고, 요청 로직은 통신 인터페이스를 사용하여, 제2 장치 표시를 포함하는 제2 I/O 요청을 수신하고, 제2 장치 표시가 제2 스토리지 장치를 나타낸다는 제2 결정을 수행하고, 그리고 통신 인터페이스를 사용하여, 제2 결정에 기초하여 제2 I/O 요청을 제2 스토리지 장치로 전달하도록 더 구성될 수 있다. 스토리지 장치는 제1 스토리지 장치일 수 있고, 결정은 데이터 구조의 상기 제1 스토리지 장치에 대한 엔트리에 기초할 수 있고, 요청 로직은 제1 스토리지 장치와 함께 스토리지 시스템에 설치된 제2 스토리지 장치에 기초하여, 데이터 구조의 업데이트된 버전을 생성하도록 더 구성될 수 있다. 요청 로직은 통신 인터페이스를 사용하여 데이터 구조의 업데이트된 버전을 제2 스토리지 장치에 브로드캐스트 하도록 더 구성될 수 있다. 결정은 데이터 구조의 스토리지 장치에 대한 엔트리에 기초할 수 있고, 요청 로직은 통신 인터페이스를 사용하여 데이터 구조의 업데이트된 버전을 수신하도록 더 구성될 수 있다.
시스템은 호스트, 스토리지 장치, 및 호스트 및 스토리지 장치에 연결된 통신 매체를 포함할 수 있고, 호스트는 통신 매체를 사용하여 입력 및/또는 출력(I/O) 요청을 스토리지 장치에 전송하도록 구성된 호스트 로직을 포함할 수 있고, I/O 요청은 장치 표시를 포함할 수 있고, 스토리지 장치는 요청 로직을 포함할 수 있고, 요청 로직은 I/O 요청을 수신하고, 장치 표시가 스토리지 장치를 나타낸다는 결정을 수행하고, 그리고 스토리지 장치에 의해, 결정에 기초하여 I/O 요청을 서비스하도록 구성될 수 있다. 스토리지 장치는 제1 스토리지 장치일 수 있고, 호스트 로직은 제2 스토리지 장치의 설치를 수행하도록 더 구성될 수 있다. 결정은 데이터 구조의 제1 스토리지 장치에 대한 엔트리에 기초할 수 있고, 요청 로직은 설치에 기초하여 데이터 구조의 업데이트된 버전을 생성하도록 더 구성될 수 있다. 요청 로직은 데이터 구조의 업데이트된 버전을 제2 스토리지 장치로 전송하도록 더 구성될 수 있다.
본 개시의 실시 예에 따르면, 탄력성을 갖는 스토리지 장치의 방법, 스토리지 장치 및 스토리지 시스템이 제공된다.
도면은 반드시 일정한 비율로 도시된 것은 아니며 유사한 구조 또는 기능의 요소는 일반적으로 도면 전체에 걸쳐 예시 목적으로 유사한 참조 번호 또는 그 부분으로 표시될 수 있다. 도면은 여기에 설명된 다양한 실시예의 설명을 용이하게 하기 위한 것일 뿐이다. 도면은 여기에 개시된 교시의 모든 측면을 설명하지 않으며 청구범위의 범위를 제한하지 않는다. 도면이 흐려지는 것을 방지하기 위해 모든 구성 요소, 연결 등이 표시되지 않을 수 있으며 모든 구성 요소에 참조 번호가 표시되지 않을 수 있다. 그러나 구성 요소 구성의 패턴은 도면에서 쉽게 알 수 있다. 첨부된 도면은 본 명세서와 함께 본 개시의 일 실시예를 도시한 것으로, 상세한 설명과 함께 본 발명의 원리를 설명하기 위한 것이다.
도 1은 본 개시의 예시적인 실시예에 따른 소프트웨어-정의 스토리지(SDS) 시스템의 실시예를 도시한다.
도 2는 본 개시의 예시적인 실시예에 따른 스토리지 시스템의 실시예를 도시한다.
도 3은 본 개시의 예시적인 실시예에 따른 스토리지 시스템의 예시적인 실시예를 도시한다.
도 4는 본 개시의 예시적인 실시예에 따라 도 3에 도시된 하나 이상의 스토리지 장치들을 구현하는 데 사용될 수 있는 스토리지 장치의 예시적인 실시예를 도시한다.
도 5는 본 개시의 예시적인 실시예에 따라 도 3에 도시된 스토리지 장치들 중 하나 이상을 구현하는 데 사용될 수 있는 스토리지 장치의 다른 예시적인 실시예를 도시한다.
도 6a는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 새로운 스토리지 장치를 추가하기 위한 방법의 제1 부분의 실시예를 도시한다.
도 6b는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 새로운 스토리지 장치를 추가하기 위한 방법의 제2 부분의 실시예를 도시한다.
도 7a는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 장치를 스토리지 시스템으로 교체하기 위한 방법의 제1 부분의 실시예를 도시한다.
도 7b는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 장치를 스토리지 시스템으로 교체하기 위한 방법의 제2 부분의 실시예를 도시한다.
도 8a는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 대한 I/O 방법의 제1 부분의 실시예를 도시한다.
도 8b는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 대한 I/O 방법의 제2 부분의 실시예를 도시한다.
도 8c는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 대한 I/O 방법의 제3 부분의 실시예를 도시한다.
도 8d는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 대한 I/O 방법의 제4 부분의 실시예를 도시한다.
도 8e는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 대한 I/O 방법의 제5 부분의 실시예를 도시한다.
도 9는 본 개시의 예시적인 실시예에 따른 스토리지 장치로부터 데이터를 읽기 위한 방법의 예시적인 실시예를 도시한다.
도 10은 본 개시의 예시적인 실시예에 따라 스토리지 장치에 데이터를 쓰기 위한 방법의 예시적인 실시예를 도시한다.
도 11은 본 개시의 예시적인 실시예에 따른 탄력적 피어 시스템에 스토리지 장치를 추가하기 위한 방법의 예시적인 실시예를 도시한다.
도 12는 본 개시의 예시적인 실시예에 따른 탄력적 피어 시스템에서 스토리지 장치를 교체하기 위한 방법의 예시적인 실시예를 도시한다.
도 13은 본 개시의 예시적인 실시예에 따른 장치 프로그램에 대한 액세스를 사용자에게 제공하기 위해 사용될 수 있는 호스트 장치의 예시적인 실시예를 도시한다.
도 14는 본 개시의 예시적인 실시예에 따른 데이터를 저장하기 위한 방법의 실시예를 도시한다.
탄력성(또는 탄성)(elasticity)을 갖는 스토리지 시스템은 시스템이 작동하는 동안 스토리지 용량을 조정하기 위해 하나 이상의 스토리지 장치들이 시스템에 추가, 교체 및/또는 시스템에서 제거되도록 할 수 있다. 탄력성을 갖는 스토리지 시스템은 소프트웨어 계층이 애플리케이션과 스토리지 장치 사이의 인터페이스를 제공할 수 있는 소프트웨어-정의 스토리지(SDS; Software-Defined Storage)로 구현될 수 있다. 소프트웨어 계층은 메타데이터를 사용하여 데이터 블록들(여러 스토리지 장치들에 분산될 수 있음)의 위치 및/또는 매핑을 추적하고, 애플리케이션으로부터 입력 및/또는 출력(I/O) 요청을 서비스하고, 파일 시스템 구현 등을 할 수 있다. 그러나 SDS 시스템의 소프트웨어 계층은 데이터 지역성(locality), 데이터 일관성, 메타데이터 관리로 인한 레이턴시(latency) 등과 관련된 문제로 인해 시스템 성능을 저하시킬 수 있다.
본 개시의 예시적인 실시예에 따른 스토리지 시스템에서, 하나 이상의 스토리지 장치들은 요청에 포함된 정보(예를 들어, 데이터 어드레스)에 기초하여 호스트로부터 요청을 수신하고, 요청을 서비스할지 또는 요청을 다른 스토리지 장치로 포워딩할지 결정할 수 있다. 일부 실시예들에서, 스토리지 장치는, 예를 들어, 스토리지 장치의 테이블, 및 스토리지 장치에 매핑된 하나 이상의 대응하는 어드레스 범위들을 포함할 수 있는, 데이터 구조를 사용하여 요청을 서비스할 수 있다고 결정할 수 있다.
데이터 구조는, 예를 들어, 하나 이상의 스토리지 장치들을 스토리지 시스템에 추가, 하나 이상의 스토리지 장치들을 교체, 및/또는 스토리지 시스템으로부터 하나 이상의 스토리지 장치들을 제거하는 것에 기초하여 업데이트될 수 있다. 일부 실시예들에서, 데이터 구조의 사본(copy)은 스토리지 장치들 중 하나 이상(예를 들어, 각각)에 위치할 수 있다. 일부 실시예들에서, 스토리지 장치들 중 하나 이상은, 예를 들어, 스토리지 장치의 추가, 교체 및/또는 제거에 기초하여 업데이트된 데이터 구조를 하나 이상의 다른 스토리지 장치들에 브로드캐스트(broadcast) 할 수 있다.
따라서, 일부 실시예들에서, 스토리지 장치가 요청을 서비스하거나 전달할 것을 결정할 수 있게 하는 정보는, 근접 스토리지에(예를 들어, 각각의 스토리지 장치에) 위치할 수 있고 및/또는 피어(peer)-관리될 수 있다(예를 들어, 하나 이상의 스토리지 장치들에 의해 업데이트 및/또는 브로드캐스트됨). 구현 세부 사항들에 따라, 이는 예를 들어 스토리지 장치들 외부와 같은 시스템-레벨 소프트웨어 계층의 개입을 감소시키거나 제거하면서, 스토리지 시스템에 탄력성을 제공할 수 있다. 더욱이, 구현 세부 사항들에 따라, 본 개시의 예시적인 실시예에 따른 스토리지 시스템은, 예를 들어, 데이터 지역성, 데이터 일관성, 메타데이터 관리에 의해 야기되는 지연(또는 레이턴시) 등과 관련된 문제를 감소시키거나 제거함으로써 성능을 향상시킬 수 있다.
일부 실시예들에서, 스토리지 시스템의 스토리지 용량은 시스템에 새로운 스토리지 장치를 설치함으로써 증가될 수 있다. 이전에 설치된 스토리지 장치는 새 스토리지 장치에 대한 엔트리(entry)(또는 항목)를 포함하도록 데이터 구조를 업데이트할 수 있다. 예를 들어, 새로운 엔트리는 새로운 스토리지 장치에 대한 어드레스 범위를 포함할 수 있다. 이전에 설치된 스토리지 장치는 업데이트된 데이터 구조를 하나 이상(예를 들어, 모든) 다른 스토리지 장치들에 브로드캐스트할 수 있다. 예를 들어, 이전에 설치된 스토리지 장치는 업데이트된 데이터 구조를 새로운 스토리지 장치 및 시스템에 설치된 다른 모든 스토리지 장치들에 브로드캐스트할 수 있다.
일부 실시예들에서, 폐기(retiring)(또는 사용 중지되는) 스토리지 장치는, 교체 스토리지 장치를 설치하고 폐기 스토리지 장치로부터 교체 스토리지 장치로 데이터의 일부 또는 전부를 복사함으로써, 교체될 수 있다. 이전에 설치된 다른 스토리지 장치는 폐기 스토리지 장치의 어드레스 범위를 교체 스토리지 장치로 다시 매핑(재매핑)하기 위해 데이터 구조를 업데이트할 수 있다. 폐기 스토리지 장치는 시스템에서 제거될 수 있고, 업데이트된 데이터 구조는 하나 이상의 다른 스토리지 장치들(예를 들어, 교체 스토리지 장치 및 시스템에 설치된 모든 다른 스토리지 장치들)로 브로드캐스트될 수 있다.
예시를 위해, 본 개시의 예시적인 실시예에 따른 일부 예시, 시스템들, 방법들, 제품들, 장치들 등은 일부 특정 구현 세부 사항들의 맥락에서 설명될 수 있다. 그러나, 본 개시의 원리는 개시된 구현 세부 사항들 중 임의의 것에 제한되지 않는다. 예를 들어, 일부 실시예들은 NVMe(Nonvolatile Memory Express) 스토리지 프로토콜을 사용할 수 있는 하나 이상의 스토리지 장치들과 관련하여 설명될 수 있지만, 원리들은 임의의 프로토콜로 구현될 수 있다.
도 1은 본 개시의 예시적인 실시예에 따른 소프트웨어-정의 스토리지(SDS) 시스템의 실시예를 도시한다. 도 1에 예시된 시스템은 호스트(102) 및 하나 이상의 통신 매체(106)를 통해 호스트(102)와 통신할 수 있는 하나 이상의 스토리지 장치들(104)을 포함할 수 있다. 호스트(102)는 SDS 시스템을 구현하기 위해 하나 이상의 시스템-레벨 소프트웨어 계층들(108)을 실행할 수 있는 하나 이상의 서버들, 클라이언트들 등을 포함할 수 있다. 하나 이상의 소프트웨어 계층들(108)은 하나 이상의 프로세스들(110-1), 데몬들(110-2), 파일 시스템들(110-3), 메타데이터 구조들(110-4) 등을 구현하여, 시스템이 객체 스토리지, 파일 스토리지, 블록 스토리지 등을 애플리케이션(118)에 제공하게 할 수 있다. 일부 실시예들에서, 하나 이상의 소프트웨어 계층들(108)은, 예를 들어, 애플리케이션(118)이 하나 이상의 스토리지 장치들(104)의 수, 용량 등을 인식하지 못할 수 있는 방식으로, 시스템의 스토리지 용량(또는 저장 용량)을 조정하기 위해, 스토리지 장치를 추가, 교체 및/또는 제거함으로써 시스템의 탄력성을 가능하게 할 수 있다. 일부 실시예들에서, 하나 이상의 스토리지 장치들(104) 중 임의의 것은 하나 이상의 다른 스토리지 장치들의 존재를 인식하지 못할 수 있다.
일부 실시예들에서, 탄력성(elasticity)은 하나 이상의 스토리지 장치들과 같은 하나 이상의 구성요소들을 추가, 교체 및/또는 제거함으로써, 시스템(예를 들어, 실행 중인 스토리지 시스템)의 스토리지 용량을 조정하는 능력을 의미할 수 있다. 일부 실시예들에서, 탄력성은 예를 들어 스토리지 장치가 교체될 때 구성요소들 사이에서 하나 이상의 부하(또는 로드(load))를 이동시키는 것을 더 의미할 수 있다. 일부 실시예들에서, 하나 이상의 구성요소들이 추가, 교체 및/또는 제거될 수 있고, 구성요소들 사이에서 로드가 이동될 수 있고, 및/또는 파일 설명자(디스크립터(descriptor))가 실행 중인 애플리케이션의 동작을 중지 및/또는 중단(또는 인터럽트(interrupt))하지 않고 변경될 수 있다. 일부 실시예들에서 탄력성은 유용할 수 있다. 예를 들어 애플리케이션이 애플리케이션에 본래 할당된 것보다 더 많은 스토리지 용량이 필요할 수 있고, 더 많은 스토리지 용량을 추가하고 파일 설명자 등과 같은 I/O 설정을 업데이트하기 위해, 애플리케이션을 중지하거나 중단하는 것이 해로울 수 있기 때문이다.
도 1에 도시된 시스템으로 구현될 수 있는 SDS 시스템의 예는 Ceph, HDFS(Hadoop Distributed File System), LVM(Logical Volume Manager) 등을 포함할 수 있다. 이러한 SDS 시스템 중 임의의 것에서, 시스템의 하나 이상의 핵심 기능들은 메타데이터를 유지하고 및/또는 하나 이상의 스토리지 장치들(104)에서 애플리케이션에 대한 데이터 블록들의 위치를 추적하는 책임이 있는 프로세스들을 실행하는 것일 수 있다.
구현 세부 사항들에 따라, 하나 이상의 소프트웨어 계층들(108)은 메타데이터 관리 등에 의해 야기되는 데이터 지역성, 데이터 일관성, 오버헤드 및/또는 지연 등과 관련된 문제로 인해 시스템 성능을 저하시킬 수 있다. 예를 들어, SDS 시스템의 일부 실시예들에서, 성능은 주로 메타데이터 관리, 파일 시스템 관리, 분산 스토리지 시스템을 애플리케이션에 제공하는 것과 관련된 처리 등에 의해 제한될 수 있다. 다른 예로서, SDS 시스템의 일부 실시예들은 데이터의 대체된 사본이 애플리케이션(110)에 의해 데이터가 업데이트 또는 삭제된 후에도 시스템에 남아 있을 수 있는, 최종 일관성 정책을 구현할 수 있다.
도 2는 본 개시의 예시적인 실시예에 따른 스토리지 시스템의 실시예를 도시한다. 도 2에 도시된 시스템은 통신 매체(213)를 통해 통신할 수 있는 호스트(212) 및 탄력적(또는 탄력 있는(elastic)) 피어 시스템(214)을 포함할 수 있다. 탄력적 피어 시스템(214)은 하나 이상의 스토리지 장치들(216)을 포함할 수 있다. 일부 실시예들에서, 탄력적 피어 시스템(214)은 예를 들어 호스트(212)에서 실행되는 애플리케이션(218)에 의한 스토리지(또는 저장)에 대한 요구에 기초하여 (예를 들어, 하나 이상의 스토리지 장치(216)를 추가, 교체 및/또는 제거함으로써) 그 용량을 조정할 수 있는 스토리지 기반구조(또는 인프라구조(infrastructure)) (생태계 (에코시스템 (ecosystem)으로 지칭될 수 있음)를 구현할 수 있다. 일부 실시예들에서, 탄력적 피어 시스템(214)은 그 용량을 동적으로(예를 들어, 탄성 피어 시스템(214), 호스트(212) 및/또는 애플리케이션(218)이 실행되는 동안) 및/또는 끊김 없이(seamlessly) (예를 들어, 호스트(212) 및/또는 애플리케이션(218)이 원활하게 중단 없이 및/또는 성능 손실 없이 계속 작동하도록 허용할 수 있는 방식으로) 조정할 수 있다.
일부 실시예들에서, 메타데이터 관리 및/또는 하나 이상의 스토리지 장치들(216)에 및/또는 스토리지 장치들(216)로부터 데이터를 읽거나 쓰기 위한 상호작용들은 호스트(212)에 의한 개입이 거의 또는 전혀 없이 탄력적 피어 시스템(214)에 의해 제어 및/또는 실행될 수 있다. 일부 실시예들에서, 애플리케이션(218)은, 하나 이상의 스토리지 장치들(216) 중 어느 것이 나중에 애플리케이션의 데이터를 실제로 저장할 수 있는지에 관계없이, 원래의 스토리지 장치(216) 및/또는 파일 디스크립터를 보고/보거나 상호작용할 수 있다. 예를 들어, 원래의(또는 본래의, 오리지널) 스토리지 장치(216)는 오버플로(overflow)(예를 들어, 초과) 데이터를 애플리케이션에서 피어 스토리지 장치(216)로 보낼 수 있거나, 원래의 스토리지 장치는 애플리케이션의 데이터가 마이그레이션될 수 있는 교체 스토리지 장치(216)로 교체될 수 있다. 그러나, 일부 실시예들에서, 애플리케이션(218)은 원래의 스토리지 장치(216)와 함께 사용한 스토리지 장치 식별자(ID), 파일 설명자 등을 사용하여 그 데이터에 계속해서 액세스할 수 있다.
일부 실시예들에서, 탄력적 피어 시스템(214)은 폐기 스토리지 장치(예를 들어, 비교적 낮은 저장 용량을 갖는 장치, 결함이 있는 장치 등)를 교체할 수 있다. 일부 실시예들에서, 폐기 스토리지 장치는 동적으로 교체될 수 있다(예를 들어, 애플리케이션(218)이 호스트(212)에서 실행되는 동안 애플리케이션(218)을 방해없이). 구현 세부 사항들에 따라, 이는 탄력적 피어 시스템(214)에 내결함성(장애 또는 결함 허용 능력)(fault tolerance)을 제공할 수 있다.
일부 실시예들에서, 탄력적 피어 시스템(214)의 스토리지 장치(216)의 일부 또는 전부는 단일 실패 지점(또는 포인트)을 생성할 수 있는 기본 또는 마스터 장치가 없을 수 있도록 피어 장치로서 구현될 수 있다. 예를 들어, 일부 실시예들에서, 호스트(212)로부터 들어오는 I/O 요청을 분석함으로써, 하나 이상의 스토리지 장치들(216)(예를 들어, 각각의 스토리지 장치들)은 스토리지 장치(216)가 요청을 로컬로 서비스할 수 있는지 또는 요청을 원격으로 서비스하기 위해 피어 스토리지 장치(216)에 요청을 전달할 수 있는지 여부를 결정할 수 있는 데이터 구조(예를 들어, 피어 테이블)을 포함하거나, 이에 엑세스할 수 있다.
일부 실시예들에서, 피어 장치는, 동일하거나 유사한 능력을 가질 수 있는, 동등하거나 유사한 중요성을 가질 수 있는, 계층 구조 없이 배열될 수 있는, 협력적으로 및/또는 독립적으로(예를 들어, 주 또는 마스터 장치 없이) 작동할 수 있는 장치를 지칭할 수 있다. 일부 실시예들에서, 그리고 구현 세부 사항들에 따라, 탄력적 피어 시스템(214)의 스토리지 장치들(216)의 일부 또는 전부는 결함 허용 능력을 제공할 수 있는(예를 들어, 소거 코딩 없이) 비계층적 피어-투-피어 시스템을 구현하도록 배열(또는 배치)될 수 있다.
일부 실시예들에서, 탄력적 피어 시스템(214)은 하나 이상의 블록 장치들, 하나 이상의 근접(또는, 가까운, 니어(near)) 스토리지 데이터 구조, 근접 스토리지에서 실행될 수 있는 하나 이상의 루틴 등으로 구현될 수 있다. 따라서, 일부 실시예들에서, 탄력적 피어 시스템(214)은 근접 스토리지 탄력적 블록 장치(NSEBD; near storage elastic block device) 시스템으로 지칭될 수 있다. 그러나, 본 개시의 원리는 임의의 특정 유형의 데이터 구조들, 스토리지 장치들 등으로 제한되지 않는다. 일부 실시예들에서, 탄력적 피어 시스템(214)의 하나 이상의 동작들은 호스트(212)에 의해(예를 들어, 디바이스 드라이버(또는 장치 드라이버), 백그라운드 프로세스 등에 의해) 구현될 수 있다.
도 2에 도시된 실시예는 임의의 특정 애플리케이션에 제한되지 않는다. 예를 들어, 일부 실시예들에서, 탄력적 피어 시스템(214)은 도 1에 도시된 것과 같은 소프트웨어-정의 스토리지 시스템과 조합하여 사용될 수 있다. 이러한 실시예에서, 도 1에 도시된 하나 이상의 SDS 소프트웨어 계층들(108)은 도 2에 도시된 탄력적 피어 시스템(214)의 상부에서 동작할 수 있다. 구현 세부 사항들에 따라, 예를 들어, 파일 물리적 위치들과 같은 스토리지 메타데이터를 관리하는 데 사용되는 중간 소프트웨어 프로세스들의 하나 이상의 레벨들을 제거, 호스트 중앙 처리 장치(CPU) 이용률 감소, 레이턴시 감소, 처리량 증가시킴으로써, SDS 시스템의 성능을 향상시킬 수 있다.
다른 예로서, 일부 실시예들에서, 도 2에 도시된 탄력적 피어 시스템(214)은 그 자체로(예를 들어, 독립형 스토리지 시스템으로서) 사용될 수 있고 임의의 다른 블록으로서 애플리케이션(218)에 의해 액세스될 수 있으나, (예를 들어, 애플리케이션(218)에 의한 요구에 기초하여) 저장 용량을 조정하고, 하나 이상의 폐기 장치 등을 교체할 수 있는 능력을 가질 수 있다. 더욱이, 일부 실시예들에서, 그러한 조정, 교체 등은 동적으로(예를 들어, 탄력적 피어 시스템(214), 호스트(212) 및/또는 애플리케이션(218)이 실행되는 동안) 및/또는 끊김 없이 수행될 수 있다.
도 3은 본 개시의 예시적인 실시예에 따른 스토리지 시스템의 예시적인 실시예를 도시한다. 도 3에 도시된 시스템은 예를 들어 도 2에 도시된 실시예를 구현하기 위해 사용될 수 있다.
도 3에 도시된 실시예는 호스트(312) 및 하나 이상의 스토리지 장치들(316)을 포함할 수 있는 탄력적 피어 시스템(314)을 포함할 수 있다. 하나 이상의 스토리지 장치들(316)은 임의의 유형의 통신 매체(313)를 통해 호스트(312)와 통신할 수 있다. 일부 실시예들에서, 호스트(312)는 통신 매체(313)를 통해 하나 이상의 스토리지 장치들(316)에 하나 이상의 요청들을 전송할 수 있다. 일부 실시예들에서, 요청(326)은 요청(326)이 의도된 하나 이상의 스토리지 장치들(316)을 나타낼 수 있는 장치 표시(328)(예를 들어, 어드레스)를 포함할 수 있다.
호스트(312)는, 하나 이상의 스토리지 장치들(316)에 I/O 요청들 및/또는 데이터 전송, I/O 요청에 응답하여 데이터 수신, 설치, 교체, 제거 등과 관련된 하나 이상의 동작들과 같은, 여기에 설명된 호스트 기능 중 임의의 것을 구현할 수 있는 호스트 로직(324)을 포함할 수 있다:
스토리지 장치들(316) 중 하나 이상은 피어 테이블(320) 및/또는 요청 로직(322)을 포함할 수 있다. 피어 테이블(320)은 예를 들어, 하나 이상의 스토리지 장치들(316)(예를 들어, 모든 스토리지 장치들)에 대한 엔트리를 포함할 수 있다. 스토리지 장치들(316)에 대한 엔트리는, 예를 들어, 스토리지 장치에 대한 어드레스 범위(예를 들어, 논리 블록 어드레스(LBA) 범위)를 포함할 수 있다.
요청 로직(322)은 예를 들어 탄력적 피어 시스템(314)의 구현과 관련하여 여기에 개시된 임의의 스토리지 장치 기능을 구현할 수 있다. 예들은 호스트(312)로부터 수신되거나 다른 스토리지 장치(316)로부터 전달된 하나 이상의 I/O 요청을 처리하는 것과 관련된 기능, 호스트(312)에서 다른 스토리지 장치(316)로 I/O 요청을 전달(또는 포워딩)하는 것과 관련된 기능, 업데이트, 브로드캐스팅, 및/또는 피어 테이블(322) 수신 등을 포함하는 하나 이상의 스토리지 장치들(316)을 추가, 교체 및/또는 제거하는 것과 관련된 기능을 포함할 수 있다.
호스트(312)는 하나 이상의 애플리케이션들(318)을 실행할 수 있는 하나 이상의 서버들, 클라이언트들 등과 같은 임의의 장치로 구현될 수 있다. 예들은 스토리지 서버들(예를 들어, 객체 스토리지 서버들, 파일 서버들, 스토리지 노드들, 네임 노드들, 데이터 노드들 등), 애플리케이션 서버들, 개인용 컴퓨터들, 메인프레임 컴퓨터들, 미니컴퓨터들, 태블릿들, 스마트폰들 및/또는 등을 포함할 수 있다.
통신 매체(313)는 임의의 유형의 네트워크 패브릭, 인터커넥트 패브릭, 인터페이스들, 프로토콜들 등 또는 이들의 임의의 조합으로 구현될 수 있다. 예들은 PCIe, NVMe, NVMe-oF(NVMe-over-fabric), 이더넷, TCP/IP(Transmission Control Protocol/Internet Protocol), DMA(Direct Memory Access) RDMA(Remote DMA), ROCE(RDMA over Converged Ethernet), FibreChannel, InfiniBand, SATA(Serial ATA), SCSI(Small Computer Systems Interface), SAS(Serial Attached SCSI), iWARP 등 또는 이들의 조합을 포함할 수 있다.
예를 들어, 일부 실시예들에서, 통신 매체(313)는 PCIe 인터커넥트 패브릭을 통해 동작하는 NVMe 프로토콜로 구현될 수 있다. 다른 예로서, 일부 실시예들에서, 통신 매체(313)는 이더넷 패브릭을 통해 동작하는 NVMe-oF 프로토콜로 구현될 수 있다.
일부 실시예들에서, 통신 매체(313)는 일관성(또는, 코히런트(coherent))(예를 들어, 메모리 일관성, 캐시 일관성 등) 또는 CXL(Compute Express Link)과 같은 메모리 시맨틱 인터페이스, 및/또는 CXL.mem, CXL.cache 및/또는 CXL.IO와 같은 일관성 프로토콜로 구현할 수 있다. 일관성 및/또는 메모리 시맨틱 인터페이스 및/또는 프로토콜의 다른 예들은 Gen-Z, 일관성 가속기 프로세서 인터페이스(CAPI; Coherent Accelerator Processor Interface), 가속기들을 위한 캐시 코히런트 인터커넥트(CCIX; Cache Coherent Interconnect for Accelerators) 등을 포함할 수 있다.
일부 실시예들에서, 통신 매체(313)는 예를 들어 참조로 포함되는 미국 특허 출원 공개 제2019/0087352호에 개시된 바와 같이 피어-투-피어 통신을 구현할 수 있다.
일부 실시예들에서, 통신 매체(313)는 교환 및/또는 버스 네트워크, 인터커넥트 등을 수용하기에 충분히 유연할 수 있는 프로토콜로 구현될 수 있다.
일부 실시예들에서, 하나 이상의 스토리지 장치들(316)은, 예를 들어, 솔리드 스테이트 미디어(예를 들어, 솔리드 스테이트 드라이브(SSD)), 자기 미디어(예를 들어, 하드 디스크 드라이브(HDD)), 광학 미디어 등과 같은 임의의 유형의 스토리지 매체를 기반으로, 피어 테이블 및/또는 요청 로직의 일부 또는 전부를 구현하기 위한 최소량의 처리 기능을 갖는 임의의 유형의 스토리지 장치로 구현될 수 있다. 예를 들어, 일부 실시예들에서 스토리지 장치는 낸드(NAND) 플래시 메모리, 크로스 그리드(cross-gridded) 비휘발성 메모리와 같은 영구 메모리, 벌크 저항 변화를 갖는 메모리(memory with bulk resistance change), PCM(Phase Change Memory), 및/또는 등, 또는 이들의 임의의 조합으로 구현될 수 있다.
하나 이상의 스토리지 장치들(316)은 SATA, SCSI, SAS, U.2 등과 같은 임의의 커넥터 구성을 사용하는, 3.5인치, 2.5인치, 1.8인치, M.2, 엔터프라이즈 및 데이터 센터 SSD 폼 팩터(EDSFF), NF1, 및/또는 등과 같은 임의의 폼 팩터로 구현될 수 있다. 임의의 이러한 스토리지 장치들은 서버 섀시, 서버 랙, 데이터룸, 데이터 센터, 에지 데이터 센터, 모바일 에지 데이터 센터, 및/또는 이들의 임의의 조합과 함께 전체적으로 또는 부분적으로 구현되고/되거나 이와 관련하여 사용될 수 있다.
피어 테이블(320), 요청 로직(322), 및/또는 호스트 로직(324)을 포함하여 여기에 설명된 기능 중 임의의 것은 임의의 유형의 메모리 또는 이들의 조합에 저장된 명령어들을 실행하는, 하드웨어, 소프트웨어 또는 조합 로직, 순차 로직, 하나 이상의 타이머들, 카운터들, 레지스터들 및/또는 상태 머신들, 휘발성 및/또는 비휘발성 메모리들, CPLD(complex programmable logic devices), FPGA(field programmable gate arrays), ASIC(application specific integrated circuits), x86 프로세서와 같은 CISC(complex instruction set computer) 및/또는 ARM 프로세서와 같은 RISC(reduced instruction set computer)를 포함하는 중앙 처리 장치(CPU), 그래픽 처리 장치(GPU; graphics processing units), 신경 처리 장치(NPU; neural processing units), 텐서 처리 장치(TPU; tensor processing units) 및/또는 등으로 구현될 수 있다. 일부 실시예들에서, 하나 이상의 구성요소(또는 컴포넌트)들은 시스템 온 칩(SOC; system-on-chip)으로서 구현될 수 있다.
일부 실시예들에서, 하나 이상의 스토리지 장치들(316)은 피어 테이블(320) 및/또는 요청 로직(322)을 구현하기 위한 처리 용량 및/또는 메모리를 갖는 임의의 유형의 스토리지 장치로 구현될 수 있다. 구현 세부 사항들에 따라 처리 용량 및/또는 메모리의 최소량일 수 있다. 예를 들어, 일부 실시예들에서, 관련된 처리(또는 프로세싱)는 비교적 단순할 수 있고, 메모리는 2 내지 16개의 스토리지 장치들을 사용하는 탄력적 피어 시스템에 대해 최소일 수 있다. 이러한 유형의 처리 용량 및/또는 메모리는, 예를 들어, 프로토콜 컨트롤러(예를 들어, NVMe 컨트롤러), 스토리지 장치 컨트롤러 등에서 찾을 수 있는 프로세서의 예비 용량으로 사용할 수 있다.
도 4는 본 개시의 예시적인 실시예에 따라 도 3에 도시된 하나 이상의 스토리지 장치들을 구현하는 데 사용될 수 있는 스토리지 장치의 예시적인 실시예를 도시한다. 도 4에 도시된 스토리지 장치(416)는 통신 인터페이스(425), 스토리지 인터페이스(426), 스토리지 장치 컨트롤러(428), 및/또는 스토리지 매체(또는 미디어) 모듈(429)을 포함할 수 있다. 통신 인터페이스(425)는 PCIe(Peripheral Component Interconnect Express)와 같은 인터커넥트 인터페이스, 이더넷과 같은 네트워크 인터페이스 등으로 구현될 수 있다. 스토리지 인터페이스(426)는 예를 들어 NVMe(Nonvolatile Memory Express) 또는 임의의 다른 스토리지 인터페이스로 구현될 수 있고 하나 이상의 컨트롤러들(427)을 포함할 수 있다. 스토리지 장치 컨트롤러(428)는 스토리지 매체 모듈(429)의 스토리지 매체에 대한 액세스를 제어할 수 있는 매체 변환 계층(예를 들어, 플래시 변환 계층(FTL))과 같은 스토리지 장치(416)의 전체 동작을 제어하기 위한 다양한 구성요소를 포함할 수 있다. 스토리지 매체 모듈(429)은 낸드 플래시 메모리와 같은 솔리드 스테이트 스토리지 매체, 또는 임의의 다른 유형의 솔리드 스테이트 스토리지 매체, 자기 매체, 광학 매체 등으로 구현될 수 있다.
도 4에 도시된 스토리지 장치(416)에서, 스토리지 인터페이스(426)의 하나 이상의 컨트롤러들(427)(예를 들어, NVMe 컨트롤러) 및/또는 스토리지 장치 컨트롤러(428)의 하나 이상의 프로세서들은 도 3에 도시된 실시예에서 피어 테이블(320) 및/또는 요청 로직(322)을 구현하기 위해 사용될 수 있다.
도 5는 본 개시의 예시적인 실시예에 따라 도 3에 도시된 스토리지 장치들 중 하나 이상을 구현하는 데 사용될 수 있는 스토리지 장치의 다른 예시적인 실시예를 도시한다. 예를 들어, 연산 스토리지 장치일 수 있는 도 5에 도시된 스토리지 장치(516)는 스토리지 장치 컨트롤러(528), 매체 변환 계층(530), 스토리지 매체 모듈(529), 하나 이상의 연산 자원들(531), 및 통신 인터페이스(525)를 포함할 수 있다. 도 5에 도시된 구성요소들은 하나 이상의 장치 버스들(532)을 통해 통신할 수 있다. 스토리지 매체 모듈(529)의 일부 또는 전부에 플래시 메모리를 사용할 수 있는 일부 실시예들에서, 매체 변환 계층(530)은 부분적으로 또는 전체적으로 FTL로서 구현될 수 있다.
도 5에 도시된 스토리지 장치(516)에서, 연산 자원들은, 도 3에 도시된 실시예에서 피어 테이블(320) 및/또는 요청 로직(322)을 구현하기 위한, 처리 용량 및/또는 메모리를 포함할 수 있다.
도 3을 다시 참조하면, 일부 실시예들에서, 호스트(312)는 새로 설치된 스토리지 장치를 검출할 수 있는, 디스커버리(discovery)(또는 탐색) 메커니즘을 갖는 운영 체제를 실행할 수 있다. 본 개시에 따른 일부 실시예들에서, 디스커버리 메커니즘 및/또는 스토리지 장치는 새로 설치된 스토리지 장치가 탄력적 피어 시스템(314)을 구현할 수 있다는 표시(예를 들어, 설정(또는 구성)(configuration) 필드에서 하나 이상의 비트를 사용함)를 포함하도록 수정(또는 변경)될 수 있다.
디스커버리 메커니즘이 새로 설치된 스토리지 장치가 탄력적 피어 시스템을 구현할 수 있다고 결정하는 경우, 디스커버리 메커니즘은, 예를 들어 추가 장치로 이것을 추가하거나 이것을 폐기 장치를 교체하는데 사용함으로써, 자동화된 데몬을 호출하고/호출하거나 시스템 관리자에게 새로 설치된 스토리지 장치를 탄력적 피어 시스템(314)에 추가하도록 프롬프트(prompt)(또는 유도, 촉발)할 수 있다. 일부 실시예들에서, 호스트(312)는 새로 설치된 장치를 추가하기 위한 커맨드 또는 사용자 공간(user space) 애플리케이션을 구현할 수 있다. 일부 실시예들에서, 그러한 커맨드 또는 애플리케이션은 "nsebd-tool"로 명명될 수 있다. 탄력적 피어 시스템(314)에 새로 추가된 스토리지 장치를 추가 장치로 추가하기 위한 예시적인 커맨드 라인 인터페이스(CLI; command line interface) 커맨드는 다음과 같을 수 있다(예를 들어, Linux 유형 운영 체제에서):
sudo nsebd-tool -t nsebd -a /dev/abc /<directory> (Cmd 1)
여기서 sudo는 수퍼유저(superuser) 커맨드를 나타낼 수 있고, -t는 탄력적 피어 시스템(314)에 대한 작업을 수행하기 위한 인수(argument) nsebd가 있는 옵션일 수 있으며, -a는 새로 추가된 스토리지 장치를 추가 장치로 추가하는 것을 나타내는 옵션일 수 있으며, /dev /abc는 새로 추가된 스토리지 장치의 위치를 나타내고, /<directory>는 읽기 및/또는 쓰기 요청들의 위치를 나타낼 수 있다.
탄력적 피어 시스템(314)에서 폐기 장치를 새로 추가된 스토리지 장치로 교체를 위한 예시적인 커맨드 라인 인터페이스(CLI) 커맨드는 다음과 같을 수 있다(예를 들어, Linux 유형 운영 체제에서):
sudo nsebd-tool -t nsebd -s /dev/old /dev/new /<directory> (Cmd 2)
여기서 sudo는 수퍼유저 커맨드를 나타낼 수 있으며, -t는 탄력적 피어 시스템(314)에 대한 작업을 수행하기 위한 인수 nsebd가 있는 옵션일 수 있으며, -s는 폐기 스토리지 장치를 새로 추가된 스토리지 장치로 교체(또는 대체)하는 것을 나타내는 옵션일 수 있으며. /dev/old는 폐기 스토리지 장치의 위치를 나타낼 수 있으며, /dev/new는 새로 추가된 스토리지 장치의 위치를 나타낼 수 있으며, /<directory>는 읽기 및/또는 쓰기 요청들을 위한 위치를 나타낼 수 있다.
일부 실시예들에서, 위에서 설명된 예시적인 커맨드들은 호스트(312) 상에서 실행되고 탄력적 피어 시스템(314)을 사용하는 애플리케이션이 실행되는 동안, 동적으로 수행될 수 있다. 구현 세부 사항들에 따라, 위에서 설명된 예시적인 커맨드들 중 하나를 실행한 후, 탄력적 피어 시스템(314)은 근접 스토리지 메타데이터 및/또는 블록 관리를 계속 수행할 수 있는 동안, 호스트(312)에서 실행되는 애플리케이션은 /<directory> 폴더 아래에 하나 이상의 파일들을 계속 쓸(또는 기입할) 수 있다.
스토리지 장치들(316) 중 하나 이상이 NVMe 블록 장치로서 구현될 수 있는 일부 실시예들에서, 호스트(312)는 NVMe 커맨드들을 사용하여 I/O 요청들(326)을 전송할 수 있다. 일부 실시예들에서, NVMe 커맨드 파라미터들은 네임스페이스, 하나 이상의 LBA들, 하나 이상의 LBA들과 연관된 메타데이터, 데이터 전송 크기 등을 포함할 수 있다. 일부 실시예들에서, 스토리지 장치들(316) 중 하나 이상의 요청 로직(322)은, 인커밍(incoming)(또는 들어오는) 요청(326)을 분석함으로써(예를 들어, 요청을 분석만 함으로써), 요청(326)이 스토리지 장치(316)에 의해 로컬로 서비스될 수 있는지 또는 원격으로 서비스될 피어 스토리지 장치(316)로 전달될 수 있는지 판별할 수 있다. 예를 들어, 일부 실시예들에서, 요청(326)의 장치 표시(328)는 요청(326)에 대한 LBA를 포함할 수 있다. LBA가 수신 스토리지 장치(316)에 대한 LBA 범위 내에 있는 경우, 수신 스토리지 장치(316)는 요청을 로컬로 서비스할 수 있다. 그렇지 않고, 요청(326)에 대한 LBA가 피어 스토리지 장치(316)에 대한 LBA 범위 내에 있는 경우, 인커밍 요청은 통신 매체(313)를 통해 피어 스토리지 장치(316)로 전송(예를 들어, 즉시 전송)될 수 있다.
하나 이상의 스토리지 장치들(316)이 NVMe 블록 장치로서 구현될 수 있는 일부 실시예들에서, 호스트(312)의 하나 이상의 NVMe 드라이버 및/또는 스토리지 장치들(316)은 다수의 장치들이 I/O 큐를 공유하게 하도록 수정될 수 있다. 추가적으로 또는 대안적으로, 호스트(312)의 하나 이상의 NVMe 드라이버 및/또는 스토리지 장치들(316)은 하나의 장치에 대한 큐에서 시작된 요청이 다른 장치에 대한 큐에서 완료된 경우 올바르게 해석 및/또는 처리될 수 있도록 수정될 수 있다(예를 들어, 요청이 한 스토리지 장치에서 다른 스토리지 장치로 전달되는 경우).
일부 실시예들에서, 탄력적 피어 시스템(314)은 일부 또는 모든 피어 스토리지 장치(316)가 본질적으로 동일한 데이터 구조 피어 테이블들(322)을 포함할 수 있도록 구성될 수 있고, 따라서, 피어 스토리지 장치들(316) 중 하나 이상(예를 들어, 임의)은 임의의 인커밍 NVMe 커맨드 요청을 수신, 전달(또는 포워딩) 및/또는 서비스할 수 있다.
표 1은 본 개시의 예시적인 실시예에 따른 피어 테이블의 예시적인 실시예를 도시한다. 표 1에 도시된 실시예는, 예를 들어, NVMe 네임스페이스에 대응할 수 있지만, 다른 실시예들에서, 테이블들 및/또는 네임스페이스들의 다른 배열이 사용될 수 있다. 표 1의 각 엔트리(또는 항목)(예를 들어, 행)은 장치 이름, 대응하는 장치의 어드레스 범위(예를 들어, LBA 범위) 및 대응하는 장치의 장치 식별자(ID)(예를 들어, 시스템 ID)를 포함할 수 있다.
장치 이름 LBA 범위 장치 ID/어드레스
Dev001 0x0000 to 0x0900 <sys ID for Dev001>
Dev002 0x0901 to 0x0C00 <sys ID for Dev002>
Dev003 0x0C01 to 0x0F00 <sys ID for Dev003>
일부 실시예들에서, NVMe 네임스페이스는 전용(private) 및/또는 공유로 정의될 수 있고, 예를 들어 스토리지 장치(316) 및/또는 그 안의 NVMe 컨트롤러에 적용될 수 있다. 일부 실시예들에서, 네임스페이스는 예를 들어 원래 할당된 것보다 많거나 적은 LBA들을 포함하도록 확장 또는 축소될 수 있는 탄력적 네임스페이스(EN)로 구현될 수 있다. 일부 실시예들에서, 확장된 네임스페이스는 다른 물리적 스토리지 장치에 적어도 부분적으로 상주할 수 있지만, 원래의 탄력적 네임스페이스와 동일한 네임스페이스를 가질 수 있다. 일부 실시예들에서, 하나 이상의 추가 장치들이 PCIe 버스 또는 LAN(Local Area Network)과 같은 동일한 물리적 통신 매체에 부착될 수 있다. 일부 실시예들에서, 동일한 물리적 통신 매체에 부착되는 것은 제약으로서 구현될 수 있지만, 다른 실시예들에서 그러한 제약이 구현되지 않을 수 있다. 일부 실시예들에서, 하나 이상의 스토리지 장치들(316)은 표 1에 도시된 것과 같은 피어 테이블을 사용하여, 현재 커맨드를 해결할 수 있는 탄력적 네임스페이스(EN)를 포함하는 장치의 큐로 인커밍 I/O 커맨드들을 어떻게 재지정(re-direct)(또는 재전송)하는지 알 수 있다(예를 들어, 올바른 LBA 범위를 갖는 탄력적 네임스페이스(EN)).도 6a는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 새로운 스토리지 장치를 추가하기 위한 방법의 제1 부분의 실시예를 도시한다. 도 6b는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 새로운 스토리지 장치를 추가하기 위한 방법의 제2 부분의 실시예를 도시한다. 도 6a 및 도 6b는 집합적으로 도 6으로 지칭될 수 있다. 도 6에 도시된 실시예는, 예를 들어, 도 2 및 도 3에 도시된 것들을 포함하여 여기에 개시된 실시예들 중 임의의 것을 사용하여 구현될 수 있다.
도 6에 도시된 실시예는 호스트(612) 및 탄력적 피어 시스템(614)을 구현하도록 구성된 하나 이상의 스토리지 장치들(616-1, 616-2, …)을 포함할 수 있다. 하나 이상의 스토리지 장치들(616)은 통신 매체(613)를 통해 호스트(612)에 연결될 수 있다. 스토리지 장치들(616) 중 하나 이상은 피어 테이블(620)을 포함할 수 있다.
도 6a를 참조하면, 탄력적 피어 시스템(614)은 초기에 2개의 스토리지 장치들(616-1 및 616-2)을 포함할 수 있다. 새로운 스토리지 장치(616-3)가 추가될 때, 호스트(612)의 프로세스, 데몬 등은 새로운 스토리지 장치(616-3)를 설치하기 위해 위의 Cmd 1과 같은 커맨드를 호출할 수 있다.
도 6b를 참조하면, 제3 스토리지 장치(616-3)가 추가된 후, 스토리지 장치(616-2)의 요청 로직은 업데이트된 피어 테이블(620a)을 생성하기 위해 피어 테이블(620)을 업데이트하고, 화살표(634-1, 634-3)로 나타낸 바와 같이 통신 매체(613)를 사용하여 업데이트된 피어 테이블(620a)을 제1 및 제3 스토리지 장치들(616-1 및 6163)에 브로드캐스트한다.
일부 실시예들에서, 완전히 업데이트된 피어 테이블(620a)을 수신하는 대신, 하나 이상의 스토리지 장치들(616)은 새로 추가된 스토리지 장치(616-3)에 대한 엔트리를 추가하고 및/또는 피어 테이블(620)에서 현재 비활성 엔트리를 활성화함으로써, 자신의 피어 테이블(620)을 업데이트할 수 있다. 예를 들어, 일부 실시예들에서, 스토리지 장치(616) 중 하나 이상은 비활성 엔트리들, 예를 들어 실제 장치 크기로, 미리 채워진 하나 이상의 피어 테이블들을 포함할 수 있다. 따라서 새 장치가 추가될 때, 현재 피어들은 피어 테이블에 위치를 추가하기만 하면 된다(예를 들어, 테이블에서 비트 뒤집기(또는 플립(flip)). 일부 실시예들에서, 이용 가능한 장치 크기는 기술 의존적일 수 있다.
도 7a는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 장치를 스토리지 시스템으로 교체하기 위한 방법의 제1 부분의 실시예를 도시한다. 도 7b는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 장치를 스토리지 시스템으로 교체하기 위한 방법의 제2 부분의 실시예를 도시한다. 도 7a 및 도 7b는 집합적으로 도 7로 지칭될 수 있다. 도 7에 도시된 실시예는, 예를 들어, 도 2 및 도 3에 도시된 것들을 포함하여 여기에 개시된 실시예들 중 임의의 것을 사용하여 구현될 수 있다.
도 7에 도시된 실시예는 호스트(712) 및 탄력적 피어 시스템(714)을 구현하도록 구성된 하나 이상의 스토리지 장치들(716-1, 716-2, …)을 포함할 수 있다. 하나 이상의 스토리지 장치들(716)은 통신 매체(713)를 통해 호스트(712)에 연결될 수 있다. 스토리지 장치들(716) 중 하나 이상은 피어 테이블(720)을 포함할 수 있다.
도 7a를 참조하면, 탄력적 피어 시스템(714)은 초기에 3개의 스토리지 장치들(7161, 716-2, 716-3)를 포함할 수 있다. 제3 스토리지 장치(716-3)를 폐기하기 위해, 제4 스토리지 장치(716-4)는, 폐기 스토리지 장치(716-3)를 교체 스토리지 장치(716-4)로 교체하기 위해, 예를 들어 위의 Cmd 2와 같은 명령을 호출할 수 있는, 호스트(712)의 프로세스, 데몬 등에 의해, 추가될 수 있다. 추가적으로 또는 대안적으로, 호스트는 mk.fs nsebd(파일 시스템 생성용), mount(마운트)(교체 스토리지 장치(716-4)), device copy(장치 복사)(폐기 스토리지 장치(716-3)의 컨텐츠(또는 내용, 데이터)를 교체 스토리지 장치(716-4)로 복사) 및/또는 unmount(마운트 해제)(폐기 스토리지 장치(716-3))를 포함하는 일련의 커맨드들(설명을 위해 Linux 커맨드들로 표시됨)을 발행(또는 실행, 이슈)할 수 있다. 일부 실시예들에서, 스토리지 장치들(716-1 및/또는 716-2) 중 하나 이상에서(예를 들어, 요청 로직에서) 실행 중인 백그라운드 프로세스는 모든 라이브(live)(또는 살아있는, 유효한) 블록들을 폐기 장치에서 교체 장치로 전송할 수 있다. 일부 실시예들에서, 이 백그라운드 프로세스는 탄력적 피어 시스템(714)의 다른 스토리지 장치들의 일부 또는 전부에 피어 테이블 업데이트 요청을 전송해야 한다.
도 7b를 참조하면, 제4 스토리지 장치(716-4)(또는 교체 스토리지 장치)가 제3 스토리지 장치(716-3)(또는 폐기 스토리지 장치)를 교체한 후, 스토리지 장치(716-2)의 요청 로직은 피어 테이블(720)을 업데이트하여 업데이트된 피어 테이블(720a)을 생성할 수 있고, 화살표(734-1, 734-4)로 나타낸 바와 같이 통신 매체(713)를 사용하여 업데이트된 피어 테이블(720a)을 제1 및 제4 스토리지 장치(716-1, 716-4)에 브로드캐스트할 수 있다.
도 8a는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 대한 I/O 방법의 제1 부분의 실시예를 도시한다. 도 8b는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 대한 I/O 방법의 제2 부분의 실시예를 도시한다. 도 8c는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 대한 I/O 방법의 제3 부분의 실시예를 도시한다. 도 8d는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 대한 I/O 방법의 제4 부분의 실시예를 도시한다. 도 8e는 본 개시의 예시적인 실시예에 따른 스토리지 시스템 및 스토리지 시스템에 대한 I/O 방법의 제5 부분의 실시예를 도시한다. 도 8a, 도 8b, 도 8c, 도 8d 및 도 8e는 집합적으로 도 8로 지칭될 수 있다. 도 8에 도시된 실시예는, 예를 들어, 도 2 및 도 3에 도시된 것들을 포함하여 여기에 개시된 실시예들 중 임의의 것을 사용하여 구현될 수 있다.
도 8에 도시된 실시예는 호스트(812) 및 탄력적 피어 시스템(814)을 구현하도록 구성된 하나 이상의 스토리지 장치들(816-1, 816-2, …)을 포함할 수 있다. 하나 이상의 스토리지 장치들(816)은 통신 매체(813)를 통해 호스트(812)에 연결될 수 있다. 스토리지 장치들(816) 중 하나 이상은 피어 테이블(822)을 포함할 수 있다.
도 8a를 참조하면, 호스트(812)는 화살표(838)로 나타낸 바와 같이 통신 매체(813)를 통해 I/O 요청(826)을 제1 스토리지 장치(816-1)(예를 들어, 표 1의 Dev001)에 전송할 수 있다. I/O 요청(826)(또는 요청이라고도 함)은 I/O 요청(826)에 대한 하나 이상의 LBA들(828)을 포함할 수 있다.
도 8b를 참조하면, 제1 스토리지 장치(816-1)는 I/O 요청(826)의 하나 이상의 LBA들(예를 들어, 모든 LBA들)이 제1 스토리지 장치(816-1)의 LBA 범위 내에 있는지 알아보기 위해 자신의 피어 테이블(822)을 검사(또는 확인)할 수 있다.
도 8c를 참조하면, I/O 요청(826)의 하나 이상의 LBA들이 제1 스토리지 장치(816-1)의 LBA 범위 내에 있는 경우(예를 들어, 요청이 로컬 요청인 경우), 제1 스토리지 장치(816-1)는 예를 들어 호스트(812)와 제1 스토리지 장치(816-1) 사이에서 데이터의 직접 메모리 액세스(DMA; direct memory access) 전송을 수행함으로써 I/O 요청(826)을 서비스할 수 있다. I/O 요청(826)이 읽기 요청인 경우, DMA 전송은 화살표(840)로 나타낸 바와 같이 제1 스토리지 장치(816-1)의 스토리지 매체로부터 DMA 데이터를 읽고 이를 호스트(812)의 DMA 버퍼(842)로 전송할 수 있다. I/O 요청(826)이 쓰기 요청인 경우, DMA 전송은 데이터를 호스트(812)로부터 제1 스토리지 장치(816-1)로 전송할 수 있고 제1 스토리지 장치(816-1)의 스토리지 매체에 데이터를 저장할 수 있다.
도 8d를 참조하면, I/O 요청(826)의 하나 이상의 LBA들이 제1 스토리지 장치(816-1)의 LBA 범위 내에 있지 않은 경우(예를 들어, 요청이 원격 요청인 경우), 제1 스토리지 장치(816-1)는 I/O 요청(826)의 하나 이상의 LBA들이 속하는 LBA 범위를 갖는 스토리지 장치에 I/O 요청(826)을 전달(또는 포워딩)할 수 있다. 도 8에 도시된 예에서, 그것은 제3 스토리지 장치(816-3)일 수 있다. 따라서, 제1 스토리지 장치(816-1)는 화살표(844)로 도시된 바와 같이 I/O 요청(826)을 제3 스토리지 장치(816-3)에 전달할 수 있다.
도 8e를 참조하면, 제3 스토리지 장치(816-3)는 I/O 요청(826)이 다른 스토리지 장치에 의해 자신에게 전달되었기 때문에, I/O 요청(826)의 하나 이상의 LBA들이 자신의 LBA 범위 내에 있음을 알 수 있다. 대안적으로, 또는 추가적으로, 제3 스토리지 장치(816-3)는 I/O 요청(826)의 하나 이상의 LBA들이 자신의 LBA 범위 내에 있는지 알아보기 위해, 피어 테이블(822)을 확인할 수 있다. 제3 스토리지 장치(816-3)는 예를 들어 호스트(812)와 제3 스토리지 장치(816-3) 사이에서 데이터의 DMA 전송을 수행함으로써, I/O 요청(826)을 서비스할 수 있다. I/O 요청(826)이 읽기 요청인 경우, DMA 전송은 화살표(846)로 나타낸 바와 같이 제3 스토리지 장치(816-3)의 스토리지 매체로부터 DMA 데이터를 읽고 이를 호스트(812)의 DMA 버퍼(842)로 전송할 수 있다. I/O 요청(826)이 쓰기 요청이면, DMA 전송은 데이터를 호스트(812)로부터 제3 스토리지 장치(816-3)로 전송하고, 제3 스토리지 장치(816-3)의 스토리지 매체에 데이터를 저장할 수 있다.
일부 실시예들에서, I/O 요청은 요청의 단일 포워딩(예를 들어, 단일 '홉(hop)')으로 해결될 수 있다. 그러나 다른 실시예에서, 요청은 요청의 LBA에 의해 표시된 스토리지 장치에 도달하기 위해 여러 번 포워딩될 수 있다. 일부 실시예들에서, 그리고 구현 세부 사항들에 따라, (1) 직접 연결된 스토리지 장치는 상대적으로 작거나 제한된 수의 사용 가능한 포트를 가질 수 있고/있거나 (2)(a) 더 많은 스토리지 장치들(예를 들어, 원격 스토리지 장치)가 원격 서버 또는 스위치에 연결될 수 있으며, 따라서 피어 테이블은 개별 스토리지 장치보다 원격 서버 및/또는 스위치의 주소를 지정할 수 있고/있거나 (2)(b) 원격 엔티티(예를 들어, 서버 및/또는 스위치)는 로컬 탄력적 피어 시스템을 구현할 수 있기 때문에, 피어 테이블은 스토리지 장치(예를 들어, NVMe 컨트롤러, 스토리지 장치 컨트롤러 등과 같은 컨트롤러에 의해 사용되는 작업 메모리)에서 사용 가능한 메모리에 맞을 수 있다.
도 9는 본 개시의 예시적인 실시예에 따른 스토리지 장치로부터 데이터를 읽기 위한 방법의 예시적인 실시예를 도시한다. 도 9에 도시된 방법은, 예를 들어, 도 2, 도 3, 도 6, 도 7, 및/또는 도 8에 도시된 실시예들을 포함하여 여기에 기재된 스토리지 장치들 중 임의의 것을 사용하여 구현될 수 있다.
도 9를 참조하면, 방법은 스토리지 장치가 호스트로부터 읽기 요청을 수신할 수 있는 동작(950)에서 시작할 수 있다. 읽기 요청은 예를 들어 하나 이상의 LBA들을 포함할 수 있다. 동작(952)에서, 스토리지 장치는 예를 들어 피어 테이블과 같은 데이터 구조를 검사(또는 확인)함으로써, 읽기 요청의 하나 이상의 LBA들이 스토리지 장치의 로컬 LBA 범위 내에 있는지 여부를 결정할 수 있다. 읽기 요청의 하나 이상의 LBA들이 스토리지 장치의 로컬 LBA 범위 내에 있는 경우, 방법은 스토리지 장치가 읽기 요청에 지정된 하나 이상의 LBA들에서 읽기 데이터를 회수하고 읽기 데이터를 호스트로 전송(예를 들어, DMA 전송 사용함)할 수 있는 동작(954)으로 진행할 수 있다. 스토리지 장치는 다른 요청을 수신하기 위해 대기하고 동작(950)으로 리턴(return)할 수 있다. 그러나, 동작(952)에서, 읽기 요청의 하나 이상의 LBA들이 스토리지 장치의 로컬 LBA 범위 내에 있지 않은 경우, 방법은 다음을 수행하는 동작(956)을 진행할 수 있다: 스토리지 장치는 (1) 피어 테이블과 같은 데이터 구조를 사용하여, 읽기 요청에 대응하는 LBA 범위를 갖는 대상(또는 타겟) 스토리지 장치에 대한 장치 ID를 회수(또는 검색)하고 (2) 읽기 요청에 대응하는 LBA 범위를 갖는 대상 스토리지 장치에 읽기 요청을 전달할 수 있다. 일부 실시예들에서, 스토리지 장치는 (3) 읽기 요청이 타겟 스토리지 장치에 의해 서비스될 것임을 호스트에 알릴(또는 통지할) 수 있다. 스토리지 장치는 다른 요청을 수신하기 위해 대기하고 동작(950)으로 리턴할 수 있다.
도 10은 본 개시의 예시적인 실시예에 따라 스토리지 장치에 데이터를 쓰기 위한 방법의 예시적인 실시예를 도시한다. 도 10에 도시된 방법은, 예를 들어, 도 2, 도 3, 도 6, 도 7 및/또는 도 8에 도시된 실시예들을 포함하여 여기에 개시된 스토리지 장치들 중 임의의 것을 사용하여 구현될 수 있다.
도 10을 참조하면, 방법은 스토리지 장치가 호스트로부터 쓰기 요청을 수신할 수 있는 동작(1058)에서 시작할 수 있다. 쓰기 요청은 예를 들어 하나 이상의 LBA들을 포함할 수 있다. 동작(1060)에서, 스토리지 장치는 예를 들어 피어 테이블과 같은 데이터 구조를 확인함으로써, 쓰기 요청의 하나 이상의 LBA들이 스토리지 장치의 로컬 LBA 범위 내에 있는지 여부를 결정할 수 있다. 쓰기 요청의 하나 이상의 LBA들이 스토리지 장치의 로컬 LBA 범위 내에 있는 경우, 방법은 스토리지 장치가 호스트로부터 쓰기 데이터를 수신하고(예를 들어, DMA 전송을 사용하여) 쓰기 요청에 지정된 하나 이상의 LBA들에서 데이터를 스토리지 매체에 쓸 수 있는 동작(1062)을 진행할 수 있다. 스토리지 장치는 다른 요청을 수신하기 위해 대기하고 동작(1058)으로 리턴할 수 있다. 그러나, 동작(1061)에서, 쓰기 요청의 하나 이상의 LBA들이 스토리지 장치의 로컬 LBA 범위 내에 있지 않은 경우, 방법은 다음을 수행하는 동작(1064)을 진행할 수 있다: 스토리지 장치는 (1) 피어 테이블과 같은 데이터 구조를 사용하여 쓰기 요청에 대응하는 LBA 범위를 갖는 대상 스토리지 장치에 대한 장치 ID를 회수하고 (2) 쓰기 요청에 대응하는 LBA 범위를 갖는 대상 스토리지 장치에 쓰기 요청을 전달할 수 있다. 일부 실시예들에서, 스토리지 장치는 쓰기 요청이 타겟 스토리지 장치에 의해 서비스될 것임을 호스트에 알릴(또는 통지할) 수 있다. 스토리지 장치는 다른 요청을 수신하기 위해 대기하고 동작(1058)으로 리턴할 수 있다.
도 11은 본 개시의 예시적인 실시예에 따른 탄력적 피어 시스템에 스토리지 장치를 추가하기 위한 방법의 예시적인 실시예를 도시한다. 도 11에 도시된 방법은, 예를 들어, 도 2, 도 3, 도 6, 도 7, 및/또는 도 8에 도시된 실시예들을 포함하여 여기에 개시된 스토리지 장치들 중 임의의 것을 사용하여 구현될 수 있다.
도 11을 참조하면, 방법은 호스트가 예를 들어 NSEBD 키워드를 사용하여 새로운 스토리지 장치에 대한 마운트 커맨드를 발행할 수 있는 동작(1166)에서 시작할 수 있다. 동작(1168)에서, 새로 추가된 스토리지 장치는 하나 이상의 다른 스토리지 장치들에 탄력적 피어 시스템의 스토리지 장치들의 풀에 자신의 존재를 알리고(또는 통지하고) LBA들의 범위를 나타내는 메시지를 브로드캐스트할 수 있다. 일부 실시예들에서, 방법은 지정된 스토리지 장치가, 예를 들어 새로 추가된 스토리지 장치에 대한 장치 이름, 시스템 장치 ID, LBA와 범위 등과 같은 정보와 함께 새로운 엔트리(예를 들어, 행)를 추가함으로써, 자신의 피어 테이블을 업데이트할 수 있는 동작(1170)으로 진행할 수 있다. 일부 실시예들에서, 지정된 스토리지 장치는 호스트에 의해, 탄력적 피어 시스템에서의 백그라운드 프로세스에 의해, 처음 추가되거나 더 최근에 추가된 스토리지 장치 등으로 선택될 수 있다. 방법은 지정된 장치가 업데이트된 피어 테이블을 탄력적 피어 시스템의 하나 이상의 다른 스토리지 장치들에 브로드캐스트할 수 있는 동작(1172)으로 진행할 수 있다.
대안적으로, 동작(1168) 이후에, 방법은, 탄력적 피어 시스템의 하나 이상의(예를 들어, 각각) 스토리지 장치는 새로 추가된 스토리지 장치에 의해 브로드캐스트된 메시지의 정보를 기반으로(또는 브로드캐스트된 메시지의 정보에 기초하여) 자신의 로컬 피어 테이블을 업데이트할 수 있는, 동작(1174)으로 진행할 수 있다: 방법은, 지정된 스토리지 장치가 업데이트된 피어 테이블을 새로 추가된 스토리지 장치로 전송할 수 있는, 동작(1176)으로 진행할 수 있다.
도 12는 본 개시의 예시적인 실시예에 따른 탄력적 피어 시스템에서 스토리지 장치를 교체하기 위한 방법의 예시적인 실시예를 도시한다. 도 12에 도시된 방법은, 예를 들어, 도 2, 도 3, 도 6, 도 7 및/또는 도 8에 도시된 실시예를 포함하여 여기에 기재된 임의의 스토리지 장치들을 사용하여 구현될 수 있다.
도 12를 참조하면, 방법은 호스트(예를 들어, 백그라운드 프로세스, 데몬, 디바이스 드라이버 등과 같은 호스트의 소프트웨어)가 하나 이상의 다음 커맨드들을 발행할 수 있는 동작(1278)에서 시작할 수 있다: (1) 교체 스토리지 장치를 포맷하고, (2) 교체 스토리지 장치에 파일 시스템(예를 들어, NSEBD 파일 시스템)을 만들고, (3) 폐기 스토리지 장치에서 교체 스토리지 장치로 콘텐츠(또는 내용, 데이터)(예를 들어, 장치 복사, 디스크 복사 등)를 복사하고, (4) 폐기 스토리지 장치를 마운트 해제하고/하거나 (5) 지정된 스토리지 장치에 교체 스토리지 장치를 알리는(또는 통지하는) 메시지를 전송한다. 방법은 지정된 스토리지 장치가, 예를 들어 엔트리(예를 들어, 행)를 교체 스토리지 장치에 대한 장치 이름, 시스템 장치 ID, LBA 범위 및/또는 등과 같은 정보로 교체함으로써, 자신의 피어 테이블을 업데이트할 수 있는 동작(1280)으로 진행할 수 있다. 일부 실시예들에서, 지정된 스토리지 장치는 호스트에 의해, 탄력적 피어 시스템에서의 백그라운드 프로세스에 의해, 처음 추가되거나 더 최근에 추가된 스토리지 장치 등으로 선택될 수 있다. 방법은 지정된 장치가 업데이트된 피어 테이블을 탄력적 피어 시스템의 하나 이상의 다른 스토리지 장치들에 브로드캐스트할 수 있는 동작(1282)으로 진행할 수 있다.
대안적으로, 동작(1278)에서, 방법은 대체 명령을 수행할 수 있다: (5) (예를 들어, 동작(1278a)에서) 탄력적 피어 시스템의 하나 이상의 다른 스토리지 장치들에 교체 스토리지 장치를 다른 스토리지 장치에 알리는 메시지를 브로드캐스트할 수 있다. 방법은 탄력적 피어 시스템의 하나 이상(예를 들어, 각각의) 스토리지 장치가 호스트에 의해 브로드캐스트된 메시지의 정보를 기반으로 자신의 로컬 피어 테이블을 업데이트할 수 있는 동작(1284)으로 진행할 수 있다. 방법은 지정된 스토리지 장치가 업데이트된 피어 테이블을 교체 스토리지 장치로 전송할 수 있는 동작(1286)으로 진행할 수 있다.
일부 실시예들에서, 호스트 애플리케이션은 탄력적 피어 시스템에서 스토리지 장치를 추가 또는 교체하기 전이나 후에 동일하거나 유사할 수 있는 코드로 구현될 수 있다. 본 개시의 예시적인 실시예들에 따른 예시적인 코드가 표 2에 제공된다.
1 int fd;
2 const char *f_data = "/dev/nvme1n1/app/data/file1.txt";
3 fd=open(f_data, O_RDWR | O_DIRECT | O_CREAT | O_SYNC | O_TRUNC);
4 ## Continue READing and WRITing to /dev/nvme1n1 indefinitely
일부 실시예들에서, 제1 스토리지 장치에서 제2 스토리지 장치로 전달되는 요청은 예를 들어, 제1 스토리지 장치로 전송된 요청을 처리하는 제2 스토리지 장치로부터 발생할 수 있는 보안 문제를 해결하기 위해, 서명, 암호화 프로토콜 등을 포함할 수 있다. 일부 실시예들에서, 호스트는 제1 피어 스토리지 장치로부터 전송이 요청된 제2 피어 스토리지 장치로부터 DMA 전송을 예상하도록 구성될 수 있다. 일부 실시예들에서, 호스트는 DMA 위치와 함께 암호화된 서명을 전송할 수 있다.일부 실시예들에서, 제1 피어 스토리지 장치가 요청을 제2 피어 스토리지 장치로 전달할 때, 요청은 DMA 호스트 위치 및/또는 호스트 서명과 같은 정보를 포함할 수 있다. 제2 피어 스토리지 장치는 DMA 호스트 위치에서 호스트에 직접 응답할 수 있다. 일부 실시예들에서, 이 트랜잭션은 서명 및/또는 동등한 핸드세이크(hand-shake)를 더 포함할 수 있다. 일부 실시예들에서, 이러한 핸드셰이크 프로토콜은 제1 및 제2 피어 스토리지 장치들 모두의 서명을 포함할 수 있다.
일부 실시예들에서, 제1 스토리지 장치가 제2 스토리지 장치에 읽기 요청을 전달할 때, 제2 스토리지 장치는 요청된 데이터를 회수하고 이를 제1 스토리지 장치를 통해 호스트에 반환(또는 리턴)할 수 있다. 구현 세부 사항들에 따라, 호스트가 제1 스토리지 장치와만 상호 작용(interact)할 수 있다.
일부 실시예들에서 호스트는 탄력적 피어 시스템의 하나 이상의 스토리지 장치들에 저장된 데이터의 위치를 나타내는 피어 테이블 또는 다른 데이터 구조의 사본이 제공될 수 있다. 읽기 요청을 구현하기 위해, 호스트는 요청(읽기 데이터에 대한 하나 이상의 LBA들을 포함할 수 있음)을 탄력적 피어 시스템의 하나 이상의(예를 들어, 모든) 스토리지 장치들에 브로드캐스트할 수 있다. 대응하는 LBA들이 없는 장치는 부정 응답 신호(NACK; No Acknowledgement)로 응답할 수 있으며, 읽기 요청에 대응하는(또는 해당하는) LBA들을 가진 하나의 스토리지 장치는 요청을 처리(또는 서비스)할 수 있다.
일부 실시예들에서, 교체되는 폐기 스토리지 장치는 호스트 및/또는 실행 중인 애플리케이션에 알려질 수 있다. 이 상황에서, 예를 들어, 탄력적 피어 시스템이 하나 이상의(예를 들어, 모든) 피어 스토리지 장치들을 해당 디렉터리에 연결할 수 있기 때문에, 애플리케이션 및/또는 호스트는 폐기 스토리지 장치와 연관된 /<directory> 이름을 사용하여 애플리케이션에 대한 하나 이상의 파일에 액세스할 수 있다. 그러나 호스트 또는 애플리케이션이 장치 이름을 사용하는 경우, 애플리케이션이 이전 장치 이름을 사용하여 새 장치와 계속 상호 작용할 수 있도록 교체 스토리지 장치의 이름은 변경될 수 있다.
본 개시의 예시적인 실시예에 따른 하나의 예시적인 구현에서, 시스템은 본질적으로 계층 구조 없이 배열된 2개 이상의 장치들을 포함할 수 있다. 예를 들어, 장치들 중 하나 이상(예를 들어, 모두)은 유사하거나 동일할 수 있다(예를 들어, 장치들 중 하나 이상(예를 들어, 임의의)이 요청을 수신하고 서비스할 수 있다는 의미에서). 이 배열을 구현하기 위해, 장치들 중 하나 이상(예를 들어, 각각)은 다음을 포함할 수 있다: (1) 시스템에 있는 하나 이상의(예를 들어, 모든) 다른 장치들의 전역(또는 글로벌) 정보가 있는 피어 테이블, 및 (2) (a) 장치가 요청의 의도된 주체(subject)인지 여부(예를 들어, 장치는 읽기 또는 쓰기 요청에 대한 하나 이상의 LBA들을 포함하는지 여부), 따라서 요청을 처리할 수 있는지 여부, 또는 (b) 장치는 요청을 다른 장치로 전달해야 하는지 여부를 결정할 수 있는 최소한의 로컬 연산(또는 컴퓨팅) 기능(예를 들어, 요청에 포함된 하나 이상의 LBA들을 기반으로 함). 구현 세부 사항들에 따라 이것은, 예를 들어, 컴퓨팅 성능이 제한된 장치를 사용하여(FPGA 사용) 효율적으로 구현될 수 있고/있거나 둘 이상의 장치들이 있는 시스템이 데이터의 위치를 계속 추적하고/하거나 시스템이 원활하게 성장할 수 있도록 할 수 있는, 간단하면서도 강력한 기술을 제공할 수 있다.
일부 실시예들에서, 그리고 구현 세부 사항들에 따라, 본 개시의 예시적인 실시예에 따른 시스템, 방법, 기구, 장치 등은 임의의 수의 다음 특징 및/또는 다음과 같은 이점을 제공할 수 있다.
일부 실시예들에서, 하나 이상의 스토리지 장치들(예를 들어, NVMe 스토리지 장치 및/또는 연산 스토리지 장치)은 여기에 개시된 탄력적 피어 시스템을 구현하도록 구성될 수 있는 하나 이상의 내부 컨트롤러들로 구현될 수 있다.
일부 실시예들에서, NSEBD 시스템(예를 들어, 에코시스템)은 용량을 동적으로 확장할 수 있는 장치들을 제공하기 위해, 근접 스토리지 인텔리전스(intelligence) 및/또는 피어-투-피어 인프라구조(예를 들어, 계층 구조 없이)를 사용하여 협력할 수 있는, 하나 이상의 스토리지 장치들(예를 들어, 연산 스토리지 장치)을 포함할 수 있다.
일부 실시예들에서, NSEBD 시스템은 단일(또는 싱글) 서버들, 클러스터들 및/또는 다른 분산 환경에서, 분산 파일 시스템 및/또는 그 애플리케이션을 가속화하는 데 도움이 될 수 있다.
일부 실시예들에서, NSEBD 시스템은 기존의 분산 파일 시스템에 의해 활용될 수 있다. 이러한 실시예들에서, NSEBD 시스템은, 예를 들어, 레이턴시를 감소시키고, 처리량을 증가시키고, 및/또는 보다 신뢰할 수 있는 일관성 모델을 제공함으로써, 효율성을 향상시킬 수 있다.
일부 실시예들에서, NSEBD 시스템은 블록 장치와 유사한 방식으로 애플리케이션에 의해 독립적으로 구현 및/또는 액세스될 수 있다.
일부 실시예들에서, NSEBD 장치 교체 방법 메커니즘은 NSEBD 시스템 인프라구조에 결함 허용 능력을 효과적으로 추가할 수 있다.
일부 실시예들에서, SDS 인프라구조를 대체하거나 협력할 때, NSEBD 시스템은 하나 이상의 호스트들에서 CPU 및/또는 RAM 이용률(또는 가동률)을 감소시킬 수 있다.
도 13은 본 개시의 예시적인 실시예에 따른 장치 프로그램에 대한 액세스를 사용자에게 제공하기 위해 사용될 수 있는 호스트 장치의 예시적인 실시예를 도시한다. 도 13에 도시된 호스트 장치(1300)는 메모리 컨트롤러(1304)를 포함할 수 있는 프로세서(1302), 시스템 메모리(1306), 호스트 제어 로직(1308), 및/또는 예를 들어, CXL을 사용하여 구현될 수 있는 인터커넥트 인터페이스(1310)(또는 통신 인터페이스)를 포함할 수 있다. 도 13에 도시된 구성요소들 중 일부 또는 전부는 하나 이상의 시스템 버스(1312)를 통해 통신할 수 있다. 일부 실시예들에서, 도 13에 도시된 하나 이상의 구성요소들은 다른 구성요소들을 사용하여 구현될 수 있다. 예를 들어, 일부 실시예들에서, 호스트 제어 로직(1308)은 시스템 메모리(1306) 또는 다른 메모리에 저장된 명령어들을 실행하는 프로세서(1302)에 의해 구현될 수 있다. 일부 실시예들에서, 호스트 제어 로직(1308)은 예를 들어 도 3에 도시된 호스트 로직(324)을 포함하는 본 명세서에 개시된 호스트 기능 중 임의의 것을 구현하기 위해 사용될 수 있다.
도 1, 도 2, 도 3, 도 4, 도 5, 도 6, 도 7, 도 8, 도 9, 도 10, 도 11 및/또는 도 12와 관련하여 설명된 것을 포함하여 여기에 설명된 임의의 기능은, 임의의 유형의 메모리에 저장된 명령어들을 실행하는, 하드웨어, 소프트웨어 또는 조합 로직, 순차 로직, 하나 이상의 타이머들, 카운터들, 레지스터들 및/또는 상태 머신들, 하나 이상의 CPLD(complex programmable logic devices), FPGA(field programmable gate arrays), ASIC(application specific integrated circuits), x86 프로세서와 같은 CISC(complex instruction set computer) 및/또는 ARM 프로세서와 같은 RISC(reduced instruction set computer)를 포함하는 중앙 처리 장치(CPU), 그래픽 처리 장치(GPU; graphics processing units), 신경 처리 장치(NPU; neural processing units), 텐서 처리 장치(TPU; tensor processing units) 및/또는 등으로 구현될 수 있다. 일부 실시예들에서, 하나 이상의 구성요소(또는 컴포넌트)들은 시스템 온 칩(SOC; system-on-chip)으로서 구현될 수 있다.
도 14는 본 개시의 예시적인 실시예에 따른 데이터를 저장하기 위한 방법의 실시예를 도시한다. 방법은 동작(1402)에서 시작할 수 있다. 동작(1404)에서, 방법은 스토리지 장치에서 장치 표시를 포함하는 입력 및/또는 출력(I/O) 요청을 수신할 수 있다. 장치 표시는 예를 들어 LBA로 구현될 수 있다. 동작(1406)에서, 방법은 스토리지 장치에서 장치 표시가 스토리지 장치를 나타낸다는 결정을 수행할 수 있다. 예를 들어, 결정은 스토리지 장치에서 LBA들의 범위와 일치하는 I/O 요청의 LBA를 기반할 수 있다. 동작(1408)에서, 방법은 결정을 기반으로 스토리지 장치에 의해 I/O 요청을 서비스할 수 있다. 예를 들어, 스토리지 장치는 입출력 요청을 기반으로 읽기 및/또는 쓰기 동작을 수행할 수 있다. 방법은 동작(1410)에서 종료될 수 있다.
도 14에 도시된 실시예 및 여기에 설명된 다른 모든 실시예들은 예시적인 동작 및/또는 구성요소들이다. 일부 실시예들에서, 일부 동작들 및/또는 구성요소들은 생략될 수 있고/있거나 다른 동작들 및/또는 구성요소들이 포함될 수 있다. 더욱이, 일부 실시예들에서, 동작들 및/또는 구성요소들의 시간적 및/또는 공간적 순서는 변경될 수 있다. 일부 구성요소들 및/또는 동작들이 개별 구성요소들로 예시될 수 있지만, 일부 실시예들에서 개별적으로 도시된 일부 구성요소들 및/또는 동작들은 단일 구성요소 및/또는 동작에 통합될 수 있고/있거나 단일 구성 요소 및/또는 동작으로 도시된 일부 구성 요소들 및/또는 동작들은 다수의 구성 요소들 및/또는 동작들로 구현될 수 있다.
위에 개시된 일부 실시예는 다양한 구현 세부 사항들의 맥락에서 설명되었지만, 본 개시의 원리는 이들 또는 임의의 다른 특정 세부 사항들로 제한되지 않는다. 예를 들어, 일부 기능은 특정 구성요소에 의해 구현되는 것으로 설명되었지만, 다른 실시예에서 기능은 상이한 위치에 있고 다양한 사용자 인터페이스를 갖는 상이한 시스템 및 구성요소 사이에 분산될 수 있다. 특정 실시예는 특정 프로세스, 동작 등을 갖는 것으로 설명되었지만, 이러한 용어는 또한 특정 프로세스, 동작 등이 다수의 프로세스, 동작 등으로 구현될 수 있거나 다수의 프로세스, 동작 등이 단일 프로세스, 단계 등으로 통합될 수 있는 실시예를 포함한다. 구성 요소 또는 요소에 대한 참조는 구성 요소 또는 요소의 일부만을 나타낼 수 있다. 예를 들어, 블록에 대한 참조는 전체 블록 또는 하나 이상의 서브블록을 참조할 수 있다. 본 개시 및 청구범위에서 "제1" 및 "제2"와 같은 용어의 사용은 그들이 수정하는 것을 구별하기 위한 목적일 수 있으며 문맥상 달리 명백하지 않는 한 공간적 또는 시간적 순서를 나타내지 않을 수 있다. 일부 실시예들에서, 사물에 대한 언급은 사물의 적어도 일부를 지칭할 수 있고, 예를 들어 "~에 기초한"은 "~에 적어도 부분적으로 기반하는" 등을 지칭할 수 있다. 제1 요소에 대한 참조는 제2 요소의 존재를 의미하지 않을 수 있다. 여기에 개시된 원리는 독립적인 유용성을 가지며 개별적으로 구현될 수 있으며, 모든 실시예가 모든 원리를 활용할 수 있는 것은 아니다. 그러나 원칙은 다양한 조합으로 구현될 수도 있으며, 그 중 일부는 개별 원칙의 이점을 시너지 방식으로 증폭할 수 있다.
위에서 설명된 다양한 세부사항 및 실시예는 본 발명의 원리에 따른 추가 실시예를 생성하기 위해 결합될 수 있다. 본 발명의 원리는 본 발명의 개념을 벗어나지 않는 범위 내에서 배열 및 세부 사항이 변경될 수 있으므로 이러한 변경 및 수정은 다음 특허청구범위에 속하는 것으로 간주된다.

Claims (10)

  1. 데이터를 저장하기 위한 방법에 있어서,
    스토리지 장치에서, 장치 표시를 포함하는 입력 및/또는 출력(I/O) 요청을 수신하는 단계;
    상기 스토리지 장치에서, 상기 장치 표시가 상기 스토리지 장치를 나타낸다는 결정을 수행하는 단계; 그리고
    상기 결정에 기초하여 상기 스토리지 장치에 의해 상기 I/O 요청을 서비스하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 장치 표시는 상기 I/O 요청에 대한 어드레스를 포함하는 방법.
  3. 제 1 항에 있어서,
    상기 스토리지 장치는 제1 스토리지 장치이고, 상기 제1 스토리지 장치는 스토리지 시스템에 설치되며,
    상기 방법은 상기 스토리지 시스템에 제2 스토리지 장치를 설치하는 단계를 더 포함하는 방법.
  4. 제 3 항에 있어서,
    상기 제1 스토리지 장치 및 상기 제2 스토리지 장치는 피어 장치들인 방법.
  5. 제 3 항에 있어서,
    상기 I/O 요청은 제1 I/O 요청이고, 상기 장치 표시는 제1 장치 표시이며, 상기 결정은 제1 결정이며,
    상기 방법은:
    상기 제1 스토리지 장치에서, 제2 장치 표시를 포함하는 제2 I/O 요청을 수신하는 단계;
    상기 제1 스토리지 장치에 의해, 상기 제2 장치 표시가 상기 제2 스토리지 장치를 나타낸다는 제2 결정을 수행하는 단계; 그리고
    상기 제1 스토리지 장치에 의해, 상기 제2 결정에 기초하여 상기 제2 I/O 요청을 상기 제2 스토리지 장치로 전달하는 단계를 더 포함하는 방법.
  6. 제 5 항에 있어서,
    상기 제2 스토리지 장치에 의해, 상기 제2 I/O 요청을 서비스하는 단계를 더 포함하는 방법.
  7. 제 5 항에 있어서,
    상기 제1 결정을 수행하는 단계는 데이터 구조의 상기 제1 스토리지 장치에 대한 제1 엔트리에 기초하고,
    상기 방법은 상기 제2 스토리지 장치의 설치에 기초하여, 상기 데이터 구조에 상기 제2 스토리지 장치에 대한 제2 엔트리를 추가하는 단계를 더 포함하는 방법.
  8. 제 7 항에 있어서,
    상기 제2 결정을 수행하는 단계는 상기 제2 엔트리에 기초하는 방법.
  9. 스토리지 매체;
    통신 인터페이스; 및
    요청 로직을 포함하는 제어 회로를 포함하고,
    상기 요청 로직은:
    상기 통신 인터페이스를 사용하여, 장치 표시를 포함하는 입력 및/또는 출력(I/O) 요청을 수신하고;
    상기 장치 표시가 스토리지 장치를 나타낸다는 결정을 수행하고; 그리고
    상기 스토리지 매체를 사용하여 상기 결정에 기초하여 I/O 요청을 서비스하도록 구성되는 스토리지 장치.
  10. 제 9 항에 있어서,
    상기 스토리지 장치는 제1 스토리지 장치이고, 상기 I/O 요청은 제1 I/O 요청이고, 상기 장치 표시는 제1 장치 표시이고, 상기 결정은 제1 결정이고,
    상기 요청 로직은:
    상기 통신 인터페이스를 사용하여, 제2 장치 표시를 포함하는 제2 I/O 요청을 수신하고;
    상기 제2 장치 표시가 제2 스토리지 장치를 나타낸다는 제2 결정을 수행하고; 그리고
    상기 통신 인터페이스를 사용하여, 제2 결정에 기초하여 상기 제2 I/O 요청을 상기 제2 스토리지 장치로 전달하도록 더 구성된 스토리지 장치.
KR1020220127610A 2021-10-07 2022-10-06 데이터를 저장하기 위한 방법, 스토리지 장치, 및 시스템 KR20230051087A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202163253539P 2021-10-07 2021-10-07
US63/253,539 2021-10-07
US17/665,490 2022-02-04
US17/665,490 US20230110067A1 (en) 2021-10-07 2022-02-04 Systems, methods, and devices for near storage elasticity

Publications (1)

Publication Number Publication Date
KR20230051087A true KR20230051087A (ko) 2023-04-17

Family

ID=83688600

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220127610A KR20230051087A (ko) 2021-10-07 2022-10-06 데이터를 저장하기 위한 방법, 스토리지 장치, 및 시스템

Country Status (4)

Country Link
US (1) US20230110067A1 (ko)
EP (1) EP4163780A1 (ko)
KR (1) KR20230051087A (ko)
CN (1) CN115951821A (ko)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0406104D0 (en) * 2004-03-17 2004-04-21 Koninkl Philips Electronics Nv Connecting devices to a peer-to-peer network
US8095728B2 (en) * 2008-04-18 2012-01-10 Oracle America, Inc. Method and system for power aware I/O scheduling
CN103080917B (zh) * 2010-06-18 2014-08-20 Lsi公司 可扩展存储装置
KR20190033284A (ko) 2017-09-21 2019-03-29 삼성전자주식회사 PCIe P2P 접속된 스토리지 장치들 사이의 데이터 전송 방법 및 시스템
US10768820B2 (en) * 2017-11-16 2020-09-08 Samsung Electronics Co., Ltd. On-demand storage provisioning using distributed and virtual namespace management
US10628074B2 (en) * 2018-08-03 2020-04-21 Western Digital Technologies, Inc. Tiered storage system with data routing by peer storage devices

Also Published As

Publication number Publication date
EP4163780A1 (en) 2023-04-12
US20230110067A1 (en) 2023-04-13
CN115951821A (zh) 2023-04-11

Similar Documents

Publication Publication Date Title
US11797181B2 (en) Hardware accessible external memory
US11593319B2 (en) Virtualized data storage system architecture
KR101841997B1 (ko) 순응적 존속을 위한 시스템, 방법 및 인터페이스
US9811276B1 (en) Archiving memory in memory centric architecture
US11144399B1 (en) Managing storage device errors during processing of inflight input/output requests
US8504670B2 (en) Virtualized data storage applications and optimizations
US10331353B2 (en) Scalable data access system and methods of eliminating controller bottlenecks
US20160147855A1 (en) Content-based replication of data in scale out system
US11586391B2 (en) Technique for efficient migration of live virtual disk across storage containers of a cluster
US9367398B1 (en) Backing up journal data to a memory of another node
US11409454B1 (en) Container ownership protocol for independent node flushing
JP2012133772A (ja) リモートストレージシステムのためのデータ処理方法及び装置
US20230367746A1 (en) Distributed File System that Provides Scalability and Resiliency
US20240143233A1 (en) Distributed File System with Disaggregated Data Management and Storage Management Layers
US11216204B2 (en) Degraded redundant metadata, DRuM, technique
US11194501B2 (en) Standby copies withstand cascading fails
CN113886002A (zh) 存储装置和辅助虚拟机迁移的方法
US20220391361A1 (en) Distributed File System with Reduced Write and Read Latencies
KR20230051087A (ko) 데이터를 저장하기 위한 방법, 스토리지 장치, 및 시스템
EP4102350A1 (en) Distributed file system that provides scalability and resiliency