KR20210008826A - 논리 블록 어드레싱 범위 충돌 크롤러 - Google Patents

논리 블록 어드레싱 범위 충돌 크롤러 Download PDF

Info

Publication number
KR20210008826A
KR20210008826A KR1020207014512A KR20207014512A KR20210008826A KR 20210008826 A KR20210008826 A KR 20210008826A KR 1020207014512 A KR1020207014512 A KR 1020207014512A KR 20207014512 A KR20207014512 A KR 20207014512A KR 20210008826 A KR20210008826 A KR 20210008826A
Authority
KR
South Korea
Prior art keywords
range
logical block
block address
collision
command
Prior art date
Application number
KR1020207014512A
Other languages
English (en)
Other versions
KR102366512B1 (ko
Inventor
코리 라피
다린 에드워드 게르하르트
니콜라스 에드워드 오트마이어
윌리엄 자레드 워커
Original Assignee
웨스턴 디지털 테크놀로지스, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 웨스턴 디지털 테크놀로지스, 인코포레이티드 filed Critical 웨스턴 디지털 테크놀로지스, 인코포레이티드
Publication of KR20210008826A publication Critical patent/KR20210008826A/ko
Application granted granted Critical
Publication of KR102366512B1 publication Critical patent/KR102366512B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • 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
    • 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/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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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]
    • 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/10Providing a specific technical effect
    • G06F2212/1008Correctness of operation, e.g. memory ordering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • 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/7201Logical to physical mapping or translation of blocks or pages

Landscapes

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

Abstract

펌웨어 또는 하드웨어에 상주하는 범위 크롤러 알고리즘을 실행하도록 구성된 제어기 및 하나 이상의 범위 엔트리들(RE들)을 포함하는 데이터 테이블을 갖는 디바이스로서, 여기서 RE들 각각은 커맨드 명령어와 연관된 논리 블록 어드레스(LBA) 스팬의 일부이고, 각각의 LBA 스팬은 하나 이상의 LBA 범위들을 갖고, 각각의 LBA 범위는 하나 이상의 순차적 LBA들로 이루어진다. 디바이스는 또한 하나 이상의 LBA들 사이의 RE 충돌들과 연관된 데이터를 저장하도록 구성된 충돌 비트맵, 및 RE 충돌과 연관되지 않는 선택된 LBA 범위들을 해제하도록 구성된 커맨드 디스패처를 포함한다. 범위 크롤러 알고리즘은 RE들 사이의 충돌들을 검출하기 위해 데이터 테이블을 검색하도록 구성된다.

Description

