KR101245011B1 - 복수의 전달을 큐잉하는 방법, 복수의 불연속 어드레스 범위 전달 요청 방법, 제품 및 시스템 - Google Patents
복수의 전달을 큐잉하는 방법, 복수의 불연속 어드레스 범위 전달 요청 방법, 제품 및 시스템 Download PDFInfo
- Publication number
- KR101245011B1 KR101245011B1 KR1020117007703A KR20117007703A KR101245011B1 KR 101245011 B1 KR101245011 B1 KR 101245011B1 KR 1020117007703 A KR1020117007703 A KR 1020117007703A KR 20117007703 A KR20117007703 A KR 20117007703A KR 101245011 B1 KR101245011 B1 KR 101245011B1
- Authority
- KR
- South Korea
- Prior art keywords
- command
- tagged
- interface
- memory
- list
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Bus Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
단일 명령 내에서 복수의 불연속 어드레스 범위들의 전달을 큐잉하는 시스템 및 방법이 개시된다. 시스템에 대한 실시예는 시스템 프로세서, 데이터 및 실행 가능한 소프트웨어를 저장하는 메모리 및 시스템 메모리 내에 저장된 전달 명령을 수신하는 저장 디바이스를 포함한다. 호스트 컨트롤러 인터페이스 드라이버는 하나 이상의 시스템 프로세서에 의해서 실행되고 복수의 불연속 어드레스 범위들을 저장 장치 전달 요청으로부터 수집하고, 불연속 어드레스 범위 각각에 대해서, 시작 어드레스 및 전달할 데이터 양을 태깅된 명령 리스트(tagged command list) 내에 기록한다. 호스트 컨트롤러 인터페이스 드라이버는 상기 태깅된 명령 리스트 내에 어드레스 범위의 개수를, 명령 내에 태깅된 전달 동작 코드(opcode)를 기록하고, 저장 장치에 대한 명령 테이블 내에 명령 및 태깅된 명령 리스트를 저장한다. 호스트 컨트롤러 디바이스는 메모리 내 명령 테이블에 대한 베이스 어드레스 및 태깅된 명령 리스트에 대한 오프셋을, 명령 큐에 저장된 명령 헤더 내로 기록한다.
Description
본 발명은 하드 디스크 및/또는 비휘발성 메모리를 액세스하는 분야에 관한 것이다. 특히, 본 발명은 단일 명령(command) 내에서 복수의 불연속(non-contiguous) 어드레스 범위들의 전달들(transfers)을 큐잉(queuing)하는 기술에 관한 것이다.
현대의 컴퓨터 시스템에서, 다양한 저장 디바이스들이 소프트웨어 및/또는 데이터를 저장하고 액세스하는데 사용된다. 통상적으로, 이들은 HDD(하드 디스크 드라이브)와 같은 자기 저장 디바이스, 컴팩트 디스크(CD)와 같은 광학 저장 디스크 및 플래시 메모리 고체상태 드라이브(SSD)를 포함한다.
HDD에서, 정보는 고속으로 회전하는 자기 플래터(magnetic platter) 상에 저장되고 판독/기록 헤드 블록에 의해서 자기 플래터로부터/로 판독(read)/기록(write)된다. 마이크로컨트롤러는 플래터에 대해서 헤드의 움직임을 제어하고, 외부 인터페이스와 통신하고, 디스크 캐시 버퍼와 함께 작동한다. 데이터는 플래터의 상이한 부분들에 기록될 수 있고 작업부하(workload)가 랜덤하거나 거의 랜덤할 때에는 헤드를 플래터 위의 필요한 위치로 이동시키기 위해서 상당한 양의 시간이 필요로 하게 될 수 있다. 기록 요청 재정렬(reorder) 기능과 룩 어헤드 판독(look-ahead reading) 기능은 HDD 시스템에서 성능을 크게 증가시킬 수 있다.
논리적 블록 어드레싱(LBA)은 저장 디바이스 내에서 데이터 블록의 위치를 지정하는데 통상적으로 사용된다. LBA는 어드레스를 지칭하거나 블록(즉, 인덱스)을 지칭할 수 있으며, 후자의 경우에 제 1 블록은 LBA = 0이며 제 1 블록은 LBA = 1 등이다. LBA 방식은 저장 디바이스의 물리적 세부 사항들을 운영 체제 소프트웨어에 노출시키는 CHS(실린더 헤드 섹터) 방식과 같은 초기의 어드레싱 방식들을 대체한다. 논리적 블록들은 통상적으로 512 바이트 또는 1024 바이트이다(ISO 9660 CD는 2048 바이트 블록들을 사용한다). 블록-레벨 I/O을 요하는 시스템 호(system call)는 LBA 규정 사항들을 저장 디바이스 드라이버에 전달한다. 몇몇 간단한 경우에, 논리적 블록 크기는 저장 디바이스로부터 판독되거나 저장 디바이스로 기록될 수 있는 최소 물리적 섹터와 동일한 크기일 수 있다.
SSD에서, NAND 또는 NOR 로직을 기초로 한 플래시 메모리들은 마이크로컨트롤러에 의해서 제어되는 몇 개의 칩들 내에 데이터를 저장한다. SSD는 고속 판독 시간을 가지지만(즉, 필요한 셀 또는 셀들만이 오직 발견되어서 판독되어야 하지만), 상대적으로 저속 기록 시간을 갖는다(즉, 새로운 데이터를 셀 또는 셀들에 기록하기 이전에 기존의 데이터가 이 셀 또는 셀들로부터 소거되어야 함). 염려 사항이 될 수 있는 어떠한 스피닝(spinning) 디스크 또는 판독/기록 헤드도 존재하지 않으며 따라서 액세스 레이턴시(latency)는 HDD의 경우에서보다 덜 문제가 된다.
데이터 전송 요청들을 재정렬함으로써 보다 고속 성능을 실현하기 위해서, NCQ(Native Command Queuing)와 같은 큐잉 기술들이 (가령, 직렬 ATA(Advanced Technology Attachment) HDD에서 사용되도록) 도입되어서 판독 명령 및 기록 명령이 실행되는 순서를 최적화시킨다. SSD에서 큐잉 기술을 사용하는 일 장점은 디바이스들이 일련의 명령들을 완료할 때에 이들이 스톨링되지(stalled) 않게 복수의 명령들이 디바이스들에 전달될 수 있다는 것이다. 전달할 가능한 한 많은 데이터를 갖기 때문에 또한 대량의 병행 구현 사항들이 존재한다.
호스트 컨트롤러 인터페이스(가령, SATA(직렬 ATA) 디바이스를 위한 AHCI(Advanced Host Controller Interface) 또는 플래시 메모리 저장 디바이스를 위한 NVMHCI(Non-Volatile Memory Host Controller Interface))는 NCQ와 같은 기술들을 이용하기 위해서 소프트웨어가 시스템 메모리 구조를 통해서 (호스트 버스 어댑터와 같은) 디바이스들과 통신하도록 하게 하는 하드웨어 메카니즘이다.
Microsoft? Windows?, Berkeley Software Distribution(BSD, 때때로 Berkeley Unix로 지칭됨) 및 Linux?와 같은 수많은 현대의 운영 체제는 AHCI와 같은 호스트 제어기 인터페이스를 지원하지만 이러한 인터페이스는 명령 큐 내의 한정된 개수의 (즉, 32 개의) 인-플라이트(in-flight) 명령만을 지원하고 매 완료된 요청에 대해서 시스템 인터럽트를 생성한다. 통상적으로, 복수의 요청 또는 명령들은 자연적으로는 함께 만족되고 완료되며, 디바이스들의 성능이 개선됨에 따라서 디바이스들은 보다 많은 명령들을 소비할 수 있는 용량을 가질 수 있다. 한편, SCSI 프로토콜은 264 개까지의 명령들이 큐잉되게 할 수 있지만 이러한 긴 큐를 지원하는 구현 사항들은 매우 비싸며 프로토콜 오버헤드는 AHCI에서보다 매우 커지게 된다.
현재까지, 큰 개수의 저장 디바이스 전달 요청을 서비스할 수 있는 보다 효율적인 방법, 구조 및 시스템들이 완벽하게 개발되지는 않았다.
본 발명은 다음의 첨부 도면을 참조하여서 한정적인 아닌 예시적인 방식으로 설명될 것이다.
도 1은 단일 명령으로 복수의 불연속 어드레스 범위들에 대한 저장 디바이스 전달을 요청하는 시스템의 일 실시예를 나타내고 있다.
도 2는 단일 명령으로 복수의 불연속 어드레스 범위들에 대한 저장 디바이스 전달을 요청하는 프로세스의 일 실시예의 흐름도이다.
도 3은 단일 명령으로 복수의 불연속 어드레스 범위들에 대한 저장 디바이스 전달을 요청하는 프로세스의 다른 실시예의 흐름도이다.
도 4a는 저장 디바이스 전달할 어드레스 범위를 지정하는 데이터 구조의 일 실시예를 나타내고 있다.
도 4b는 태깅된 전달 명령 및 불연속 어드레스 범위들의 태깅된 명령 리스트를 포함하는 명령 테이블 데이터 구조의 실시예를 나타낸다.
도 4c는 저장 디바이스 태깅된 전달 명령을 지정하는 데이터 구조의 일 실시예를 나타낸다.
도 4d는 저장 디바이스 태깅된 전달 명령을 지정하는 데이터 구조의 다른 실시예를 나타낸다.
도 4e는 메모리 내의 명령 테이블에 대한 베이스 어드레스 및 불연속 어드레스 범위들의 태깅된 명령 리스트에 대한 오프셋을 포함하는 저장 디바이스 명령 헤더를 지정하는 데이터 구조의 실시예를 나타낸다.
도 4f는 복수의 명령 헤더를 포함하는 저장 디바이스 명령 큐를 지정하는 데이터 구조의 실시예를 나타낸다.
도 4g는 저장 디바이스 태깅된 전달 명령을 지정하는 데이터 구조의 다른 실시예를 나타낸다.
도 1은 단일 명령으로 복수의 불연속 어드레스 범위들에 대한 저장 디바이스 전달을 요청하는 시스템의 일 실시예를 나타내고 있다.
도 2는 단일 명령으로 복수의 불연속 어드레스 범위들에 대한 저장 디바이스 전달을 요청하는 프로세스의 일 실시예의 흐름도이다.
도 3은 단일 명령으로 복수의 불연속 어드레스 범위들에 대한 저장 디바이스 전달을 요청하는 프로세스의 다른 실시예의 흐름도이다.
도 4a는 저장 디바이스 전달할 어드레스 범위를 지정하는 데이터 구조의 일 실시예를 나타내고 있다.
도 4b는 태깅된 전달 명령 및 불연속 어드레스 범위들의 태깅된 명령 리스트를 포함하는 명령 테이블 데이터 구조의 실시예를 나타낸다.
도 4c는 저장 디바이스 태깅된 전달 명령을 지정하는 데이터 구조의 일 실시예를 나타낸다.
도 4d는 저장 디바이스 태깅된 전달 명령을 지정하는 데이터 구조의 다른 실시예를 나타낸다.
도 4e는 메모리 내의 명령 테이블에 대한 베이스 어드레스 및 불연속 어드레스 범위들의 태깅된 명령 리스트에 대한 오프셋을 포함하는 저장 디바이스 명령 헤더를 지정하는 데이터 구조의 실시예를 나타낸다.
도 4f는 복수의 명령 헤더를 포함하는 저장 디바이스 명령 큐를 지정하는 데이터 구조의 실시예를 나타낸다.
도 4g는 저장 디바이스 태깅된 전달 명령을 지정하는 데이터 구조의 다른 실시예를 나타낸다.
단일 명령 내에서 복수의 불연속 어드레스 범위들의 전달을 큐잉하는 방법 및 시스템들이 이하에서 기술될 것이다. 몇몇 실시예에서, 이 시스템은 하나 이상의 시스템 프로세서와, 데이터 및 실행 가능한 소프트웨어를 저장하는 시스템 메모리 및 시스템 메모리 내에 저장된 전달 명령을 수신하는 저장 디바이스를 포함한다. 몇몇 실시예에서, 시스템 메모리 내에 저장된 호스트 컨트롤러 인터페이스 드라이버(가령, SATA(직렬 ATA) 디바이스를 위한 AHCI(Advanced Host Controller Interface) 또는 NAND 플래시 메모리 저장 디바이스를 위한 NVMHCI(Non-Volatile Memory Host Controller Interface))가 하나 이상의 시스템 프로세서에 의해서 실행될 때에, 저장 디바이스 전달 요청으로부터 복수의 불연속 어드레스 범위들을 수집하고, 시작 어드레스 및 각 불연속 어드레스 범위에 대해 전달할 데이터 양을 태깅된 명령 리스트(tagged command list) 내에 기록한다. 또한, 태깅된 명령 리스트 내에 있는 불연속 어드레스 범위들의 카운트 수 및 명령 내의 태깅된 전달 동작 코드(opcode)를 기록하고, 이 명령 및 태깅된 명령 리스트를 저장 디바이스를 위한 시스템 메모리 내의 명령 테이블 내에 저장한다. 명령 테이블에 대한 베이스 메모리 어드레스 및 태깅된 명령에 대한 오프셋을 명령 헤더 내에 기록하고, 이 명령 헤더는 특정 호스트 제어기 인터페이스에 따라서 명령 큐 내에 저장된다. 몇몇 다른 실시예들에서, 태깅된 전달 명령은 호스트 대 디바이스 레지스터 FIS(프레임 정보 구조) 내에서 (가령, ATAPI(ATA 패킷 인터페이스) 명령 및/또는 SATA NCQ 명령과 같은 SATA 명령에서와 같이) 물리적 전송 메카니즘에 따라서 저장 디바이스에 전송될 수 있다. 이 태깅된 전달 명령은 저장 디바이스가 데이터 FIS(즉, 데이터 패킷)로서 요청할 수 있는 복수의 불연속 어드레스 범위들을 저장하는 태깅된 명령 리스트의 가용성을 나타낼 수 있다.
이로써, 단일 명령으로 복수의 불연속 어드레스 범위들을 전달하는 동작을 큐잉함으로써 큰 개수의 저장-디바이스 전달 요청을 서비스할 수 있는 보다 효율적이면서 비용 측면에서 유리한 방법, 구조 및 시스템이 제공된다.
다음의 설명에서, 복수의 특정 세부 사항들이 제시된다. 그러나, 본 발명의 실시예들은 이러한 특정 실시예들 없이도 실시될 수 있다. 다른 실례에서, 잘 알려진 회로, 구조 및 기술들은 본 설명을 이해를 모호하게 하지 않도록 세부적으로 설명되지 않을 것이다. 본 발명의 이러한 실시예 및 다른 실시예들은 다음의 교시 사항에 따라서 실현될 수 있으며 다양한 수정 및 변경 사항들이 본 발명의 더 넓은 기술적 사상 및 범위를 일탈하지 않고서 다음의 교시 사항들로부터 이루어질 수 있음이 자명하다. 따라서, 이 명세서 및 도면은 본 발명을 한정하는 차원에서 해석되기보다는 예시적으로 설명하는 것으로 해석되어야 하며 본 발명은 청구 범위 및 이의 균등 범위로만 규정될 수 있다.
도 1은 단일 명령으로 복수의 불연속 어드레스 범위들에 대한 저장 디바이스 전달을 요청하기 위한 시스템(101)의 일 실시예를 나타내고 있다. 시스템(101)은 복수의 시스템 프로세서, 즉 중앙 프로세서(111), 메모리 제어 프로세서(112), 입출력(I/O) 제어 프로세서(113), 그래픽 프로세서(114) 및 DMA(직접 메모리 액세스) 프로세서를 포함한다. 또한, 시스템(101)은 SSD(120), 디스크 드라이브(121), PCI(Peripheral Component Interconnect) 및/또는 PCI-E(PCI Express) 디바이스(122) 및/또는 플래시 메모리 저장 장치(126)와 같은 소정의 저장 디바이스들을 포함한다. 시스템(101)은 또한 데이터 및 실행 가능한 소프트웨어를 저장하는 시스템 메모리(115), 오디오 입출력부(I/O)(123), USB 입출력부(124), LAN 입출력부(125), BIOS(117), 키패드 인터페이스(118) 및 마우스 인터페이스(119)를 포함한다. SSD(120), 디스크 드라이브(121), PCI 디바이스(122) 및/또는 플래시 메모리 저장 장치(126)와 같은 저장 디바이스들은 시스템 메모리(115)에 접속되어서 저장-디바이스 전달 요청에 따라서 다양한 어드레스 범위들로부터/로 데이터를 전달하기 위해서 시스템 메모리(115) 내에 저장된 전달 명령들을 수신한다.
시스템 메모리(115)는 프로세서 실행 가능한 호스트 컨트롤러 인터페이스 드라이버(116)를 저장한다. 시스템(101)의 몇몇 실시예에서, 드라이버(116)는 (가령, SSD(120) 또는 디스크 드라이브(120) 내의) SATA 디바이스를 위한 AHCI 드라이버 및/또는 (가령, 플래시 메모리 저장 장치(126)와 같은) NAND 플래시 메모리 저장 디바이스를 위한 NVMHCI를 포함할 수 있다. 하나 이상의 시스템 프로세서들에 의해서 실행될 때에, 드라이버(116)는 하나 이상의 시스템 프로세서로 하여금 대응하는 저장-디바이스 전달 요청으로부터 복수의 불연속 어드레스 범위들을 수집하고 각 불연속 어드레스 범위에 대해 전달한 데이터 양 및 시작 어드레스를 태깅된 명령 리스트(tagged command list) 내에 기록하게 한다. 또한, 드라이버(116)를 실행시키는 시스템 프로세서는 태깅된 전달 동작 코드(tagged-transfer opcode) 및 상기 태깅된 명령 리스트 내의 불연속 어드레스 범위들의 수를 명령 내에 기록하며, 여기서 상기 명령 및 상기 태깅된 명령 리스트 양자는 특정 저장 디바이스를 위한 시스템 메모리(115) 내의 명령 테이블 내에 저장된다. 시스템 메모리(115) 내의 명령 테이블에 대한 베이스 어드레스 및 태깅된 명령 리스트에 대한 오프셋이 상기 저장 디바이스에 대한 명령 큐 내에 저장된 명령 헤더들 중 하나에 기록될 수 있다.
시스템(101)은 각 태깅된 전달 명령에 대해서 태깅된 명령 리스트 내의 복수의 불연속 어드레스 범위들에 대한 저장 디바이스 전달을 요청하기 위한, 본 명세서에서 기술된 프로세스에 따라서 사용될 수 있다.
도 2는 단일 명령으로 복수의 불연속 어드레스 범위들에 대한 저장 디바이스 전달을 요청하는 프로세스(201)의 일 실시예의 흐름도이다. 이 프로세스(201) 및 본 명세서에서 개시된 다른 프로세스들은 범용 머신들 또는 특정 목적의 머신들 또는 이들의 조합에 의해서 실행가능하며 머신 판독 가능한 매체 내에 포함되어 있는 전용 하드웨어 또는 소프트웨어 또는 펌웨어 동작 코드들을 포함할 수 있는 프로세싱 블록들에 의해서 수행될 수 있다.
프로세싱 블록(211)에서, 복수의 불연속 어드레스 범위들의 리스트가 대응하는 저장-디바이스 전달 요청들로부터 식별된다. 프로세싱 블록(213)에서, 단일 명령이 호스트 컨트롤러 인터페이스를 통해서 전송되어서 저장 디바이스가 상기 복수의 불연속 어드레스 범위들의 리스트를 전달할 것을 요청한다. 이 프로세스(201)의 몇몇 실시예들은 호스트 대 디바이스 레지스터 FIS(프레임 정보 구조) 내에서 (가령, ATAPI(ATA 패킷 인터페이스) 명령 및/또는 SATA NCQ 명령과 같은 SATA 명령에서와 같이) 물리적 전송 메카니즘에 따라서 저장 디바이스와 통신하는 태깅된 전달 명령을 제공한다. 이 태깅된 전달 명령은 복수의 불연속 어드레스 범위들을 저장하는 태깅된 명령 리스트의 가용성을 나타낼 수 있다. 이어서, 저장 디바이스는 상기 태깅된 명령 리스트를 데이터 FIS(즉, 하나 이상의 데이터 패킷)으로서 요청하거나 직접 메모리 액세스한다. 이어서, 프로세싱 블록(215)에서, 프로세스(201)는 요청된 데이터 전달이 완료될 것을 대기하고 완료되면 프로세싱 블록(217)으로 진행한다. 프로세싱 블록(217)에서, 저장 디바이스가 복수의 불연속 어드레스 범위들의 리스트를 전달하도록 요청하는 단일 명령의 완료에 대응하는 단일 인터럽트가 수신된다. 이어서, 프로세싱 블록(219)에서, 단일 인터럽트가 서비스된다.
도 3은 단일 명령으로 복수의 불연속 어드레스 범위들에 대한 저장 디바이스 전달을 요청하는 프로세스(301)의 다른 실시예의 흐름도이다. 프로세싱 블록(311)에서, 복수의 불연속 어드레스 범위들의 리스트가 대응하는 저장-디바이스 전달 요청들로부터 식별된다. 프로세싱 블록(312)에서, 식별된 불연속 어드레스 범위들의 리스트 각각에 대해서, 시작 어드레스 및 전달한 데이터 양이 태깅된 명령 리스트 내에 기록된다. 프로세싱 블록(313)에서, 태깅된 명령 리스트 내의 불연속 어드레스 범위들의 수에 대한 카운트 및 태깅된 전달 동작 코드(opcode)가 단일 명령 내에 기록되며, 이 단일 명령은 상기 태깅된 명령 리스트를 따라서 메모리 내의 명령 테이블 내에 저장된다. 프로세싱 블록(314)에서, 메모리 내의 명령 테이블에 대한 베이스 어드레스 및 태깅된 명령 리스트에 대한 오프셋이 명령 큐 내에 저장된 명령 헤더 내에 기록된다.
프로세싱 블록(315)에서, 프로세스(301)는 요청된 데이터 전달이 완료될 것을 대기하고 완료되면 프로세싱 블록(317)으로 진행한다. 프로세싱 블록(317)에서, 저장 디바이스가 복수의 불연속 어드레스 범위들의 리스트를 전달하도록 요청하는 단일 명령의 완료에 대응하는 단일 인터럽트가 수신된다. 이어서, 프로세싱 블록(319)에서, 단일 인터럽트가 서비스된다.
특정 호스트 컨트롤러 인터페이스에 따라서 저장 디바이스 전달을 요청하는 추가적인 세부 사항들은 상기 특정 호스트 제어기 인터페이스에 대한 대응하는 공개된 명세 사항들에서 개시되어 있다(가령, 웹상에서 인텔사로부터 입수 가능한 "Serial ATA AHCI(Advanced Host Controller Interface) 1.3" 또는 "Serial ATA International Organization: Serial ATA Revision 2.6" 또는 "Non-Volatile Memory Host Controller Interface(NVMHCI) 1.0"을 참조하라).
도 4a는 저장 디바이스 전달할 어드레스 범위(401)를 지정하는 32 비트 필드 시퀀스를 포함하는 데이터 구조의 일 실시예를 나타내고 있다. 어드레스 범위(401)는 LBA 또는 시작 섹터 어드레스(411a, 411b) 및 전달할 데이터 섹터의 양(412)을 포함한다. 어드레스 범위(401)는 프로세싱 블록(312)에서 전술한 바와 같이 태깅된 명령 리스트 내에 기록된다. 이러한 태깅된 명령 리스트는 일종의 분산/수집 리스트를 나타낼 수 있다. 통상적인 분산/수집 리스트(scatter/gather list)가 물리적 어드레스로/로부터 가상 어드레스로부터/로 가는데 사용된다면, 태깅된 명령 리스트는 분산된 논리적 어드레스 맵으로 복수의 판독 동작 또는 기록 동작을 이하에서 기술되는 명령(403,404 또는 408)과 같은 단일 명령으로 결합시킨다.
도 4b는 적합한 길이를 갖는 (가령, 32 바이트 또는 64 바이트까지일 수 있는) 태깅된 전달 명령 및 (가령, 어드레스 범위(401)와 유사한) 불연속 어드레스 범위들의 태깅된 명령 리스트(423)를 포함하는 명령 테이블 데이터 구조(402)의 실시예를 나타낸다. 명령 테이블 데이터 구조(402)는 호스트 컨트롤러 인터페이스에 의해서 규정되는 바와 같은 물리적 영역 기술자(Physical Region Description: PRD) 테이블(422), 메타데이터, PRD 인덱스 등과 같은 다른 데이터 섹션 및/또는 테이블들을 더 포함할 수 있다. 명령 테이블 데이터 구조(402)는 프로세싱 블록(313)에 따라서 메모리(가령, 시스템 메모리(115)) 내에 저장될 수 있다.
도 4c는 태깅된 명령 리스트 내의 불연속 어드레스 범위들의 개수에 대한 카운트(432) 및 태깅된 전달 동작 코드(opcode)(431)를 포함하는 저장 디바이스 태깅된 전달 명령(403)을 특정하는 32 비트 필드 시퀀스를 포함하는 데이터 구조의 실시예를 나타내고 있다. 이 태깅된 전달 명령(403)은 프로세싱 블록(313)에 따라서 (가령, 명령 테이블 데이터 구조(402)와 같은) 명령 테이블 내에 저장될 수 있다. 다양한 태깅된 전달 동작 코드(431)가 판독 또는 기록 시에 사용될 수 있으며 상기 명령(403)은 또한 AHCI 및/또는 NVMHCI와 같은 호스트 제어기 인터페이스에 의해서 특정되거나 SATA와 같은 버스 인터페이스에 의해서 특정되는 어드레스 데이터, 파라미터, 속성 등을 저장하는 다른 필드들을 포함할 수 있다.
도 4d는 태깅된 명령 리스트 내의 불연속 어드레스 범위들의 개수에 대한 카운트(442) 및 태깅된 전달 동작 코드(opcode)(441)를 포함하는 저장 디바이스 태깅된 전달 명령(404)을 특정하는 32 비트 필드 시퀀스를 포함하는 데이터 구조의 실시예를 나타내고 있다. 이 명령(404)의 실시예들에서, 태깅된 명령 리스트 내의 불연속 어드레스 범위들의 개수에 대한 카운트(442)는 기존의 호스트 제어기 인터페이스의 (가령, 섹터들의 총 개수에 대하여) 선행하여 지정된 필드를 대체할 수 있다.
도 4e는 (가령, 시스템 메모리(115)와 같은) 메모리 내의 명령 테이블(가령, 명령 테이블 데이터 구조(402))에 대한 베이스 어드레스(451a,451b) 및 불연속 어드레스 범위들(어드레스 범위(401))의 태깅된 명령 리스트(가령, 명령 리스트(423))에 대한 오프셋(452)을 포함하는 저장 디바이스 명령 헤더(450)를 특정하는 32 비트 필드 시퀀스를 포함하는 데이터 구조(405)의 실시예를 나타내고 있다. 이 명령 헤더(450)는 프로세싱 블록(314)에 따라서 메모리 내에 저장될 수 있다.
도 4f는 대응하는 명령 테이블(470 내지 473)(가령, 명령 테이블 데이터 구조(402))를 식별하는 복수의 명령 헤더(460 내지 463)(가령, 명령 헤더(450))를 포함하는 저장 디바이스 명령 큐(406)를 특정하는 데이터 구조(407)의 실시예를 나타태며 이는 프로세싱 블록(314)에 따라서 저장될 수 있다. 명령 큐(406)에 대한 메모리(가령, 시스템 메모리(115)) 내의 베이스 어드레스는 포트 레지스터(465)를 통해서 저장 디바이스를 위해서 식별될 수 있다. 이 메모리 내의 추가 베이스 어드레스는 포트 레지스터(466)를 통해서 식별될 수도 있다.
도 4g는 태깅된 명령 리스트 내의 불연속 어드레스 범위들의 개수에 대한 카운트(482) 및 태깅된 전달 동작 코드(opcode)(481)를 포함하는 저장 디바이스 태깅된 전달 명령(408)에 대한 패킷을 특정하는 8 비트 레지스터 시퀀스를 포함하는 데이터 구조의 다른 실시예를 나타내고 있다. 이 명령(408)의 몇몇 실시예에서, (가령, 규정된 PRD 또는 명령 테이블에 따라서) 태깅된 명령 리스트 어드레스/오프셋(483a-c 또는 483a-f)이 (가령, SATA ATAPI 및/또는 SATA NCQ와 같은) 기존의 버스 인터페이스의 LBA(선형 블록 어드레스) 대신에 DMA를 위해서 특정될 수 있다.
위의 설명들은 본 발명의 바람직한 실시예들을 설명하기 위한 것이다. 특히 급속하게 성장하고 몇몇 진보된 기술들이 용이하게는 예상되지 않는 이러한 기술 분야에서, 위의 교시 사항으로부터, 본 발명은 그의 배열 및 세부 사항에 있어서 다음의 청구 범위 및 그의 균등 범위 내에 있는 본 발명의 원리를 일탈하지 않고서 본 기술 분야의 당업자에 의해서 수정될 수 있다.
Claims (25)
- 단일 명령과 연관된 복수의 전달(a plurality of transfers)을 큐잉하는 방법으로서,
복수의 불연속(non-contiguous) 어드레스 범위들을 전달하기 위해 저장 디바이스에 요청하는 단일 명령을 인터페이스를 통해 전송하는 단계 - 상기 단일 명령은 상기 복수의 불연속 어드레스 범위들이 저장되는 태깅된 명령 리스트의 위치에 대한 참조(reference)를 포함하고, 상기 단일 명령 및 상기 태깅된 명령 리스트는 저장 디바이스의 명령 테이블 내에 저장됨 - 와,
상기 복수의 불연속 어드레스 범위들의 전달이 완료되면 단일 인터럽트를 수신하는 단계를 포함하는
복수의 전달을 큐잉하는 방법.
- 제 1 항에 있어서,
상기 인터페이스는 직렬 ATA(Advanced Technology Attachment) 버스 인터페이스인
복수의 전달을 큐잉하는 방법.
- 제 1 항에 있어서,
상기 인터페이스는 SCSI(Small Computer System Interface)인
복수의 전달을 큐잉하는 방법.
- 제 1 항에 있어서,
상기 인터페이스는 SAS(Serial Attached SCSI) 인터페이스인
복수의 전달을 큐잉하는 방법.
- 제 1 항에 있어서,
상기 인터페이스는 AHCI(Advanced Host Controller Interface)인
복수의 전달을 큐잉하는 방법.
- 제 5 항에 있어서,
상기 인터페이스는 직렬 ATA 저장 디바이스용인
복수의 전달을 큐잉하는 방법.
- 제 1 항에 있어서,
상기 인터페이스는 NVMHCI(Non-Volatile Memory Host Controller Interface)인
복수의 전달을 큐잉하는 방법.
- 제 6 항에 있어서,
상기 인터페이스는 NAND 플래시 메모리 저장 디바이스용인
복수의 전달을 큐잉하는 방법.
- 제 6 항에 있어서,
상기 인터페이스는 상변화 메모리 저장 디바이스용인
복수의 전달을 큐잉하는 방법.
- 저장 디바이스 내의 복수의 불연속 어드레스 범위들의 전달을 요청하는 방법으로서,
상기 복수의 불연속 어드레스 범위들의 각각에 대해 전달할 데이터 양 및 시작 어드레스를 태깅된 명령 리스트(tagged command list) 내에 기록(recording)하는 단계와,
상기 태깅된 명령 리스트 내에 기록된 상기 복수의 불연속 어드레스 범위들의 개수의 카운트 및 태깅된 전달 연산 코드(opcode)를 단일 명령 내에 기록하는 단계―상기 단일 명령 및 상기 태깅된 명령 리스트는 메모리 내의 명령 테이블 내에 저장됨―와,
상기 메모리 내의 명령 테이블에 대한 베이스 어드레스 및 상기 태깅된 명령 리스트에 대한 오프셋을 명령 헤더 내에 기록하는 단계―상기 명령 헤더는 명령 큐 내에 저장된 복수의 명령 헤더 중 하나임―를 포함하는
복수의 불연속 어드레스 범위 전달 요청 방법.
- 제 10 항에 있어서,
적어도 상기 명령 헤더 내에 기록된 상기 메모리 내의 명령 테이블에 대한 상기 베이스 어드레스 및 상기 태깅된 명령 리스트에 대한 상기 오프셋으로부터, 그리고 상기 명령 내에 기록된 상기 불연속 어드레스 범위들의 개수의 상기 카운트로부터 직렬 ATA 버스 인터페이스에 대한 명령 패킷을 생성하는 단계를 포함하는
복수의 불연속 어드레스 범위 전달 요청 방법.
- 제 10 항에 있어서,
상기 명령 큐는 AHCI용 명령 큐인
복수의 불연속 어드레스 범위 전달 요청 방법.
- 제 10 항에 있어서,
상기 명령 큐는 NVMHCI용 명령 큐인
복수의 불연속 어드레스 범위 전달 요청 방법.
- 제 10 항에 있어서,
상기 명령 큐는 SAS 인터페이스용 명령 큐인
복수의 불연속 어드레스 범위 전달 요청 방법.
- 머신 판독 가능한 매체로서,
상기 머신 판독 가능한 매체는 상태(state) 및 실행 가능한 데이터 중 적어도 하나를 저장하여, 하나 이상의 머신에 의해서 액세스되는 경우, 상기 하나 이상의 머신으로 하여금,
복수의 불연속 어드레스 범위들을 대응하는 복수의 전달 요청들로부터 수집하게 하고,
상기 복수의 불연속 어드레스 범위들의 각각에 대해 전달할 데이터 양 및 시작 어드레스를 태깅된 명령 리스트(tagged command list) 내에 기록하게 하며,
상기 태깅된 명령 리스트 내에 기록된 상기 복수의 불연속 어드레스 범위들의 개수의 카운트 및 태깅된 전달 연산 코드(opcode)를 단일 명령 내에 기록―상기 단일 명령 및 상기 태깅된 명령 리스트는 메모리 내의 명령 테이블 내에 저장됨―하게 하며,
상기 메모리 내의 명령 테이블에 대한 베이스 어드레스 및 상기 태깅된 명령 리스트에 대한 오프셋을 명령 헤더 내에 기록―상기 명령 헤더는 명령 큐 내에 저장된 복수의 명령 헤더 중 하나임―하게 하는
머신 판독 가능한 매체.
- 제 15 항에 있어서,
상기 머신 판독 가능한 매체는 상태 및 실행 가능한 데이터 중 적어도 하나를 저장하여, 하나 이상의 머신에 의해서 액세스되는 경우, 상기 하나 이상의 머신으로 하여금,
적어도 상기 명령 헤더 내에 기록된 상기 메모리 내의 명령 테이블에 대한 상기 베이스 어드레스 및 상기 태깅된 명령 리스트에 대한 상기 오프셋으로부터, 그리고 상기 명령 내에 기록된 상기 불연속 어드레스 범위들의 개수의 상기 카운트로부터 직렬 ATA 버스 인터페이스에 대한 명령 패킷을 생성하게 하는
머신 판독 가능한 매체.
- 제 15 항에 있어서,
상기 명령 큐는 AHCI용 명령 큐인
머신 판독 가능한 매체.
- 제 15 항에 있어서,
상기 명령 큐는 NVMHCI용 명령 큐인
머신 판독 가능한 매체.
- 제 15 항에 있어서,
상기 명령 큐는 SAS 인터페이스용 명령 큐인
머신 판독 가능한 매체.
- 단일 명령으로 복수의 불연속 어드레스 범위들의 전달을 요청하는 시스템으로서,
하나 이상의 시스템 프로세서와,
데이터 및 실행 가능한 소프트웨어를 저장하는 시스템 메모리와,
상기 시스템 메모리에 커플링(coupling)되어서 상기 시스템 메모리 내에 저장된 전달 명령을 수신하는 저장 디바이스와,
상기 시스템 메모리 내에 저장된 프로세서 실행 가능한 호스트 컨트롤러 인터페이스 드라이버를 포함하며,
상기 프로세서 실행 가능한 호스트 컨트롤러 인터페이스 드라이버는 상기 하나 이상의 시스템 프로세서에 의해서 실행되는 경우, 상기 하나 이상의 시스템 프로세서로 하여금,
복수의 불연속 어드레스 범위들을 대응하는 복수의 저장 디바이스 전달 요청들로부터 수집하게 하고,
상기 복수의 불연속 어드레스 범위들의 각각에 대해 전달할 데이터 양 및 시작 어드레스를 태깅된 명령 리스트(tagged command list) 내에 기록하게 하며,
상기 태깅된 명령 리스트 내에 기록된 상기 복수의 불연속 어드레스 범위들의 개수의 카운트 및 태깅된 전달 연산 코드(opcode)를 단일 명령 내에 기록―상기 단일 명령 및 상기 태깅된 명령 리스트는 상기 저장 디바이스에 대한 상기 시스템 메모리 내의 명령 테이블 내에 저장됨―하게 하며,
상기 메모리 내의 명령 테이블에 대한 베이스 어드레스 및 상기 태깅된 명령 리스트에 대한 오프셋을 명령 헤더 내에 기록―상기 명령 헤더는 명령 큐 내에 저장된 복수의 명령 헤더 중 하나임―하게 하는
시스템.
- 제 20 항에 있어서,
상기 호스트 컨트롤러 인터페이스는 직렬 ATA용 AHCI인
시스템.
- 제 20 항에 있어서,
상기 프로세서 실행 가능한 호스트 컨트롤러 인터페이스 드라이버는, 상기 하나 이상의 시스템 프로세서에 의해서 실행되는 경우, 상기 하나 이상의 시스템 프로세서로 하여금,
적어도 상기 명령 헤더 내에 기록된 상기 메모리 내의 명령 테이블에 대한 상기 베이스 어드레스 및 상기 태깅된 명령 리스트에 대한 상기 오프셋으로부터, 그리고 상기 명령 내에 기록된 상기 불연속 어드레스 범위들의 개수의 상기 카운트로부터 직렬 ATA 버스 인터페이스에 대한 명령 패킷을 생성하게 하는
시스템.
- 제 20 항에 있어서,
상기 호스트 컨트롤러 인터페이스는 NVMHCI인
시스템.
- 제 23 항에 있어서,
상기 호스트 컨트롤러 인터페이스는 NAND 플래시 메모리 저장 디바이스용 인터페이스인
시스템.
- 제 23 항에 있어서,
상기 호스트 컨트롤러 인터페이스는 상변화 메모리 저장 디바이스용 인터페이스인
시스템.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/342,065 | 2008-12-22 | ||
US12/342,065 US9128699B2 (en) | 2008-12-22 | 2008-12-22 | Method and system for queuing transfers of multiple non-contiguous address ranges with a single command |
PCT/US2009/067031 WO2010074944A2 (en) | 2008-12-22 | 2009-12-07 | Method and system for queuing transfers of multiple non-contiguous address ranges with a single command |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20110053261A KR20110053261A (ko) | 2011-05-19 |
KR101245011B1 true KR101245011B1 (ko) | 2013-03-19 |
Family
ID=42267799
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020117007703A KR101245011B1 (ko) | 2008-12-22 | 2009-12-07 | 복수의 전달을 큐잉하는 방법, 복수의 불연속 어드레스 범위 전달 요청 방법, 제품 및 시스템 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9128699B2 (ko) |
EP (1) | EP2361404B1 (ko) |
JP (1) | JP2012508428A (ko) |
KR (1) | KR101245011B1 (ko) |
CN (1) | CN102171649B (ko) |
WO (1) | WO2010074944A2 (ko) |
Families Citing this family (113)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8738841B2 (en) | 2007-12-27 | 2014-05-27 | Sandisk Enterprise IP LLC. | Flash memory controller and system including data pipelines incorporating multiple buffers |
US9128699B2 (en) | 2008-12-22 | 2015-09-08 | Intel Corporation | Method and system for queuing transfers of multiple non-contiguous address ranges with a single command |
US8725977B2 (en) * | 2010-02-17 | 2014-05-13 | Seagate Technology Llc | NVMHCI attached hybrid data storage |
TWI465905B (zh) * | 2010-09-22 | 2014-12-21 | Toshiba Kk | 記憶體系統、主機控制器、及直接記憶體存取之控制方法 |
US8924627B2 (en) | 2011-03-28 | 2014-12-30 | Western Digital Technologies, Inc. | Flash memory device comprising host interface for processing a multi-command descriptor block in order to exploit concurrency |
US8910020B2 (en) | 2011-06-19 | 2014-12-09 | Sandisk Enterprise Ip Llc | Intelligent bit recovery for flash memory |
US8909982B2 (en) | 2011-06-19 | 2014-12-09 | Sandisk Enterprise Ip Llc | System and method for detecting copyback programming problems |
CN102243617B (zh) * | 2011-07-08 | 2014-01-01 | 福建星网锐捷网络有限公司 | 读/写处理方法、设备及系统 |
US9134909B2 (en) | 2011-08-30 | 2015-09-15 | International Business Machines Corporation | Multiple I/O request processing in a storage system |
US8984182B2 (en) | 2011-10-06 | 2015-03-17 | Marvell International Ltd. | SCSI I/O command aggregation |
US8918554B2 (en) * | 2011-10-06 | 2014-12-23 | Marvell International Ltd. | Method and apparatus for effectively increasing a command queue length for accessing storage |
US8938658B2 (en) | 2011-11-07 | 2015-01-20 | Sandisk Enterprise Ip Llc | Statistical read comparison signal generation for memory systems |
US9048876B2 (en) | 2011-11-18 | 2015-06-02 | Sandisk Enterprise Ip Llc | Systems, methods and devices for multi-tiered error correction |
US8954822B2 (en) | 2011-11-18 | 2015-02-10 | Sandisk Enterprise Ip Llc | Data encoder and decoder using memory-specific parity-check matrix |
US8924815B2 (en) | 2011-11-18 | 2014-12-30 | Sandisk Enterprise Ip Llc | Systems, methods and devices for decoding codewords having multiple parity segments |
US8713204B2 (en) * | 2011-12-27 | 2014-04-29 | Apple Inc. | High-performance AHCI interface |
US20130173842A1 (en) * | 2011-12-28 | 2013-07-04 | King Ying Ng | Adaptive Logical Group Sorting to Prevent Drive Fragmentation |
US8990477B2 (en) * | 2012-04-19 | 2015-03-24 | Sandisk Technologies Inc. | System and method for limiting fragmentation |
US9699263B1 (en) | 2012-08-17 | 2017-07-04 | Sandisk Technologies Llc. | Automatic read and write acceleration of data accessed by virtual machines |
US9032184B2 (en) * | 2012-09-14 | 2015-05-12 | HGST Netherlands B.V. | Implementing drive list mode for reads and writes for hard disk drives |
US10049061B2 (en) * | 2012-11-12 | 2018-08-14 | International Business Machines Corporation | Active memory device gather, scatter, and filter |
KR101988287B1 (ko) * | 2012-11-26 | 2019-06-12 | 삼성전자주식회사 | 저장 장치 및 그것을 포함하는 컴퓨팅 시스템, 및 그것의 데이터 전송 방법 |
KR101993187B1 (ko) | 2012-11-26 | 2019-06-27 | 삼성전자주식회사 | 메모리 컨트롤러 및 메모리 컨트롤러의 동작 방법 |
WO2014094250A1 (zh) * | 2012-12-19 | 2014-06-26 | 华为技术有限公司 | 数据处理方法和设备 |
US9501398B2 (en) | 2012-12-26 | 2016-11-22 | Sandisk Technologies Llc | Persistent storage device with NVRAM for staging writes |
US9239751B1 (en) | 2012-12-27 | 2016-01-19 | Sandisk Enterprise Ip Llc | Compressing data from multiple reads for error control management in memory systems |
US9612948B2 (en) | 2012-12-27 | 2017-04-04 | Sandisk Technologies Llc | Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device |
US9454420B1 (en) | 2012-12-31 | 2016-09-27 | Sandisk Technologies Llc | Method and system of reading threshold voltage equalization |
US9003264B1 (en) | 2012-12-31 | 2015-04-07 | Sandisk Enterprise Ip Llc | Systems, methods, and devices for multi-dimensional flash RAID data protection |
US9971710B2 (en) | 2013-02-07 | 2018-05-15 | Microsoft Technology Licensing, Llc | Optimizing data transfers between heterogeneous memory arenas |
US9214965B2 (en) | 2013-02-20 | 2015-12-15 | Sandisk Enterprise Ip Llc | Method and system for improving data integrity in non-volatile storage |
US9329928B2 (en) | 2013-02-20 | 2016-05-03 | Sandisk Enterprise IP LLC. | Bandwidth optimization in a non-volatile memory system |
US9128634B1 (en) | 2013-03-11 | 2015-09-08 | Marvell International Ltd. | Systems and methods of packed command management for non-volatile storage devices |
US20140281147A1 (en) * | 2013-03-13 | 2014-09-18 | Kabushiki Kaisha Toshiba | Memory system |
US9870830B1 (en) | 2013-03-14 | 2018-01-16 | Sandisk Technologies Llc | Optimal multilevel sensing for reading data from a storage medium |
US9136877B1 (en) | 2013-03-15 | 2015-09-15 | Sandisk Enterprise Ip Llc | Syndrome layered decoding for LDPC codes |
US9236886B1 (en) | 2013-03-15 | 2016-01-12 | Sandisk Enterprise Ip Llc | Universal and reconfigurable QC-LDPC encoder |
US9009576B1 (en) | 2013-03-15 | 2015-04-14 | Sandisk Enterprise Ip Llc | Adaptive LLR based on syndrome weight |
US9092350B1 (en) | 2013-03-15 | 2015-07-28 | Sandisk Enterprise Ip Llc | Detection and handling of unbalanced errors in interleaved codewords |
US9367246B2 (en) | 2013-03-15 | 2016-06-14 | Sandisk Technologies Inc. | Performance optimization of data transfer for soft information generation |
US9244763B1 (en) | 2013-03-15 | 2016-01-26 | Sandisk Enterprise Ip Llc | System and method for updating a reading threshold voltage based on symbol transition information |
TWI506430B (zh) * | 2013-03-20 | 2015-11-01 | Phison Electronics Corp | 映射資訊記錄方法、記憶體控制器與記憶體儲存裝置 |
US9170941B2 (en) | 2013-04-05 | 2015-10-27 | Sandisk Enterprises IP LLC | Data hardening in a storage system |
US10049037B2 (en) | 2013-04-05 | 2018-08-14 | Sandisk Enterprise Ip Llc | Data management in a storage system |
US9159437B2 (en) | 2013-06-11 | 2015-10-13 | Sandisk Enterprise IP LLC. | Device and method for resolving an LM flag issue |
US9384126B1 (en) | 2013-07-25 | 2016-07-05 | Sandisk Technologies Inc. | Methods and systems to avoid false negative results in bloom filters implemented in non-volatile data storage systems |
US9524235B1 (en) | 2013-07-25 | 2016-12-20 | Sandisk Technologies Llc | Local hash value generation in non-volatile data storage systems |
US9043517B1 (en) | 2013-07-25 | 2015-05-26 | Sandisk Enterprise Ip Llc | Multipass programming in buffers implemented in non-volatile data storage systems |
CN104346285B (zh) * | 2013-08-06 | 2018-05-11 | 华为技术有限公司 | 内存访问处理方法、装置及系统 |
US9235509B1 (en) | 2013-08-26 | 2016-01-12 | Sandisk Enterprise Ip Llc | Write amplification reduction by delaying read access to data written during garbage collection |
US9639463B1 (en) | 2013-08-26 | 2017-05-02 | Sandisk Technologies Llc | Heuristic aware garbage collection scheme in storage systems |
US9442670B2 (en) | 2013-09-03 | 2016-09-13 | Sandisk Technologies Llc | Method and system for rebalancing data stored in flash memory devices |
US9519577B2 (en) | 2013-09-03 | 2016-12-13 | Sandisk Technologies Llc | Method and system for migrating data between flash memory devices |
US9141563B2 (en) | 2013-09-11 | 2015-09-22 | Kabushiki Kaisha Toshiba | Memory system |
US9778859B2 (en) | 2013-09-18 | 2017-10-03 | Western Digital Technologies, Inc. | Doorless protocol having multiple queue read requests in flight |
US9535870B2 (en) | 2013-09-18 | 2017-01-03 | HGST Netherlands B.V. | Acknowledgement-less protocol for solid state drive interface |
US9547472B2 (en) | 2013-09-18 | 2017-01-17 | HGST Netherlands B.V. | ACK-less protocol for noticing completion of read requests |
US9158349B2 (en) | 2013-10-04 | 2015-10-13 | Sandisk Enterprise Ip Llc | System and method for heat dissipation |
US9298608B2 (en) | 2013-10-18 | 2016-03-29 | Sandisk Enterprise Ip Llc | Biasing for wear leveling in storage systems |
US9442662B2 (en) | 2013-10-18 | 2016-09-13 | Sandisk Technologies Llc | Device and method for managing die groups |
US9436831B2 (en) | 2013-10-30 | 2016-09-06 | Sandisk Technologies Llc | Secure erase in a memory device |
US9263156B2 (en) | 2013-11-07 | 2016-02-16 | Sandisk Enterprise Ip Llc | System and method for adjusting trip points within a storage device |
US10977201B1 (en) * | 2013-11-13 | 2021-04-13 | Avago Technologies International Sales Pte. Limited | Per IO direct memory access redirection |
US9244785B2 (en) | 2013-11-13 | 2016-01-26 | Sandisk Enterprise Ip Llc | Simulated power failure and data hardening |
US9152555B2 (en) | 2013-11-15 | 2015-10-06 | Sandisk Enterprise IP LLC. | Data management with modular erase in a data storage system |
US9703816B2 (en) | 2013-11-19 | 2017-07-11 | Sandisk Technologies Llc | Method and system for forward reference logging in a persistent datastore |
US9520197B2 (en) | 2013-11-22 | 2016-12-13 | Sandisk Technologies Llc | Adaptive erase of a storage device |
US9520162B2 (en) | 2013-11-27 | 2016-12-13 | Sandisk Technologies Llc | DIMM device controller supervisor |
US9582058B2 (en) | 2013-11-29 | 2017-02-28 | Sandisk Technologies Llc | Power inrush management of storage devices |
US9235245B2 (en) | 2013-12-04 | 2016-01-12 | Sandisk Enterprise Ip Llc | Startup performance and power isolation |
US9129665B2 (en) | 2013-12-17 | 2015-09-08 | Sandisk Enterprise Ip Llc | Dynamic brownout adjustment in a storage device |
US9549457B2 (en) | 2014-02-12 | 2017-01-17 | Sandisk Technologies Llc | System and method for redirecting airflow across an electronic assembly |
US9497889B2 (en) | 2014-02-27 | 2016-11-15 | Sandisk Technologies Llc | Heat dissipation for substrate assemblies |
US9703636B2 (en) | 2014-03-01 | 2017-07-11 | Sandisk Technologies Llc | Firmware reversion trigger and control |
US9348377B2 (en) | 2014-03-14 | 2016-05-24 | Sandisk Enterprise Ip Llc | Thermal isolation techniques |
US9519319B2 (en) | 2014-03-14 | 2016-12-13 | Sandisk Technologies Llc | Self-supporting thermal tube structure for electronic assemblies |
US9485851B2 (en) | 2014-03-14 | 2016-11-01 | Sandisk Technologies Llc | Thermal tube assembly structures |
US9390814B2 (en) | 2014-03-19 | 2016-07-12 | Sandisk Technologies Llc | Fault detection and prediction for data storage elements |
US9454448B2 (en) | 2014-03-19 | 2016-09-27 | Sandisk Technologies Llc | Fault testing in storage devices |
US9448876B2 (en) | 2014-03-19 | 2016-09-20 | Sandisk Technologies Llc | Fault detection and prediction in storage devices |
US9390021B2 (en) | 2014-03-31 | 2016-07-12 | Sandisk Technologies Llc | Efficient cache utilization in a tiered data structure |
US9626399B2 (en) | 2014-03-31 | 2017-04-18 | Sandisk Technologies Llc | Conditional updates for reducing frequency of data modification operations |
US9626400B2 (en) | 2014-03-31 | 2017-04-18 | Sandisk Technologies Llc | Compaction of information in tiered data structure |
US9697267B2 (en) | 2014-04-03 | 2017-07-04 | Sandisk Technologies Llc | Methods and systems for performing efficient snapshots in tiered data structures |
US9384830B2 (en) | 2014-05-06 | 2016-07-05 | Micron Technology, Inc. | Apparatuses and methods for performing multiple memory operations |
CN103942162B (zh) | 2014-05-14 | 2020-06-09 | 清华大学 | 在存储器中进行多访问的方法、装置和存储系统 |
US10656840B2 (en) | 2014-05-30 | 2020-05-19 | Sandisk Technologies Llc | Real-time I/O pattern recognition to enhance performance and endurance of a storage device |
US9645749B2 (en) | 2014-05-30 | 2017-05-09 | Sandisk Technologies Llc | Method and system for recharacterizing the storage density of a memory device or a portion thereof |
US10114557B2 (en) | 2014-05-30 | 2018-10-30 | Sandisk Technologies Llc | Identification of hot regions to enhance performance and endurance of a non-volatile storage device |
US8891303B1 (en) | 2014-05-30 | 2014-11-18 | Sandisk Technologies Inc. | Method and system for dynamic word line based configuration of a three-dimensional memory device |
US10162748B2 (en) | 2014-05-30 | 2018-12-25 | Sandisk Technologies Llc | Prioritizing garbage collection and block allocation based on I/O history for logical address regions |
US10372613B2 (en) | 2014-05-30 | 2019-08-06 | Sandisk Technologies Llc | Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device |
US10146448B2 (en) | 2014-05-30 | 2018-12-04 | Sandisk Technologies Llc | Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device |
US9703491B2 (en) | 2014-05-30 | 2017-07-11 | Sandisk Technologies Llc | Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device |
US9093160B1 (en) | 2014-05-30 | 2015-07-28 | Sandisk Technologies Inc. | Methods and systems for staggered memory operations |
US9070481B1 (en) | 2014-05-30 | 2015-06-30 | Sandisk Technologies Inc. | Internal current measurement for age measurements |
US10656842B2 (en) | 2014-05-30 | 2020-05-19 | Sandisk Technologies Llc | Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device |
US9881680B2 (en) | 2014-06-03 | 2018-01-30 | Qualcomm Incorporated | Multi-host power controller (MHPC) of a flash-memory-based storage device |
US9632953B2 (en) * | 2014-06-03 | 2017-04-25 | Qualcomm Incorporated | Providing input/output virtualization (IOV) by mapping transfer requests to shared transfer requests lists by IOV host controllers |
US9690720B2 (en) | 2014-06-03 | 2017-06-27 | Qualcomm Incorporated | Providing command trapping using a request filter circuit in an input/output virtualization (IOV) host controller (HC) (IOV-HC) of a flash-memory-based storage device |
US9720860B2 (en) | 2014-06-06 | 2017-08-01 | Toshiba Corporation | System and method for efficient processing of queued read commands in a memory system |
US9652381B2 (en) | 2014-06-19 | 2017-05-16 | Sandisk Technologies Llc | Sub-block garbage collection |
US9443601B2 (en) | 2014-09-08 | 2016-09-13 | Sandisk Technologies Llc | Holdup capacitor energy harvesting |
US9952805B2 (en) | 2014-09-11 | 2018-04-24 | Hitachi, Ltd. | Storage system and data write method using a logical volume to either store data successfully onto a first memory or send a failure response to a server computer if the storage attempt fails |
CN104731839B (zh) * | 2014-10-08 | 2018-04-27 | 记忆科技(深圳)有限公司 | 一种ssd的前端数据管理加速的方法及一种ssd设备 |
CN105426322B (zh) * | 2015-12-31 | 2019-05-28 | 华为技术有限公司 | 一种数据的预取方法及装置 |
CN110088722B (zh) * | 2017-03-24 | 2022-08-30 | 西部数据技术公司 | 用于存储器设备中位置检测的系统和方法 |
TWI636363B (zh) * | 2017-08-08 | 2018-09-21 | 慧榮科技股份有限公司 | 用來於一記憶裝置中進行動態資源管理之方法以及記憶裝置及其控制器 |
US10761775B2 (en) * | 2018-02-09 | 2020-09-01 | Samsung Electronics Co., Ltd. | System and method for NVMe inter command association in SSD storage using a bridge device |
CN111736779B (zh) * | 2018-04-25 | 2022-01-11 | 上海忆芯实业有限公司 | Nvm接口命令的优化执行方法与装置 |
US11726704B2 (en) | 2020-03-31 | 2023-08-15 | Kioxia Corporation | Buffer optimization for solid-state drives |
CN113064550A (zh) * | 2021-03-19 | 2021-07-02 | 珠海市一微半导体有限公司 | 一种缩短外部存储器访问时间的控制装置及控制方法 |
US11934303B2 (en) * | 2022-05-12 | 2024-03-19 | Micron Technology, Inc. | Atomic write operations |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20080071189A (ko) * | 2005-12-22 | 2008-08-01 | 인텔 코오퍼레이션 | 다중 스레드형 프로세서에서의 실행 우선순위 결정 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5911135B2 (ja) | 1979-01-17 | 1984-03-13 | 株式会社日立製作所 | デ−タ処理システムのデ−タ転送方式 |
JP3132056B2 (ja) | 1991-07-17 | 2001-02-05 | いすゞ自動車株式会社 | 導電性砥粒及び電解砥石の製造方法 |
US6029226A (en) | 1996-09-30 | 2000-02-22 | Lsi Logic Corporation | Method and apparatus having automated write data transfer with optional skip by processing two write commands as a single write command |
JPH10296636A (ja) | 1997-04-30 | 1998-11-10 | Mitsubishi Materials Corp | メタルボンド砥石 |
JPH10310840A (ja) | 1997-05-12 | 1998-11-24 | Sumitomo Electric Ind Ltd | 超硬質複合部材とその製造方法 |
JPH11338644A (ja) | 1998-05-22 | 1999-12-10 | Hitachi Ltd | ディスク制御装置及び記憶装置 |
JP4330200B2 (ja) | 1999-02-24 | 2009-09-16 | 住友電気工業株式会社 | ナビゲーション装置 |
JP2001154811A (ja) | 1999-11-30 | 2001-06-08 | Toshiba Corp | 計算機システム |
JP2001209500A (ja) | 2000-01-28 | 2001-08-03 | Fujitsu Ltd | ディスク装置およびディスク装置のリード・ライト処理方法 |
US6826650B1 (en) * | 2000-08-22 | 2004-11-30 | Qlogic Corporation | Disk controller configured to perform out of order execution of write operations |
US6973484B1 (en) * | 2000-12-29 | 2005-12-06 | 3Pardata, Inc. | Method of communicating data in an interconnect system |
JP2002269560A (ja) | 2001-03-06 | 2002-09-20 | Seiko Epson Corp | テンプレートマッチング方法、それを実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体、テンプレートマッチング装置、位置決め装置および実装装置 |
US6901461B2 (en) * | 2002-12-31 | 2005-05-31 | Intel Corporation | Hardware assisted ATA command queuing |
US7512722B2 (en) * | 2003-07-31 | 2009-03-31 | International Business Machines Corporation | Method for completing a plurality of chained list DMA commands that include a fenced list DMA command element |
US7328304B2 (en) | 2004-02-27 | 2008-02-05 | Intel Corporation | Interface for a block addressable mass storage system |
US7105430B2 (en) | 2004-03-26 | 2006-09-12 | Freescale Semiconductor, Inc. | Method for forming a semiconductor device having a notched control electrode and structure thereof |
US7698473B2 (en) | 2005-01-05 | 2010-04-13 | Sony Computer Entertainment Inc. | Methods and apparatus for list transfers using DMA transfers in a multi-processor system |
JP4993061B2 (ja) | 2005-03-16 | 2012-08-08 | ヤマハ発動機株式会社 | 最適化装置、最適化方法および最適化プログラム |
US7568056B2 (en) | 2005-03-28 | 2009-07-28 | Nvidia Corporation | Host bus adapter that interfaces with host computer bus to multiple types of storage devices |
JP2006338371A (ja) | 2005-06-02 | 2006-12-14 | Toshiba Corp | メモリシステム |
US7376782B2 (en) * | 2005-06-29 | 2008-05-20 | Intel Corporation | Index/data register pair for indirect register access |
US7805543B2 (en) | 2005-06-30 | 2010-09-28 | Intel Corporation | Hardware oriented host-side native command queuing tag management |
CN100373362C (zh) * | 2005-12-22 | 2008-03-05 | 北京中星微电子有限公司 | 直接存储访问控制器 |
JP2008033721A (ja) * | 2006-07-31 | 2008-02-14 | Matsushita Electric Ind Co Ltd | Dma転送制御装置 |
JP2008117195A (ja) | 2006-11-06 | 2008-05-22 | Hitachi Ltd | 半導体記憶装置 |
JP2008140142A (ja) | 2006-12-01 | 2008-06-19 | Fuji Xerox Co Ltd | 情報処理システム |
US20090150894A1 (en) * | 2007-12-10 | 2009-06-11 | Ming Huang | Nonvolatile memory (NVM) based solid-state disk (SSD) system for scaling and quality of service (QoS) by parallelizing command execution |
US9128699B2 (en) | 2008-12-22 | 2015-09-08 | Intel Corporation | Method and system for queuing transfers of multiple non-contiguous address ranges with a single command |
-
2008
- 2008-12-22 US US12/342,065 patent/US9128699B2/en active Active
-
2009
- 2009-12-07 CN CN200980139230.3A patent/CN102171649B/zh not_active Expired - Fee Related
- 2009-12-07 KR KR1020117007703A patent/KR101245011B1/ko not_active IP Right Cessation
- 2009-12-07 WO PCT/US2009/067031 patent/WO2010074944A2/en active Application Filing
- 2009-12-07 EP EP09835500.1A patent/EP2361404B1/en not_active Not-in-force
- 2009-12-07 JP JP2011536629A patent/JP2012508428A/ja active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20080071189A (ko) * | 2005-12-22 | 2008-08-01 | 인텔 코오퍼레이션 | 다중 스레드형 프로세서에서의 실행 우선순위 결정 |
Also Published As
Publication number | Publication date |
---|---|
CN102171649A (zh) | 2011-08-31 |
KR20110053261A (ko) | 2011-05-19 |
CN102171649B (zh) | 2015-04-08 |
US9128699B2 (en) | 2015-09-08 |
US20100161936A1 (en) | 2010-06-24 |
EP2361404A2 (en) | 2011-08-31 |
EP2361404A4 (en) | 2012-05-30 |
WO2010074944A2 (en) | 2010-07-01 |
EP2361404B1 (en) | 2018-05-16 |
JP2012508428A (ja) | 2012-04-05 |
WO2010074944A3 (en) | 2010-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101245011B1 (ko) | 복수의 전달을 큐잉하는 방법, 복수의 불연속 어드레스 범위 전달 요청 방법, 제품 및 시스템 | |
JP4777263B2 (ja) | マスストレージアクセラレータ | |
US9720860B2 (en) | System and method for efficient processing of queued read commands in a memory system | |
EP2715730B1 (en) | Apparatus including memory system controllers and related methods for memory management using blok tables | |
US8924659B2 (en) | Performance improvement in flash memory accesses | |
KR101663066B1 (ko) | 하이브리드 디바이스에서의 고체 상태 메모리 커맨드 큐 | |
JP5128079B2 (ja) | ユニバーサルストレージバスアダプタ | |
Seppanen et al. | High performance solid state storage under linux | |
KR101560469B1 (ko) | 메모리 시스템 컨트롤러들을 포함하는 장치 및 관련 방법들 | |
US9298393B2 (en) | Buffer management for increased write speed in large sector data storage device | |
US8060669B2 (en) | Memory controller with automatic command processing unit and memory system including the same | |
US20120221809A1 (en) | Storage apparatus and data processing method of the same | |
CN115993930A (zh) | 用于有序访问块修改存储器中的数据的系统、方法和装置 | |
US10268386B2 (en) | Data storage device including temporary storage locations | |
US9236066B1 (en) | Atomic write-in-place for hard disk drives | |
US8667188B2 (en) | Communication between a computer and a data storage device | |
US20030200385A1 (en) | Method and system for increasing disk drive performance |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20160303 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20170302 Year of fee payment: 5 |
|
LAPS | Lapse due to unpaid annual fee |