KR20230145907A - 주소 변환 캐시를 미리 채우기 위한 시스템 및 방법 - Google Patents

주소 변환 캐시를 미리 채우기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20230145907A
KR20230145907A KR1020220181728A KR20220181728A KR20230145907A KR 20230145907 A KR20230145907 A KR 20230145907A KR 1020220181728 A KR1020220181728 A KR 1020220181728A KR 20220181728 A KR20220181728 A KR 20220181728A KR 20230145907 A KR20230145907 A KR 20230145907A
Authority
KR
South Korea
Prior art keywords
address
storage device
timer
command
atc
Prior art date
Application number
KR1020220181728A
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 KR20230145907A publication Critical patent/KR20230145907A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • 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/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • 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/1072Decentralised address translation, e.g. in distributed shared memory 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/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/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • G06F2212/2022Flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/313In storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks

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)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

본 개시의 일 실시 예에 따른 호스트 컴퓨팅 장치에서 저장 장치로의 명령을 처리하는 방법은 저장 장치에 의해 호스트 컴퓨팅 장치로부터 논리 주소를 포함하는 명령을 식별하는 단계, 조건을 검출하는 단계, 조건을 검출한 것에 기초하여, 저장 장치에 의해 논리 주소의 물리 주소로의 변환을 요청하는 단계, 저장장치가 물리 주소를 캐시에 저장하는 단계 및 물리 주소를 기반으로 명령에 따라 데이터를 전송하는 단계를 포함한다.

Description