논리 블록 어드레싱 범위 충돌 크롤러
관련 출원의 상호 참조
본 출원은 2018년 9월 20일자로 출원된 미국 출원 제16/137,261호에 대한 우선권을 주장하며, 이 출원은 2018년 6월 14일자로 출원된 가출원 제62/685,196호에 대한 우선권을 주장하며, 이들 둘 모두는 그들 전체가 본 명세서에 참고로 포함된다.
기술분야
본 개시의 실시예들은 일반적으로 데이터 어드레스 관리에 관한 것이며, 보다 구체적으로는, 충돌이 검출될 때 논리 블록 어드레스(logical block address, LBA)의 부분 세그먼트들을 디스패치하는 것에 관한 것이다.
데이터 충돌은 프로세서 내에서 2개 이상의 커맨드 명령어(command instruction)들이 동시에 메모리에서 동일한 어드레스에 액세스하려고 시도할 때 발생한다. 현재, 충돌이 솔리드 스테이트 드라이브(SSD) 제어기와 같은 프로세서에 의해 검출될 때, 하나의 응답은, 데이터 내용이 결정론적 방식으로 전송되는 것을 보장하기 위해 커맨드 명령어들을 수신 순서로 연속적으로 실행하는 것인데, 이는 프로그램 성능에 부정적인 영향을 미친다. 다른 응답은 커맨드 명령어들 둘 모두를 취소하는 것이며, 따라서 어느 명령어든 메모리 위치에 액세스하고 프로그램 속도를 늦추는 것을 방지한다. 또한, 분산된(예컨데, 부분 또는 분리된(disjointed)) LBA 범위들을 갖는 커맨드 명령어들의 경우, 프로세서는 전체 LBA 범위에 대한 데이터가 수신될 때까지 커맨드 명령어들의 실행을 정지시킨다. 이들 접근법은 커맨드 수신/디스패치 명령어들을 지연시키고 시스템의 서비스 품질(Quality-of-Service, QoS)을 감소시킴으로써 동작 환경에 지연 및 비효율성을 도입한다.
따라서, 성능, 효율, 및 QoS를 증가시키는 전체 및 부분 LBA 충돌들에 대한 데이터 충돌들을 검출하고 이에 응답하기 위한 디바이스 및 방법이 필요하다.
일 실시예에서, 펌웨어에 상주하는 범위 크롤러 알고리즘(range crawler algorithm)을 실행하도록 구성된 제어기 및 하나 이상의 범위 엔트리(range entry, RE)들을 포함하는 데이터 테이블을 갖는 디바이스로서, 여기서 RE들 각각은 커맨드 명령어와 연관된 LBA 스팬(span)의 일부이고, 각각의 LBA 스팬은 하나 이상의 LBA 범위들을 갖고, 각각의 LBA 범위는 하나 이상의 순차적 LBA들로 이루어진다. 디바이스는 또한 하나 이상의 LBA들 사이의 RE 충돌들과 연관된 데이터를 저장하도록 구성된 충돌 비트맵(collision bitmap), 및 RE 충돌과 연관되지 않는 선택된 LBA 범위들을 해제하도록(release) 구성된 커맨드 디스패처를 포함한다. 범위 크롤러 알고리즘은 RE들 사이의 충돌들을 검출하기 위해 데이터 테이블을 검색하도록 구성된다.
다른 실시예에서, 제어기 상의 하드웨어에 상주하는 범위 크롤러 알고리즘을 실행하도록 구성된 제어기 및 하나 이상의 RE들을 저장하도록 구성된 데이터 테이블을 갖는 디바이스로서, 여기서 하나 이상의 RE들 각각은 커맨드 명령어와 연관된 LBA 스팬의 일부이고, 각각의 LBA 스팬은 하나 이상의 LBA 범위들로 이루어지고, 각각의 LBA 범위는 하나 이상의 순차적 LBA들로 이루어진다. 디바이스는 또한 하나 이상의 LBA들 사이의 RE 충돌들과 연관된 데이터를 저장하도록 구성된 충돌 비트맵, 및 RE 충돌과 연관되지 않는 선택된 LBA 범위들을 해제하도록 구성된 커맨드 디스패처를 포함하며, 여기서 범위 크롤러 알고리즘은 RE들 사이의 충돌들을 검출하기 위해 데이터 테이블을 검색하도록 구성된다. 디바이스는 또한 RE들 사이의 충돌들을 검출하고 이에 응답하기 위한 수단을 포함하며, 여기서 범위 크롤러 알고리즘은 RE들 사이의 충돌들을 검출하기 위해 데이터 테이블을 검색하도록 구성되고, 충돌들에 응답하는 것은, 커맨드 디스패처에 의해, 충돌 비트맵에 기초하여 선택된 LBA 스팬들을 디스패치하는 것을 포함한다.
다른 실시예에서, 제어기로부터 분리된 하드웨어에 상주하는 범위 크롤러 알고리즘을 실행하도록 구성된 제어기 및 하나 이상의 RE들을 저장하도록 구성된 데이터 테이블을 갖는 디바이스로서, 여기서 하나 이상의 RE들 각각은 커맨드 명령어와 연관된 LBA 스팬의 일부이고, 각각의 LBA 스팬은 하나 이상의 LBA 범위들을 포함하고, 각각의 LBA 범위는 하나 이상의 순차적 LBA들을 포함한다. 디바이스는 또한 하나 이상의 LBA들 사이의 RE 충돌들과 연관된 데이터를 저장하도록 구성된 충돌 비트맵, 및 충돌과 연관되지 않는 선택된 전체 및 부분 LBA 범위들을 해제하도록 구성된 커맨드 디스패처를 포함하며, 여기서 범위 크롤러 알고리즘은 RE들 사이의 충돌들을 검출하기 위해 데이터 테이블을 검색하도록 구성된다.
다른 실시예에서, 저장 디바이스의 충돌 관리를 수행하기 위한 방법으로서, 본 방법은, 제어기로부터 하나 이상의 커맨드 명령어들을 수신하는 단계를 포함하며, 여기서 각각의 커맨드 명령어는 LBA 스팬에 액세스하고, 각각의 LBA 스팬은 다수의 범위들을 포함한다. 본 방법은 또한, 데이터 테이블에 의해 각각의 LBA 범위와 연관된 RE를 저장하는 단계, 범위 크롤러 알고리즘에 의해 2개 이상의 RE들 사이의 충돌을 검출하는 단계, 제어기에 의해 충돌에 기초하여 충돌 비트맵을 업데이트하는 단계, 및 커맨드 디스패처에 의해 충돌 비트맵에 기초하여 선택된 LBA 범위들을 저장 디바이스로 디스패치하는 단계를 포함한다.
다른 실시예에서, 저장 디바이스에 대한 범위 크롤러 알고리즘을 동작시키는 방법으로서, 본 방법은, 데이터 테이블로부터 하나 이상의 RE들을 수신하는 단계 - 각각의 RE는 커맨드 명령어와 연관된 LBA 범위를 포함함 -, 및 범위 크롤러 알고리즘에 의해 2개 이상의 RE들을 비교하는 단계를 포함한다. 본 방법은 또한, 범위 크롤러 알고리즘에 의해 2개 이상의 RE들 사이의 충돌을 검출하는 단계, 범위 크롤러 알고리즘에 의해 충돌을 검출하는 것에 기초하여 충돌 비트맵을 업데이트하는 단계, 및 충돌 비트맵에 기초하여 선택된 LBA의 범위들을 디스패치하는 단계를 포함한다.
상기에 언급된 본 개시의 특징들이 상세히 이해될 수 있는 방식으로, 상기에 간략하게 요약된 본 개시의 보다 구체적인 설명이 실시예들을 참조하여 이루어질 수 있으며, 이들 실시예 중 일부가 첨부 도면에 예시되어 있다. 그러나, 첨부 도면은 단지 본 개시의 단지 전형적인 실시예들을 도시하는 것이므로 본 개시의 범위를 제한하는 것으로 간주되지 않아야 한다는 것이 주목되어야 하는데, 이는 본 개시가 다른 균등하게 유효한 실시예들을 허용할 수 있기 때문이다.
도 1은 일 실시예에 따른, 저장 디바이스가 호스트 디바이스와 결합되는 저장 시스템을 도시하는 개략적 블록도이다.
도 2는 일 실시예에 따른, LBA 범위 충돌 크롤러 디바이스를 도시하는 개략적 블록도이다.
도 3은 일 실시예에 따른, LBA 범위 충돌 크롤러의 대표적인 동작을 도시한다.
도 4는 일 실시예에 따른, RE, 및 커맨드 명령어들과 연관된 RE들의 다수의 리스트들을 도시하는 블록도이다.
도 5는 일 실시예에 따른, 다수의 RE들, RE들 사이의 여러 충돌들, 및 결과적인 충돌 비트 맵들을 도시한다.
도 6은 일 실시예에 따른, 충돌 검출 및 커맨드 디스패치 목적을 위한 LBA RE 취급을 위한 방법을 도시하는 흐름도이다.
도 7은 일 실시예에 따른, 부분 어드레스 충돌들을 검출하고 디스패치하는 것과 연관된 LBA 범위 크롤러 알고리즘의 동작 방법을 도시하는 흐름도이다.
이해를 촉진하기 위해, 도면들에 공통인 동일한 요소들을 지시하기 위해, 가능한 경우, 동일한 도면 부호들이 사용되었다. 일 실시예에 개시된 요소들이 구체적인 언급 없이도 다른 실시예들에서 유익하게 이용될 수 있다는 것이 고려된다.
하기에서, 본 개시의 실시예들을 참조한다. 그러나, 본 개시는 설명된 특정 실시예들로 제한되지 않는다는 것이 이해되어야 한다. 대신에, 하기의 특징들 및 요소들의 임의의 조합이, 상이한 실시예들과 관련되든지 또는 그렇지 않든지 간에, 본 개시를 구현하고 실시하기 위해 고려된다. 게다가, 본 개시의 실시예가 다른 가능한 해법들에 비해 그리고/또는 종래 기술에 비해 이점을 달성할 수 있지만, 특정 이점이 주어진 실시예에 의해 달성되는지 여부는 본 개시의 제한이 아니다. 따라서, 하기의 태양들, 특징들, 실시예들, 및 이점들은 단지 예시적인 것이며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한으로 간주되지 않는다. 마찬가지로, "본 개시"에 대한 언급은 본 명세서에 개시되는 임의의 발명의 주제의 일반화로서 해석되어서는 안되며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한인 것으로 간주되어서는 안된다.
본 개시는 일반적으로 펌웨어 또는 하드웨어에 상주하는 범위 크롤러 알고리즘을 실행하도록 구성된 제어기 및 하나 이상의 RE들을 포함하는 데이터 테이블을 갖는 디바이스를 기술하며, 여기서 RE들 각각은 커맨드 명령어와 연관된 LBA 스팬의 일부이고, 각각의 LBA 스팬은 하나 이상의 LBA 범위들을 갖고, 각각의 LBA 범위는 하나 이상의 순차적 LBA들로 이루어진다. 디바이스는 또한 하나 이상의 LBA들 사이의 RE 충돌들과 연관된 데이터를 저장하도록 구성된 충돌 비트맵, 및 RE 충돌과 연관되지 않는 선택된 LBA 범위들을 해제하도록 구성된 커맨드 디스패처를 포함한다. 범위 크롤러 알고리즘은 RE들 사이의 충돌들을 검출하기 위해 데이터 테이블을 검색하도록 구성된다.
도 1은 일 실시예에 따른, 저장 디바이스(102)가 메모리 저장 및 제어, 또는 저장 어레이로서 기능하고 호스트 디바이스(106)와 결합되는, 저장 시스템(100)을 도시하는 개략적 블록도이다. 저장 시스템(100)은 호스트 디바이스(106)를 위한 대용량 저장 디바이스로서 집합적으로 기능하는 복수 배열 독립 디스크(redundant array of independent disk, RAID)로서 구성된 복수의 저장 디바이스들(102)을 포함할 수 있다. 일 실시예에서, 호스트 디바이스(106)는 데이터를 저장 및 검색하기 위해 저장 디바이스(102)에 포함된 비휘발성 메모리 디바이스들을 이용할 수 있다. 도 1에 도시된 바와 같이, 호스트 디바이스(106)는 인터페이스(104)를 통해 저장 디바이스(102)와 통신한다. 호스트 디바이스(106)는 컴퓨터 서버, NAS(network attached storage) 유닛, 데스크톱 컴퓨터, 노트북(예컨대, 랩톱) 컴퓨터, 태블릿 컴퓨터, 셋톱 박스, 전화 핸드셋, 예컨대 "스마트" 폰, "스마트" 패드, 텔레비전, 카메라, 디스플레이 디바이스, 디지털 미디어 플레이어, 비디오 게임 콘솔, 비디오 스트리밍 디바이스 등을 포함하는, 광범위한 디바이스들 중 임의의 것을 포함할 수 있다.
도 1에 도시된 바와 같이, 저장 디바이스(102)는 인터페이스(104), 저장 제어기(108), 하나 이상의 비휘발성 메모리 디바이스들(110A 내지 110N)(a 내지 n으로 번호가 매겨짐), 및 LBA 범위 충돌 크롤러(120)를 포함한다. 일부 실시예들에서, 저장 디바이스(102)는 명료함을 위해 도 1에 도시되지 않은 추가적인 컴포넌트들 또는 모듈들을 포함할 수 있다. 일례로서, 저장 디바이스(102)는 저장 디바이스(102)의 컴포넌트들 및 모듈들이 기계적으로 부착되고 저장 디바이스(102)의 컴포넌트들 및 모듈들 등을 전기적으로 상호접속하는 전기전도성 트레이스들을 포함하는 인쇄 회로 기판(PCB)을 포함할 수 있다. 일부 실시예들에서, 저장 디바이스(102)의 물리적 치수들 및 커넥터 구성들은 하나 이상의 표준 폼 팩터를 따른다. 일부 예시적인 표준 폼 팩터들은 3.5" 데이터 저장 디바이스(예컨대, 하드 디스크 드라이브(HDD) 또는 SSD), 2.5" 데이터 저장 디바이스, 1.8" 데이터 저장 디바이스, PCI(peripheral component interconnect) 디바이스, PCI-X(PCI-extended) 디바이스, 및 PCIe(PCI Express) 디바이스(예컨대, PCIe x1, x4, x8, x16, PCIe Mini Card, MiniPCI 등)를 포함하지만, 이로 제한되지 않는다. 일부 실시예들에서, 저장 디바이스(102)는 호스트 디바이스(106)의 마더보드에 직접 결합(예컨대, 직접 솔더링)될 수 있다.
인터페이스(104)는 호스트 디바이스(106)와 데이터를 교환하기 위한 데이터 버스 및 호스트 디바이스(106)와 커맨드들을 교환하기 위한 제어 버스를 포함할 수 있다. 인터페이스(104)는 임의의 적합한 프로토콜에 따라 동작할 수 있다. 일례로서, 인터페이스(104)는 다음의 프로토콜들 중 하나 이상에 따라 동작할 수 있다: ATA(advanced technology attachment)(예컨대, SATA(serial-ATA) 및 PATA(parallel-ATA)), FCP(Fibre Channel Protocol), SCSI(small computer system interface), SAS(serially-attached SCSI), PCI, PCIe, NVMe(non-volatile memory express) 등. 인터페이스(104)의 전기 접속부들(예컨대, 데이터 버스, 제어 버스, 또는 둘 모두)은 저장 제어기(108)에 전기적으로 접속되어, 호스트 디바이스(106)와 저장 제어기(108) 사이의 전기 접속부들을 제공한다. 일부 실시예들에서, 인터페이스(104)의 전기 접속부들은 또한 저장 디바이스(102)가 호스트 디바이스(106)로부터 전력을 수신하도록 허용할 수 있다.
저장 디바이스(102)는 a 내지 n으로 번호가 매겨진 복수의 개별 디바이스들을 포함할 수 있는 하나 이상의 메모리 디바이스들(110A 내지 110N)을 포함한다. 메모리 디바이스들(110A 내지 110N)은 데이터를 저장 및/또는 검색하도록 구성될 수 있다. 일례로서, 하나의 메모리 디바이스(110A)는 저장 제어기(108)로부터 데이터 및 메시지들을 수신할 수 있으며, 저장 제어기(108)는 메모리 디바이스(110A)로 하여금 그 데이터를 저장하도록 지시한다. 유사하게, 메모리 디바이스(110A)는 저장 제어기(108)로부터 메시지들을 수신할 수 있으며, 저장 제어기(108)는 메모리 디바이스(110A)로 하여금 데이터를 검색하도록 지시한다. 일부 실시예들에서, 복수의 메모리 디바이스들(110A 내지 110N) 각각은 다이로 지칭될 수 있다. 또한 일부 실시예들에서, 단일 물리적 집적 회로(IC 또는 칩)가 복수의 다이들(즉, 복수의 메모리 디바이스들)을 포함할 수 있다. 일부 실시예들에서, 각각의 메모리 디바이스(110A 내지 110N)는 비교적 많은 양의 데이터(예를 들어, 128MB, 256MB, 1GB, 2GB, 4GB, 8GB, 16GB, 32GB, 64GB, 128GB, 256GB, 512GB, 1TB 등)를 저장하도록 구성될 수 있다. 본 명세서에 열거된 예들은 제한적이지 않으며 다른 크기가 가능하다. 또한, 일부 실시예들에서, 각각의 메모리 디바이스(110A 내지 110N)는 플래시 메모리 디바이스, PCM(phase-change memory) 디바이스, ReRAM(resistive random-access memory) 디바이스, MRAM(magnetoresistive random-access memory) 디바이스, F-RAM(ferroelectric random-access memory) 디바이스, 홀로그래픽 메모리 디바이스, 및 임의의 다른 유형의 비휘발성 메모리 디바이스와 같은 임의의 유형의 비휘발성 메모리를 포함할 수 있다.
플래시 메모리 디바이스들은 NAND 또는 NOR 기반 플래시 메모리 디바이스들을 포함할 수 있고, 각각의 메모리 셀에 대한 트랜지스터의 플로팅 게이트에 포함된 전하에 기초하여 데이터를 저장할 수 있다. NAND 플래시 메모리 디바이스들에서, 플래시 메모리 디바이스는 복수의 블록들로 분할될 수 있으며, 이들은 복수의 페이지들로 분할될 수 있다. 특정 메모리 디바이스 내의 복수의 블록들 중의 각각의 블록은 복수의 NAND 셀들을 포함할 수 있다. NAND 셀들의 행들은 워드 라인을 이용하여 전기적으로 접속되어 복수의 페이지들 중 소정 페이지를 정의할 수 있다. 복수의 페이지들 각각 내의 각자의 셀들은 각자의 비트 라인들에 전기적으로 접속될 수 있다. 저장 제어기(108)는 페이지 레벨에서 NAND 플래시 메모리 디바이스들에 데이터를 기입하고 그로부터 데이터를 판독하고, 블록 레벨에서 NAND 플래시 메모리 디바이스들로부터 데이터를 소거할 수 있다.
도 1을 계속 참조하면, 저장 디바이스(102)는 저장 디바이스(102)의 하나 이상의 동작들을 관리하는 저장 제어기(108), 및 충돌 크롤러(120)를 포함한다. 일 실시예에서, 저장 제어기(108)는 메모리 디바이스들(110A 내지 110N)로부터의/로의 데이터의 판독 및/또는 기입을 관리할 수 있다. 일부 실시예들에서, 저장 디바이스(102)가 호스트 디바이스(106)로부터 기입 커맨드를 수신할 때, 저장 제어기(108)는 메모리 디바이스들(110A 내지 110N)에 데이터를 저장하기 위한 데이터 저장 커맨드를 개시하고 데이터 저장 커맨드의 진행을 모니터링할 수 있다. 적어도 일부 실시예들에서, 저장 제어기(108)는 저장 시스템(100)의 적어도 하나의 동작 특성을 결정하고 저장 시스템(100)의 적어도 하나의 동작 특성이 메모리에(예컨대, 메모리 디바이스들(110A 내지 110N)에) 저장되게 할 수 있다. 일례로서, 동작 특성들은 제어기 레지스터 정보, 펌웨어 데이터 구조, 펌웨어 이벤트 이력, 호스트-구성된 모드 설정(예컨대, 포맷화된 용량, 전력 모드, 암호화 모드 등), 디바이스 상태(예컨대, 사용된 드라이브 공간의 양, 디바이스의 온도, SMART 파라미터들의 상태 등), 호스트 커맨드 시퀀스 및 이력 등을 포함할 수 있다. 펌웨어 데이터 구조의 예들은 성능 및 작업부하 통계, 에러 통계, 및 비휘발성 메모리의 상태 정보(예컨대 유효한 고객 데이터의 양 및 새로운 고객 데이터를 저장할 준비가 된 메모리의 양)를 포함할 수 있다. 일부 실시예들에서, 저장 제어기(108)는 하나 이상의 메모리 디바이스들(110A 내지 110N)의 시스템 영역에 동작 특성들을 저장할 수 있다.
LBA 범위 충돌 크롤러(120)는 2개 이상의 LBA들 사이에서 데이터 충돌 검출을 수행하는 알고리즘이다. 일부 실시예들에서, 충돌 크롤러(120)는 저장 제어기(108) 내의 펌웨어에 상주하는 반면, 다른 실시예들에서, 충돌 크롤러(120)는 저장 제어기(108) 내에 또는 저장 제어기(108)의 외부에, 예컨대 저장 디바이스(102) 내에 또는 저장 시스템(100)의 다른 모듈 내에 상주한다. 충돌 크롤러의 추가의 상세 사항이 도 2에 추가로 기술된다.
도 2는 일 실시예에 따른, 도 1의 LBA 범위 충돌 크롤러(120)를 도시하는 개략적 블록도(200)이다. 충돌 크롤러(120)는 데이터 충돌들을 검출하고 이에 응답할 시 충돌 크롤러(120)의 동작들을 모니터링하고 제어하도록 구성된 크롤러 제어기(202)를 포함한다. 일 실시예에서, 크롤러 제어기(202)는 충돌 크롤러(120) 내의 전용 프로세서이다. 다른 실시예들에서, 크롤러 제어기(202)의 기능들은 도 1의 저장 제어기(108)에 의해 실행되며, 다른 실시예들이 가능하다. 충돌 크롤러(120)는 또한 하나 이상의 RE들(204)을 포함하며, 이는 LBA 범위들을 포함하는 데이터 엔트리들이고 충돌 크롤러(120)가 하나 이상의 RE들(204) 사이의 데이터 충돌들을 검출하게 하도록 구성된다.
RE들(204)은 시작 어드레스 및 길이를 사용함으로써 인접한 LBA 스팬들을 나타낸다. 일례로서, 시작 값이 4이고 길이가 8인 RE(204)는 LBA 4에서 시작하고 8개의 논리 블록들 동안 계속되어, LBA 11에서 종료될 것이다. 충돌 크롤러(120)는 또한 RE들(204)의 저장을 위한 하나 이상의 데이터 테이블들(206)을 포함한다. 데이터 테이블(206)은 그들의 연관된 커맨드 명령어들에 기초하여 다수의 RE들(204)을 저장하고 열거하는데, 이때 단일 커맨드 명령어 하에서 연관된 모든 RE들(204)은 하나의 리스트를 구성하고, RE들(204)의 다른 리스트들은 각각의 리스트가 상이한 커맨드 명령어들에 기초하여 형성된다. 본 명세서에 기술된 바와 같이 여러 리스트들로 구성된 다수의 RE들(204)을 갖는 데이터 테이블(206)의 일례에 대한 도 4를 참조한다.
충돌 크롤러(120)는 또한 하나 이상의 범위 크롤러 알고리즘들(208)(범위 크롤러들)을 포함하며, 이는 RE(204) 내에서 LBA 범위들을 비교하고 RE들(204) 중 임의의 하나 또는 임의의 복수에서 LBA의 범위들 둘 모두에 의해 공유되는 임의의 충돌하는 어드레스들이 있는지 여부를 확인하도록 체크함으로써 하나 이상의 RE들(204)을 사용하여 검출 프로세스를 실행한다. 임의의 공유된 LBA 범위 값들이 식별되고 충돌 비트맵(210)에 저장되는데, 이는 각각의 RE(204)에 대한 LBA 충돌 상태를 각각의 충돌된 RE(204)에 대한 별개의 비트로서 기록하는 로컬 또는 원격 메모리 내의 위치이다. 일부 실시예들에서, 범위 크롤러 알고리즘(208)은 단일 LBA 범위 및 관련 RE(204)를 포함하는 파싱된(parsed) 커맨드 명령어를 사용하여 동작한다. 다른 실시예들에서, LBA 범위는 세그먼트화되거나 또는 분리된다. 또한 일부 실시예들에서, 충돌 비트맵(210)의 다수의 예들이 가능하며, 이때 하나의 충돌 비트맵(210)이 임의의 2개의 RE들(204)을 비교한 결과들을 기록하는 반면, 다른 실시예들에서, 충돌 비트맵(210)은 모든 RE들(204)에 대한 충돌 데이터를 단일 파일에서 포함한다. 마지막으로, 충돌 크롤러(120)는 충돌 비트맵(210)의 내용에 기초하여, 적절하게, 전체 및 부분 LBA 범위들을 유지 및 해제하도록 구성되는 커맨드 디스패처(디스패처)(212)를 포함한다. 일례로서, 모두 0을 포함하며 따라서 충돌이 없음을 나타내는 RE의 충돌 비트맵(210)에 대해, 디스패처(212)는 RE(204)를 해제하여 RE LBA가 액세스될 수 있게 할 것이다. RE들(204)에 관련된 그리고 데이터 테이블에서 RE들(204)을 비교하는 것에 관련된 추가 상세 사항이 도 4에 개시된다.
도 3은 일 실시예에 따른, 커맨드 슬롯 리스트(300)(커맨드 명령어들의 리스트로도 알려짐) 및 RE들의 리스트(350)를 갖는 LBA 범위 충돌 크롤러 예를 도시한다. 범위 충돌 크롤러 예는 도 2의 범위 크롤러 알고리즘(208)의 일 실시예이며, 다른 실시예들이 가능하다. 커맨드 슬롯 리스트(300)에서, 커맨드 슬롯 ID 번호(302), 타임스탬프(304), 커맨드(306), 시작 어드레스(308), 액세스된 블록들의 길이(310), 및 리스트 포인터(312)를 포함하는 여러 열들이 식별된다. 일례로서, 커맨드 슬롯(302) #2에서, 타임스탬프 1.004에, LBA 32에서 시작하는 멀티-디스크립터 Unmap 커맨드가 있다. 그것은 4개의 RE들(204)(RE 2, 8, 9, 및 10)로 구성되는 RE 리스트(350)를 가지며, 각각은 Unmap 커맨드가 적용되는 인접한 LBA 스팬들을 기술한다: RE 2는 LBA 스팬 32 내지 35를 기술하고, RE 8은 LBA 스팬 40 내지 43을 기술하고, RE 9는 LBA 스팬 48 내지 51을 기술하고, RE 10은 LBA 스팬 56 내지 59를 기술한다. 이러한 범위 충돌 크롤러 예에서, 임의의 다른 관련 RE들(204)이 커맨드 슬롯 2의 Unmap 커맨드 후에 도착하여 RE 2가 실행을 완료하기 전에 어드레스들 32 내지 35에 액세스하려고 시도하는 경우, 충돌이 생성될 것이고 칩입하는 RE(204)의 충돌 비트맵의 비트 2가 설정될 것이며, 이는 칩입하는 RE(204)가 안전하게 디스패치될 수 없음을 나타낸다.
LBA 범위 충돌 크롤러 예는 RE들의 리스트(350)로 계속되며, 여기서 리스트는 RE 인덱스(352)(이 예에 대해서만 사용되며 RE들의 리스트(350)에는 존재하지 않는 참조 번호), 시작 LBA(354), 길이(356), 다음 RE 포인터(358), 변경 데이터(alters data)(360), 타임스탬프(362), 및 범위 충돌 비트맵(364)으로 라벨링된 열들을 포함한다. 각각의 RE(204)와 연관된 범위 충돌 비트맵(364)이 있다. 일례로서, RE 인덱스(352) #2는 LBA 32에서 시작하고, 4개의 논리 블록 길이이고(논리 블록들 32 내지 35), RE 인덱스(352) #8을 가리키고, 0x0000의 범위 충돌 비트맵(364)을 가지며, 이는 충돌이 검출되지 않았음을 나타낸다. 충돌이 검출되지 않으면, 이 RE(204)는 정상적으로 실행 및 처리될 자격이 있다.
다른 예는 RE 인덱스 #3(참조 번호 366)인데, 이는 어드레스 0에서 시작하고, 드라이브 끝(End of Drive, EOD)(이 예에서는 128개 섹터)까지 되는 길이를 갖고, 따라서 0 내지 127 섹터들의 범위를 커버하고, 0x07A7의 범위 충돌 비트맵(364)을 가지며, 이는 다수의 충돌이 검출되었음을 나타낸다. 이러한 RE(204)에 대한 범위 충돌 비트맵은 이진 형식으로 0000 0111 1010 0111b로서 표현되고, RE들(204) 0, 1, 2, 5, 7, 8, 9, 및 10이 충돌됨을 의미하는 것으로 판독된다. 따라서, RE 인덱스 #3(366)은 모든 충돌이 클리어(clear)될 때까지 실행되는 것이 방지될 것이다. 앞서 언급된 바와 같이, RE 인덱스(352)에 열거된 각각의 RE(204)는 연관된 범위 충돌 비트맵(364)을 가지며, 이는 그 특정 RE(204)에 대한 충돌 상태를 나타낸다. 본 예(350)에서, RE 인덱스 #3(366)는 다른 것들 중에서도 RE 인덱스 #2와의 충돌을 갖는다. 그러나, RE 인덱스 #2가 RE 인덱스(352) #3(366)에 선행했으므로, RE 인덱스(352) #3(366)만이 충돌을 검출하였다. 충돌은 RE 인덱스 #3(366) 하에서 범위 충돌 비트맵(364)에 기록되었다.
RE(204)의 실행들이 완료됨에 따라, 이들은 도 2의 디스패처(212)에 의해 RE 리스트(350)로부터 "클리어"된다. RE들(204)이 클리어됨에 따라, 범위 충돌 크롤러 알고리즘(208)은 모든 RE 인덱스(352) 엔트리들에 대해 재구동(rerun)되고, 결과적으로, 각각의 범위 충돌 비트맵(364)을 업데이트하는 것을 비롯하여 모든 RE 인덱스(352) 엔트리들을 업데이트한다. 이러한 방식으로, RE들(204)을 클리어 또는 업데이트함으로써 어드레스 범위들이 해제된다. 각각의 RE(204)가 클리어 또는 해제됨에 따라, 범위 크롤러들(208)은 충돌 비트맵들(364)을 업데이트하도록 재구동된다. 본 명세서에 개시된 예는 하나의 실시예일 뿐이며 다른 실시예들이 가능하다.
도 4는 일 실시예에 따른, RE 예(400)(예컨대, 도 2의 RE(204)), 및 도시된 다수의 RE 예들(452A 내지 452N) 및 RE들(452A 내지 452N)의 다수의 커맨드 명령어 RE 리스트들(454A 내지 454N)(a 내지 n으로 번호가 매겨짐)을 갖는 데이터 테이블 예(450)(예컨대 도 2의 데이터 테이블(206))를 도시하는 블록도이다. RE 예(400)는 7 바이트 길이인 시작 LBA(402), 7 바이트 길이인 길이(404), 및 2 바이트 길이인 다음 RE(406)를 포함하여 총 크기가 16 바이트인 데이터 엔트리이다. 그러나, 이러한 예는 제한적이지 않으며, 다른 실시예들이 가능하다.
데이터 테이블 예(450)는 커맨드 명령어 RE 리스트들(454A 내지 454N)을 포함한다. 데이터 테이블(206)은 특정 동작의 필요에 따라 RE들(452A 내지 452N)의 다수의 리스트들(454A 내지 454N)을 저장한다. 일부 실시예들에서, 범위 크롤러 알고리즘(208)은 데이터 테이블(206)이 RE(204)를 기입 또는 편집할 때 실행된다. 다른 실시예들에서, 범위 크롤러 알고리즘은 RE(204)가 디스패처(212)에 의해 해제될 때 실행된다. 도 4에서, RE들(452A 내지 452N)이 디스패처(212)에 의해 클리어 또는 해제됨에 따라, 그리고 새로운 RE들(452A 내지 452N)이 새로운 커맨드 명령어들의 도착으로부터 형성됨에 따라, 리스트들(454A 내지 454N)은 적절하게 RE들(452A 내지 452N)을 입력 또는 삭제함으로써 업데이트된다.
동작 시, RE들(452A 내지 452N)은 임의의 공통 어드레스들을 검출하기 위해 서로 비교되며, 이때 비교의 결과들은 충돌 비트맵(210)에 저장되고 도 3에 기술된 바와 같다. 데이터 테이블(206)은 범위 크롤러 알고리즘(208)에 의한 액세스를 위해 RE들(452A 내지 452N)을 저장한다. 본 명세서에 개시된 디바이스들 및 방법들은 특정 커맨드 명령어에 대해 리스트(454A 내지 454N) 상에 저장된 RE들(452A 내지 452N) 사이의 충돌들을 검출하기 위해 채용된다.
도 5는 일 실시예에 따른, 다수의 RE들(204), RE들(204) 사이의 여러 충돌들, 및 결과적인 충돌 비트 맵들(364)과 연관된 데이터를 도시한다. 예(500)는 RE 인덱스, 시작 LBA, 길이, 다음 RE, 타임스탬프, 및 변경 데이터로 라벨링된 열들을 포함하지만 이로 제한되지 않는, 각각의 RE(502 내지 522)에 대한 정보를 포함한다. 리스트(500)는 2개의 별개의 커맨드 RE 리스트들(도 4의 454A)로 추가로 분할되는데, 즉 커맨드 RE 리스트 예(526)(05로 번호가 매겨짐)는 00 내지 06으로 번호가 매겨진 RE들(204)을 포함하는 반면에, 커맨드 RE 리스트 예(528)(10으로 번호가 매겨짐)는 0D 내지 10으로 번호가 매겨진 RE들(204)을 포함한다.
예(500)에서, 커맨드 RE 리스트(526)(05로 번호가 매겨짐)의 RE(516)(0D로 번호가 매겨짐)와 RE(508)(03으로 번호가 매겨짐) 사이에 데이터 충돌이 있다. 커맨드 RE 리스트(528)(10으로 번호가 매겨짐)의 RE(520)(0F로 번호가 매겨짐)와 RE(512)(05로 번호가 매겨짐) 사이에 다른 충돌이 있다. (도 2의) 범위 크롤러 알고리즘(208)에 의해 검출된 충돌로 인해, 충돌 비트맵(364)은 충돌하는 LBA들을 반영하도록 업데이트된다. 범위 크롤러(208)는 주어진 커맨드 RE 리스트(454N)의 모든 RE들(208) 사이의 충돌들을 검출하려고 시도할 것이며, 이때 범위 크롤러(208)는 각각의 RE(204)에 대해 개별적으로 동작한다. 일례로서, 17개의 RE들(204)의 경우, 17개의 범위 크롤러들(208)이 동작할 것이다.
도 6은 일 실시예에 따른, 충돌 검출 및 커맨드 디스패치 관리에 의한 LBA RE 취급을 위한 방법(600)을 도시하는 흐름도이다. 방법(600)은 예시적인 프로세스를 도시하지만, 본 명세서에 기술된 프로세스는 제한적이지 않으며 다른 실시예들이 가능하다. 방법(600)은 블록(602)에서 유휴 루프를 포함하며, 여기서 저장 제어기(108)는 LBA 명령어를 포함하는 새로운 커맨드 명령어와 같은 입력을 기다린다. 다음으로, 블록(604)에서, 새로운 커맨드 명령어가 수신된다. 다음으로, 결정 블록(606)에서, 저장 제어기(108)는 새로운 커맨드 명령어가 LBA 정보를 포함하는지 여부를 결정한다. "예"이면, 방법(600)은 블록(608)으로 계속되며, 여기서 커맨드 명령어는 커맨드 큐에 추가되고 RE(204)는 LBA 정보로부터 형성된다. 또한, 블록(608)에서, RE(204)는 커맨드 명령어 RE 리스트에 추가된다(도 4 참조). 결정 블록(606)에 대한 답변이 "아니오"이면, 방법(600)은 블록(610)으로 이동하며, 여기서 커맨드 명령어는 커맨드 큐에 추가되고 전체-드라이브(full-drive) RE(204)가 형성된다. 블록(610)에서의 태스크가 완료되면, 방법(600)은 후술되는 바와 같이 블록(616)으로 계속된다. 블록(608) 또는 블록(610)에서와 같이 새로운 RE(204)가 형성될 때, 방법(600)은 블록(616)으로 계속되며, 여기서 저장 제어기(108)는 충돌 크롤러(120)를 실행한다. 충돌 크롤러(120)는 2개 이상의 RE들(204) 사이의 임의의 충돌을 검출하고, 필요에 따라 충돌 비트맵(210)을 업데이트한다. 다음으로, 블록(618)에서, 디스패처(212)는 LBA들의 임의의 충돌되지 않은 범위들을 해제 또는 제거(free)한다.
한편, 방법(600)은 또한 블록(620)에서, LBA 데이터를 포함하는 새로운 커맨드 명령어들에 대해 모니터링하는 것을 포함한다. 일단 이것이 발생하면, 방법(600)은 블록(622)에서 새로운 명령어와 연관된 새로운 RE(204)로 커맨드 명령어 RE 리스트(454A 내지 454N)를 업데이트한다. 임의의 RE 업데이트가 수행된 후에, 방법(600)은 블록(616)으로 계속되며, 여기서 저장 제어기(108)는 충돌 크롤러(120)를 실행한다.
또한, 방법(600)이 블록(604)에서 새로운 커맨드들을 기다리고 블록(620)에서 새로운 LBA 데이터를 기다리는 동안, 저장 제어기(108)는 블록(612)에서 RE(204)가 완료될 때마다 모니터링한다. 일단 이것이 발생하면, 방법(600)은 블록(614)에서 커맨드 명령어 RE 리스트(454A 내지 454N)로부터 RE(204)를 제거 또는 업데이트하고, 블록(616)에서 앞서 기술된 바와 같이 다음으로 범위 크롤러 알고리즘(208)을 실행하는 것으로 계속된다. 별도로, 블록(630)에서, 커맨드 명령어가 완료될 때마다, 방법은 블록(632)에서 데이터 테이블(206)로부터 커맨드 명령어를 제거하고 해당 커맨드 명령어와 연관된 모든 나머지 RE들(204)을 제거하는 것으로 계속된다. 마지막으로, 블록들(608, 610, 614, 622, 또는 632)에서 RE(204)가 수정 또는 완료될 때마다, 블록(616)에서 범위 크롤러 알고리즘이 재구동되고, 충돌 비트맵(210)이 업데이트되고, 방법은 블록(618)에서 모든 충돌되지 않은 RE들(204)을 디스패치하는 것으로 계속된다. 일단 모든 적격의 RE들(204)이 디스패치되면, 방법(600)은 블록(602)으로 계속되며, 여기서 방법(600)은 추가 입력을 기다린다.
도 7은 일 실시예에 따른, 도 6의 블록(616)에서 요청된 바와 같이 데이터 테이블(206) 내의 RE들(204) 중 하나 이상의 RE의 상태를 변화시키는 이벤트 후에 잠재적인 RE(204) 충돌들을 체크하기 위해 LBA 범위 크롤러 알고리즘(208)을 동작시키는 방법(700)을 도시하는 흐름도이다. 방법(700)은, 하나 이상의 RE들(204) 각각이 LBA 범위들(402) 중 하나 이상으로 기입되기 전에 "0들"로 덮어쓰기됨으로써 초기화되는 블록(702)에서 시작한다. 다음으로, 블록(704)에서, 범위 크롤러 알고리즘(208)은 RE(204)를 선택하고, 그 RE(204)에 포함된 LBA 범위와, 커맨드 RE 리스트(454N)와 연관된 다른 이전에-저장된 RE(204)에 포함된 LBA 범위의 비교를 수행함으로써 동작을 시작한다. 방법(700)은 다수의 범위 크롤러 알고리즘들(208)을 동시에 실행할 수 있는데, 이때 필요에 따라 하나의 범위 크롤러 알고리즘(208)이 각각의 커맨드 RE 리스트(454N)에 대해 구동된다.
다음으로, 방법(700)은, 단계(706)에서, 선택된 RE(204)가 체크되는 동일한 RE(204)인지 여부를 결정하는데, 이는 RE들(204)이 자신과의 충돌에 대해 체크되지 않기 때문이다. "예"이면, 방법은 블록(708)을 건너 뛰고 블록(710)으로 계속된다. 그러나, LBA 범위 비교가 하나 이상의 LBA들이 RE들 (204) 둘 모두에 존재하는 것을 검출하는 경우, 블록(708)은 이전에-저장된 RE(204)와 연관된 비트 위치에서 "1"로 충돌 비트맵(210)을 업데이트한다. LBA 범위 비교가 RE들 둘 모두에서 공통 LBA를 검출하지 않는 경우, 블록(708)은 이전에-저장된 RE(204)와 연관된 비트 위치에 "0"을 남긴다.
방법(700)은 블록(710)에서 계속되며, 여기서 블록(708)에서 충돌 비트맵 업데이트들을 완료한 후에, 범위 크롤러 알고리즘(208)은 블록(710)에서 RE 인덱스를 다음 이전에-저장된 RE(204)로 증분시키고, 블록(712)에서 RE 인덱스가 모든 이전에-저장된 RE들(204)이 LBA 범위 충돌에 대해 체크되었음을 나타내는지 여부를 결정한다. RE 인덱스가 체크되지 않은 이전에-저장된 RE(204)를 참조하는 경우, 방법(700)은 블록(706)으로 되돌아가서 범위 크롤러 알고리즘(208)이 LBA 충돌에 대해 다음 이전에-저장된 RE(204)를 체크하도록 한다. 블록(712)이 RE 인덱스가 모든 이전에 저장된 RE들(204)이 체크되었음을 나타낸다고 결정하는 경우, 방법(700)은 범위 크롤러 알고리즘(208)을 사용하여 모든 이전에-저장된 RE들(204)에 대해 새로운 RE(204)를 체크하는 것을 완료하였으며, 이제 블록(714)에서 RE 범위 크롤링의 다른 사이클을 필요로 하는 다음 이벤트가 발생할 때까지 완료된다. 도 7은 RE 체크를 위한 하나의 방법을 도시하지만, 다른 실시예들이 가능하고, 본 명세서에서 제한되지 않는다.
본 개시는 LBA 범위들의 부분 충돌들을 포함하여, LBA 범위들을 갖는 커맨드 명령어들의 충돌 검출 및 관리를 위한 디바이스들 및 방법들을 예시한다. 본 개시는 "unmap", "write scatter", "skip" 등과 같은 분산된 LBA 스팬들을 갖는 커맨드들을 포함하여, 모든 유형의 커맨드 명령어들을 취급하는 일반적인 충돌 관리 시스템을 허용한다. 이는, 분리된 LBA 스팬들을 갖는 커맨드들에 대한 커맨드 수신/디스패치 동작들을 불필요하게 정지시킬 필요성을 회피한다. 또한, 본 개시는 LBA들의 충돌되지 않은 부분들을 디스패치함으로써 이전의 커맨드 명령어들에 대한 완료로 인해 후속의 부분적으로-충돌된 커맨드들에 대한 더 이른 디스패치를 가능하게 한다. 본 개시는 또한 다른 커맨드 명령어들이 진행 중인 동안 커맨드 명령어들에 대한 충돌 업데이트들을 허용한다. 마지막으로, 본 개시는 일정하고 결정적인 충돌 검출 시간을 가능하게 하여, QoS를 개선한다.
본 개시는 펌웨어 또는 하드웨어에 상주하는 범위 크롤러 알고리즘을 실행하도록 구성된 제어기 및 하나 이상의 범위 엔트리들(RE들)을 포함하는 데이터 테이블을 갖는 디바이스를 포함하며, 여기서 RE들 각각은 커맨드 명령어와 연관된 논리 블록 어드레스(LBA) 스팬의 일부이고, 각각의 LBA 스팬은 하나 이상의 LBA 범위들을 갖고, 각각의 LBA 범위는 하나 이상의 순차적 LBA들로 이루어진다. 디바이스는 또한 하나 이상의 LBA들 사이의 RE 충돌들과 연관된 데이터를 저장하도록 구성된 충돌 비트맵, 및 RE 충돌과 연관되지 않는 선택된 LBA 범위들을 해제하도록 구성된 커맨드 디스패처를 포함한다. 범위 크롤러 알고리즘은 RE들 사이의 충돌들을 검출하기 위해 데이터 테이블을 검색하도록 구성된다.
디바이스는 또한 동시에 동작하는 다수의 범위 크롤러 알고리즘들을 포함할 수 있다. 디바이스는 또한, 범위 크롤러 알고리즘이 충돌 비트맵에서 충돌과 연관된 커맨드 명령어의 각각의 LBA 범위를 식별하는 경우를 포함할 수 있다. 디바이스는 또한, 범위 크롤러 알고리즘이 RE가 업데이트될 때마다 재구동되는 경우를 포함할 수 있다. 디바이스는 또한, 커맨드 명령어가 분리된 LBA 범위들을 포함하는 경우를 포함할 수 있다.
본 개시는 제어기 상의 하드웨어에 상주하는 범위 크롤러 알고리즘을 실행하도록 구성된 제어기 및 하나 이상의 범위 엔트리들(RE들)을 저장하도록 구성된 데이터 테이블을 갖는 디바이스를 기술하며, 여기서 하나 이상의 RE들 각각은 커맨드 명령어와 연관된 논리 블록 어드레스(LBA) 스팬의 일부이고, 각각의 LBA 스팬은 하나 이상의 LBA 범위들을 포함하고, 각각의 LBA 범위는 하나 이상의 순차적 LBA들을 포함한다. 디바이스는 또한 하나 이상의 LBA들 사이의 RE 충돌들과 연관된 데이터를 저장하도록 구성된 충돌 비트맵, RE 충돌과 연관되지 않는 선택된 LBA 범위들을 해제하도록 구성된 커맨드 디스패처 - 범위 크롤러 알고리즘은 RE들 사이의 충돌들을 검출하기 위해 데이터 테이블을 검색하도록 구성됨 -, 및 RE들 사이의 충돌들을 검출하고 이에 응답하기 위한 수단을 포함하며, 여기서 범위 크롤러 알고리즘은 RE들 사이의 충돌들을 검출하기 위해 데이터 테이블을 검색하도록 구성되고, 충돌들에 응답하는 것은, 커맨드 디스패처에 의해, 충돌 비트맵에 기초하여 선택된 LBA 스팬들을 디스패치하는 것을 포함한다.
디바이스는 또한 동시에 동작하는 다수의 범위 크롤러 알고리즘들을 포함할 수 있으며, 여기서 다수의 범위 크롤러 알고리즘들은, 제어기가 제어기로부터의 파싱된 커맨드를 통해 데이터 테이블에 RE를 추가할 때 동작한다. 디바이스는 또한 동시에 동작하는 다수의 범위 크롤러 알고리즘들을 포함할 수 있으며, 여기서 다수의 범위 크롤러 알고리즘들은, 제어기가 데이터 테이블 기입 커맨드의 결과로서 데이터 테이블에 RE를 추가할 때 동작한다. 디바이스는 또한, 연관된 LBA 스팬 검색이 검색이 완료되었을 때 주어진 RE가 데이터 테이블로부터 제거되는 경우를 포함할 수 있다. 디바이스는 또한, LBA 범위가 수신될 때까지 드라이브-와이드(drive-wide) LBA 스팬을 마킹하도록 구성된 예약된(reserved) RE 값을 갖는 데이터 테이블을 포함할 수 있다.
본 개시는 제어기로부터 분리된 하드웨어에 상주하는 범위 크롤러 알고리즘을 실행하도록 구성된 제어기, 하나 이상의 범위 엔트리들(RE들)을 저장하도록 구성된 데이터 테이블 - 하나 이상의 RE들 각각은 커맨드 명령어와 연관된 논리 블록 어드레스(LBA) 스팬의 일부이고, 각각의 LBA 스팬은 하나 이상의 LBA 범위들을 포함하고, 각각의 LBA 범위는 하나 이상의 순차적 LBA들을 포함함 -, 하나 이상의 LBA들 사이의 RE 충돌들과 연관된 데이터를 저장하도록 구성된 충돌 비트맵, 및 충돌과 연관되지 않는 선택된 전체 및 부분 LBA 범위들을 해제하도록 구성된 커맨드 디스패처를 갖는 디바이스를 개시하며, 여기서 범위 크롤러 알고리즘은 RE들 사이의 충돌들을 검출하기 위해 데이터 테이블을 검색하도록 구성된다.
디바이스는 또한, 제어기가 해당 명령어와 연관된 전체-드라이브 LBA 스팬을 마킹함으로써 범위 크롤러 알고리즘을 구동하지 않고서 실행되어야 하는 커맨드 명령어들을 실행하는 경우를 포함할 수 있다. 디바이스는 또한 동시에 실행되는 다수의 범위 크롤러 알고리즘들을 포함할 수 있다. 디바이스는 또한, 범위 크롤러 알고리즘이 부분 LBA 범위를 포함하는 커맨드 명령어가 완료될 때마다 재구동되는 경우를 포함할 수 있다. 디바이스는 또한, 모두 0을 갖는 충돌 비트맵과 연관된 모든 RE들을 해제하는 커맨드 디스패처를 포함할 수 있다.
본 개시는 또한 저장 디바이스의 충돌 관리를 수행하기 위한 방법을 기술하며, 본 방법은, 제어기로부터 하나 이상의 커맨드 명령어들을 수신하는 단계 - 각각의 커맨드 명령어는 논리 블록 어드레스(LBA)를 포함하고, 각각의 LBA는 다수의 범위들을 포함함 -, 데이터 테이블에 의해 각각의 LBA 범위와 연관된 범위 엔트리(RE)를 저장하는 단계, 범위 크롤러 알고리즘에 의해 2개 이상의 RE들 사이의 충돌을 검출하는 단계, 제어기에 의해 충돌에 기초하여 충돌 비트맵을 업데이트하는 단계, 및 커맨드 디스패처에 의해 충돌 비트맵에 기초하여 선택된 LBA 범위들을 저장 디바이스로 디스패치하는 단계를 포함한다.
본 방법은 또한 다수의 범위 크롤러 알고리즘들을 동시에 실행하는 단계를 포함할 수 있다. 본 방법은 또한 모두 0을 갖는 충돌 비트맵과 연관된 RE들을 해제하는 단계를 포함할 수 있다. 본 방법은 또한 범위 크롤러 알고리즘이 종료되었을 때 제어기로 RE들을 해제하는 단계를 포함할 수 있다. 본 방법은 또한 범위 크롤러 알고리즘이 실행되고 있을 때 RE들을 업데이트하는 단계를 포함할 수 있다. 본 방법은 또한, 범위 크롤러 알고리즘이 현재 RE와 연관된 LBA 범위에 대한 추가 커맨드 명령어들을 차단하는 경우를 포함할 수 있다. 본 방법은 또한, 우선순위를 갖는 커맨드 명령어들이 해당 커맨드 명령어와 연관되는 전체-드라이브 LBA 범위를 마킹함으로써 실행되는 경우를 포함할 수 있다. 본 방법은 또한 충돌이 검출될 때마다 범위 크롤러 알고리즘을 재구동하는 단계를 포함할 수 있다.
본 개시는 또한 저장 디바이스에 대한 범위 크롤러 알고리즘을 동작시키는 방법을 기술하며, 본 방법은, 데이터 테이블로부터 하나 이상의 범위 엔트리들(RE들)을 수신하는 단계 - 여기서 각각의 RE는 커맨드 명령어와 연관된 논리 블록 어드레스(LBA) 범위를 포함함 -, 범위 크롤러 알고리즘에 의해 2개 이상의 RE들을 비교하는 단계, 범위 크롤러 알고리즘에 의해 2개 이상의 RE들 사이의 충돌을 검출하는 단계, 범위 크롤러 알고리즘에 의해 충돌을 검출하는 것에 기초하여 충돌 비트맵을 업데이트하는 단계, 및 충돌 비트맵에 기초하여 선택된 LBA의 범위들을 디스패치하는 단계를 포함한다. 본 방법은 또한 RE가 업데이트될 때마다 범위 크롤러 알고리즘을 재구동하는 단계를 포함할 수 있다.
전술한 것은 본 개시의 실시예들에 관한 것이지만, 본 개시의 다른 및 추가 실시예들이 본 개시의 기본 범위로부터 벗어남이 없이 고안될 수 있으며, 본 개시의 그 범위는 후속하는 청구범위에 의해 결정된다.

Claims (25)

  1. 디바이스로서,
    제어기 상의 펌웨어에 상주하는 범위 크롤러 알고리즘(range crawler algorithm)을 실행하도록 구성된 상기 제어기;
    하나 이상의 범위 엔트리(range entry)들을 포함하는 데이터 테이블 -
    상기 하나 이상의 범위 엔트리들 각각은 커맨드 명령어(command instruction)와 연관된 논리 블록 어드레스 스팬(logical block address span)의 일부이고,
    각각의 논리 블록 어드레스 스팬은 하나 이상의 논리 블록 어드레스 범위들로 구성되고,
    각각의 논리 블록 어드레스 범위는 하나 이상의 순차적 논리 블록 어드레스들로 구성됨 -;
    하나 이상의 논리 블록 어드레스들 사이의 범위 엔트리 충돌들과 연관된 데이터를 저장하도록 구성된 충돌 비트맵(collision bitmap); 및
    범위 엔트리 충돌과 연관되지 않는 선택된 논리 블록 어드레스 범위들을 해제하도록(release) 구성된 커맨드 디스패처를 포함하며,
    상기 범위 크롤러 알고리즘은 상기 범위 엔트리들 사이의 충돌들을 검출하기 위해 상기 데이터 테이블을 검색하도록 구성되는, 디바이스.
  2. 제1항에 있어서, 동시에 동작하는 다수의 범위 크롤러 알고리즘들을 추가로 포함하는, 디바이스.
  3. 제1항에 있어서, 상기 범위 크롤러 알고리즘은 상기 충돌 비트맵에서 충돌과 연관된 상기 커맨드 명령어의 각각의 논리 블록 어드레스 범위를 식별하는, 디바이스.
  4. 제1항에 있어서, 상기 범위 크롤러 알고리즘은 범위 엔트리가 업데이트될 때마다 재구동(rerun)되는, 디바이스.
  5. 제1항에 있어서, 상기 커맨드 명령어는 분리된(disjointed) 논리 블록 어드레스 범위들로 구성되는, 디바이스.
  6. 디바이스로서,
    제어기 상의 하드웨어에 상주하는 범위 크롤러 알고리즘을 실행하도록 구성된 상기 제어기;
    하나 이상의 범위 엔트리들을 저장하도록 구성된 데이터 테이블 -
    상기 하나 이상의 범위 엔트리들 각각은 커맨드 명령어와 연관된 논리 블록 어드레스 스팬의 일부이고,
    각각의 논리 블록 어드레스 스팬은 하나 이상의 논리 블록 어드레스 범위들로 구성되고,
    각각의 논리 블록 어드레스 범위는 하나 이상의 순차적 논리 블록 어드레스들로 구성됨 -;
    하나 이상의 논리 블록 어드레스들 사이의 범위 엔트리 충돌들과 연관된 데이터를 저장하도록 구성된 충돌 비트맵;
    범위 엔트리 충돌과 연관되지 않는 선택된 논리 블록 어드레스 범위들을 해제하도록 구성된 커맨드 디스패처 -
    상기 범위 크롤러 알고리즘은 상기 범위 엔트리들 사이의 충돌들을 검출하기 위해 상기 데이터 테이블을 검색하도록 구성됨 -; 및
    범위 엔트리들 사이의 충돌들을 검출하고 이에 응답하기 위한 수단을 포함하며,
    상기 범위 크롤러 알고리즘은 상기 범위 엔트리들 사이의 충돌들을 검출하기 위해 상기 데이터 테이블을 검색하도록 구성되고,
    충돌들에 응답하는 것은, 상기 커맨드 디스패처에 의해, 상기 충돌 비트맵에 기초하여 선택된 논리 블록 어드레스 스팬들을 디스패치하는 것으로 구성되는, 디바이스.
  7. 제6항에 있어서, 상기 디바이스는 동시에 동작하는 다수의 범위 크롤러 알고리즘들을 추가로 포함하며, 상기 다수의 범위 크롤러 알고리즘들은, 상기 제어기가 상기 제어기로부터의 파싱된(parsed) 커맨드를 통해 상기 데이터 테이블에 범위 엔트리를 추가할 때 동작하는, 디바이스.
  8. 제6항에 있어서, 상기 디바이스는 동시에 동작하는 다수의 범위 크롤러 알고리즘들을 추가로 포함하며, 상기 다수의 범위 크롤러 알고리즘들은, 상기 제어기가 데이터 테이블 기입 커맨드의 결과로서 상기 데이터 테이블에 범위 엔트리를 추가할 때 동작하는, 디바이스.
  9. 제6항에 있어서, 상기 논리 블록 어드레스 스팬과 연관된 검색이 완료되었을 때, 주어진 범위 엔트리가 상기 데이터 테이블로부터 제거되는, 디바이스.
  10. 제6항에 있어서, 상기 논리 블록 어드레스 범위들이 수신될 때까지 드라이브-와이드(drive-wide) 논리 블록 어드레스 스팬을 마킹하도록 구성된 예약된(reserved) 범위 엔트리 값을 갖는 상기 데이터 테이블을 추가로 포함하는, 디바이스.
  11. 디바이스로서,
    제어기로부터 분리된 하드웨어에 상주하는 범위 크롤러 알고리즘을 실행하도록 구성된 상기 제어기;
    하나 이상의 범위 엔트리들을 저장하도록 구성된 데이터 테이블 -
    상기 하나 이상의 범위 엔트리들 각각은 커맨드 명령어와 연관된 논리 블록 어드레스 스팬의 일부이고,
    각각의 논리 블록 어드레스 스팬은 하나 이상의 논리 블록 어드레스 범위들로 구성되고,
    각각의 논리 블록 어드레스 범위는 하나 이상의 순차적 논리 블록 어드레스들로 구성됨 -;
    하나 이상의 논리 블록 어드레스들 사이의 범위 엔트리 충돌들과 연관된 데이터를 저장하도록 구성된 충돌 비트맵; 및
    충돌과 연관되지 않는 선택된 전체 및 부분 논리 블록 어드레스 범위들을 해제하도록 구성된 커맨드 디스패처를 포함하며,
    상기 범위 크롤러 알고리즘은 상기 범위 엔트리들 사이의 충돌들을 검출하기 위해 상기 데이터 테이블을 검색하도록 구성되는, 디바이스.
  12. 제11항에 있어서, 상기 제어기는 해당 명령어와 연관된 전체-드라이브(full-drive) 논리 블록 어드레스 스팬을 마킹함으로써 상기 범위 크롤러 알고리즘을 구동하지 않고서 실행되어야 하는 커맨드 명령어들을 실행하는, 디바이스.
  13. 제11항에 있어서, 동시에 구동되는 다수의 범위 크롤러 알고리즘들을 추가로 포함하는, 디바이스.
  14. 제11항에 있어서, 상기 범위 크롤러 알고리즘은 부분 논리 블록 어드레스 범위를 포함하는 커맨드 명령어가 완료될 때마다 재구동되는, 디바이스.
  15. 제11항에 있어서, 모두 0으로 구성된 충돌 비트맵과 연관된 모든 범위 엔트리들을 해제하는 상기 커맨드 디스패처를 추가로 포함하는, 디바이스.
  16. 저장 디바이스의 충돌 관리를 수행하기 위한 방법으로서,
    제어기로부터, 하나 이상의 커맨드 명령어들을 수신하는 단계 -
    각각의 커맨드 명령어는 논리 블록 어드레스로 구성되고,
    각각의 논리 블록 어드레스는 다수의 범위들로 구성됨 -;
    데이터 테이블에 의해, 각각의 논리 블록 어드레스 범위와 연관된 범위 엔트리를 저장하는 단계;
    범위 크롤러 알고리즘에 의해, 2개 이상의 범위 엔트리들 사이의 충돌을 검출하는 단계;
    상기 제어기에 의해, 상기 충돌에 기초하여 충돌 비트맵을 업데이트하는 단계; 및
    커맨드 디스패처에 의해, 상기 충돌 비트맵에 기초하여 선택된 논리 블록 어드레스 범위들을 상기 저장 디바이스로 디스패치하는 단계
    를 포함하는, 방법.
  17. 제16항에 있어서, 다수의 범위 크롤러 알고리즘들을 동시에 실행하는 단계를 추가로 포함하는, 방법.
  18. 제16항에 있어서, 모두 0으로 구성된 충돌 비트맵과 연관된 범위 엔트리들을 해제하는 단계를 추가로 포함하는, 방법.
  19. 제16항에 있어서, 상기 범위 크롤러 알고리즘이 종료되었을 때 상기 제어기로 범위 엔트리들을 해제하는 단계를 추가로 포함하는, 방법.
  20. 제16항에 있어서, 상기 범위 크롤러 알고리즘이 실행되고 있을 때 범위 엔트리들을 업데이트하는 단계를 추가로 포함하는, 방법.
  21. 제16항에 있어서, 상기 범위 크롤러 알고리즘은 현재 범위 엔트리와 연관된 상기 논리 블록 어드레스 범위에 대한 추가 커맨드 명령어들을 차단하는, 방법.
  22. 제16항에 있어서, 우선순위를 갖는 커맨드 명령어들은 해당 커맨드 명령어와 연관되는 전체-드라이브 논리 블록 어드레스 범위를 마킹함으로써 실행되는, 방법.
  23. 제16항에 있어서, 충돌이 검출될 때마다 상기 범위 크롤러 알고리즘을 재구동하는 단계를 추가로 포함하는, 방법.
  24. 저장 디바이스에 대한 범위 크롤러 알고리즘을 동작시키는 방법으로서,
    데이터 테이블로부터, 하나 이상의 범위 엔트리들을 수신하는 단계 - 각각의 범위 엔트리는 커맨드 명령어와 연관된 논리 블록 어드레스 범위를 포함함 -;
    상기 범위 크롤러 알고리즘에 의해, 2개 이상의 범위 엔트리들을 비교하는 단계;
    상기 범위 크롤러 알고리즘에 의해, 2개 이상의 범위 엔트리들 사이의 충돌을 검출하는 단계;
    상기 범위 크롤러 알고리즘에 의해, 충돌을 검출하는 것에 기초하여 충돌 비트맵을 업데이트하는 단계; 및
    상기 충돌 비트맵에 기초하여 선택된 논리 블록 어드레스 범위들을 디스패치하는 단계
    를 포함하는, 방법.
  25. 제24항에 있어서, 범위 엔트리가 업데이트될 때마다 상기 범위 크롤러 알고리즘을 재구동하는 단계를 추가로 포함하는, 방법.