주소 변환 캐시를 미리 채우기 위한 시스템 및 방법{SYSTEMS AND METHODS FOR PRE-POPULATING ADDRESS TRANSLATION CACHE}
본 개시에 따른 실시예의 하나 이상의 양태는 메모리 관리에 관한 것으로, 특히 가상 메모리 주소와 연관된 물리적 메모리 주소를 저장하는 캐시 메모리의 활용도 관리에 관한 것이다.
호스트 장치는 하나 이상의 가상 메모리 주소 공간에서 저장 장치와 상호 작용할 수 있다. 명령 전송 및 완료, 데이터 송수신 등 다양한 용도의 공유 메모리는 데이터가 올바르게 배치되도록 호스트의 가상 주소를 물리 주소로 변환하는 것을 장치에게 요구할 수 있다. 읽기 및 쓰기 요청은 가상 메모리 주소를 포함할 수 있다. 가상 메모리 주소는 변환 에이전트(Translation Agent, TA)에 의해 물리적 메모리 주소로 변환되고, 변환된 물리 주소는 저장 장치의 주소 변환 캐시(Address Translation Cache, ATC)에 저장될 수 있다. 캐시 메모리 공간은 일반적으로 제한된다. 따라서 주소 변환 캐시(ATC)의 효율적이고 효과적인 사용을 위해 물리적 메모리 주소를 채우는 것이 바람직할 수 있다..
상술된 내용은 본 개시의 배경에 대한 이해를 돕기 위한 것일 뿐, 선행기술을 형성하지 않는 정보를 포함할 수 있다.
본 개시의 목적은 가상 메모리 주소와 연관된 물리적 메모리 주소를 저장하는 캐시 메모리의 활용도를 관리하는 시스템 및 방법에 관한 것으로, 주소 변환 캐시를 미리 채우기 위한 시스템 및 방법을 제공하는데 있다.
본 개시의 일 실시 예에 따른 호스트 컴퓨팅 장치에서 저장 장치로의 명령을 처리하는 방법은 상기 저장 장치에 의해 상기 호스트 컴퓨팅 장치로부터 논리 주소를 포함하는 명령을 식별하는 단계; 조건을 검출하는 단계; 상기 조건 검출에 기초하여, 상기 저장 장치에 의해 상기 논리 주소의 물리 주소로의 변환을 요청하는 단계; 상기 저장장치가 상기 물리 주소를 캐시에 저장하는 단계 및 상기 물리 주소를 기반으로 상기 명령에 따라 데이터를 전송하는 단계를 포함한다.
일 실시 예에서, 상기 저장 장치에 의해, 상기 명령 식별에 응답하여 제1 타이머를 시작하는 단계를 더 포함하고, 상기 조건을 검출하는 단계는 상기 제1 타이머의 만료를 검출하는 단계를 포함한다.
일 실시 예에서, 상기 제1 타이머의 길이는 상기 명령을 처리하는데 예측되는 레이턴시보다 짧다. 상기 제1 타이머의 길이는 처리될 활성 명령의 개수에 기초하여 동적으로 계산된다.
일 실시 예에서, 상기 저장 장치에 의해 제2 타이머를 설정하는 단계; 상기 제2 타이머의 만료를 검출하는 단계; 상기 제2 타이머의 상기 만료에 기초하여, 상기 저장 장치에 의해 상기 논리 주소의 상기 물리 주소로의 상기 변환을 요청하는 단계를 더 포함하고, 상기 제2 타이머의 길이는 상기 저장 장치에 의한 상기 명령의 처리 동안 이벤트를 완료하는 예상 길이에 기초한다.
일 실시 예에서, 상기 이벤트는 에러 정정 동작을 호출하는 것을 포함한다.
일 실시 예에서, 상기 명령은 상기 저장 장치로부터 상기 데이터를 읽기 위한 명령을 포함하고, 상기 논리 주소는 상기 호스트 컴퓨팅 장치의 메모리 위치에 상기 데이터를 저장하기 위한 것이다.
일 실시 예에서, 상기 명령의 실행 진행을 모니터링하는 단계를 더 포함하고, 상기 조건을 검출하는 단계는 마일스톤에 도달했는지를 결정하는 단계를 더 포함한다.
일 실시 예에서, 상기 모니터링하는 단계는 상기 명령에 대해 실행되는 복수의 단계들을 모니터링하는 단계를 더 포함한다.
일 실시 예에서, 상기 마일스톤은 상기 저장 장치의 하나 이상의 메모리 셀들로부터의 신호 감지 완료를 포함한다.
본 개시의 일 실시 예에 따른 저장 장치는 캐시 및 상기 캐시에 결합되고 로직을 실행하도록 구성되는 프로세서를 포함하고, 상기 로직은 상기 프로세서가 호스팅 컴퓨팅 장치로부터 논리 주소를 포함하는 명령을 식별하고, 조건을 검출하고, 상기 조건 검출에 따라 상기 논리 주소를 물리 주소로 변환하도록 요청하고, 상기 물리 주소를 캐시에 저장하고 그리고, 상기 물리 주소를 기반으로 상기 명령에 따라 데이터를 전송하는 동작을 수행하게 한다.
본 개시의 일 실시 예는 또한 호스트 컴퓨팅 장치로부터 저장 장치로 명령을 처리하기 위한 방법에 관한 것으로, 상기 방법은 저장 장치에 의해 호스트 컴퓨팅 장치로부터의 복수의 쓰기 명령을 식별하는 단계; 상기 저장 장치가 상기 복수의 쓰기 명령을 상기 저장 장치의 큐에 저장하는 단계; 상기 저장 장치가 상기 큐에서 쓰기 명령을 선택하는 단계; 상기 저장 장치에 의해 상기 큐에서 선택된 상기 쓰기 명령의 논리 주소를 식별하는 단계; 상기 저장 장치에 의해 상기 논리 주소를 물리 주소로 변환하도록 요청하는 단계; 상기 저장 장치가 상기 물리 주소를 캐시에 저장하는 단계; 및 상기 물리 주소에 기초하여 상기 큐에서 선택된 상기 쓰기 명령에 따라 데이터를 전송하는 단계를 포함한다.
일 실시 예에서, 쓰기 버퍼가 가득 찼는지 여부를 결정하는 단계를 더 포함하고, 상기 큐에 상기 쓰기 명령을 저장하는 것은 상기 쓰기 버퍼가 가득 찼다는 결정에 응답하는 것이다.
본 개시의 일 실시 예는 또한 호스트 컴퓨팅 장치로부터 저장 장치로 명령을 처리하기 위한 방법에 관한 것으로, 상기 방법은 상기 저장 장치에 의해 상기 호스트 컴퓨팅 장치로부터의 쓰기 명령을 식별하는 단계를 포함하며, 상기 쓰기 명령은 제1 논리 주소를 포함하고; 상기 제1 논리 주소에 기초하여 제1 데이터 전송을 처리하는 단계로서, 상기 제1 데이터 전송의 처리는: 제2 논리 주소를 식별하는 단계; 상기 저장 장치에 의해, 상기 제2 논리 주소의 물리 주소로의 변환을 요청하는 단계; 및 상기 저장 장치에 의해 캐시에 상기 물리 주소를 저장하는 단계; 및 상기 제2 논리 주소에 기초하여 제2 데이터 전송을 처리하는 단계를 포함한다.
일 실시 예에서, 상기 제2 데이터 전송의 처리는 상기 캐시로부터 상기 물리 주소를 검색하는 단계 및 상기 물리 주소로부터 상기 저장 장치의 위치로 데이터를 전송하는 단계를 포함한다.
일 실시 예에서, 상기 제1 논리 주소는 제1 데이터 구조에 저장되고, 상기 제2 논리 주소는 제2 데이터 구조에 저장된다.
통상의 기술자가 인식해야 하는 바와 같이, 본 개시의 실시 예들은 호스트 컴퓨팅 장치로부터 명령을 처리하는데 효율성을 제공한다.
본 개시의 실시예의 이들 및 다른 특징, 양태 및 장점은 다음의 상세한 설명, 첨부된 청구범위 및 수반되는 도면과 관련하여 고려될 때 더욱 완전히 이해될 것이다. 물론, 본 개시의 실제 범위는 첨부된 청구범위에 의해 정의된다.
본 개시의 실시 예에 따르면 주소 변환 캐시(ATC)의 사전 채우기에 의해 효율적, 효과적으로 주소 변환 캐시(ATC)를 사용할 수 있다. 이에 따라, 향상된 성능을 갖는 주소 변환 캐시(ATC)를 미리 채우기 위한 시스템 및 방법이 제공될 수 있다.
본 개시의 실시 예들의 비-제한적이고 비-완전한 실시 예들이 이하의 도면들을 참조하여 설명되며, 다르게 명시되지 않는 한, 유사한 참조 번호는 다양한 도면 전체에 걸쳐 유사한 부분을 지칭한다.
도 1은 본 개시의 일 실시 예에 따른 주소 캐시를 미리 채우는 시스템의 블록도이다.
도 2는 본 개시의 일 실시 예에 따른 저장 장치의 블록도이다.
도 3A 내지 도 3B는 본 개시의 일 실시 예에 따른 읽기 플로우의 흐름도이다.
도 4는 본 개시의 일 실시 예에 따른 타이머에 기초하여 주소 변환 캐시(ATC)를 미리 채우기 위한 동작의 흐름도이다
도 5는 본 개시의 일 실시 예에 따른 주소 변환 캐시(ATC)에서 주소 변환을 채우기 위한 동작의 흐름도이다.
도 6은 본 개시의 일 실시 예에 따른 적어도 2개의 타이머에 기초하여 주소 변환 캐시(ATC)를 미리 채우기 위한 동작의 흐름도이다.
도 7은 본 개시의 일 실시 예에 따른 읽기 동작 플로우의 모니터링 진행에 기초하여 주소 변환 캐시(ATC)를 미리 채우기 위한 동작의 흐름도이다.
도 8은 본 개시의 일 실시 예에 따른 다수의 기록 명령이 주어진 시간에 처리될 수 있는 실질적으로 높은 큐 깊이 환경에서 주소 변환 캐시(ATC)를 미리 채우기 위한 동작의 흐름도이다.
도 9는 본 개시의 일 실시 예에 따른 실질적으로 긴 메모리 위치 목록을 호출하는 기록 명령을 위해 주소 변환 캐시(ATC)를 미리 채우는 동작의 흐름도이다.
이하, 첨부된 도면을 참조하여 본 개시의 실시 예를 보다 구체적으로 설명하며, 여기서 전체적으로 동일한 참조번호가 동일한(대응되는) 구성요소를 지칭한다. 본 개시는 다양한 형태로 구현될 수 있으며 여기에서 설명하는 실시 예에만 한정되는 것은 아니다. 오히려, 이러한 실시 예는 본 개시가 철저하고 완전할 수 있고, 본 개시의 양상 및 특징이 통상의 기술자에게 충분히 전달될 수 있도록 예시로서 제공된다. 따라서, 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자가 본 개시의 양상 및 특징에 대한 완전한 이해를 위해 필요하지 않은 프로세스, 요소 및 기술에 대해서는 설명하지 않을 수 있다. 다른 언급이 없는 한, 첨부된 도면 및 명세서 전체에 걸쳐 동일한 참조 부호는 동일한 구성 요소를 나타내므로 중복되는 설명을 생략할 수 있다. 또한, 도면에서, 요소, 층 및 영역의 상대적인 크기는 명확성을 위해 과장 및/또는 단순화될 수 있다.
호스트 디바이스는 하나 이상의 가상 메모리 주소 공간에서 스토리지 디바이스와 상호 작용할 수 있다. 예를 들어, 공유 메모리는 읽기 또는 쓰기 명령과 같은 I/O 명령을 제출하고 완료하는 데 사용될 수 있다. 호스트 장치와 스토리지 장치 간의 통신은 비휘발성 메모리 익스프레스(Non-Volatile Memory Express, NVMe) 프로토콜, 직렬 연결 소형 컴퓨터 시스템 인터페이스(Small Computer System, SAS) 프로토콜, 직렬 고급 기술 연결(Serial Advanced Technology Attachment, SATA) 프로토콜 등과 같은 인터페이스(예: 커넥터 및 프로토콜)를 통해 이루어질 수 있다.
일 실시 예에서, 호스트로부터의 I/O 명령은 가상 주소를 식별할 수 있다. 예를 들어, 읽기 명령의 가상 주소는 저장 장치에서 읽은 데이터가 저장될 호스트 메모리의 위치를 식별하고 쓰기 명령의 가상 주소는 저장 장치에 쓰기 위한 데이터를 검색하기 위해 호스트 메모리의 위치를 식별할 수 있다. 읽기 및 쓰기 명령을 실행하기 위한 저장 장치에 의한 호스트 메모리의 메모리 읽기는 호스트의 중앙 처리 장치(Central Processing Unit, CPU)를 우회하는 직접 메모리 액세스(Direct Memory Access, DMA)일 수 있다.
일 실시 예에서, 읽기/쓰기 명령들 내의 가상 주소들은 변환 에이전트(Translation Agent, TA)에 의해 호스트 메모리의 물리적 메모리 주소들로 변환될 수 있다. 변환된 물리적 메모리 주소는 DMA 읽기 및 쓰기 동작에 의한 사용을 위해, 저장 장치의 주소 변환 캐시(ATC)에 저장될 수 있다. 저장 장치의 컨트롤러는 읽기/쓰기 명령에서 가상 주소에 해당하는 물리적 메모리 주소의 존재를 판별하기 위해, ATC를 확인할 수 있을 수 있다. 읽기/쓰기 명령에서 가상 주소에 해당하는 물리적 메모리 주소가 ATC에 존재하는 경우, 컨트롤러는 변환된 물리 주소를 사용하여 호스트 메모리에 액세스할 수 있을 수 있다.
일 실시 예에서, 물리 주소로 변환된 가상 주소는 저장 장치의 ATC에 저장될 수 있다. 저장 장치의 컨트롤러는 읽기 또는 쓰기 요청에 응답하여 호스트 메모리를 액세스하기 위해, 컨트롤러는 가상 주소의 물리 주소로의 변환이 존재하는지 판별하기 위해, ATC를 체크한다. 변환이 존재하는 경우, 컨트롤러는 메모리 읽기를 위해 변환된 물리 주소를 사용하며, 주소 변환을 위해 호스트에 별도의 요청을 할 필요가 없다.
가상 주소에서 물리적 메모리 주소로의 주소 변환은 읽기 및/또는 쓰기 동작에서의 지연을 추가할 수 있다. 가상화된 주소 지정 환경에서, 저장 장치에 의한 메모리 읽기는 메모리 위치에 엑세스하기 전에 주소 변환이 완료될 때까지 기다려야 한다. 저장 장치는 TA에서 주소 변환(Address Translation, AT)을 요청해야 한다. TA는 주소 변환 및 보호 테이블(Address Translation and Protection Table, ATPT)에서 올바른 변환을 식별해야 하고, TA는 주소 변환 요청에 대한 응답을 제공해야 한다. 읽기 또는 쓰기 데이터는 가상 주소 공간에서 호스트에 의해 유지되므로, 가상 주소를 변환하는 프로세스는 읽기/쓰기 명령의 처리 흐름을 차단할 수 있다.
가상 주소가 ATPT에 존재하지 않는 경우, 지연이 더 길어질 수 있다. 이미 상술된 바와 같이, 저장 장치는 TA에게 AT를 요청해야 한다. TA는 ATPT에서 올바른 변환을 찾을 수 없을 수 있다. TA는 AT에 대해 주소 변환 실패로 응답할 수 있다. 주소 변환 실패가 발생하는 경우, 저장 장치는 페이지 요청 인터페이스(Page Request Interface, PRI)를 TA에 전송할 수 있다. TA는 벤더별 방식(vendor specific manner)으로 호스트 시스템의 나머지 부분과 통신하여 가상에서 물리적으로의 변환을 ATPT로 채울 수 있다. TA는 최종적으로 저장 장치의 PRI 요청에 대한 완료 응답을 전송할 수 있다. 이후, 저장 장치는 제2 AT를 TA에 전송할 수 있다. TA는 ATPT에서 가상 주소를 찾을 수 있을 수 있다. 따라서, 메모리 위치에 엑세스 하기 위한 프로세스에서 추가적인 차단 활동이 생성된다.
일단 변환된 주소가 ATC에 저장되면, 변환된 주소가 DMA 동작 동안 사용되기 전에 ATC에 남아있는 시간은 ATC의 크기 및/또는 저장 장치가 특정 시간에 처리할 수 있는 활성화된 읽기/쓰기 명령의 수에 따라 달라질 수 있다. 예를 들어, 호스트에 의해 서브미션 큐에 제출된 활성 명령(이하에서, SQE(Submitment Queue Entries)라고 지칭한다)의 수가 상당히 많은 상당히 높은 큐 깊이(Queue Depth, QD) 환경에서, ATC는 요청이 처리되는 동안 채워질 수 있으므로, 이전 요청에 대한 이전 변환된 주소가 ATC에서 제거되고, 새로운 요청에 대한 새로운 변환된 주소를 위한 공간이 마련될 수 있다. ATC의 또 다른 일반적인 용도는 주소 변환이 다시 필요한 경우 이전에 사용된 주소 변환을 추측 방식으로 저장하는 것일 수 있다. ATC를 채우는 요청의 비율이 높아지고 최근에 유용한 주소 변환을 유지하려는 욕구가 증가함에 따라 ATC로부터 제거되는 변환된 주소의 비율이 최적 비율보다 높아질 수 있다. 제거 비율이 높을수록 SSD가 호스트 메모리에 액세스해야 할 때 ATC에 필요한 주소 변환이 존재할 확률이 감소할 수 있다. ATC의 크기가 클수록 문제 해결에 도움이 될 수 있지만, ATC 크기가 커지면 ATC를 저장하는 SRAM(Static Random Access Memory)이 더 큰 영역을 차지하게 되어 비용이 증가하고 전력 사용량이 증가할 수 있다.
일 실시 예에서, 주소 변환 요청(및 PRI 요청)이 직접 메모리 액세스(DMA) 동안 차단 활동이 발생하도록 하는 것을 방지하기 위해, ATC의 초기 채우기(population)(또는 사전 채우기(pre-population)라고 지칭될 수 있다)를 조정하기 위한 시스템 및 방법이 제공된다. 일 실시 예에서, 주소 변환 요청을 트리거하기 위해 타이머가 사용된다. 타이머는 입력/출력(I/O) 명령(예: 읽기 명령)을 포함하는 SQE를 수신 및 파싱(parsing)한 후 명령 실행이 종료되기 전에 만료되도록 설정할 수 있다. 타이머의 만료는 I/O 명령에 포함된 가상 주소에 대한 주소 변환 요청의 전송을 트리거할 수 있다. 타이머는 변환된 주소가 I/O 명령에 따라 메모리 액세스를 수행하기 위해 컨트롤러에 의해 사용되는 시간에 실질적으로 가까운 ATC에 삽입되도록 설정될 수 있다.
일 실시 예에서, 주소 변환 요청은 예를 들어 읽기 명령과 같은 파싱된 SQE에서 I/O 명령을 처리하는 검출된 진행 상황에 기초하여 트리거될 수 있다. I/O 명령 플로우의 진행을 모니터링하면 주소 변환 요청의 제출 타이밍이 동적이고 I/O 명령 플로우의 진행 상황에 맞춰질 수 있다. 예를 들어, I/O 명령 플로우의 초기에 차단 활동을 만나면 명령 플로우가 추후 마일스톤(milestone)에 도달할 때까지 메모리 주소의 변환이 트리거되지 않을 수 있다.
읽기 명령에 대해서, 주소 변환 요청의 제출 여부를 결정하기 위해 컨트롤러에 의해 모니터링될 수 있는 명령 플로우의 하나 이상의 단계는 일반적으로: 1) 저장 장치의 컨트롤러에 의한 SQE 수신하는 단계; 2) 데이터가 검색될 저장 장치의 하나 이상의 물리적 위치를 식별하기 위해 명령을 파싱하는 단계; 3) 미디어로부터 데이터를 읽는 단계(예를 들어, NAND 다이에 저장된 데이터의 읽기 감지 감지); 4) 미디어에서 컨트롤러로 데이터를 전송하는 단계; 5) 잠재적으로 누적된 오류를 확인 및/또는 제거하기 위한 오류 수정 코드(Error Correction Code, ECC) 디코딩 단계 및 6) 읽기 데이터를 제공하기 위한 호스트 메모리의 직접 메모리 엑세스 단계를 포함할 수 있다. 일 실시 예에서, 컨트롤러는 읽기 명령에 대한 단계들의 진행을 모니터링할 수 있다. 컨트롤러는 NAND가 읽기 감지를 완료한 것을 검출한 후, NAND로부터 컨트롤러로 감지된 데이터를 전송하기 전에 호스트에 대한 주소 변환 요청을 시작할 수 있다. 이에 따라, 상술된 5단계가 실행될 때 변환된 주소가 ATC에 존재할 수 있으며 읽기 명령이 지연되지 않을 수 있다.
일 실시 예에서, 주소 변환 요청은 다중 타이머의 만료에 응답하여 시작된다. 예를 들어, 읽기 명령을 완료하기 전에 주소 변환을 시작하기 위해 제1 타이머가 전술된 바와 같이 설정될 수 있다. 제1 타이머에 더하여 제2 타이머가 설정될 수 있다(예를 들어, 제1 타이머의 설정과 동시에). 제2 타이머는 읽기 명령 실행 중에 도입될 수 있는 추가적인 레이턴시(latency)를 해결하도록 설정될 수 있다.
일 실시 예에서, 검출된 이벤트에 의해 추가적인 레이턴시가 도입된다. 추가적인 레이턴시는 예측 가능할 수 있다. 제2 타이머는 예측된/예상된 레이턴시을 기반으로 설정될 수 있다. 예를 들어, 제2 타이머의 길이는 예상 레이턴시보다 짧게 설정될 수 있다. 제2 타이머가 만료되면 주소 변환 요청이 트리거될 수 있다. 이러한 방식으로, 제1 타이머의 만료 후에 획득된 변환된 주소가 ATC에서 제거되더라도(예를 들어, 감지된 이벤트에 의해 도입된 추가적인 레이턴시로 인해) 제2 타이머를 사용하면 주소가 읽기 명령에 따른 메모리 엑세스에 사용될 시간에 맞춰 ATC에 다시 채워지도록 할 수 있다.
일 실시 예에서, 제1 및/또는 제2 타이머의 값은 고정된 값이고, 미리 설정된 값이며, 이들은 SQE를 수신하고 파싱할 때 시작한다. 일 실시 예에서, 제1 및/또는 제2 타이머의 값은 설정되기 전에 동적으로 결정된다. 일 실시 예에서, 타이머(들)의 값은 읽기 QD 및/또는 쓰기 QD의 함수이고, 여기서 읽기 QD는 주어진 시간에 저장 장치에 의해 처리될 수 있는 제출 큐의 활성 읽기 명령의 수를 나타낸다. 쓰기 QD는 제출 대기열에 있는 여러 활성 쓰기 명령을 나타낼 수 있다. 일 실시 예에서, 제2 타이머의 길이는 제1 타이머의 길이보다 길다. 일 실시 예에서, 저장 장치는 읽기 감지를 완료하고 제1 및/또는 제2 타이머를 재평가하기 위한 평균 시간을 모니터링할 수 있다. 일 실시 예에서, 평균 시간은 저장 장치에 의해 검출된 특정 조건과 연관될 수 있고, 제1 및/또는 제2 타이머는 평균 시간에 기초하여 설정될 수 있다.
쓰기 명령은 또한 ATC의 사전 채우기(pre-population)로부터 이익을 얻을 수 있다. 예를 들어, 쓰기 명령에 대한 ATC의 사전 채우기는 실질적으로 높은 QD 환경(예를 들어, QD>50)에서 유리할 수 있다. 실질적으로 높은 QD 환경에서, 컨트롤러는 일부 컨트롤러 리소스(예를 들어, NAND로 프로그래밍하기 전에 쓰기 데이터를 유지하기 위한 쓰기 버퍼)가 사용 가능해지기를 기다리는 동안 제출 큐에서 가져온 활성 쓰기 명령으로 내부 쓰기 명령 큐를 채울 수 있다. 쓰기 명령은 선입 선출 방식으로 한번에 하나씩 내부 쓰기 명령큐에서 처리될 수 있다. 이 경우, 총 N개의 쓰기 명령 중 X개에 대해 주소 변환 요청이 시작될 수 있으며 변환된 주소는 ATC에 배치된다. 쓰기 명령이 컨트롤러를 통해 진행됨에 따라, 쓰기 명령에 대한 주소 변환이 이미 완료되어 있을 수 있으며, 변환된 주소는 ATC에 존재할 수 있다.
일 실시 예에서, ATC의 사전 채우기는 실질적으로 긴 메모리 위치 목록을 호출하는 쓰기 명령이 보다 효율적으로 처리되는데 도움이 될 수 있다. 예를 들어, 대규모 쓰기 명령을 위한 SQE는 PRP(Physical Region Page) 항목 또는 SGL(Scatter Gather List) 세그먼트들을 통해 식별되는 데이터 구조의 링크드 리스트(Linked List)를 사용할 수 있을 수 있다. PRP 또는 SGL SQE 명령 구조들 각각은 모두 주소 변환이 필요한 다양한 호스트 메모리 위치 세트에 배치될 수 있다. 일 실시 예에서, 다가오는 메모리 주소 중 하나 이상에 대한 주소 변환은 현재 메모리 위치의 데이터 전송 및 처리가 진행되는 동안 요청될 수 있을 수 있다. 이러한 방식으로, 변환은 해당 메모리 주소에 대한 데이터 전송을 수행할 시간이 되기 전에 ATC에 채워질 수 있다.
도 1은 본 개시의 일 실시 예에 따른 주소 캐시를 미리 채우기 위한 시스템의 블록도이다. 시스템은 예를 들어, 하나 이상의 저장 장치(102a 내지 102c)(집합적으로 102로 참조됨)와 같은 하나 이상의 엔드포인트(endpoint)에 연결된 호스트 컴퓨팅 장치(100)를 포함한다. 이하에서, 엔드포인트와 저장 장치(102)라는 용어는 상호 교환적으로 사용될 것이다.
엔드포인트는 예를 들어 PCI(Peripheral Component Interconnect) 또는 PCI-Express(PCIe) 버스와 같은 네트워크 패브릭(fabric)을 통해 호스트 장치(100)와 통신할 수 있다. 이와 같이, 도시된 예의 엔드포인트는 PCIe 장치 라고도 지칭될 수 있다. 일 실시 예에서, 엔드포인트는 호스트 장치(100)에 통합된 엔드포인트(101)를 포함할 수 있다. NVMe는 일반적으로 PCIe를 통해 전달되는 프로토콜이다. 일 실시 예에서, 엔드포인트들은 예를 들어, 컴퓨팅 익스프레스 링크(CXL), NVMe over Fabrics, SAS(Serial Attached Small Computer System Interface), SATA(Serial Advanced Technology Attachment), CCIX(Cache Cohistent Interconnect for Accelerator) 등을 포함하는 PCIe 이외의 통신 링크를 통해 통신할 수 있다.
호스트 장치(100)는 PCIe 패브릭을 통해 저장 장치(102)에 데이터를 쓰고 읽을 수 있다. 저장 장치(102)는 읽기 및 쓰기 명령을 처리할 때, 호스트 장치(100)의 로컬 메모리(104)에 대한 직접 액세스를 수행할 수 있다. 직접 메모리 액세스는 데이터가 호스트 장치(100)의 프로세서(105)의 소프트웨어 개입 없이 호스트 메모리(104)로 데이터를 주고받을 수 있게 할 수 있다.
일 실시 예에서, 호스트 장치(100)는 TA(108) 및 ATPT(110)를 포함할 수 있는 메모리 관리 유닛(106)을 더 포함한다. TA(108)는 가상 주소를 호스트 메모리(104)의 실제 물리 주소로 변환하기 위해 엔드포인트(예를 들어, 저장 장치(102))에 주소 변환 서비스를 제공할 수 있다. 일 실시예에서, AT(108)는 ATPT(110)로부터 가상 주소에 대응하는 물리 주소를 검색할 수 있다.
호스트 장치(100)는 PCIe 인터페이스와 같은 인터페이스(112)를 더 포함할 수 있다. PCIe 인터페이스는 프로세서(105)와 호스트 메모리(104)를 PCIe 패브릭에 연결하기 위해 루트 컴플렉스(root complex, RC)를 구현할 수 있다. 인터페이스(112)는 하나 이상의 엔드포인트(예를 들어, 저장 장치(102))를 RC(112)에 연결하기 위한 하나 이상의 포트(114)들을 포함할 수 있다. 일 실시 예에서, 엔드포인트는 스위치(116)에 결합될 수 있고, 스위치는 포트(114)들 중 하나를 통해 RC(112)에 연결될 수 있다. 일 실시 예에서, TA(108)는 RC(112)에 통합될 수 있다.
일 실시 예에서, 저장 장치들(102)로부터 TA(108)로 전송된 메시지들, 예를 들어, 주소 변환 요청들이 PCIe 패브릭을 통해 RC(112)로 전달되고, RC(112)는 다시 TA(108)로 요청들을 전달한다. TA(108)로부터 저장 장치들(102)로 전송된 메시지, 예를 들어, 저장 장치(102)로부터의 요청에 대한 응답은 TA(108)로부터 RC(112)로 전달되고, RC(112)는 PCIe 패브릭을 통해 저장 장치(102)로 메시지를 전송한다.
일 실시예에서, 적어도 하나의 저장 장치(102)는 가상(변환되지 않은) 주소와 물리(변환된) 주소 사이의 매핑을 저장하기 위한 주소 변환 캐시(ATC)(118a, 118b, 또는 118c(집합적으로 118로 참조됨))를 포함한다. 저장 장치(102)가 호스트(100)로부터 읽기/쓰기 명령을 가상 주소와 함께 수신할 때, 저장 장치(102)는 캐시가 이미 변환된 주소를 포함하는지 여부를 결정하기 위해 로컬 ATC(118)를 확인할 수 있다. ATC(118)가 변환된 주소를 이미 포함하고 있는 경우, 저장 장치(102)는 RC(112) 및 TA(108)를 포함하지 않고 물리 주소에서 호스트 메모리(104)에 효율적으로 액세스할 수 있다. ATC(118)가 변환된 주소를 포함하지 않으면, 저장 장치(102)는 변환될 가상 주소(또는 주소 범위)와 함께 TA(118)에 주소 변환 요청을 전송할 수 있다.
도 2는 본 개시의 일 실시 예에 따른 저장 장치(102)의 블록도이다. 저장 장치(102)는 통신 인터페이스(200), 장치 컨트롤러(202), 내부 메모리(204) 및 비휘발성 메모리(Non-Volatile Memory, NVM) 미디어(206)를 포함할 수 있다. 통신 인터페이스(200)는 호스트(100)로부터 스토리지 디바이스(102)로의 입력 통신 및 스토리지 디바이스(102)로부터 호스트(100)로의 통신 출력을 가능하게 하는 PCIe 포트 및 엔드 포인트를 포함할 수 있다. 일 실시 예에서, 통신 인터페이스(200)는 하나 이상의 가상 주소들의 물리 주소들에 대한 매핑들과 함께 ATC(118)을 저장한다.
일 실시 예에서, 장치 컨트롤러(202)는 예를 들어 읽기 및 쓰기 명령들과 같은 호스트(100)에 의해 요청된 명령들을 실행한다. 장치 컨트롤러(202)는 제한 없이 하나 이상의 프로세서(208) 및 미디어 인터페이스(들)(210)를 포함할 수 있다. 하나 이상의 프로세서(208)들은 호스트(100)로부터의 명령을 처리하고 저장 장치(102)의 동작을 관리하기 위해 컴퓨터 읽기 가능 명령(computer-readable instructions)을 실행하도록 구성될 수 있다. 하나 이상의 프로세서(208)에 의해 실행되는 컴퓨터 읽기 가능 명령들은 예를 들어 펌웨어 코드일 수 있다.
일 실시 예에서, 하나 이상의 프로세서(208)들은 NVM 미디어(206)에 대한 쓰기 또는 읽기 명령을 처리하도록 구성될 수 있다. 하나 이상의 프로세서(140)들은 쓰기 또는 읽기 동작을 수행하기 위해 미디어 인터페이스(210)를 통해 NVM 미디어(206)와 상호작용할 수 있다. NVM 미디어(206)는 예를 들어 플래시 메모리, NAND, ReRAM, PCM, MRAM과 같은 하나 이상의 유형의 비휘발성 메모리들을 포함할 수 있다. 저장 장치는 내부 컨트롤러 아키텍처가 다른 HDD일 수 있다.
일 실시 예에서, 내부 메모리(204)는 저장 장치(104)의 동작 동안 단기 저장 또는 임시 메모리용으로 구성된다. 내부 메모리(138)는 DRAM (Dynamic Random Access Memory), SRAM (Static Random Access Memory) 및/또는 DTCM (Data Tightly Coupled Memory)을 포함할 수 있다. 내부 메모리(138)는 읽기 버퍼(212) 및 쓰기 버퍼(214)와 같이 읽기 및 쓰기 명령을 처리하는 동안 호스트 메모리(104)로 송수신되는 데이터를 임시로 저장하기 위한 버퍼를 더 포함할 수 있다. 내부 메모리(138)는 호스트(100)로부터 수신한 쓰기 버퍼(214)의 공간 부족 등으로 인해 즉시 처리할 수 없는 쓰기 명령을 저장하기 위한 내부 쓰기 큐(216)를 더 포함할 수 있다. 내부 쓰기 큐(216)는 예를 들어 FIFO(First-In-First-Out) 큐일 수 있다.
일 실시 예에서, 컨트롤러(202)는 읽기/쓰기 명령을 갖는 SQE를 호스트(100)로부터 식별/수신(예를 들어, 페치 동작을 통해)하도록 구성된다. 한 번에 호스트에 의해 컨트롤러(202)에 제공되는 읽기/쓰기 명령의 수(실행 중인 명령)는 명령의 큐 깊이(Queue Depth, QD)라고 지칭될 수 있다. 낮은 QD 환경(예를 들어, 호스트가 드라이브에 한 번에 하나의 미해결 명령을 제공하는 경우, QD = 1)에서 명령(예: 읽기 명령)을 처리하기 위한 레이턴시를 예측할 수 있다. 낮은 읽기 QD 환경의 경우, 컨트롤러(202)는 타이머 만료 시 통신 인터페이스(200)를 통한 주소 변환 요청의 전송을 트리거하도록 타이머를 설정할 수 있다. 일 실시 예(예를 들어, 상당히 큰 ATC(118)를 갖는 실시 예)에서, 컨트롤러(202)는 타이머의 길이를 0으로 설정할 수 있다. 길이가 0인 타이머는 컨트롤러(202)에 의한 읽기 명령의 수신 시 지연 없이 주소 변환에 대한 요청이 전송되게 할 수 있다. 이 구현은 낮은 ATC 사용률을 가정하여 낮은 QD를 활용할 수 있다. ATC 사용율이 낮으면 변환이 필요할 때 캐시 항목이 제거될 가능성이 줄어든다.
일 실시 예에서, 컨트롤러(202)는 타이머의 길이를 예상된 읽기 레이턴시보다 짧게 설정한다. 예를 들어, 예상 읽기 레이턴시가 50 마이크로초(microseconds)인 경우, 타이머가 45 마이크로초에서 만료되도록 설정할 수 있다. 레이턴시의 예상은 초기 특성화 또는 모델링 작업의 결과이거나 진행 중인 드라이브 측정 결과일 수 있다. 주소 변환 요청은 45 마이크로초가 만료될 때 저장 장치에서 호스트로 전송될 수 있다. 호스트는 변환된 주소에서 직접 메모리 액세스를 수행하는데 사용되는 시간(예를 들어, 50 마이크로초에 근접한 시간) 내에 주소 변환을 완료할 수 있다.
일 실시 예에서, 타이머의 길이는 읽기 명령 및/또는 쓰기 명령의 QD의 함수로서 변한다. 컨트롤러(202)는 타이머가 전개되는 환경에 기초하여 타이머의 설정 전에 타이머의 길이를 계산할 수 있다. 일 실시 예에서, QD가 높을수록 타이머의 길이가 길어진다. 일 실시 예에서, 타이머의 길이는 다수의 NVM 미디어(206) 다이, 다이 상의 동작 시간, 다이 상의 동작 유형, 컨트롤러(202) 내의 시간, 컨트롤러(202) 내의 자원에 대한 충돌 등에 기초한 함수로서 변한다.
일 실시 예에서, 컨트롤러(202)는 제2 주소 변환을 트리거하기 위해 제1 타이머에 추가하여 제2 타이머를 설정할 수 있다. 예를 들어, 제2 타이머는 읽기 플로우에서 발생할 수 있는 이벤트(이하, 예상 이벤트)에 기초하여 설정될 수 있다. 예상 이벤트는 예를 들어 2단계 오류 정정 작업과 같은 정상적인 읽기 플로우 외부의 작업을 호출하는 것일 수 있다. 정정 작업은 변환된 주소가 ATC(118)로부터 제거되도록 할 수 있는 읽기 플로우의 레이턴시를 증가시킬 수 있다. 이 경우, 컨트롤러(202)는 변환된 주소를 다시 ATC(118)에 넣기 위해 제2 타이머의 만료 시 통신 인터페이스(200)를 통해 주소 변환 요청을 전송할 수 있다.
일 실시 예에서, 주소 변환이 ATC 밖으로 축출될 위험이 높을 수 있고 주소 변환이 ATC에 존재하는지 확인하는 비용이 낮을 수 있다. 따라서 첫 번째 타이머는 상술된 바와 같이 진행될 수 있다. 일 실시 예에서, 2차 예상 이벤트의 예상/기대 레이턴시를 기반으로 설정된 제2 타이머가 있을 수 있다. 예를 들어, 제2 타이머의 길이는 읽기 길이(상술된 실시 예에서 50us라고 함)에 실패한 읽기가 다른 인드라이브 데이터(in-drive data)에서 재구성되는 시간 길이를 더한 값과 같을 수 있다. 예를 들어 일부 SSD는 다른 여러 위치를 읽고 손실된 데이터에 대해 RAID 복구를 실행할 수 있다. RAID 복구 시간과 일반 읽기 시간을 합산하여 두 번째 타이머 값을 설정할 수 있다. 이는 제1 타이머가 주소 변환을 트리거했을 수 있지만 주소 변환이 ATC에서 제거되었을 수 있음을 의미한다. 제거된 경우 제2 타이머는 ATC의 주소에 대한 새로운 요청을 트리거한다. 주소 변환이 여전히 ATC에 있는 경우 주소 변환에 대한 두 번째 요청은 캐시에 있는 주소 변환으로 인해 즉시 성공한 것으로 반환된다.
일 실시 예에서, 읽기 명령에 대한 주소 변환 요청의 타이밍은 읽기 처리 플로우에서 하나 이상의 마일스톤을 도달하는 것에 기초한다. 이와 관련하여, 컨트롤러(202)는 읽기 처리 플로우의 진행 상황을 모니터링하고, 진행 마일스톤/단계에 도달했는지 여부를 결정한다. 진행 마일스톤은, 예를 들어, 저장 장치(102)에서 NAND 다이로 전송된 컨트롤러로부터의 폴링(polling) 이벤트에 응답하여, 읽기 감지 완료(Read Sense DONE)을 포함할 수 있다.
ATC의 사전 채우기는 또한 실질적으로 높은 QD 환경(예를 들어, QD > 50)에서 쓰기 명령을 처리하는 데 바람직할 수 있다. 예를 들어 쓰기 명령의 방해 받지 않는 플로우에서 호스트의 제출 대기열에 긴 명령 대기열이 있을 수 있다. 명령들은 컨트롤러로 가져와지고, 파싱될 수 있다. 파싱 단계에서 쓰기 명령으로 판별된 명령들은 쓰기 처리 파이프라인으로 라우팅되어 가능한 한 많은 명령들이 시작되고, 명령과 함께 제공된 쓰기 데이터는 내부 버퍼로 전송된다. 이후에, 쓰기 명령이 완료된 것으로 확인된다. 쓰기 데이터는 휘발성 버퍼에 계속 상주하며 쓰기 완료와 독립적인 속도로 비휘발성 저장을 위해 NAND에 프로그래밍된다. 전력 손실이 발생하는 경우 커패시터들은 휘발성 캐시가 NAND에 프로그래밍할 수 있을 만큼 충분히 오랫동안 SSD의 에너지를 유지한다.
그러나, 쓰기 명령이 매우 길어 매우 많은 양의 데이터를 포함하거나 한 번에 드라이브에 많은 쓰기 명령이 전송될 가능성이 있다. 이 두 경우에 따라, 컨트롤러의 버퍼 공간이 부족해질 수 있다. 이 경우, 쓰기 완료는 컨트롤러에 의해 유지된다. 쓰기는 충분한 버퍼 공간을 기다리는 동안 내부 큐(예를 들어, 쓰기 버퍼(214))에서 관리된다. 어느 경우든 모든 쓰기 데이터가 드라이브에 있으면 쓰기 완료가 호스트로 전송된다. 따라서, 대규모 쓰기 명령은 초기 데이터를 버퍼 외부로 프로그래밍하는 반면 대규모 쓰기 명령의 뒤쪽 부분은 버퍼 공간이 확보될 때까지 기다릴 수 있다.
구체적으로, 쓰기 명령을 처리할 때, 컨트롤러(202)는 NVM 미디어(206)로 전송되기 전에 호스트 메모리(104)로부터 전송된 데이터를 쓰기 버퍼(214)에 저장할 수 있다. 다수의 쓰기 명령이 주어진 시간에 처리될 수 있는 실질적으로 높은 QD 환경에서, 다수의 쓰기 명령들 중 하나 이상은 처리가 진행되기 위해, 쓰기 버퍼(214)가 이용 가능해질 때까지 기다려야 할 수 있다. 일 실시 예에서, 호스트에 의해 장치에 제공되는 다수의 쓰기 명령 SQE들 또는 아마도 하나 이상의 큰 쓰기 명령 SQE들은 이용 가능한 것보다 더 많은 쓰기 버퍼(214)를 필요로 할 수 있다. 쓰기 명령의 하나, 둘 이상 또는 나머지 부분은 내부 쓰기 명령 큐(216)에 배치될 수 있다. 일 실시 예에서, 컨트롤러(202)는 선택된 쓰기 명령들에 대한 주소 변환들을 요청하기 위해 내부 쓰기 명령 큐(216)에서 대기중인 쓰기 명령의 서브세트를 선택할 수 있다. 이러한 방식으로, ATC는 선택된 쓰기 명령들에 대한 변환된 주소들로 미리 채워질 수 있다.
ATC의 사전 채우기는 호스트 메모리(104) 내의 메모리 위치의 실질적으로 긴 목록에 저장된 데이터의 쓰기 명령을 처리하는 데에도 바람직할 수 있다. 메모리 위치는 SGL 세그먼트들 및/또는 SGL 디스크립터들의 링크된 목록과 같은 하나 이상의 데이터 구조에서 식별될 수 있다. 일 실시 예에서, SGL 세그먼트들 및/또는 SGL 디스크립터들 중 제1 세그먼트의 가상 주소들을 대응하는 물리 주소들로 변환하기 위해 하나 이상의 주소 변환 요청들이 전송된다. 컨트롤러(202)는 변환된 물리 주소에 저장된 데이터를 검색하기 위해 호스트 메모리(104)의 직접 메모리 액세스(DMA)를 수행할 수 있다. 검색된 데이터는 쓰기 버퍼(214)에 저장될 수 있고, 쓰기 버퍼(214)의 데이터는 NVM 미디어(206, 예를 들어 수신된 쓰기 명령의 LBA(Virtual Block Address) 정보에 기초하여 쓰여질 수 있다.
제2 SGL 세그먼트 및/또는 SGL 디스크립터가 쓰기명령을 위한 가상 주소를 저장하는 경우, 컨트롤러(202)는 제1 SGL 세그먼트의 변환된 주소에 기초하여 제1 직접 메모리 액세스(DMA)가 발생하는 동안, 변환된 주소로 ATC를 미리 채우기 위해 제2 SGL 세그먼트의 가상 주소에 대한 주소 변환 요청을 전송할 수 있다. 주소를 미리 변환하면 제1 직접 메모리 액세스(DMA) 후에 제2 SGL 세그먼트의 가상 주소에 대한 주소 변환이 완료될 때까지 기다리지 않고, 제2 직접 메모리 액세스(DMA)(제2 SGL 세그먼트의 변환된 주소를 기반으로)를 진행할 수 있다. 일 실시 예에서, 쓰기 명령이 현재 SGL 세그먼트에 기초하여 처리되는 동안 다음 SGL 세그먼트에 대한 ATC의 사전 채우기는 마지막 SGL 세그먼트가 처리될 때까지 계속된다.
다른 실시 예에서, PRP 세그먼트들은 SGL 세그먼트들 및/또는 SGL 디스크립터들과 유사한 방식으로 진행될 수 있다. 다른 PRP 세그먼트를 가리키는 각 PRP 세그먼트는 변환이 필요한 주소를 포함할 수 있다. 컨트롤러(202)는 변환을 요구하기 전에 주소 변환을 요청할 수 있다. 선택적으로, 하나 이상의 PRP 세그먼트들은 PRP 파싱을 시작하기 위해 컨트롤러(202)로 읽어질 수 있다. 이에 따라, 컨트롤러(202)에 의한 잠재적인 조기 주소 변환 요청을 추가로 가능하게 한다.
도 3A-3B는 ATC에 의한 사전 채우기가 없이 수행되는 읽기 플로우의 흐름도이다. S280 단계에서, 컨트롤러(208)는 읽기 명령을 포함하는 SQE를 수신하고 파싱한다.
S282 단계에서, 컨트롤러(202)는 읽기 데이터가 검색될 NVM 미디어(206) 내의 위치를 식별한다. 예를 들어, 컨트롤러(202)는 읽기 데이터가 검색될 LBA를 식별하기 위해 저장 장치 내부 메모리(204)의 논리적 대 물리적 변환 테이블에서 조회를 수행할 수 있다.
S284 단계에서, 읽기 감지 명령(Read Sense Command)이 NVM 미디어(206)에 발행(issue)된다.
S286 단계에서, 읽기 감지가 실행되고, 읽기 데이터가 NVM 미디어의 래치들에 로드된다.
S288 단계에서, 래치들에 포함되는 데이터는 컨트롤러(202)로 전송된다.
S290 단계에서, 컨트롤러(202)는 예를 들어, ECC 디코딩과 같은 에러 정정 동작을 호출하여, 읽기 데이터의 에러들을 수정한다.
S292 단계에서, 컨트롤러(202)는 S290 단계에서의 에러 정정이 모든 에러 정정에 실패한 경우, 선택적인 제2 단계 에러 정정 동작을 호출한다. 제2 단계 에러 정정 동작은 예를 들어, RAID와 같은 외부 ECC 디코딩일 수 있다.
S294 단계에서, 읽기 데이터는 복호화될 수 있고, 데이터의 임의의 스크램블링은 S296 단계에서 반전될 수 있다.
S297 단계에서, 컨트롤러(200)는 주소 변환 요청을 호스트 장치(100)의 변환 에이전트(108)로 전송하고 변환된 주소를 ATC(118)에 저장한다.
S298 단계에서, 컨트롤러(200)는 호스트 장치(100)에 데이터를 전송한다. 이와 관련하여, 컨트롤러(200)는 데이터를 저장할 변환된 주소를 ATC(188)로부터 검색하고, 변환된 주소에 의해 식별되는 호스트 메모리(104)의 위치에 데이터를 저장한다.
S299 단계에서, 컨트롤러(200)는 호스트 메모리(104)의 완료 큐에 저장된 완료 큐 엔트리(Completion Queue Entry, CQE)를 전송한다. 또한, 컨트롤러(200)는 읽기 요청이 완료되었음을 호스트 프로세서(105)에 알린다. 이러한 동작은 예를 들어, 호스트 장치(100)에 대한 인터럽트로 수행될 수 있다.
도 4는 본 개시의 일 실시 예에 따른 타이머에 기초하여 ATC를 미리 채우기 위한 동작의 흐름도이다. S300 단계에서, 컨트롤러(202)는 호스트(100)로부터 읽기 명령을 저장하는 SQE를 수신하고 파싱한다. 예를 들어, SQE는 호스트 장치(100)의 제출 큐에 저장될 수 있다. 읽기 명령은 예를 들어 NVMe 프로토콜과 같은 통신 프로토콜을 따를 수 있다. 읽기 명령은 예를 들어, 데이터가 읽혀지는 NVM 미디어(206)의 주소(예: 시작 LBA), 읽을 데이터의 양 및 데이터가 DMA를 통해 전송되는 호스트 메모리(104)의 가상 주소를 식별할 수 있다.
S302 단계에서, 컨트롤러(202)는 타이머를 시작할 수 있다. 타이머의 길이는 읽기 명령의 일반적/예상 레이턴시보다 짧을 수 있다.
일 실시 예에서, 컨트롤러(202)는 S302 단계에서 타이머 시작과 동시에, S312 단계에서 수신된 읽기 명령에 따라 읽기 플로우를 개시하고 실행한다. 읽기 플로우는 도 3A의 읽기 플로우의 일부와 유사할 수 있다. 예를 들어, S312 단계에서의 읽기 플로우는 도 3A의 단계(S282-292)를 구현할 수 있다.
읽기 플로우가 실행되는 동안, S304 단계에서, 컨트롤러(202)는 타이머가 만료되었는지 여부를 체크한다 일 실시 예에서, 타이머는 S312 단계의 읽기 플로우가 완료되기 전에 만료되도록 설정된다.
타이머가 만료된 경우, S306 단계에서, 컨트롤러(202)는 읽기 명령에서 식별된 가상 주소의 변환을 포함하는지 여부를 결정하기 위해 ATC(118)을 체크한다. 변환된 주소가 이미 캐시(ATC)에 있는 경우, 주소 변환에 대한 요청이 이미 만족되고, S308 및 S310 단계를 건너 뛸 수 있다.
S302 단계를 다시 참조하면, ATC(118)가 가상 주소의 변환을 포함하고 있지 않은 경우, S308 단계에서, 컨트롤러(202)는 TA(108)에 가상 주소에 대한 주소 변환 요청을 제출할 수 있다. TA(108)는 가상 주소에 대해 ATPT(110)를 검색하고 대응하는 물리 주소를 출력할 수 있다.
S310 단계에서, 변환된 물리 주소는 대응하는 가상 주소와 관련하여 ATC(118)에 저장된다.
S313 단계에서, 컨트롤러(202)는 S312 단계의 읽기 플로우가 완료될 때까지 기다린다. S312 단계의 읽기 플로우가 에상보다 오래 걸리는 경우, ATC(118)의 변환된 주소가 제거되었을 수 있고, 변환된 주소가 더이상 ATC(118)에 포함되어 있지 않을 수 있다. 따라서 S314 단계에서, 컨트롤러(202)는 ATC(118)가 여전히 변환된 주소를 포함하는지 여부를 결정하기 위해 ATC를 체크한다.
만약 대답이 아니오인 경우, S316 단계에서, 컨트롤러(202)는 가상 주소에 대한 주소 변환 요청을 TA(108)에 제출한다.
S318 단계에서, 컨트롤러(202)는 변환된 주소를 대응하는 가상 주소와 관련하여 ATC(118)에 저장한다.
S320 단계에서, 컨트롤러(202)는 가상 주소를 포함하는 ATC 엔트리를 비지(busy) 상태로 표시할 수 있다. 비지(busy)로 표시하는 것은 주소 변환이 유효하지 않게 되고 AT를 사용하는 장치가 경합 상태가 되는 것을 방지하기 위한 것일 수 있다. 이와 관련하여, 호스트는 하나 이상의 이유들로 호스트 메모리 주소 페이지들을 이동하도록 선택할 수 있다. 호스트가 페이지를 이동하면 호스트는 TA와 통신하고 TA는 ATPT를 업데이트 할 수 있다. TA는 ATC에 있는 하나 이상의 엔드포인트에 무효화 패킷을 브로드캐스트할 수 있다. 패킷은 최종 장치에게 주소 또는 주소 범위를 무효화하도록 지시하고 장치는 ATC에서 주소를 제거할 수 있다. 장치가 주소 변환이 필요한 경우, TA에 대한 새로운 요청이 필요하다.
ATC 엔트리가 비지(busy)로 표시될 때, ATC는 오래되고, 유효하지 않은 AT를 유지한다. 장치는 진행중인 데이터 전송에 대해 이전의 오래된 값을 사용할 수 있다. 호스트는 벤더 고유의 방식으로 경합 상태를 처리할 책임이 있다. AT 사용이 완료되면 장치의 ATC 구성요소는 캐시에서 AT를 제거하고 TA로부터의 무효화 요청을 완료한다.
S322 단계에서, 읽기 데이터는 호스트 메모리(104)의 변환된 물리 주소로 전송된다.
S324 단계에서, 컨트롤러(202)는 읽기 명령의 완료를 나타내기 위해 CQE를 호스트에 제출한다.
도 5는 본 개시의 일 실시 예에 따라 변환된 주소로 ATC를 채우는 동작의 흐름도이다. 도 5의 동작은 예를 들어, 도 4의 S306 단계 내지 S308 단계 또는 S314 단계 내지 S316 단계의 일부로서 실행될 수 있다.
S400 단계에서, 컨트롤러(202)는 읽기 명령의 가상 주소가 ATC(118)에 있는지 여부를 판별할 수 있다. S402 단계에서, 읽기 명령의 가상 주소가 ATC(118)에 포함되어 있지 않은 경우, 컨트롤러(202)는 가상 주소에 대한 주소 변환 요청을 TA(108)에 제출한다.
S404 단계에서, TA(108)는 변환된 주소 또는 변환 실패로 컨트롤러(202)에 응답할 수 있다.
S406 단계에서, 주소 변환이 성공했는지 여부를 확인할 수 있다. 주소 변환이 실패한 경우, TA는 ATPT에서 주소를 찾지 못한 것이다. 요청된 메모리 주소를 가진 페이지는 호스트 장치 메모리(104)에 존재하지 않는다. 이 경우, S408 단계에서 PRI 요청은 TA로 전송된다.
S410 단계에서, TA(108)는 호스트 장치 메모리 어드레스(104)에 대한 ATPT를 채우기 위해 호스트 특정 동작을 실행할 수 있고, PRI를 완료한다.
S412 단계에서, 컨트롤러(202)는 가상 주소에 대한 또 다른 주소 변환 요청을 TA(108)에 제출한다.
S414 단계에서, 변환된 주소는 ATC(118)에 저장하기 위해 컨트롤러(202)에 의해 수신된다.
도 6은 본 개시의 일 실시 예에 따른 적어도 2개의 타이머에 기초하여 ATC를 미리 채우기 위한 동작의 흐름도이다. S450 단계에서, 컨트롤러(202)는 읽기 명령을 포함하는 SQE를 수신하고 파싱한다.
S452 단계에서, 컨트롤러(202)는 제1 만료 값/길이를 갖는 제1 타이머 및 제2 만료 값/길이를 갖는 제2 타이머를 시작한다. 제1 타이머는 도 4의 S302 단계를 참조하여 설명된 바와 같이 설정될 수 있다.
일 실시 예에서, 제2 타이머의 길이는 제1 타이머의 길이보다 길 수 있다. 제2 타이머는 읽기 플로우의 진행 중에 발생할 수 있는 잠재적인 이벤트에 기초하여 설정될 수 있다. 이는 읽기 플로우의 완료를 지연시킬 수 있다. 잠재적인 이벤트는 예를 들어, 제1 ECC 디코딩이 NVM 미디어(206)로부터 검색된 데이터의 에러를 정정하는데 실패하는 경우 개시할 수 있는 제2 단계 에러 정정 동작(예를 들어, ECC 디코딩의 제2 단계)일 수 있다. 일 실시 예에서, 제2 단계 에러 정정과 같은 검출된 이벤트는 예측된/ 예상된 레이턴시를 가질 수 있다. S452 단계에서, 컨트롤러(202)는 예측된 레이턴시에 기초하여 제2 타이머를 시작할 수 있다.
S470 단계에서, 제1 및 제2 타이머의 시작과 동시에, 읽기 플로우는 수신된 읽기 명령에 따라 개시되고 실행될 수 있다. 읽기 플로우는 도 3A의 읽기 플로우의 일부와 유사할 수 있다. 예를 들어, S470 단계의 읽기 플로우는 도 3A의 S282 단계 내지 S292 단계를 구현할 수 있다.
S454 단계 및 S462 단계 각각에서, 컨트롤러(202)는 읽기 플로우가 진행되는 동안, 제1 타이머 및 제2 타이머가 만료되었는지 여부를 체크한다. 일 실시 예에서, 제1 타이머는 S470 단계의 읽기 플로우가 완료되기 전에 먼저 만료된다.
S456에서, 제1 타이머가 만료되는 경우, 컨트롤러(202)는 ATC(118)가 가상 주소의 변환을 포함하는지 여부를 결정하기 위해서 ATC(118)를 체크한다.
S458 단계에서, ATC(118)가 가상 주소의 변환을 포함하지 않는 경우, 컨트롤러(202)는 가상 주소에 대한 주소 변환 요청을 TA(108)에 제출한다. TA(108)는 가상 주소에 대해 ATPT(110)를 검색하고 대응하는 물리 주소를 출력한다.
S460 단계에서, 변환된 물리 주소는 대응하는 가상 주소와 관련하여 ATC(118)에 저장된다.
일 실시 예에서, S470 단계에서, 읽기 플로우의 실행 동안의 이벤트가 검출된다. 예를 들어, 이벤트는 S470 단계에서 읽기 플로우의 진행을 지연시킬 수 있는 제2 단계 에러 정정 동작(예를 들어, 외부 ECC 디코딩 동작)의 실행일 수 있다. 읽기 플로우의 진행 지연으로 인해 변환된 주소가 ATC(118)부터 제거될 수 있다.
일 실시 예에서, S462 단계에서의 제2 타이머의 설정은 변환된 주소가 ATC(118)로부터 제거된 경우, ATC의 사전 채우기 동작을 허용한다. 제2 타이머는 실질적으로 제2 단계 에러 정정 동작의 종료에 근접하여 만료되도록 설정될 수 있다. 이와 관련하여, S462 단계에서, 제2 타이머가 만료되었는지 여부에 대한 결정이 이루어질 수 있다.
대답이 '예'인 경우, 변환된 주소가 여전히 ATC(118)에 존재하는지 여부에 대한 결정이 수행된다(S464 단계)
대답이 '아니오'인 경우, S466 단계에서, 컨트롤러(202)는 TA에 가상 주소에 대한 주소 변환 요청을 제출한다. TA(108)는 가상 주소에 대해 ATPT(110)를 검색하고 대응하는 물리 주소를 출력할 수 있다.
S468 단계에서, 변환된 물리 주소는 대응하는 가상 주소와 관련하여 ATC(118)에 저장된다.
S470 단계의 읽기 플로우의 진행이 종료될 때, S472 단계에서, 변환된 물리 주소가 여전히 ATC(118)에 있는지 여부에 대해 또 다른 체크가 이루어질 수 있다. S470 단계의 읽기 플로우는 시간에 따라 변화할 수 있다. 예를 들어, S470 단계의 읽기 플로우는 매우 오랜 시간이 걸릴 수 있는 제2 단계 ECC 정정이 포함되어 있을 수 있다.
대답이 '아니오'인 경우, S474 단계에서, 컨트롤러(202)는 가상 주소에 대한 주소 변환 요청을 TA(108)에 제출할 수 있다.
S476 단계에서, 컨트롤러(202)는 대응하는 가상 주소와 관련하여 변환된 주소를 ATC(118)에 저장할 수 있다.
S478 단계에서, 컨트롤러(202)는 가상 주소를 포함하는 ATC 엔트리를 비지(busy) 상태로 표시할 수 있다.
S480 단계에서, 읽기 데이터(예를 들어, 읽기 버퍼(212)에 일시적으로 저장됨)는 호스트 메모리(104)의 변환된 물리 주소로 전송될 수 있다.
S482 단계에서, 컨트롤러(202)는 읽기 명령의 완료를 표시하기 위해 CQE를 호스트에 전송할 수 있다.
읽기 명령이 완료되고 데이터의 DMA가 ATC(118)에서 변환된 주소를 사용할 때, ATC(118)의 주소는 제1 타이머의 성공적인 사용에서 유래할 수 있다. 이 경우, 제2 타이머가 더 이상 필요하지 않을 수 있다. 일 실시 예에서, S466 단계에서 추가적인 주소 변환 요청이 호출되지 않도록 제2 타이머가 정지/삭제된다. 일 실시 예에서, 제2 타이머는 계속 실행되고, 불필요한 제2 주소 변환 요청은 진행되도록 허용된다.
도 7은 본 개시의 일 실시 예에 따른 읽기 처리 플로우의 모니터링 진행에 기초하여 ATC를 미리 채우기 위한 동작의 흐름도이다. S500 단계에서, 컨트롤러(202)는 저장 장치(102)에 대한 호스트(100)로부터의 읽기 명령을 식별한다.
S502 단계에서, 컨트롤러(202)는 읽기 명령의 실행을 모니터링할 수 있다. 예를 들어, 컨트롤러(202)는 S503 단계의 읽기 플로우 동안 달성된 마일스톤들/단계들의 진행을 모니터링 할 수 있다. 읽기 플로우는 도 3a의 읽기 플로우의 일부와 유사할 수 있다. 예를 들어, S503 단계에서의 읽기 플로우는 도 3a의 S282 단계 내지 S292 단계를 구현할 수 있다.
S504 단계에서, 읽기 플로우가 실행되는 동안, 컨트롤러(202)는 진행 마일스톤에 도달했는지 여부를 체크할 수 있다. 예를 들어, 마일스톤은 감지 증폭기에 의해 감지된 신호의 성공적인 완료를 감지하는 것일 수 있다. 일 실시 예에서, 마일스톤은 감지된 신호의 성공적인 완료를 검출하기 전에 존재하는 다른 단계일 수 있다.
진행 마일스톤에 도달한 경우, S505 단계에서, 변환된 주소가 ATC(118)에 존재하는지 여부에 대한 결정이 내려질 수 있다. 변환된 주소가 ATC에 존재하지 않는 경우, S506 단계에서, 컨트롤러(202)는 읽기 명령에 포함된 가상 주소에 대한 주소 변환 요청을 TA(108)로 전송할 수 있다. TA(108)는 가상 주소에 대해 ATPT(110)를 검색하고 대응하는 물리 주소를 출력할 수 있다.
S508 단계에서, 변환된 물리 주소는 ATC(118)에 저장될 수 있다.
S510 단계에서, 컨트롤러(202)는 S503 단계의 읽기 플로우가 완료되기를 기다릴 수 있다. S503 단계의 읽기 플로우가 예상보다 오래 걸리는 경우, ATC(118)의 변환된 주소가 ATC(118)에서 제거되어 있을 수 있다. 따라서, S512 단계에서, 컨트롤러(202)는 ATC(118)가 여전히 가상 주소의 변환을 포함하는지 여부를 체크할 수 있다.
ATC(118)가 가상 주소의 변환을 포함하고 있지 않은 경우, S516 단계에서, 컨트롤러(202)는 가상 주소에 대한 주소 변환 요청을 TA(108)에 제출할 수 있다.
S516 단계에서, 컨트롤러(202)는 대응하는 가상 주소와 관련하여 변환된 주소를 ATC(118)에 저장할 수 있다.
S518 단계에서, 컨트롤러(202)는 가상 주소를 포함하는 ATC 엔트리를 비지(busy) 상태로 표시할 수 있다.
S520 단계에서, 읽기 데이터는 호스트 메모리(104)의 변환된 물리 주소로 전송될 수 있다.
S522 단계에서, 컨트롤러(202)는 읽기 명령의 완료를 알리기 위해 CQE를 호스트에 제출할 수 있다.
진행 마커에 대해 하나 이상의 타이머가 설정될 수 있다. 예를 들어, 컨트롤러(202)는 NAND 다이에 대한 읽기 감지를 명령하는 단계에 도달한 후, 타이머(예를 들어, 30 마이크로초)를 시작할 수 있다.
도 8은 본 개시의 일 실시 예에 따른 다수의 쓰기 명령이 주어진 시간에 처리될 수 있는 실질적으로 높은 QD 환경에서 ATC를 미리 채우기 위한 동작의 흐름도이다. S600 단계에서, 컨트롤러(202)는 저장 장치(102)에 대한 호스트(100)로부터의 복수의 쓰기 명령들을 식별할 수 있다. 복수의 쓰기 명령들은 그들의 처리가 계속되도록 쓰기 버퍼(214)의 가용성(availability)을 기다릴 필요가 있을 수 있다. 복수의 쓰기 명령들이 대기하는 동안, 컨트롤러(202)는 저장 장치의 내부 메모리(204)의 내부 쓰기 큐(216)에 명령을 배치할 수 있다.
S602 단계에서, 컨트롤러(202)는 내부 쓰기 큐(216)에서 대기 중인 쓰기 명령들의 서브세트(subset)를 선택할 수 있다. 선택된 서브세트는 큐(216)에 저장된 쓰기 명령의 총 개수보다 적을 수 있다. 쓰기 명령들은 임의의 순서로 선택될 수 있다.
S604 단계에서, 컨트롤러(202)는 쓰기 명령들 중 선택된 서브세트의 가상 주소를 식별할 수 있다.
S606 단계에서, 컨트롤러(202)는 식별된 가상 주소에 대해 하나 이상의 주소 변환 요청을 TA(108)에 전송할 수 있다.
S608 단계에서, 컨트롤러(202)는 AT(108)로부터 변환된 물리 주소를 수신하고 대응하는 가상 주소와 관련하여 ATC(118)에 물리 주소를 저장할 수 있다. ATC(118)의 사전 채우기로 인해, 명령이 선택적 큐에서 검색되어 처리될 때 내부 쓰기 큐(216)의 쓰기 명령 중 하나에 대한 주소 변환을 우회될 수 있다.
S610 단계에서, 컨트롤러(202)는 ATC(118)의 물리 주소에 기초하여 내부 쓰기 큐(216)의 쓰기 명령 중 하나 이상에 따라 데이터를 전송할 수 있다.
도 9는 본 개시의 일 실시 예에 따른 실질적으로 긴 메모리 위치 목록을 호출하는 쓰기 명령을 위해 ATC를 미리 채우는 동작의 흐름도이다. S700 단계에서, 컨트롤러(202)는 호스트(100)로부터의 쓰기 명령을 식별한다. 예를 들어, 쓰기 명령은 데이터가 기록될 NVM 미디어(206)의 주소(예를 들어, 시작 LBA), 기록될 데이터의 양 및 기록될 데이터를 포함하는 호스트 메모리(104)의 제1 가상 주소를 포함하는 제1 SGL 세그먼트 및 제2 SGL 세그먼트에 대한 포인터를 포함할 수 있다.
S702 단계에서, 컨트롤러(202)는 제1 SGL 세그먼트로부터 제1 가상 주소를 식별한다.
S704 단계에서, 컨트롤러(202)는 제1 가상 주소에 대한 주소 변환 요청을 전송하고 변환된 제1 물리 주소를 제1 가상 주소와 관련하여 ATC(118)에 저장한다.
S706 단계에서, 컨트롤러(202)는 변환된 변환된 제1 주소에 기초하여 데이터 전송에 관여한다. 데이터 전송은 변환된 제1 주소로부터 데이터를 읽기 위해 호스트 메모리(104)에 액세스 하는 단계, 읽어진 데이터를 쓰기 버퍼(214)에 저장하는 단계 및 쓰기 버퍼(214) 내의 데이터를 쓰기 명령의 시작 LBA에 기초하여 NVM 미디어(206)의 위치에 기록하는 단계를 포함할 수 있다.
S708 단계에서, 변환된 제1 주소로부터의 데이터 전송과 동시에, 컨트롤러(202)는 제1 SGL 세그먼트가 가리키는 제2 SGL 세그먼트를 식별하고, 제2 SGL 세그먼트에서 제2 가상 주소를 추가로 식별한다.
S710 단계에서, 컨트롤러(202)는 제2 가상 주소에 대한 주소 변환 요청을 전송하고 변환된 제2 물리 주소를 제2 가상 주소와 관련하여 ATC(118)에 저장한다.
S712 단계에서, 컨트롤러(202)는 변환된 제2 주소에 기초하여 데이터 전송에 관여한다. 도 9의 흐름도에 명시적으로 도시되어 있지는 않으나, 도 7에 도시된 바와 같이, 통상의 기술자는 현재 SGL 세그먼트에 기초하여 기록 명령이 처리되는 동안 다음 SGL 세그먼트에 대한 ATC의 사전 채우기 동작이 마지막 SGL 세그먼트가 처리될 때까지 계속됨을 인식해야 한다.
ATC의 주소 변환을 요청하는 컨트롤러(202)의 모든 인스턴스에 ATC 캐시 제거 방식을 업데이트하거나 ATC 캐시 제거 방식을 업데이트하지 않는 옵션이 있음을 이해해야 한다. 예를 들어, 흐름도의 각각의 다이어그램에서 첫 번째 요청은 캐시 제거 방식을 업데이트할 수 있다. 그러나, 두 번째 이후의 주소 변환 요청은 캐시 제거 방식에 의해 고려되지 않을 수 있다. 예를 들어, 명령당 하나의 캐시 제거 방식 업데이트만이 수행할 수 있다.
일 실시 예에서, 이상에서 상술된 내용은 하나 이상의 프로세서들에서 구현될 수 있다. 프로세서라는 용어는 하나 이상의 프로세서 및/또는 하나 이상의 프로세싱 코어를 의미할 수 있다. 하나 이상의 프로세서는 하나의 디바이스에서 호스팅되거나 여러 디바이스 상에 분산될 수 있다(예: 클라우드 시스템을 통해). 프로세서는 예를 들어 ASIC(application specific integrated circuit), 범용 또는 특수 목적 중앙 처리 장치(central processing unit, CPU), 디지털 신호 프로세서(digital signal processor, DSP), 그래픽 처리 장치(graphics processing unit, GPU) 및 FPGA(Field Programmable Gate Array)와 같은 프로그래밍 가능한 논리 장치를 포함할 수 있다. 프로세서에서 각 기능은 해당 기능을 수행하도록 구성된 하드웨어(즉, 유선으로 구성된 하드웨어)에 의해 수행되거나, CPU와 같은 더 범용적인 하드웨어에 의해, 비일시적 저장 미디어(예를 들어, 메모리)에 저장된 명령을 실행하도록 구성된 하드웨어에 의해 수행될 수 있다. 프로세서는 단일 인쇄 회로 기판(printed circuit board, PCB) 상에서 제조되거나 상호 연결된 여러 PCB 상에 분산될 수 있다. 프로세서는 다른 처리 회로를 포함할 수 있으며, 예를 들어, 처리 회로는 PCB 상에 상호 연결된 두 개의 처리 회로, FPGA 및 CPU를 포함할 수 있다.
"제1", "제2", "제3" 등의 용어가 본 명세서에서 다양한 요소, 구성요소, 영역, 층 및/또는 섹션을 설명하기 위해 사용될 수 있지만, 이러한 요소, 구성요소는, 영역, 레이어 및/또는 섹션은 이러한 용어에 의해 제한되어서는 안 된다. 이러한 용어는 하나의 요소, 구성 요소, 영역, 레이어 또는 섹션을 다른 요소, 구성 요소, 영역, 레이어 또는 섹션과 구별하는 데에만 사용된다. 따라서, 본 명세서에서 논의되는 제1 구성요소, 영역, 층 또는 섹션은 본 개시의 사상 및 범위를 벗어나지 않으면서 제2 구성요소, 구성요소, 영역, 층 또는 섹션으로 지칭될 수 있다.
본 명세서에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 본 개시를 한정하려는 의도가 아니다. 또한, 명시적으로 언급하지 않는 한, 여기에 설명된 실시 예들은 상호 배타적이지 않다. 본 명세서에 기술된 실시 예들의 양태들은 일부 구현들에서 결합될 수 있다.
도 3 내지 도 7의 흐름도와 관련하여, 흐름도에서 단계들의 순서는 고정된 것이 아니라, 통상의 기술자가 인정하는 바와 같이, 수정, 순서 변경, 다르게 수행, 순차적, 동시 또는 동시에 수행되거나, 임의의 원하는 순서로 변경될 수 있음을 이해해야 한다.
본 명세서에서 사용되는 용어 "실질적으로", "약" 및 유사한 용어는 정도의 용어가 아니라 근사의 용어로 사용되며, 측정 또는 계산된 값의 고유의 편차를 설명하기 위한 것이다.
본 명세서에서 사용된 바와 같이, 단수 형태는 문맥상 명백하게 달리 나타내지 않는 한 복수 형태도 포함하는 것으로 의도된다. 본 명세서에서 “포함하다” 및/또는 “포함하는”이라는 용어가 명시된 특징, 정수, 단계, 연산, 요소 및/ 또는 구성요소의 존재를 명시하지만, 하나 이상의 다른 특징, 정수, 단계, 연산, 요서, 구성요소 및/또는 그룹의 존재 또는 추가를 배제하지 않는다. 본 명세서에서 사용되는 용어 "및/또는"은 하나 이상의 관련 목록 항목의 임의 및 모든 조합을 포함한다. 요소 목록 앞에 "하나 이상의"와 같은 표현식을 사용하면 요소 목록 전체를 수정할 수 있으며 목록의 개별 요소는 수정되지 않는다. 또한, 본 발명의 실시 예를 설명할 때 "~일 수 있다"의 사용은 "본 개시의 하나 이상의 실시 예"를 의미한다. 또한, "예시적인"이라는 용어는 예시 또는 예시를 지칭하기 위한 것이다. 본 명세서에서 사용되는 바와 같이, "사용하다", "이용하는" 및 "사용되는"이라는 용어는 각각 "활용하다", "이용하는" 및 "이용되는"이라는 용어와 동의어로 간주될 수 있다.
구성요소 또는 층이 다른 구성요소 또는 층에 "연결", "결합" 또는 "인접"이라고 지칭될 때, 그것은 다른 구성요소 또는 층에 직접 연결, 결합 또는 인접하거나, 하나 이상의 간섭 요소 또는 층이 존재할 수 있다. 대조적으로, 구성요소나 계층이 다른 구성요소나 계층에 직접 연결되어 있거나 또는 바로 인접해 있는 것으로 언급될 때, 간섭하는 요소나 계층은 존재하지 않는다.
본 명세서에서 인용되는 임의의 수치 범위는 상기 인용 범위 내에 포함되는 동일한 수치 정밀도의 모든 하위 범위를 포함하도록 의도된다. 예를 들어, "1.0에서 10.0까지의 범위"는 최소값 1.0과 최대값 10.0 사이의 모든 하위 범위, 즉 최소값이 1.0 이상이고 최대값이 10.0 이하(예: 2.4에서 7.6)를 포함하도록 의도되었다. 본 명세서에서 인용되는 최대 수치 한계는 여기에 포함되는 모든 낮은 수치 한계를 포함하도록 의도된 것이며, 본 명세서에서 인용되는 최소 수치 한계는 여기에 포함되는 모든 높은 수치 한계를 포함하도록 의도된 것이다.
본 명세서에서는 일 실시 예에 따른 주소 캐시를 미리 채우기 위한 시스템들 및 방법들의 예시적인 실시 예들을 구체적으로 설명하고 설명하였으나, 통상의 기술자에게는 많은 변형 및 변형들이 명백할 것이다. 이에, 본 개시의 원리들에 따라 구성된 주소 캐시를 미리 채우기 위한 시스템들 및 방법들은 본 명세서에서 구체적으로 설명하는 것 이외에 구체화될 수 있다. 따라서, 본 개시의 범위는 상술된 실시 예들에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 개시의 특허청구범위와 균등한 것들에 의해 정해져야 할 것이다.

Claims (20)

  1. 호스트 컴퓨팅 장치로부터 저장 장치로의 명령을 처리하는 방법에 있어서,
    상기 저장 장치에 의해, 상기 호스트 컴퓨팅 장치로부터 논리 주소를 포함하는 명령을 식별하는 단계;
    조건을 검출하는 단계;
    상기 조건을 검출한 것에 기초하여, 상기 저장 장치에 의해, 상기 논리 주소의 물리 주소로의 변환을 요청하는 단계;
    상기 저장장치에 의해, 상기 물리 주소를 캐시에 저장하는 단계 및
    상기 물리 주소를 기반으로 상기 명령에 따라 데이터를 전송하는 단계를 포함하는 방법.
  2. 제1 항에 있어서,
    상기 저장 장치에 의해, 상기 명령을 식별한 것에 응답하여 제1 타이머를 시작하는 단계를 더 포함하고,
    상기 조건은 상기 제1 타이머의 만료를 검출하는 것을 포함하는 방법.
  3. 제2 항에 있어서,
    상기 제1 타이머의 길이는 상기 명령을 처리하는데 예측되는 레이턴시보다 짧은 방법.
  4. 제2 항에 있어서,
    상기 제1 타이머의 길이는 처리될 활성 명령의 개수에 기초하여 동적으로 계산되는 방법.
  5. 제2 항에 있어서,
    상기 저장 장치에 의해, 제2 타이머를 설정하는 단계;
    상기 제2 타이머의 만료를 검출하는 단계;
    상기 제2 타이머의 상기 만료에 기초하여, 상기 저장 장치에 의해 상기 논리 주소의 물리 주소로의 변환을 요청하는 단계를 더 포함하고,
    상기 제2 타이머의 길이는 상기 저장 장치에 의한 상기 명령의 처리 동안 이벤트를 완료하는 예상 길이에 기초하는 방법.
  6. 제5 항에 있어서,
    상기 이벤트는 에러 정정 동작을 호출하는 것을 포함하는 방법.
  7. 제 1항에 있어서,
    상기 명령은 상기 저장 장치로부터 상기 데이터를 읽기 위한 명령을 포함하고, 상기 논리 주소는 상기 호스트 컴퓨팅 장치의 메모리 위치에 상기 데이터를 저장하기 위한 것인 방법.
  8. 제1 항에 있어서,
    상기 명령의 실행 진행을 모니터링하는 단계를 더 포함하고,
    상기 조건을 검출하는 단계는 마일스톤에 도달했는지를 결정하는 단계를 더 포함하는 방법.
  9. 제8 항에 있어서,
    상기 모니터링하는 단계는 상기 명령에 대해 실행되는 복수의 단계들을 모니터링하는 단계를 더 포함하는 방법.
  10. 제8 항에 있어서,
    상기 마일스톤은 상기 저장 장치의 하나 이상의 메모리 셀들로부터의 신호 감지 완료를 포함하는 방법.
  11. 캐시 및 상기 캐시에 결합되고 로직을 실행하도록 구성되는 프로세서를 포함하는 저장 장치에 있어서,
    상기 로직은 상기 프로세서가 호스팅 컴퓨팅 장치로부터 논리 주소를 포함하는 명령을 식별하는 동작, 조건을 검출하는 동작, 상기 조건을 검출한 것에 기초하여 상기 논리 주소를 물리 주소로 변환하도록 요청하는 동작, 상기 물리 주소를 캐시에 저장하는 동작 및 상기 물리 주소를 기반으로 상기 명령에 따라 데이터를 전송하는 동작을 수행하게 하는 저장 장치.
  12. 제11 항에 있어서,
    상기 저장 장치는 상기 명령을 식별한 것에 응답하여 제1 타이머를 시작하고,
    상기 프로세서가 상기 조건을 검출하는 동작을 수행하게 하는 상기 로직은 상기 프로세서가 상기 제1 타이머의 만료를 검출하는 동작을 수행하게 하는 로직을 더 포함하는 저장 장치.
  13. 제12 항에 있어서,
    상기 제1 타이머의 길이는 상기 명령을 처리하는데 예측되는 레이턴시보다 짧은 저장 장치.
  14. 제12 항에 있어서,
    상기 로직은 상기 프로세서가 처리될 활성 명령의 개수에 기초하여 상기 제1 타이머의 길이를 동적으로 계산하게 하는 저장 장치.
  15. 제12 항에 있어서,
    상기 로직은 상기 프로세서가 제2 타이머를 설정하는 동작, 상기 제2 타이머의 만료를 검출하는 동작 및 상기 제2 타이머의 상기 만료에 기초하여 상기 논리 주소를 상기 물리 주소로 변환하도록 요청하는 동작을 더 수행하게 하고,
    상기 제2 타이머의 길이는 상기 저장 장치가 상기 명령을 처리하는 동안 이벤트를 완료하는데 예상되는 길이에 기초하는 저장 장치.
  16. 제15 항에 있어서,
    상기 이벤트는 에러 정정 동작을 호출하는 것을 포함하는 저장 장치.
  17. 제11 항에 있어서,
    상기 명령은 상기 저장 장치로부터 상기 데이터를 읽기 위한 명령을 포함하고, 상기 논리 주소는 상기 호스트 컴퓨팅 장치의 메모리 위치에 상기 데이터를 저장하기 위한 것인 저장 장치.
  18. 제11 항에 있어서,
    상기 로직은 상기 프로세서가 상기 명령의 실행 진행을 모니터링하는 동작을 더 수행하게 하고, 상기 프로세서가 상기 조건을 검출하는 동작이 마일스톤에 도달했다고 결정하는 동작을 포함하게 하는 저장 장치.
  19. 제18 항에 있어서,
    상기 로직은 상기 프로세서가 상기 명령의 실행 진행을 모니터링하는 동작이 상기 명령에 대해 실행되는 복수의 단계들을 모니터링하는 동작을 포함하게 하는 저장 장치.
  20. 제18 항에 있어서.
    상기 마일스톤은 상기 저장 장치의 하나 이상의 메모리 셀들로부터의 신호 감지 완료를 포함하는 저장 장치.
KR1020220181728A 2022-04-11 2022-12-22 주소 변환 캐시를 미리 채우기 위한 시스템 및 방법 KR20230145907A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202263329755P 2022-04-11 2022-04-11
US63/329,755 2022-04-11
US17/879,713 US12032483B2 (en) 2022-04-11 2022-08-02 Systems and methods for pre-populating address translation cache
US17/879,713 2022-08-02

Publications (1)

Publication Number Publication Date
KR20230145907A true KR20230145907A (ko) 2023-10-18

Family

ID=85198976

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220181728A KR20230145907A (ko) 2022-04-11 2022-12-22 주소 변환 캐시를 미리 채우기 위한 시스템 및 방법

Country Status (4)

Country Link
US (1) US12032483B2 (ko)
EP (1) EP4261697A1 (ko)
KR (1) KR20230145907A (ko)
TW (1) TW202407547A (ko)

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5940596A (en) * 1996-03-25 1999-08-17 I-Cube, Inc. Clustered address caching system for a network switch
US6715057B1 (en) 2000-08-31 2004-03-30 Hewlett-Packard Development Company, L.P. Efficient translation lookaside buffer miss processing in computer systems with a large range of page sizes
US7334107B2 (en) 2004-09-30 2008-02-19 Intel Corporation Caching support for direct memory access address translation
US20060179173A1 (en) 2005-02-02 2006-08-10 Bockhaus John W Method and system for cache utilization by prefetching for multiple DMA reads
US7870301B2 (en) 2005-02-25 2011-01-11 International Business Machines Corporation System and method for modification of virtual adapter resources in a logically partitioned data processing system
US8621120B2 (en) * 2006-04-17 2013-12-31 International Business Machines Corporation Stalling of DMA operations in order to do memory migration using a migration in progress bit in the translation control entry mechanism
JP5624510B2 (ja) * 2011-04-08 2014-11-12 株式会社東芝 記憶装置、記憶システム及び認証方法
US8635407B2 (en) 2011-09-30 2014-01-21 International Business Machines Corporation Direct memory address for solid-state drives
JP5362145B1 (ja) * 2013-03-29 2013-12-11 株式会社東芝 論理アドレスと物理アドレスとの間のマッピングを管理するストレージシステム、ストレージコントローラ及び方法
US10645164B1 (en) * 2015-10-27 2020-05-05 Pavilion Data Systems, Inc. Consistent latency for solid state drives
US20170139716A1 (en) * 2015-11-18 2017-05-18 Arm Limited Handling stalling event for multiple thread pipeline, and triggering action based on information access delay
GB2546343A (en) 2016-01-15 2017-07-19 Stmicroelectronics (Grenoble2) Sas Apparatus and methods implementing dispatch mechanisms for offloading executable functions
US10078588B2 (en) 2016-03-25 2018-09-18 Advanced Micro Devices, Inc. Using leases for entries in a translation lookaside buffer
US10223305B2 (en) 2016-06-27 2019-03-05 International Business Machines Corporation Input/output computer system including hardware assisted autopurge of cache entries associated with PCI address translations
US10095620B2 (en) * 2016-06-29 2018-10-09 International Business Machines Corporation Computer system including synchronous input/output and hardware assisted purge of address translation cache entries of synchronous input/output transactions
GB2563879B (en) 2017-06-28 2019-07-17 Advanced Risc Mach Ltd Realm identifier comparison for translation cache lookup
US11372787B2 (en) 2017-12-09 2022-06-28 Intel Corporation Unified address space for multiple links
US10747679B1 (en) * 2017-12-11 2020-08-18 Amazon Technologies, Inc. Indexing a memory region
US10846235B2 (en) * 2018-04-28 2020-11-24 International Business Machines Corporation Integrated circuit and data processing system supporting attachment of a real address-agnostic accelerator
US10824526B2 (en) * 2018-08-03 2020-11-03 Western Digital Technologies, Inc. Using failed storage device in peer-to-peer storage system to perform storage-centric task
KR20200025518A (ko) * 2018-08-30 2020-03-10 에스케이하이닉스 주식회사 데이터 저장 장치 및 동작 방법, 이를 포함하는 스토리지 시스템
US10732900B2 (en) * 2018-10-24 2020-08-04 Western Digital Technologies, Inc. Bounded latency and command non service methods and apparatus
US10929310B2 (en) 2019-03-01 2021-02-23 Cisco Technology, Inc. Adaptive address translation caches
US11010095B2 (en) 2019-07-25 2021-05-18 Western Digital Technologies, Inc. Dynamic and adaptive data read request scheduling
US20210081312A1 (en) 2020-11-18 2021-03-18 Intel Corporation Shared memory

Also Published As

Publication number Publication date
US20230325321A1 (en) 2023-10-12
EP4261697A1 (en) 2023-10-18
TW202407547A (zh) 2024-02-16
US12032483B2 (en) 2024-07-09

Similar Documents

Publication Publication Date Title
US10909012B2 (en) System having persistent memory
TWI431475B (zh) 用於在本地代理者之記憶體鏡像及遷移之裝置、系統及方法
EP3608790B1 (en) Modifying nvme physical region page list pointers and data pointers to facilitate routing of pcie memory requests
US10331568B2 (en) Locking a cache line for write operations on a bus
TW201339836A (zh) 資訊處理設備、算術裝置及資訊傳送方法
CN106469126B (zh) 处理io请求的方法及其存储控制器
US20130227219A1 (en) Processor, information processing apparatus, and arithmetic method
WO2015010646A1 (zh) 混合内存的数据访问方法、模块、处理器及终端设备
WO2015180598A1 (zh) 对存储设备的访问信息处理方法和装置、系统
WO2019090493A1 (zh) 内存块回收方法和装置
AU2015402888B2 (en) Computer device and method for reading/writing data by computer device
KR20190033122A (ko) 멀티캐스트 통신 프로토콜에 따라 호스트와 통신하는 저장 장치 및 호스트의 통신 방법
CN110781107A (zh) 基于dram接口的低延迟融合io控制方法和装置
US20230244417A1 (en) Storage node, storage device, and network chip
US10733118B2 (en) Computer system, communication device, and storage control method with DMA transfer of data
US20090262739A1 (en) Network device of processing packets efficiently and method thereof
US8015372B2 (en) Apparatus and method for memory migration in a distributed memory multiprocessor system
KR20230145907A (ko) 주소 변환 캐시를 미리 채우기 위한 시스템 및 방법
CN113742115B (zh) 用于通过处理器处理页面错误的方法
TWI805878B (zh) 儲存系統的快取系統及其資料快取方法
JP4431492B2 (ja) 複数のコヒーレンシー・グラニュールをサポートするデータ転送ユニット
CN116893985A (zh) 用于预填充地址转换高速缓存的系统和方法
US20240168681A1 (en) Solving submission queue entry overflow with shadow submission queue
KR20220014272A (ko) 복사 명령 처리 시스템 및 방법