KR1020207014512A 2018-06-14 2019-02-11 논리 블록 어드레싱 범위 충돌 크롤러 KR102366512B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201862685196P 2018-06-14 2018-06-14
US62/685,196 2018-06-14
US16/137,261 2018-09-20
US16/137,261 US10649909B2 (en) 2018-06-14 2018-09-20 Logical block addressing range collision crawler
PCT/US2019/017490 WO2019240849A1 (en) 2018-06-14 2019-02-11 Logical block addressing range collision crawler

Publications (2)

Publication Number Publication Date
KR20210008826A true KR20210008826A (ko) 2021-01-25
KR102366512B1 KR102366512B1 (ko) 2022-02-23

Family

ID=68840601

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207014512A KR102366512B1 (ko) 2018-06-14 2019-02-11 논리 블록 어드레싱 범위 충돌 크롤러

Country Status (5)

Country Link
US (1) US10649909B2 (ko)
KR (1) KR102366512B1 (ko)
CN (1) CN111356991B (ko)
DE (1) DE112019000158T5 (ko)
WO (1) WO2019240849A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11301370B2 (en) * 2020-03-24 2022-04-12 Samsung Electronics Co., Ltd. Parallel overlap management for commands with overlapping ranges
US11563570B2 (en) * 2020-05-19 2023-01-24 Western Digital Technologies, Inc. Storage system and method for command execution ordering by security key
US11640264B2 (en) * 2021-08-30 2023-05-02 Western Digital Technologies, Inc. Parallel commands overlap detection based on queue-depth

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6256713B1 (en) * 1999-04-29 2001-07-03 International Business Machines Corporation Bus optimization with read/write coherence including ordering responsive to collisions
US6490635B1 (en) * 2000-04-28 2002-12-03 Western Digital Technologies, Inc. Conflict detection for queued command handling in disk drive controller
US20140075101A1 (en) * 2008-02-12 2014-03-13 Vijay Karamcheti Methods for two-dimensional main memory
US20150032936A1 (en) * 2013-07-23 2015-01-29 Jason K. Yu Techniques for Identifying Read/Write Access Collisions for a Storage Medium
US20150378895A1 (en) * 2014-06-27 2015-12-31 International Business Machines Corporation Detecting cache conflicts by utilizing logical address comparisons in a transactional memory
US20180157601A1 (en) * 2016-12-06 2018-06-07 Arm Limited Apparatus and method for avoiding conflicting entries in a storage structure

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1132820A3 (en) 2000-02-04 2003-01-22 Microchip Technology Incorporated Collision detection for dual port RAM operations on a microcontroller
US6963964B2 (en) * 2002-03-14 2005-11-08 International Business Machines Corporation Method and apparatus for detecting pipeline address conflict using parallel compares of multiple real addresses
US6981125B2 (en) * 2003-04-22 2005-12-27 International Business Machines Corporation Method and apparatus for managing shared virtual storage in an information handling system
US8401024B2 (en) * 2004-01-14 2013-03-19 Telefonaktiebolaget Lm Ericsson (Publ) Ethernet address management system
US7278008B1 (en) * 2004-01-30 2007-10-02 Nvidia Corporation Virtual address translation system with caching of variable-range translation clusters
US7584194B2 (en) * 2004-11-22 2009-09-01 Truveo, Inc. Method and apparatus for an application crawler
US7711923B2 (en) * 2006-06-23 2010-05-04 Microsoft Corporation Persistent flash memory mapping table
US9251899B2 (en) * 2008-02-12 2016-02-02 Virident Systems, Inc. Methods for upgrading main memory in computer systems to two-dimensional memory modules and master memory controllers
US20120131197A1 (en) * 2010-11-23 2012-05-24 Sensormatic Electronics, LLC Method and apparatus for automatically resolving conflicting devices on a network
US9524248B2 (en) * 2012-07-18 2016-12-20 Micron Technology, Inc. Memory management for a hierarchical memory system
US9384133B2 (en) * 2014-05-30 2016-07-05 International Business Machines Corporation Synchronizing updates of page table status indicators and performing bulk operations
US10372627B2 (en) * 2014-08-25 2019-08-06 Western Digital Technologies, Inc. Method to generate pattern data over garbage data when encryption parameters are changed
US9569280B2 (en) 2014-09-15 2017-02-14 Seagate Technology Llc Managing resource collisions in a storage compute device
US10423339B2 (en) * 2015-02-02 2019-09-24 Western Digital Technologies, Inc. Logical block address mapping for hard disk drives
US9619401B2 (en) * 2015-02-20 2017-04-11 Wisconsin Alumni Research Foundation Efficient memory management system for computers supporting virtual machines
GB2536200B (en) * 2015-03-02 2021-08-18 Advanced Risc Mach Ltd Memory management
US10289560B2 (en) * 2016-03-10 2019-05-14 Toshiba Memory Corporation Switch module and storage system
US10019306B2 (en) 2016-04-27 2018-07-10 Western Digital Technologies, Inc. Collision detection for slave storage devices
US9927999B1 (en) * 2016-09-09 2018-03-27 Western Digital Technologies, Inc. Trim management in solid state drives
US10747678B2 (en) * 2016-10-27 2020-08-18 Seagate Technology Llc Storage tier with compressed forward map
US10108554B2 (en) * 2016-12-05 2018-10-23 Intel Corporation Apparatuses, methods, and systems to share translation lookaside buffer entries
US10534719B2 (en) * 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10565126B2 (en) * 2017-07-14 2020-02-18 Arm Limited Method and apparatus for two-layer copy-on-write
CN107451261B (zh) * 2017-07-31 2020-06-09 广州探迹科技有限公司 一种基于对象存储的爬虫网络路径追踪方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6256713B1 (en) * 1999-04-29 2001-07-03 International Business Machines Corporation Bus optimization with read/write coherence including ordering responsive to collisions
US6490635B1 (en) * 2000-04-28 2002-12-03 Western Digital Technologies, Inc. Conflict detection for queued command handling in disk drive controller
US20140075101A1 (en) * 2008-02-12 2014-03-13 Vijay Karamcheti Methods for two-dimensional main memory
US20150032936A1 (en) * 2013-07-23 2015-01-29 Jason K. Yu Techniques for Identifying Read/Write Access Collisions for a Storage Medium
US20150378895A1 (en) * 2014-06-27 2015-12-31 International Business Machines Corporation Detecting cache conflicts by utilizing logical address comparisons in a transactional memory
US20180157601A1 (en) * 2016-12-06 2018-06-07 Arm Limited Apparatus and method for avoiding conflicting entries in a storage structure

Also Published As

Publication number Publication date
CN111356991B (zh) 2023-09-19
KR102366512B1 (ko) 2022-02-23
DE112019000158T5 (de) 2020-07-23
WO2019240849A1 (en) 2019-12-19
CN111356991A (zh) 2020-06-30
US10649909B2 (en) 2020-05-12
US20190384719A1 (en) 2019-12-19

Similar Documents

Publication Publication Date Title
KR102370760B1 (ko) 존 네임스페이스에 대한 존 형성
KR102569783B1 (ko) 비순차적 구역 네임스페이스들
US8769232B2 (en) Non-volatile semiconductor memory module enabling out of order host command chunk media access
US11520660B2 (en) Storage devices hiding parity swapping behavior
US9927999B1 (en) Trim management in solid state drives
KR20210096133A (ko) 구역화된 네임스페이스들에서의 기록 커맨드들의 유지
US11500727B2 (en) ZNS parity swapping to DRAM
KR102366512B1 (ko) 논리 블록 어드레싱 범위 충돌 크롤러
US11789654B2 (en) Data storage device and method for file-based interrupt coalescing
US11853571B2 (en) Storage devices hiding parity swapping behavior
US11733920B2 (en) NVMe simple copy command support using dummy virtual function
US11656786B2 (en) Operation method of storage device
CN114730291A (zh) 具有分区的ssd的数据停放
CN114968381A (zh) 通过后台重新排列读取模式以改进启动过程
CN114746835A (zh) 用中间填充保持分区开放
CN112578993A (zh) 多平面nvm处理编程出错的方法与存储设备
CN112579328A (zh) 处理编程出错的方法与存储设备
US20240086108A1 (en) Parallel fragmented sgl fetching for hiding host turnaround time
US11397699B2 (en) Interrupt coalescing protection logic
US20240053923A1 (en) Write coalescing via hmb to optimize write performance
US20230289226A1 (en) Instant Submission Queue Release
US20240143228A1 (en) Fast execution of barrier command
WO2024097493A1 (en) Write buffer linking for easy cache reads
WO2023075858A1 (en) Host buffers and data transfer management

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right