KR101624007B1 - 비휘발성 메모리를 갖는 시스템에 대한 효율적인 버퍼링 - Google Patents
비휘발성 메모리를 갖는 시스템에 대한 효율적인 버퍼링 Download PDFInfo
- Publication number
- KR101624007B1 KR101624007B1 KR1020120020909A KR20120020909A KR101624007B1 KR 101624007 B1 KR101624007 B1 KR 101624007B1 KR 1020120020909 A KR1020120020909 A KR 1020120020909A KR 20120020909 A KR20120020909 A KR 20120020909A KR 101624007 B1 KR101624007 B1 KR 101624007B1
- Authority
- KR
- South Korea
- Prior art keywords
- write
- nvm
- command
- buffer
- commands
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- 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
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
-
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1408—Protection against unauthorised use of memory or access to memory by using cryptography
-
- 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
-
- 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/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
- G06F21/79—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
-
- 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
- G06F3/0613—Improving I/O performance in relation to throughput
-
- 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/0656—Data buffering arrangements
-
- 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
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- 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
- G06F3/0673—Single storage device
- G06F3/068—Hybrid storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1052—Security improvement
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Read Only Memory (AREA)
- Memory System (AREA)
Abstract
비휘발성 메모리("NVM")를 구비하는 시스템의 효율적인 버퍼링을 위한 시스템들 및 방법들이 개시된다. 일부 실시예들에서, 시스템의 제어 회로는 휴리스틱을 이용하여, 파일 시스템으로부터 수신된 하나 이상의 기입 커맨드들의 버퍼링을 수행할지 여부를 결정할 수 있다. 다른 실시예들에서, 제어 회로는 버퍼의 페이지 정렬된 경계들을 따라 큐 내의 기입 커맨드들을 효율적으로 재배열함으로써 판독 에너지 및 버퍼링 오버헤드를 최소화할 수 있다. 추가적인 실시예들에서, 제어 회로는 버퍼로부터의 기입 커맨드들과 큐로부터의 기입 커맨드들을 최적으로 결합할 수 있다. 제어 회로는 커맨드들을 결합한 후에 단일 트랜잭션에서 커맨드들을 디스패치할 수 있다.
Description
NAND 플래시 메모리는 물론, 다른 타입의 비휘발성 메모리("NVM")는 일반적으로 대량 저장을 위해 사용된다. 예를 들어, 휴대용 미디어 플레이어와 같은 소비자 전자 장치들은 종종 음악, 비디오 및 기타 미디어를 저장하기 위해 플래시 메모리를 포함한다.
장치의 파일 시스템이 다수의 소규모 동기 입/출력("I/O")을 수행할 수 있으므로, 일부 예들에서는 다이 병렬화가 달성될 수 없다. 이것은 결과적으로 시스템 대역폭을 줄이고, NVM의 페이지들의 프로그래밍의 지연을 증가시킬 수 있다.
일부 시나리오들에서, NVM의 프로그래밍의 지연은 I/O들을 NVM으로 프로그래밍하기 전에 하나 이상의 I/O들을 버퍼링함으로써 개선될 수 있다. 그러나, 다른 시나리오들에서, I/O들이 그 대신에 NVM으로 직접 프로그래밍될 수 있는 경우, 파일 시스템으로부터 수신되는 모든 I/O들의 무차별 버퍼링은 실제로 프로그래밍 프로세스를 늦출 수 있다.
비휘발성 메모리("NVM")를 구비하는 시스템의 효율적인 버퍼링을 위한 시스템들 및 방법들이 개시된다. 시스템은 버퍼링이 시스템 성능을 향상시킬 경우에는 기입들을 버퍼링하는 것을 선택할 수 있으며, 버퍼링이 순수 성능 부담(net performance burden)일 경우에는 기입들을 NVM에 직접 프로그래밍하는 것을 선택할 수 있다. 일부 실시예들에서, 시스템은 휴리스틱(heuristics)을 이용하여, 파일 시스템으로부터 수신된 하나 이상의 기입 커맨드들의 버퍼링을 수행할지 여부를 결정할 수 있다. 다른 실시예들에서, 시스템은 버퍼의 페이지 정렬된 경계들을 따라 큐 내의 기입 커맨드들을 효율적으로 재배열함으로써 판독 에너지 및 버퍼링 오버헤드를 최소화할 수 있다. 추가적인 실시예들에서, 시스템은 버퍼로부터의 기입 커맨드들과 큐로부터의 기입 커맨드들을 최적으로 결합할 수 있다. 시스템은 커맨드들을 결합한 후에 단일 트랜잭션에서 커맨드들을 디스패치할 수 있다.
본 발명의 상기 및 다른 양태들 및 장점들은 첨부 도면들과 관련하여 이루어지는 아래의 상세한 설명의 검토 시에 더 명백해질 것이며, 도면들 전반에서 동일한 참조 부호들은 동일한 요소들을 언급한다.
도 1 및 도 2는 본 발명의 다양한 실시예들에 따라 구성된 전자 장치들의 블록도들.
도 3은 본 발명의 다양한 실시예들에 따른 비휘발성 메모리의 기능도.
도 4는 다양한 시스템들에 대한 예시적인 타이밍도들의 그래픽 도면.
도 5는 본 발명의 다양한 실시예들에 따라 구성된 시스템에 대한 예시적인 프로그래밍 흐름의 그래픽 도면.
도 6은 본 발명의 다양한 실시예들에 따라 구성된 예시적인 버퍼의 그래픽 도면.
도 7a 및 도 7b는 본 발명의 다양한 실시예들에 따른 비휘발성 메모리 내의 효율적인 버퍼링을 위한 예시적인 프로세스의 흐름도들.
도 8은 본 발명의 다양한 실시예들에 따른 비휘발성 메모리 내에 버퍼링할지 여부를 결정하기 위한 예시적인 프로세스의 흐름도.
도 1 및 도 2는 본 발명의 다양한 실시예들에 따라 구성된 전자 장치들의 블록도들.
도 3은 본 발명의 다양한 실시예들에 따른 비휘발성 메모리의 기능도.
도 4는 다양한 시스템들에 대한 예시적인 타이밍도들의 그래픽 도면.
도 5는 본 발명의 다양한 실시예들에 따라 구성된 시스템에 대한 예시적인 프로그래밍 흐름의 그래픽 도면.
도 6은 본 발명의 다양한 실시예들에 따라 구성된 예시적인 버퍼의 그래픽 도면.
도 7a 및 도 7b는 본 발명의 다양한 실시예들에 따른 비휘발성 메모리 내의 효율적인 버퍼링을 위한 예시적인 프로세스의 흐름도들.
도 8은 본 발명의 다양한 실시예들에 따른 비휘발성 메모리 내에 버퍼링할지 여부를 결정하기 위한 예시적인 프로세스의 흐름도.
비휘발성 메모리("NVM")를 구비한 시스템의 효율적인 버퍼링을 위한 시스템들 및 방법들이 제공된다. 시스템의 제어 회로는 휴리스틱을 이용하여, 파일 시스템으로부터 수신된 기입 커맨드들을 버퍼링할지 여부를 결정할 수 있다. 예를 들어 기입 커맨드의 크기, 기입 커맨드의 직전의 디스패치된 기입 커맨드의 수, 큐에 저장된 나머지 기입 커맨드들의 수, 메모리 내의 이용가능한 공간의 양, 버퍼의 크기 및 입/출력("I/O") 패턴들과 같은 임의의 적절한 휴리스틱이 이용될 수 있다.
일부 실시예들에서, 제어 회로는 커맨드의 크기에 기초하여 기입 커맨드를 버퍼링할지 여부를 결정할 수 있다. 예를 들어, 제어 회로가 기입 커맨드가 비교적 작은 커맨드(예로서, 기입 커맨드의 크기가 미리 결정된 임계치 미만임)인 것으로 결정하는 경우, 제어 회로는 기입 커맨드의 버퍼링되는 경로를 선택할 수 있다(예를 들어, 기입 커맨드를 메모리 내의 버퍼로 이동시킬 수 있다). 이와 달리, 제어 회로가 기입 커맨드가 비교적 큰 커맨드(예를 들어, 기입 커맨드의 크기가 미리 결정된 임계치를 초과함)인 것으로 결정하는 경우, 제어 회로는 기입 커맨드의 기입 경로를 선택할 수 있다(예로서, 기입 커맨드를 NVM으로 디스패치하도록 버스 제어기에 지시할 수 있다).
일부 실시예들에서는, 작은 기입 커맨드들의 버퍼링되는 경로를 자동으로 선택하는 대신에, 제어 회로는 추가적인 휴리스틱을 이용하여, 큐에 저장된 기입 커맨드들이 큐 내에서 직접 기입-다중 커맨드(write-multi command)로 결합될 수 있는지를 결정할 수 있다. 커맨드들이 기입 다중 커맨드로 결합되면, 제어 회로는 기입 다중 커맨드를 큐로부터 직접 기입 경로를 통해 NVM으로 디스패치할 수 있다.
다른 실시예들에서, 동시성을 최대화하기 위해, 제어 회로는 버퍼의 페이지 정렬된 경계들을 따라 큐 내의 기입 커맨드들을 재배열하려고 시도할 수 있다. 결과적으로, 후속 판독 시에 판독 에너지가 최소화될 수 있는데, 그 이유는 사용자 데이터가 프로그래밍된 정렬들 및 입도와 동일한 정렬들 및 입도로 사용자 데이터가 종종 판독되기 때문이다. 추가 실시예들에서, 제어 회로는 버퍼링된 기입 커맨드들 및 큐 기입 커맨드들을 동일 묶음 또는 트랜잭션으로 결합하여 시스템 효율을 개선할 수 있다.
도 1은 전자 장치(100)의 블록도를 나타낸다. 일부 실시예들에서, 전자 장치(100)는 휴대용 미디어 플레이어, 셀룰러 전화, 포켓 사이즈의 개인용 컴퓨터, 개인용 휴대 단말기("PDA"), 데스크탑 컴퓨터, 랩탑 컴퓨터 및 임의의 다른 적절한 타입의 전자 장치이거나 이들을 포함할 수 있다.
전자 장치(100)는 시스템-온-칩("SoC")(110) 및 비휘발성 메모리("NVM")(120)를 포함할 수 있다. 비휘발성 메모리(120)는 부동 게이트 또는 전하 트랩핑 기술에 기초하는 NAND 플래시 메모리, NOR 플래시 메모리, 소거 및 프로그래밍가능한 판독 전용 메모리("EPROM"), 전기적으로 소거 및 프로그래밍가능한 판독 전용 메모리("EEPROM"), 강유전체 RAM("FRAM"), 자기 저항 RAM("MRAM") 또는 이들의 임의 조합을 포함할 수 있다.
NVM(120)은 최소 소거가능 단위일 수 있는 "블록들"로 체계화될 수 있으며, 프로그래밍 또는 판독될 수 있는 최소 단위일 수 있는 "페이지들"로 더 체계화될 수 있다. 일부 실시예들에서, NVM(120)은 다수의 집적 회로를 포함할 수 있으며, 각각의 집적 회로는 다수의 블록을 가질 수 있다. 대응하는 집적 회로들로부터의 메모리 위치들(예로서, 블록들 또는 블록들의 페이지들)은 "수퍼 블록들"을 형성할 수 있다. NVM(120)의 각각의 메모리 위치(예로서, 페이지 또는 블록)는 물리 어드레스(예로서, 물리 페이지 어드레스 또는 물리 블록 어드레스)를 이용하여 참조될 수 있다.
시스템 온 칩(110)은 SoC 제어 회로(112), 메모리 (114), 암호화 모듈(116) 및 NVM 인터페이스(118)를 포함할 수 있다. SoC 제어 회로(112)는 SoC(110) 및 SoC(110) 또는 장치(100)의 다른 컴포넌트들의 일반 동작들 및 기능들을 제어할 수 있다. 예를 들어, 사용자 입력들 및/또는 애플리케이션 또는 운영 체제의 명령어들에 응답하여, SoC 제어 회로(112)는 판독 또는 기입 커맨드들을 NVM 인터페이스(118)로 발행하여, NVM(120)으로부터 데이터를 획득하거나 NVM에 데이터를 저장할 수 있다. 명료화를 위해, SoC 제어 회로(112)가 저장 또는 검색을 위해 요청할 수 있는 데이터는 "사용자 데이터"로서 참조될 수 있지만, 이 데이터는 사용자 또는 사용자 애플리케이션과 직접 연관되지 않을 수 있다. 오히려, 사용자 데이터는 (예를 들어, 애플리케이션 또는 운영 체제를 통해) SoC 제어 회로(112)에 의해 생성 또는 획득되는 임의의 적절한 디지털 정보의 시퀀스일 수 있다.
SoC 제어 회로(112)는 하드웨어, 소프트웨어 및 펌웨어의 임의의 결합, 및 전자 장치(100)의 기능을 구동하도록 동작하는 임의의 컴포넌트들, 회로 또는 논리를 포함할 수 있다. 예를 들어, SoC 제어 회로(112)는 NVM(120) 또는 메모리(114)에 저장된 소프트웨어/펌웨어의 제어 하에 동작하는 하나 이상의 프로세서들을 포함할 수 있다.
SoC 제어 회로(112)는 하나 이상의 커맨드들을 NVM(120)으로 디스패치할 수 있다. 일부 실시예들에서, SoC 제어 회로(112)는 애플리케이션 프로그래밍 인터페이스("API") 동작들을 NVM(120) 또는 NVM(120)의 제어기로 디스패치하도록 구성될 수 있는 블록 장치 드라이버 또는 랩퍼(wrapper)를 포함할 수 있다. 일부 실시예들에서, SoC 제어 회로(112)는 정보를 NVM(120)으로 전송하기 위해 블록 장치 드라이버 또는 랩퍼의 하나 이상의 파라미터들을 변경할 수 있다. 예를 들어, 하나 이상의 파라미터들을 변경함으로써, SoC 제어 회로(112)는 NVM(120)에 액세스하는데 사용되는 커맨드들(예로서, 판독, 프로그램, 소거 및/또는 기입-다중 커맨드들)과 관련된 정보를 전송할 수 있다.
메모리(114)는 랜덤 액세스 메모리("RAM")(예로서, 정적 RAM("SRAM"), 동적 랜덤 액세스 메모리("DRAM"), 동기식 동적 랜덤 액세스 메모리("SDRAM"), 더블-데이터-레이트("DDR") RAM)와 같은 임의의 적절한 타입의 휘발성 메모리, 캐시 메모리, 판독 전용 메모리("ROM") 또는 이들의 임의 조합을 포함할 수 있다. 메모리(114)는 프로그래밍을 위해 사용자 데이터를 비휘발성 메모리(120) 내에 임시 저장하거나 비휘발성 메모리로부터 판독할 수 있는 데이터 소스를 포함할 수 있다. 일부 실시예들에서, 메모리(114)는 SoC 제어 회로(112)의 일부로서 구현되는 임의의 프로세서들에 대한 메인 메모리로서 작용할 수 있다.
일부 실시예들에서, 메모리(114)는 NVM(120)으로 아직 디스패치되지 않은, 파일 시스템으로부터 수신된 커맨드들(예로서, 판독, 기입 및/또는 트림(trim) 커맨드들)을 저장하기 위한 하나 이상의 커맨드 큐들(도 1에 도시되지 않음)을 포함할 수 있다. 하나 이상의 커맨드 큐들은 블록 장치 레벨 큐들일 수 있다. 예를 들어, 메모리(114)는 판독 커맨드들을 유지하기 위한 판독 큐, 기입 커맨드들을 유지하기 위한 기입 큐, 및 트림 커맨드들을 유지하기 위한 트림 큐를 포함할 수 있다. 결과적으로, SoC 제어 회로(112)는 NVM(120)으로 디스패치될 수 있는 하나 이상의 커맨드들을 선택하기 위해 하나 이상의 큐들을 스캐닝할 수 있다. 하나 이상의 커맨드들이 디스패치된 후, SoC 제어 회로(112)는 이 커맨드들을 큐로부터 제거할 수 있다. 이 분야의 기술자들은 메모리(114)가 모든 타입의 커맨드들(예로서, 판독, 기입 및 트림 커맨드들)을 유지하도록 구성된 하나의 큐를 대신 포함할 수 있다는 것을 알 것이다.
일반적으로, 하나 이상의 큐들은 큐들이 비워질 때까지 서비스될 수 있다. 일부 실시예들에서, SoC 제어 회로(112)는 개별 큐들의 각각을 서비스하기 위해 한 세트의 공평 규칙들을 구비할 수 있다. 예를 들어, SoC 제어 회로(112)는 큐들의 각각이 큐 내에 현재 포함된 커맨드들의 수와 대략 동일한 레이트로 서비스되도록 큐들을 서비스하려고 시도할 수 있다. 큐들이 서비스되는 순서는 시스템의 서비스의 품질에 영향을 미친다.
일부 실시예들에서는, 커맨드들이 큐들 내에 무기한 저장되지 못할 수 있으므로(예를 들어, 다른 스레드들 또는 프로세스들이 그러한 I/O들의 완료를 기다리고 있을 수 있으므로), 메모리(114)는 커맨드들의 장기 저장을 제공할 수 있는 (도 1에 도시되지 않은) 버퍼를 포함할 수 있다. 예를 들어, 일부 예들에서, SoC 제어 회로(112)는 큐 내에 저장된 하나 이상의 기입 커맨드들을 선택하고, 선택된 기입 커맨드들을 버퍼로 옮길 수 있다. 기입 커맨드들을 버퍼에 저장한 후에, SoC 제어 회로(112)는 이 기입 커맨드들을 큐로부터 제거할 수 있다.
이 분야의 기술자들은 메모리(114) 내의 버퍼가 임의의 적절한 크기를 가질 수 있다는 것을 알 것이다. 예를 들어, 버퍼는 한 페이지 미만의 데이터를 저장할 수 있는 비교적 작은 버퍼일 수 있다. 그러나, 최소 프로그램 입도가 한 페이지 이상인 경우, 버퍼는 한 페이지 이상의 데이터를 저장할 수 있는 비교적 큰 버퍼일 수 있다. 예를 들어, 버퍼는 한 페이지, 하나의 스트라이프(stripe), 다수의 스트라이프, 수퍼 블록 또는 임의의 다른 적절한 크기를 가질 수 있다.
암호화 모듈(116)은 적절한 암호에 기초하여 암호화 및 해독을 수행하도록 구성된 임의의 하드웨어 또는 소프트웨어 또는 이들의 조합이거나 이들을 포함할 수 있다. 예를 들어, 암호화 모듈(116)은 진보된 암호화 표준("AES"), 데이터 암호화 표준("DES") 또는 RSA에 기초할 수 있다. 암호화 모듈(116)은 NVM(120)에 저장되거나 SoC(110)로/로부터 송신/수신된 개인 정보 또는 과금 정보와 같은 민감한 데이터에 대한 보안을 제공할 수 있다. 암호화 모듈(116)은 도 1에 SoC(110)에 포함되는 것으로 도시되지만, 이 분야의 기술자들은 암호화 모듈(116)이 NVM(120) 내에 대신 구현될 수 있다는 것을 알 것이다.
일부 실시예들에서, 암호화 모듈(116)은 암호화 알고리즘이 암호화 또는 해독을 수행하기 위해 필요할 수 있는, 제어 회로(예로서, SoC 제어 회로(112) 또는 NVM(120) 상의 제어기)에 의해 제공된 하나 이상의 "암호화 시드(encryption seeds)"를 이용하여 데이터를 암호화 및 해독할 수 있다. 일부 실시예들에서 그리고 특히 AES 기반 암호화 모듈들의 경우에, 암호화 시드들은 키 및 초기화 벡터("IV")를 포함할 수 있다. 암호화된 데이터로부터 원래의 암호화되지 않은 데이터를 복원하기 위하여, 해독에 사용되는 암호화 시드들은 암호화에 원래 사용된 시드들과 동일해야 할 수 있다.
NVM 인터페이스(118)는 SoC 제어 회로(112)와 NVM(120) 사이의 인터페이스 또는 드라이버로서 작용하도록 구성된 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 적절한 조합을 포함할 수 있다. NVM 인터페이스(118)에 포함된 임의의 소프트웨어 모듈들의 경우, 대응하는 프로그램 코드는 NVM(120) 또는 메모리(114)에 저장될 수 있다.
NVM 인터페이스(118)는, SoC 제어 회로(112)가 NVM(120)에 액세스하고, NVM(120)의 메모리 위치들(예로서, 페이지, 블록, 수퍼 블록, 집적 회로) 및 그 안에 저장된 데이터(예로서, 사용자 데이터)를 관리할 수 있게 하는 다양한 기능들을 수행할 수 있다. 예를 들어, NVM 인터페이스(118)는 SoC 제어 회로(112)로부터의 판독 또는 기입 요청들을 해석하고, 마모 균등화를 수행하고, NVM(120)의 버스 프로토콜과 호환되는 판독 및 프로그램 명령어들을 생성할 수 있다.
NVM 인터페이스(118) 및 SoC 제어 회로(112)가 개별 모듈들로서 도시되지만, 이것은 본 발명의 실시예들의 설명을 간소화하기 위한 의도일 뿐이다. 이러한 모듈들은 하드웨어 컴포넌트들, 소프트웨어 컴포넌트들 또는 이들 모두를 공유할 수 있다. 예를 들어, SoC 제어 회로(112)는 NVM 인터페이스(118)에 대한 소프트웨어 기반 메모리 드라이버를 실행할 수 있다.
일부 실시예들에서, 전자 장치(100)는 NVM(120) 및 NVM 인터페이스(118)의 일부 또는 전부(예로서, 후술하는 변환 계층)를 포함하는 플래시 메모리 드라이브 또는 보안 디지털("SD") 카드와 같은 타깃 장치를 포함할 수 있다. 이러한 실시예들에서, SoC(110) 또는 SoC 제어 회로(112)는 타깃 장치에 대한 호스트 제어기로서 작용할 수 있다. 예를 들어, 호스트 제어기로서, SoC(110)는 타깃 장치에 대해 판독 및 기입 요청들을 발행할 수 있다.
도 2는 다양한 실시예들에 따른 전자 장치(100)(도 1)의 펌웨어, 소프트웨어 및/또는 하드웨어 컴포넌트들 중 일부를 더 상세히 나타낼 수 있는 전자 장치(200)의 블록도를 나타낸다. 전자 장치(200)는 도 1과 관련하여 전술한 임의의 특징들 및 기능들을 가질 수 있으며, 그 반대도 마찬가지이다. 도시된 바와 같이, 대시 선들은 계층들을 구분한다. 어느 컴포넌트들이 구분 라인들 내에 속하는지에 대한 묘사는 예시적일 뿐이며, 하나 이상의 컴포넌트들이 상이한 계층과 관련될 수 있다는 것을 이해한다.
전자 장치(200)는 파일 시스템(210), NVM 드라이버(212), NVM 버스 제어기(216) 및 NVM(220)을 포함한다. 일부 실시예들에서, 파일 시스템(210) 및 NVM 드라이버(212)는 소프트웨어 또는 펌웨어 모듈들일 수 있고, NVM 버스 제어기(216) 및 NVM(220)은 하드웨어 모듈들일 수 있다. 따라서, 이러한 실시예들에서, NVM 드라이버(212)는 NVM 인터페이스(218)의 소프트웨어 또는 펌웨어 양태를 나타낼 수 있고, NVM 버스 제어기(216)는 NVM 인터페이스(218)의 하드웨어 양태를 나타낼 수 있다.
파일 시스템(210)은 파일 할당 테이블("FAT") 파일 시스템 또는 계층적 파일 시스템 플러스("HFS+")와 같은 임의의 적절한 타입의 파일 시스템을 포함할 수 있으며, 전자 장치(200)의 운영 체제의 일부(예로서, 도 1의 SoC 제어 회로(112)의 일부)일 수 있다. 일부 실시예들에서, 파일 시스템(210)은 페이지들의 논리 대 물리 매핑을 제공하는 플래시 파일 시스템을 포함할 수 있다. 이러한 실시예들에서, 파일 시스템(210)은 후술하는 NVM 드라이버(212)의 기능들의 일부 또는 전부를 수행할 수 있으며, 따라서 파일 시스템(210) 및 NVM 드라이버(212)는 개별 모듈들이거나 아닐 수 있다.
파일 시스템(210)은 애플리케이션 및 운영 체제에 대한 파일 및 폴더 구조들을 관리할 수 있다. 파일 시스템(210)은 전자 장치(200)에서 실행되는 애플리케이션 또는 운영 체제의 제어 하에 동작할 수 있으며, 애플리케이션 또는 운영 체제가 NVM(220)으로부터 정보가 판독되거나 저장될 것을 요청할 때 기입 및 판독 커맨드들을 NVM 드라이버(212)에 제공할 수 있다. 각각의 판독 또는 기입 커맨드와 더불어, 파일 시스템(210)은 논리 페이지 어드레스 또는 페이지 오프셋을 갖는 논리 블록 어드레스("LBA")와 같이 사용자 데이터가 판독 또는 기입되어야 하는 장소를 지시하기 위한 논리 어드레스를 제공할 수 있다.
파일 시스템(210)은 NVM(220)과 직접 호환되지 않는 판독 및 기입 요청들을 NVM 드라이버(212)에 제공할 수 있다. 예를 들어, 논리 어드레스들은 하드 드라이브 기반 시스템에 전형적인 규약들 또는 프로토콜들을 이용할 수 있다. 하드 드라이브 기반 시스템은 플래시 메모리와 달리 블록 소거를 먼저 수행하지 않고 메모리 위치에 겹쳐 쓸 수 있다. 더욱이, 하드 드라이브들은 장치의 수명을 증가시키기 위한 마모 균등화를 필요로 하지 않을 수 있다. 따라서, NVM 인터페이스(218)는 파일 시스템 요청들을 처리하기 위해 메모리에 고유하거나, 벤더(vendor)에 고유하거나, 이들 양자에 고유한 임의의 기능들을 수행하고, NVM(220)에 적합한 방식으로 다른 관리 기능들을 수행할 수 있다.
NVM 드라이버(212)는 변환 계층(214)을 포함할 수 있다. 일부 실시예들에서, 변환 계층(214)은 플래시 변환 계층("FTL")이거나 이를 포함할 수 있다. 기입 커맨드 시에, 변환 계층(214)은 제공된 논리 어드레스를 NVM(220) 상의 자유로운, 소거된 물리 위치로 매핑할 수 있다. 판독 커맨드 시에, 변환 계층(214)은 제공된 논리 어드레스를 이용하여, 요청된 데이터를 저장할 물리 어드레스를 결정할 수 있다. 각각의 NVM은 NVM의 크기 또는 벤더에 따라 상이한 레이아웃을 가질 수 있으므로, 이러한 매핑 동작은 메모리 및/또는 벤더에 고유할 수 있다. 변환 계층(214)은 논리 대 물리 어드레스 매핑에 더하여 임의의 다른 적절한 기능들을 수행할 수 있다. 예를 들어, 변환 계층(214)은 쓰레기 수거 및 마모 균등화와 같이 플래시 변환 계층들에 전형적일 수 있는 임의의 다른 기능들을 수행할 수 있다.
NVM 드라이버(212)는 NVM 버스 제어기(216)와 인터페이스하여 NVM 액세스 커맨드들(예로서, 프로그램, 판독 및 소거 커맨드들)을 완료할 수 있다. 버스 제어기(216)는 NVM(220)에 대한 하드웨어 인터페이스로서 작용할 수 있으며, NVM(220)의 버스 프로토콜, 데이터 레이트 및 기타 사양들을 이용하여 NVM(220)과 통신할 수 있다.
일부 실시예들에서, 파일 시스템(210)으로부터의 커맨드(예로서, 기입 커맨드)의 수신 시에, NVM 인터페이스(218)는 커맨드(예로서, API 동작)를 NVM(220)으로 디스패치하도록 NVM 버스 제어기(216)에 지시할 수 있다. 일부 실시예들에서, NVM 인터페이스(218)는 변환 계층(214)을 이용하여, NVM(220)의 하나 이상의 메모리 위치들의 물리 어드레스들을 얻을 수 있다.
NVM 인터페이스(218)는 본 명세서에서 때때로 "메타데이터"로서 지칭되는 메모리 관리 데이터에 기초하여 NVM(220)을 관리할 수 있다. 메타데이터는 NVM 드라이버(212)에 의해 생성되거나, NVM 드라이버(212)의 제어 하에 동작하는 모듈에 의해 생성될 수 있다. 예를 들어, 메타데이터는 논리 및 물리 어드레스들 사이의 매핑의 관리, 불량 블록의 관리, 마모 균등화에 사용되는 임의의 정보, 데이터 에러들을 검출 또는 정정하는데 사용되는 에러 정정 코드("ECC") 데이터 또는 이들의 임의 조합을 포함할 수 있다. 메타데이터는 논리 어드레스와 같이 사용자 데이터와 더불어 파일 시스템(210)에 의해 제공된 데이터를 포함할 수 있다. 따라서, 일반적으로, "메타데이터"는 사용자 데이터에 대한 또는 관련된 또는 비휘발성 메모리의 동작 및 메모리 위치들을 관리하기 위해 일반적으로 사용되는 임의의 정보를 지칭할 수 있다.
NVM 인터페이스(218)는 NVM(220)에 메타데이터를 저장하도록 구성될 수 있다. 일부 실시예들에서, NVM 인터페이스(218)는 사용자 데이터가 저장된 위치와 동일한 메모리 위치(예를 들어, 페이지)에 사용자 데이터와 관련된 메타데이터를 저장할 수 있다. 예를 들어, NVM 인터페이스(218)는 사용자 데이터, 관련 논리 어드레스, 및 사용자 데이터에 대한 ECC 데이터를 NVM(220)의 하나 이상의 메모리 위치들에 저장할 수 있다. NVM 인터페이스(218)는 또한 사용자 데이터에 대한 다른 타입의 메타데이터를 동일 메모리 위치에 저장할 수 있다.
NVM 인터페이스(218)는 논리 어드레스를 저장할 수 있으며, 따라서 NVM(220)의 파워업 시에 또는 NVM(220)의 동작 중에 전자 장치(200)는 어떤 데이터가 그 위치에 존재하는지를 결정할 수 있다. 특히, 파일 시스템(210)은 그의 물리 어드레스가 아니라 그의 논리 어드레스에 따라 사용자 데이터를 참조할 수 있으므로, NVM 인터페이스(218)는 사용자 데이터와 논리 어드레스를 함께 저장하여 이들의 연관성을 유지할 수 있다. 이와 같이, 물리 대 논리 매핑을 NVM(220)에 유지하는 개별 테이블이 낡게 되는 경우에도, NVM 인터페이스(218)는 여전히 예를 들어 전자 장치(200)의 파워업 또는 부트 시에 적절한 매핑을 결정할 수 있다.
전술한 바와 같이, NVM(예로서, 도 1의 NVM(120) 또는 도 2의 NVM(220))은 다이들, 블록들, 페이지들, 수퍼 블록들 등으로 체계화될 수 있다. 예를 들어, 도 3은 NVM(300)의 개략적인 레이아웃을 도시한다. NVM(300)은 NVM(120)(도 1) 또는 NVM(220)(도 2)과 동일 또는 유사할 수 있다. 도 3은 NVM(300)의 체계적인 레이아웃을 예시하는 것을 의도할 뿐, 비휘발성 메모리의 실제의 물리적인 레이아웃을 나타내지 않는다. 예를 들어, 도 3에는 다이 0이 다이 1 옆에 있는 것으로 도시되지만, 이것은 이러한 다이들의 기능 관계를 예시하기 위한 것일 뿐이며, NVM(300)의 실제의 물리적인 레이아웃에서 이러한 다이들은 서로 가까이 위치하거나 위치하지 않을 수 있다.
더욱이, 도 3에는 소정 수의 다이들, 블록들 및 페이지들이 도시되지만, 이것은 예시의 목적일 뿐이며, 이 분야의 기술자는 NVM(300)이 임의의 적절한 수의 다이들, 블록들 및 페이지들을 포함할 수 있다는 것을 알 수 있다. 일례로서, NVM(300)의 각각의 다이는 4096개의 블록을 포함할 수 있고, 각각의 블록은 블록이 SLC 블록, 2비트 MLC 블록 또는 3비트 MLC 블록인지에 기초하여 64, 128 또는 192개의 페이지를 포함할 수 있다. 게다가, NVM(300)의 각각의 페이지는 예를 들어 2 KiB, 4 KiB, 8 KiB 또는 16 KiB 등의 임의의 적절한 크기를 가질 수 있다.
도 3에 도시된 바와 같이, NVM(300)은 다이 0, 다이 1, 다이 2 및 다이 3과 같은 하나 이상의 다이들(즉, 집적 회로들)을 포함할 수 있다. NVM(300)의 각각의 다이는 하나 이상의 "블록들"로 체계화될 수 있다. 예를 들어, 다이 0-3은 각각 블록 0-3으로 체계화된 것으로 도시되어 있다.
다이들의 각각의 블록은 하나 이상의 페이지들로 체계화될 수 있다. 예를 들어, 다이 0-3 각각의 블록 0은 페이지 0-3으로 체계화된 것으로 도시되어 있다. NVM(300)의 각각의 페이지는 임의의 적절한 정보를 포함할 수 있다. 예를 들어, 페이지들은 사용자 데이터, 메타데이터 또는 이들 양자를 포함할 수 있다. 일부 실시예들에서는, ECC 데이터와 같은 메타데이터가 페이지들 내에 포함되어, NVM(300)에 저장된 정보의 에러 검출 및/또는 정정을 제공할 수 있다.
시간이 지남에 따라, NVM을 프로그래밍하는데 걸리는 더 긴 시간을 보상하기 위해 페이지 크기들이 증가하였다. 즉, NVM들의 메모리 셀들의 크기가 감소하였으므로, 그러한 셀들에 데이터를 프로그래밍하기 위해서는 더 정밀한 펄스들이 NVM의 메모리 셀들에 인가되어야 한다. 따라서, 페이지들의 크기를 증가시킴으로써, 임의 특정 기간 동안에 동일한 양의 사용자 데이터가 프로그래밍될 수 있다. 이것의 순수 효과는 전자 장치의 사용자가 NVM의 전체 프로그래밍 속도의 감소를 겪지 않을 것이라는 점이다.
NVM(300)은 다이 내의 동일 위치 또는 "블록 번호"를 갖는 각각의 다이로부터의 하나의 블록을 포함하는 하나 이상의 수퍼 블록들도 포함할 수 있다. 예를 들어, NVM(300)의 수퍼 블록 0은 다이 0-3 각각의 블록 0을 포함할 수 있다. 마찬가지로, NVM(300)의 수퍼 블록 1은 다이 0-3 각각의 블록 1을 포함할 수 있고, NVM(300)의 수퍼 블록 2는 다이 0-3 각각의 블록 2를 포함할 수 있으며, 기타 등등일 수 있다.
수퍼 블록들은 하나 이상의 블록들을 함께 가상적으로 연결하거나 "스트라이핑(striping)"함으로써 형성될 수 있다. 블록들은 수퍼 블록으로서 가상적으로 연결되기 위해 각각의 다이의 동일 행 내에 있을 필요가 없다. 사실상, 블록들은 수퍼 블록을 형성하기 위해 둘 이상의 다이로부터 무작위로 선택될 수 있다. 일부 실시예들에서, 수퍼 블록은 하나의 블록만을 포함할 수 있다. 수퍼 블록들은 동작 병렬화를 제공하며, 따라서 상이한 다이들에 위치하는 블록들에 대해 프로그래밍, 판독 및 소거 동작들이 병렬로 수행되는 것을 가능하게 한다.
게다가, 둘 이상의 다이로부터의 페이지들을 가상적으로 함께 연결하여, 수퍼 페이지들 또는 "스트라이프들"을 형성할 수 있다. 예를 들어, 스트라이프(302)는 다이 0-3 각각의 블록 0으로부터 페이지 0을 포함할 수 있다. 유사하게, 스트라이프(304)는 다이 0-3 각각의 블록 0으로부터의 페이지 3을 포함할 수 있다. NVM 인터페이스 내에 구현되는 변환 계층(예로서, 도 2의 변환 계층(214))은 수퍼 블록들 또는 스트라이프들을 계속 추적할 수 있다. 일반적으로, 프로그래밍 시간은 특정 스트라이프(예로서, 스트라이프 302 또는 304)에 포함된 페이지들에 대해 동일하게 유지될 수 있다.
시스템의 파일 시스템(예로서, 도 2의 파일 시스템(210))은 논리 공간에서 동작할 수 있다. 따라서, 전술한 바와 같이, 시스템 내의 각각의 파일은 하나 이상의 LBA들로 매핑될 수 있다. 따라서, 하나 이상의 LBA들은 NVM 내의 하나 이상의 물리 페이지 어드레스들로 매핑될 수 있다.
그러나, NVM이 다수의 LBA를 저장할 수 있는 더 큰 페이지들을 갖도록 구성될 때, 파일 시스템은 NVM 내의 물리 페이지를 완전히 채우지 못할 수 있는 기입 커맨드를 때때로 발행할 수 있다. 통상의 시스템들에서, 제어 회로(예로서, 도 1의 제어 회로(112))는 페이지의 채워지지 않은 부분들을 무효 데이터로 채우고, 기입 커맨드를 무효 데이터와 함께 NVM에 프로그래밍할 수 있다. 이러한 동작은 NVM 내의 공간을 낭비하며, 결과적으로 NVM에서 수행되는 것이 필요한 GC의 양을 증가시킬 수 있다.
따라서, 시스템 효율을 향상시키기 위하여, 시스템은 단일 트랜잭션에서 다수의 기입 커맨드를 NVM으로 디스패치하도록 구성될 수 있다.
도 4는 다양한 시스템들에 대한 예시적인 타이밍 도면들을 나타낸다. 예를 들어, 도 4에 도시된 바와 같이, 프로그래밍 시간(t_prog)은 (타이밍도(400)에 도시된 바와 같은) 하나의 페이지 또는 (타이밍도(402)에 도시된 바와 같은) 다수의 페이지가 단일 동작에서(예로서, 기입-다중 커맨드로서) 프로그래밍되는 경우에는 사실상 다르지 않다. 이것은 다수의 페이지가 단일 스트라이프 내에 포함되는 경우에 특히 사실일 수 있다.
게다가, 하나의 페이지 또는 다수의 페이지가 단일 동작에서 프로그래밍되는 경우에는 프로그래밍 개시를 위한 시간(t_startup)도 사실상 다르지 않다. 본 명세서에서 사용될 때, "프로그래밍 개시를 위한 시간"은 NVM 인터페이스(예로서, 도 2의 NVM 인터페이스(218))를 활성화하는데 걸리는 시간을 나타낸다.
더욱이, 대부분의 시나리오들에서, 콘텐츠를 페이지 버퍼로 옮기는데 걸리는 시간(t_transfer)은 t_prog에 비해 비교적 짧다. 예를 들어, 타이밍도(402)에 도시된 바와 같이, 기입-다중 커맨드를 프로그래밍하기 위한 t_transfer는 t_prog에 비해 여전히 더 짧은 지속 기간을 가질 수 있다. 그러나, 타이밍도(404)에 도시된 바와 같이, 다수의 페이지를 개별적으로 프로그래밍하는 것은 다수의 t_prog의 결합으로 인해 덜 효율적이다. 시스템의 효율은 매번 프로그래밍될 수 있는 사용자 데이터의 양이 비교적 적은 경우에 특히 나쁜 영향을 받는다.
결과적으로, 병렬로 수행될 수 있는 다이 프로그래밍의 양 및 특정 I/O 트랜잭션에서 프로그래밍될 수 있는 사용자 데이터의 양을 증가시키기 위해, 제어 회로는 다수의 기입 커맨드를 단일 기입-다중 커맨드로 결합할 수 있다. 이 분야의 기술자들은 임의의 적절한 접근법을 이용하여 기입-다중 커맨드가 형성될 수 있다는 것을 알 것이다. 예를 들어, 제어 회로는 다수의 커맨드와 관련된 논리 어드레스들의 세트, 카운터들의 세트 및 버퍼들의 세트를 각각 논리 어드레스들의 어레이, 카운터들의 어레이 및 버퍼들의 어레이로 결합함으로써 기입-다중 커맨드를 형성할 수 있다.
다중-기입 커맨드를 형성한 후에, 제어 회로는 기입-다중 커맨드를 NVM으로 (예로서, API 동작의 형태로) 디스패치할 수 있다. 기입-다중 커맨드를 형성하고 디스패치함으로써, 귀중한 공간을 낭비하지 않고서 사용자 데이터를 NVM 내에 효율적으로 프로그래밍할 수 있다.
일부 실시예들에서, 시스템은 데이터 기입들을 다수의 기입 경로로 분할하기 위한 여러 옵션을 가질 수 있다. 도 5는 시스템의 예시적인 프로그래밍 흐름(500)의 그래픽 도면을 나타낸다.
설명된 바와 같이, 파일 시스템(예로서, 도 2의 파일 시스템(210))은 시스템 내의 하나 이상의 큐들 내에 저장될 수 있는 하나 이상의 커맨드들(예로서, 판독, 기입 및/또는 트림 커맨드들)을 발행할 수 있다. 예를 들어, 도 5에 도시된 바와 같이, 큐(502)는 하나 이상의 기입 커맨드들을 유지하도록 구성될 수 있는 기입 큐를 나타낼 수 있다. 그러나, 이 분야의 기술자들은 시스템이 판독 및/또는 트림 커맨드들을 저장하기 위한 추가적인 큐들을 포함할 수 있다는 것을 알 것이다. 대안으로서, 큐(502)는 기입, 판독 및 트림 커맨드들을 저장하도록 구성될 수 있다.
일부 실시예들에서, 기입 커맨드가 큐(502) 내에 수신된 후에, 제어 회로(예로서, 도 1의 제어 회로(112))는 기입 커맨드들을 디스패치하기 위해 2개의 경로 중 하나를 선택할 수 있다. 예를 들어, 제어 회로는 기입 커맨드를 NVM(510)으로 디스패치하기 위해 기입 경로(예로서, 경로 504)를 선택할 수 있다. NVM(510)은 NVM(120)(도 1), NVM(220)(도 2) 또는 NVM(300)(도 3)과 동일 또는 유사할 수 있다.
일부 예들에서는, 경로(504)를 선택함으로써, 기입 커맨드가 하드웨어 엔진(506)으로 직접 디스패치될 수 있다. 하드웨어 엔진(504)은 예를 들어 직접 메모리 액세스("DMA") 엔진일 수 있다.
일부 실시예들에서는, 기입 커맨드를 하드웨어 엔진(506)으로 디스패치하기 전에, 제어 회로는 암호화 모듈(예로서, 도 1의 암호화 모듈(116))을 이용하여 기입 커맨드를 암호화할 수 있다. 설명된 바와 같이, 암호화 모듈은 예를 들어 AES, DES 또는 RSA와 같은 임의의 적절한 암호화 표준을 이용하여 기입 커맨드를 암호화할 수 있다.
이어서, 제어 회로는 기입 커맨드를 NVM 인터페이스(508)로 전달할 수 있다. NVM 인터페이스(508)는 도 2의 NVM 인터페이스(218)와 동일하거나 충분히 유사할 수 있다. NVM 인터페이스(508)가 기입 커맨드를 수신하면, NVM 버스 제어기(예로서, 도 2의 NVM 버스 제어기(216))는 기입 커맨드를 버스(512)를 통해 NVM(510)으로 디스패치하도록 지시될 수 있다.
일부 예들에서, 경로(504)를 선택하는 대신에, 제어 회로는 특정 기입 커맨드를 위해 버퍼링되는 경로(예로서, 경로 520)를 선택할 수 있다. 경로(504)를 선택함으로써, 제어 회로는 기입 커맨드를 큐(502)로부터 버퍼(522)로 옮길 수 있다. 전술한 바와 같이, 버퍼(522)는 휘발성 메모리(예로서, 도 1의 메모리(114)) 내에 저장될 수 있으며, 임의의 적절한 수의 기입 커맨드를 저장하도록 구성될 수 있다.
하나 이상의 기입 커맨드들을 버퍼(522)에 저장함으로써, 제어 회로는 다수의 커맨드를 경로(524)를 통해 NVM(510)으로 동시에 디스패치하도록 버스 제어기에 지시하기 전에 파일 시스템으로부터 추가적인 기입 커맨드들을 수신하기 위해 기다릴 수 있다. 예를 들어, 다수의 커맨드가 기입-다중 커맨드로 결합될 수 있고, 이어서 기입-다중 커맨드가 NVM(510)으로 디스패치될 수 있다.
일부 실시예들에서, 제어 회로는 기입 커맨드가 버퍼(522)로 옮겨지기 전에 기입 커맨드를 암호화하도록 암호화 모듈에 지시할 수 있다. 기입 커맨드를 암호화한 후에, 제어 회로는 암호화된 기입 커맨드를 버퍼(522) 내에 저장할 수 있다.
다른 실시예들에서, 제어 회로는 암호화되지 않은 기입 커맨드를 버퍼(522)로 이동시킬 수 있다. 그러나, 그러한 실시예들에서 제어 회로는 하나 이상의 암호화 시드들(예로서, 하나 이상의 키들 및 IV들)을 휘발성 메모리(예로서, 도 1의 메모리(114))에 복사하는 것이 필요할 수 있다. 이어서, 기입 커맨드가 버퍼(522)로부터 디스패치될 준비가 된 때, 제어 회로는 저장된 암호화 시드들을 이용하여 기입 커맨드를 암호화하도록 암호화 모듈에 지시할 수 있다. 결과적으로, 그러한 구성에서, 버퍼(522)는 고유한 암호화 특성들(예로서, 암호화 시드들의 고정 세트)과 연관될 수 있다.
시스템 일관성을 유지하기 위하여, 하나 이상의 "측파대 신호들"이 시스템의 애플리케이션, 운영 체제 또는 파일 시스템에 의해 발행될 수 있다. 본 명세서에서 사용될 때, "측파대 신호들"은 일관성을 유지하기 위해 애플리케이션, 운영 체제 또는 파일 시스템의 캐시 알고리즘에 의해 생성될 수 있는 임의의 적절한 신호를 지칭할 수 있다. 예를 들어, 일 타입의 측파대 신호는 시스템 내의 하나 이상의 애플리케이션들에 의해 생성될 수 있는 동기화된 캐시 신호일 수 있다. 또 하나의 측파대 신호는 HFS+에 의해 생성될 수 있는 힘 단위 액세스(force unit access; "FUA") 신호일 수 있다.
이러한 측파대 신호들 중 하나 이상의 수신에 응답하여, 제어 회로는 버퍼를 비우도록 버스 제어기에 지시할 수 있다. 즉, 제어 회로는 버퍼에 현재 저장된 모든 커맨드들을 경로(524)를 통해 NVM으로 디스패치하도록 버스 제어기에 지시할 수 있다.
경로(520)는 기입 커맨드를 큐(502)로부터 버퍼(522)로 복사하는 여분의 단계를 필요로 하므로, 시스템에서 추가적인 트래픽을 생성할 수 있다. 결과적으로, 일부 시나리오들에서, 경로(520)는 경로(504)에 비해 덜 효율적일 수 있다. 예를 들어, 전달되는 커맨드가 대규모 커맨드인 경우, 커맨드를 경로(504)를 통해 NVM(510)에 직접 프로그래밍하는 것이 더 효율적일 수 있다.
한편, 제어 회로가 (작은 커맨드들을 포함하는) 모든 커맨드들을 디스패치하기 위해 경로(504)를 무차별적으로 선택하는 경우, 시스템 성능이 또한 저하될 수 있다. 따라서, 제어 회로는 특정 기입 커맨드를 디스패치하는데 가장 적합한 경로를 선택하기 위해 하나 이상의 휴리스틱을 이용하는 것이 필요할 수 있다.
이용될 수 있는 휴리스틱들 중 하나는 기입 커맨드의 크기이다. 기입 커맨드의 크기에 적어도 부분적으로 기초하여, 제어 회로는 기입 커맨드를 버퍼링할지 여부를 결정할 수 있다.
예를 들어, 제어 회로는 먼저 큐(502)에 저장된 기입 커맨드의 크기를 결정할 수 있다. 이어서, 제어 회로는 기입 커맨드의 크기가 미리 결정된 임계치 미만인지를 결정할 수 있다. 기입 커맨드의 크기가 미리 결정된 임계치 미만이라는 (즉, 기입 커맨드가 비교적 작은 기입 커맨드라는) 결정에 응답하여, 제어 회로는 기입 커맨드의 버퍼링을 수행하기로 결정할 수 있다.
결과적으로, 제어 회로는 기입 커맨드를 큐(502)로부터 경로(520)를 통해 버퍼(522)로 이동시킬 수 있다. 기입 커맨드가 버퍼(522)에 저장되면, 커맨드는 나중에 다른 기입 커맨드들과 결합될 수 있다.
제어 회로가 기입 커맨드의 크기가 미리 결정된 임계치보다 큰 것으로 대신 결정하는 경우(예로서, 기입 커맨드가 비교적 큰 기입 커맨드인 경우), 제어 회로는 기입 커맨드의 버퍼링을 수행하지 않기로 결정할 수 있다. 결과적으로, 제어 회로는 기입 커맨드를 큐(502)로부터 경로(504)를 통해 NVM(510)으로 디스패치하도록 버스 제어기에 지시할 수 있다.
따라서, 기입 커맨드의 크기에 기초하여 경로를 선택함으로써, 제어 회로는 전체 시스템 관점에서 기입 커맨드들을 실행하는데 필요한 전체 대역폭을 줄일 수 있다.
다른 실시예들에서, 제어 회로는 기입 커맨드의 크기에 더하여 다른 휴리스틱을 이용하여 경로(504) 또는 경로(520) 중 어느 것을 선택할지를 결정할 수 있다. 예를 들어, 제어 회로는 하나 이상의 휴리스틱을 이용하여, 큐(502)에서 직접 다수의 기입 커맨드를 기입-다중 커맨드로 결합함으로써 시스템 효율이 향상될 수 있는지를 결정할 수 있다. 특히, 기입 커맨드들이 기입-다중 커맨드로 결합되면, 기입-다중 커맨드는 큐(502)로부터 경로(504)를 통해 직접 디스패치될 수 있다.
이용될 수 있는 휴리스틱들 중 하나는 큐(502)에 저장된 기입 커맨드들의 수이다. 예를 들어, 제어 회로는 큐(502)에 저장된 기입 커맨드들의 수가 미리 결정된 수를 초과하는지를 결정할 수 있다. 기입 커맨드들의 수가 미리 결정된 수를 초과한다는 결정에 응답하여, 제어 회로는 기입 커맨드들을 기입-다중 커맨드로 결합할 수 있으며, 기입-다중 커맨드를 큐(502)로부터 NVM(510)으로 디스패치하도록 버스 제어기에 지시할 수 있다. 이와 같이, 제어 회로는 다수의 기입 커맨드를 동시에 디스패치하면서도 기입 커맨드를 버퍼(522)에 복사하는 추가 단계를 방지하는 이익들을 얻을 수 있다.
이용될 수 있는 또 하나의 휴리스틱은 I/O 패턴들이다. 예를 들어, 제어 회로는 I/O가 일반적으로 묶음으로 도달하는 것으로 가정할 수 있다. 예를 들어, 특정 기간 동안, 제어 회로는 판독 커맨드들과 혼합된 기입 커맨드들보다 판독 커맨드들 또는 기입 커맨드들의 버스트를 수신할 가능성이 더 클 수 있다. 결과적으로, 제어 회로가 일련의 순차적인 기입들을 이미 수신한 경우, 제어 회로는 가까운 미래에 추가적인 순차적 기입들을 수신할 것으로 예상할 수 있다.
그러한 가정하에, 제어 회로는 큐(502) 내의 가장 최근에 수신된 기입 커맨드들의 세트가 순차적인지를 결정할 수 있다. 가장 최근에 수신된 기입 커맨드들의 세트가 순차적이라는 결정에 응답하여, 제어 회로는 큐(502) 내에 추가적인 기입 커맨드들을 수신하기 위해 기다릴 수 있다.
제어 회로가 그러한 추가적인 기입 커맨드들을 수신하면, 제어 회로는 추가적인 기입 커맨드들과 가장 최근에 수신된 커맨드들의 세트를 기입 다중 커맨드로 결합할 수 있다. 이어서, 제어 회로는 기입 다중 커맨드를 큐(502)로부터 NVM(510)으로 디스패치하도록 버스 제어기에 지시할 수 있다. 결과적으로, 제어 회로는 순차적인 기입 커맨드들에 대해 버퍼(522)를 바이패스할 수 있다.
일부 실시예들에서, 제어 회로가 큐(502) 내에 추가적인 기입 커맨드들을 수신하기 위해 기다리고 있는 동안, 제어 회로는 메모리에 저장된 판독 큐 및/또는 트림 큐를 대신 서비스할 수 있다. 따라서, 제어 회로는 기존의 공평 규칙들을 무시하고, 기입 커맨드들이 큐(502) 내에 쌓이게 할 수 있다.
다른 예로서, 제어 회로는 기입 커맨드의 직전의 디스패치된 기입 커맨드들의 수 및/또는 기입 커맨드가 최종 디스패치된 후에 경과한 시간의 양에 기초하여 작은 기입 커맨드를 버퍼링할지 여부를 결정할 수 있다. 즉, 과거의 액세스 패턴들에 기초하여, 제어 회로는 추가적인 기입 커맨드들이 가까운 미래에 아마도 도달할 수 있을 것으로 결정할 수 있다. 결과적으로, 큐(502) 내에 작은 기입 커맨드를 유지하고, 추가적인 기입 커맨드들을 기다리는 것이 더 효율적일 수 있다.
예를 들어, 제어 회로가 기입 커맨드의 직전의 디스패치된 기입 커맨드들의 수가 미리 결정된 수를 초과하는 것으로 결정하는 경우, 제어 회로는 큐(502) 내에 하나 이상의 추가적인 기입 커맨드들을 수신하기 위해 기다릴 수 있다. 유사하게, 제어 회로는 최종 디스패치된 기입 커맨드 이후에 경과한 시간의 양이 미리 결정된 기간(예로서, 수 밀리초)보다 적은 경우에 추가적인 기입 커맨드들을 수신하기 위해 기다릴 수 있다.
제어 회로가 큐(502) 내에 하나 이상의 추가적인 기입 커맨드를 수신하면, 제어 회로는 추가적인 기입 커맨드들과 작은 기입 커맨드를 기입 다중 커맨드로 결합할 수 있다. 이어서, 제어 회로는 기입 다중 커맨드를 큐(502)로부터 NVM(510)으로 디스패치하도록 버스 제어기에 지시할 수 있다.
전술한 예들에서, 제어 회로는 소정 기간(예로서, 수 밀리초)이 경과한 후에 하나 이상의 기입 커맨드들을 큐(502)로부터 버퍼(522)로 이동시킬 수 있다는 것을 이 분야의 기술자들은 알 것이다. 즉, 제어 회로가 예상된 기입 커맨드들을 실제로 수신하지 못하는 경우, 제어 회로는 작은 기입 커맨드를 버퍼(522)로 이동시킬 수 있다.
또 다른 예로서, 제어 회로는 큐(502)에 저장된 남은 기입 커맨드들의 수에 기초하여 작은 기입 커맨드를 버퍼링할지 여부를 결정할 수 있다. 예를 들어, 큐(502)가 단일 기입 커맨드 또는 소수의 기입 커맨드만을 갖는 경우, 제어 회로는 작은 기입 커맨드를 버퍼(522)로 이동시킬 수 있다.
추가적인 예로서, 제어 회로는 메모리 내의 이용가능한 공간간의 양에 적어도 부분적으로 기초하여 버퍼링의 수행 여부를 결정할 수 있다. 예를 들어, 메모리 내의 이용가능한 공간간의 양이 미리 결정된 임계치 미만인 경우, 제어 회로는 경로(504)를 선택하여 버퍼링을 바이패스할 수 있다. 이와 달리, 이용가능한 공간간의 양이 미리 결정된 임계치보다 큰 경우, 제어 회로는 경로(520)를 선택하여, 작은 기입 커맨드를 버퍼링할 수 있다.
또 다른 예로서, 제어 회로는 I/O 스케줄링 알고리즘의 과거의 성적을 이용하여 버퍼링 여부를 결정할 수 있다. 예컨대, 제어 회로는 과거의 버퍼링 결정들의 성공률을 포함할 수 있는 스케줄링 알고리즘의 과거 성적의 채점표를 유지할 수 있다. 제어 회로가 성공률이 비교적 낮은 것으로 결정하는 경우, 제어 회로는 버퍼링 여부를 결정하는데 사용된 휴리스틱들을 적응시킬 수 있다.
다른 예로서, 제어 회로는 버퍼의 크기 또는 특히 기입 커맨드의 크기에 상대적인 버퍼의 크기에 기초하여 버퍼링 여부를 결정할 수 있다. 예를 들어, 기입 커맨드의 크기가 버퍼(522)의 크기 이상인 경우, 제어 회로는 기입 커맨드를 버퍼(522)로 이동시키지 않기로 결정하고, 대신에 기입 커맨드를 경로(504)를 통해 NVM(510)으로 직접 디스패치하는 것을 선택할 수 있다.
그러나, 버퍼의 크기가 기입 커맨드의 크기보다 큰 경우, 제어 회로는 하나 이상의 알고리즘을 이용하여 특정 기입 스팬(span)에 대한 다이들에 걸친 조각화를 줄일 수 있다. 특히, 사용자 데이터는 일반적으로 사용자 데이터가 (예로서, 유사한 경계들을 따라) 프로그래밍된 입도와 동일한 입도로 NVM으로부터 판독되는 것으로 가정할 수 있다. 예를 들어, 시스템은 텍스트 문서를 NVM에 저장할 수 있다. 이어서, 시스템은 또한 아마도 전체 문서를 로딩할 것이다. 다른 예로서, 시스템이 NVM 내에 데이터베이스를 프로그래밍할 때, 데이터베이스는 작은 무작위 갱신들을 이용하여 프로그래밍된다. 또한, 나중에, 데이터베이스는 아마도 무작위 판독들을 이용하여 액세스될 것이다. 따라서, 시스템은 작은 기입 커맨드들의 시퀀스와 관련된 사용자 데이터가 동시에 판독될 것으로 예상할 수 있다.
통상적으로, 시스템은 각각의 기입 커맨드를 NVM에 개별적으로 프로그래밍할 수 있다. 결과적으로, 기입 커맨드들과 관련된 사용자 데이터는 다수의 다이 사이에 분할될 수 있으며, 이는 나중에 사용자 데이터를 판독하는데 필요한 에너지(예로서, 전체 전력 소비)를 증가시킬 수 있다. 이것은 사용자 데이터를 판독하기 위해서는 각각의 다이가 활성화되는 것이 필요하기 때문이다.
따라서, 동시성을 최대화하고(예를 들어, 채널 이중화를 최소화하고) 판독 에너지를 최소화하기 위하여, 제어 회로는 버퍼의 페이지 정렬된 경계들을 따라 큐 내의 기입 커맨드들을 재배열하려고 시도할 수 있다. 특히, 제어 회로는 하나 이상의 페이지 정렬된 경계들을 따라 버퍼를 채우기 위해 큐로부터 하나 이상의 커맨드들을 선택하려고 시도할 수 있다.
따라서, 그러한 시나리오에서, 시스템은 기입 커맨드들을 버퍼에 저장할 때 페이지 정렬을 고려할 수 있다. 예를 들어, 도 6에 도시된 바와 같이, 버퍼(600)는 8개의 페이지 정렬된 부분(예로서, 페이지 정렬된 부분 0-7)을 포함하며, 각각의 페이지 정렬된 부분은 4개의 LBA를 유지하기 위한 공간을 포함한다. 버퍼(600)의 각각의 페이지 정렬된 부분은 동일한 양의 데이터를 NVM(예로서, 도 3의 NVM(300) 또는 도 5의 NVM(510))의 페이지로서 저장하도록 구성될 수 있다. 이 분야의 기술자들은 버퍼(600)가 임의의 적절한 수의 페이지 정렬된 부분을 포함할 수 있다는 것을 알 것이다.
예를 들어, 도시된 바와 같이, 버퍼(600)의 페이지 정렬된 부분 0 및 1은 기입 커맨드들로 완전히 채워졌으며, 버퍼(600)의 페이지 정렬된 부분 2는 부분적으로만 채워졌다. 구체적으로, 기입 커맨드 0-3은 페이지 정렬된 부분 0에 저장되고, 기입 커맨드 4-7은 페이지 정렬된 부분 1에 저장되며, 기입 커맨드 8 및 9는 페이지 정렬된 부분 2에 저장된다. 버퍼(600)의 나머지 부분들은 비어 있다.
이러한 정보에 기초하여, 제어 회로는 버퍼(600)에 저장된 기입 커맨드들이 적어도 하나의 페이지 경계와 현재 정렬되지 않은 것으로 결정할 수 있다(예로서, 페이지 정렬된 부분 2는 완전히 채워지지 않았다). 기입 커맨드들이 버퍼(600) 내에서 정렬되지 않았다는 결정에 응답하여, 제어 회로는 적어도 하나의 페이지 경계까지 버퍼(600)를 채우는데 필요한 채움 크기(fill size)를 검출할 수 있다. 예를 들어, 페이지 정렬된 부분 2에 대해, 제어 회로는 채움 크기가 2개 LBA(예로서, 섹션 602 및 604)의 크기인 것으로 결정할 수 있다.
이어서, 제어 회로는 채움 크기와 동일한 크기를 갖는 적어도 하나의 기입 커맨드가 큐(예로서, 도 5의 큐(502)) 내에 존재하는지를 결정할 수 있다. 예를 들어, 버퍼(600)의 페이지 정렬된 부분 2에 대해, 제어 회로는 2의 LBA 크기를 갖는 하나의 기입 커맨드 또는 1의 LBA 크기를 각각 갖는 2개의 기입 커맨드를 선택할 수 있다. 이 분야의 기술자들은 예로서 최적합(best-fit) 알고리즘과 같은 임의의 적절한 알고리즘을 이용하여 채움 크기와 동일한 크기를 갖는 적어도 하나의 기입 커맨드가 큐 내에 존재하는지를 결정할 수 있다는 것을 알 것이다. 또한, 이 분야의 기술자들은 채움 크기를 충족시키는 다수의 기입 커맨드가 큐 내에 존재하는 경우에 제어 회로가 전술한 하나 이상의 휴리스틱을 이용하여 버퍼를 채우기 위한 기입 커맨드(들)를 선택할 수 있다는 것을 알 것이다.
따라서, 제어 회로가 채움 크기와 동일한 크기를 갖는 적어도 하나의 기입 커맨드가 존재하는 것으로 결정하는 경우, 제어 회로는 적어도 하나의 기입 커맨드를 큐로부터 버퍼(600)로 이동시킬 수 있다. 도 6에 도시된 예에서, 예를 들어, 제어 회로는 버퍼(600)의 페이지 정렬된 부분 2를 완전히 채울 수 있다(예로서, 하나 이상의 기입 커맨드로 섹션 602 및 604를 채울 수 있다).
버퍼(600)가 적어도 하나의 페이지 정렬된 부분까지 채워지면(예로서, 버퍼(600)에 저장된 기입 커맨드들이 페이지 정렬된 부분 2와 정렬되면), 제어 회로는 커맨드들을 기입 다중 커맨드로 결합할 수 있다. 기입 다중 커맨드를 생성한 후, 제어 회로는 기입 다중 커맨드를 버퍼(600)로부터 NVM으로 디스패치하도록 버스 제어기에 지시할 수 있다.
일부 실시예들에서, 버퍼(600)에 저장된 기입 커맨드들이 암호화된 커맨드들인 경우, 제어 회로는 커맨드를 큐로부터 버퍼(600)로 이동시키기 전에 먼저 적어도 하나의 커맨드를 암호화하도록 암호화 모듈에 지시할 수 있다. 커맨드가 암호화된 후, 제어 회로는 적어도 하나의 암호화된 커맨드를 버퍼(600)에 저장할 수 있다.
전술한 바와 같이, 제어 회로는 버퍼(600)의 페이지 정렬된 부분이 완전히 채워지기 전에 하나 이상의 측파대 신호들(예로서, 동기화된 캐시 또는 FUA 신호들)을 수신할 수 있다. 이러한 시나리오에서, 제어 회로는 페이지 정렬된 부분(예로서, 페이지 정렬된 부분 2)의 끝까지 무효 데이터로 버퍼(600)를 채울 수 있다(예로서, 무효 데이터로 섹션들 602 및 604를 채울 수 있다). 이어서, 제어 회로는 버퍼(600)에 저장된 기입 커맨드들과 무효 데이터를 기입 다중 커맨드로 결합할 수 있으며, 기입 다중 커맨드를 버퍼(600)로부터 NVM으로 디스패치하도록 버스 제어기에 지시할 수 있다.
따라서, 큐 내의 기입 커맨드들을 최적으로 재배열하고, 이러한 기입 커맨드들 중 하나 이상을 버퍼 내의 페이지 정렬된 부분들 내에 피팅함으로써 시스템은 판독 경로 상의 판독 에너지를 최소화하고, 버퍼링 오버헤드를 최소화하고, NVM 내의 조각화를 줄일 수 있다.
도 5를 다시 참조하면, 경로(504) 또는 경로(520)를 선택하는 대신에, 제어 회로는 버퍼링된 기입 커맨드들과 큐 기입 커맨드들을 경로(530)를 통해 동일 묶음 또는 트랜잭션으로(예로서, 기입 다중 커맨드로서) 결합할 수 있다. 예를 들어, 제어 회로는 큐(502)로부터 적어도 제1 기입 커맨드를 그리고 버퍼(522)로부터 적어도 제2 기입 커맨드를 선택할 수 있으며, 제1 및 제2 기입 커맨드들은 NVM(510) 내에서의 페이지 교차들을 최소화하도록 선택될 수 있다. 제1 및 제2 기입 커맨드들을 선택한 후에, 제어 회로는 커맨드들을 결합하여 기입 다중 커맨드를 형성할 수 있다. 마지막으로, 제어 회로는 기입 다중 커맨드를 경로(530)를 통해 NVM으로 디스패치하도록 버스 제어기에 지시할 수 있다.
일부 예들에서, 버퍼로부터의 기입 커맨드들과 큐로부터의 기입 커맨드들을 결합할 때, 제어 회로는 단일 트랜잭션에서 다양한 타입의 암호화 특성들을 결합하는 것이 필요할 수 있다. 예를 들어, 제어 회로는 큐(502)로부터 선택된 하나 이상의 기입 커맨드들에 적어도 제1 암호화 시드를 적용할 수 있다. 게다가, 버퍼(522)에 저장된 기입 커맨드들인 암호화되지 않은 커맨드들인 경우, 제어 회로는 메모리(예로서, 도 1의 메모리(114))로부터 하나 이상의 암호화 시드들을 검색할 수 있다. 하나 이상의 암호화 시드들을 검색한 후에, 제어 회로는 버퍼(522)로부터 선택된 하나 이상의 기입 커맨드들에 하나 이상의 암호화 시드들을 적용할 수 있다. 이어서, 제어 회로는 제1 및 제2의 암호화된 기입 커맨드들을 기입 다중 커맨드로 결합하고, 기입 다중 커맨드를 NVM(510)으로 디스패치할 수 있다.
이제, 도 7a, 도 7b 및 도 8을 참조하면, 본 발명의 다양한 실시예들에 따른 예시적인 프로세스들의 흐름도들이 도시되어 있다. 이 프로세스들은 시스템 내의 하나 이상의 컴포넌트들(예로서, 도 1의 전자 장치(100) 또는 도 2의 전자 장치(200))에 의해 실행될 수 있다. 예를 들어, 도 7a, 도 7b 및 도 8의 프로세스들의 단계들 중 적어도 일부는 제어 회로(예로서, 도 1의 SoC 제어 회로(112))에 의해 수행될 수 있다. 이 분야의 기술자들은 단계들 중 하나 이상이 NVM 인터페이스(예로서, 도 1의 NVM 인터페이스(118) 또는 도 2의 NVM 인터페이스(218))에 의해 수행될 수 있다는 것을 알 것이다. 대시 박스들은 시스템의 구성에 기초하여 수행되거나 수행되지 않을 수 있는 단계들을 예시하는 것을 의도한다.
먼저 도 7a 및 도 7b를 참조하면, NVM(예로서, 도 1의 NVM(120), 도 2의 NVM(220), 도 3의 NVM(300) 또는 도 5의 NVM(510)) 내의 효율적인 버퍼링을 위한 프로세스(700)가 도시되어 있다. 프로세스(700)는 단계 702에서 시작할 수 있고, 단계 704에서 제어 회로는 NVM으로의 프로그래밍을 위해 파일 시스템(예로서, 도 2의 파일 시스템(210))으로부터 제1 기입 커맨드를 수신할 수 있다.
단계 706에서, 제어 회로는 큐(예로서, 도 5의 큐(502))에 제1 기입 커맨드를 저장할 수 있다. 단계 708로 계속하여, 제어 회로는 하나 이상의 휴리스틱을 제1 기입 커맨드에 적용하여, 제1 기입 커맨드를 버퍼(예로서, 도 5의 버퍼(522) 또는 도 6의 버퍼(600))로 전송할지를 결정할 수 있다. 즉, 제어 회로는 제1 기입 커맨드의 버퍼링을 수행할지 여부를 결정할 수 있다.
단계 710에서 제어 회로가 제1 기입 커맨드를 전송하지 않기로 결정하는 경우, 프로세스(700)는 단계 712로 이동할 수 있다. 단계 712에서, 제어 회로는 제1 기입 커맨드를 암호화하도록 암호화 모듈(예로서, 도 1의 암호화 모듈(116))에 지시할 수 있다. 이어서, 단계 714에서, 제어 회로는 암호화된 기입 커맨드를 (예로서, 도 5의 경로(504)를 통해) NVM으로 디스패치하도록 버스 제어기(예로서, 도 2의 NVM 버스 제어기(216))에 지시할 수 있다. 예로서, 제어 회로는 암호화된 기입 커맨드를 하드웨어 엔진(예로서, 도 5의 하드웨어 엔진(506))으로 디스패치하도록 버스 제어기에 지시할 수 있다. 이어서, 단계 716에서 프로세스(700)가 종료될 수 있다.
대신에 단계 710에서 제어 회로가 제1 기입 커맨드를 전송하기로 결정하는 경우, 프로세스(700)는 단계 718로 또는 대안으로서 단계 720으로 이동할 수 있다. 특히, 시스템이 커맨드들을 버퍼에 저장하기 전에 암호화하도록 구성되는 경우, 단계 718에서, 제어 회로는 제1 기입 커맨드를 암호화하도록 암호화 모듈에 지시할 수 있다. 이와 달리, 시스템이 암호화되지 않은 커맨드들을 버퍼에 저장하도록 구성되는 경우, 프로세스(700)는 단계 720으로 직접 이동할 수 있다. 그러한 구성에서, 제어 회로는 하나 이상의 암호화 시드들도 메모리(예로서, 도 1의 메모리(114))에 복사할 수 있다. 따라서, 단계 720에서, 제어 회로는 암호화된 커맨드 또는 암호화되지 않은 커맨드를 버퍼에 (예로서, 도 5의 경로(520)를 통해) 저장할 수 있다.
단계 722로 계속하여, 제어 회로는 버퍼에 저장된 기입 커맨드들이 현재 적어도 하나의 페이지 경계와 정렬되어 있는지를 결정할 수 있다. 단계 722에서 제어 회로가 버퍼에 저장된 기입 커맨드들이 현재 적어도 하나의 페이지 경계와 정렬된 것으로 결정하는 경우, 프로세스(700)는 단계 724 또는 단계 726으로 이동할 수 있다. 즉, 암호화되지 않은 커맨드들이 버퍼에 저장되는 경우, 단계 724에서 제어 회로는 하나 이상의 저장된 암호화 시드들을 이용하여 기입 커맨드들을 암호화하라고 암호화 모듈에 지시할 수 있다. 그러나, 암호화된 커맨드들이 버퍼에 저장되는 경우, 프로세스(700)는 단계 726으로 직접 이동할 수 있다.
단계 726에서, 제어 회로는 버퍼 내의 기입 커맨드들을 기입 다중 커맨드로 결합할 수 있다. 이어서, 단계 728에서, 제어 회로는 기입 다중 커맨드를 버퍼로부터 NVM으로 (예로서, 도 5의 경로(524)를 통해) 디스패치하라고 버스 제어기에 지시할 수 있다. 이어서, 단계 716에서 프로세스(700)가 종료될 수 있다.
단계 722에서 제어 회로가 버퍼에 저장된 기입 커맨드들이 현재 적어도 하나의 페이지 경계와 정렬되지 않은 것으로 대신 결정하는 경우, 프로세스(700)는 단계 730으로 이동할 수 있다. 단계 730에서, 제어 회로는 적어도 하나의 페이지 경계까지 버퍼를 채우는데 필요한 채움 크기를 검출할 수 있다.
단계 732로 계속하여, 제어 회로는 채움 크기와 동일한 크기를 갖는 적어도 하나의 기입 커맨드가 큐에 존재하는지를 결정할 수 있다. 단계 732에서 제어 회로가 채움 크기와 동일한 크기를 갖는 적어도 하나의 기입 커맨드가 존재하는 것으로 결정하는 경우, 프로세스(700)는 단계 734로 이동할 수 있다.
단계 734에서, 제어 회로는 적어도 하나의 기입 커맨드를 큐로부터 버퍼로 전송할 수 있다. 이어서, 프로세스(700)는 (예로서, 버퍼 내의 기입 커맨드들이 암호화되는지 여부에 따라) 단계 724 또는 단계 726으로 복귀할 수 있다.
단계 732에서, 제어 회로가 채움 크기와 동일한 크기를 갖는 적어도 하나의 기입 커맨드가 큐에 존재하지 않는 것으로 대신 결정하는 경우, 프로세스(700)는 단계 736으로 이동할 수 있다. 단계 736에서, 제어 회로는 추가적인 기입 커맨드들이 도달하기를 기다릴 수 있다(예로서, 파일 시스템으로부터 추가적인 기입 커맨드들을 수신하기를 기다릴 수 있다). 이어서, 단계 716에서 프로세스(700)가 종료될 수 있다.
이제, 도 8을 참조하면, NVM(예로서, 도 1의 NVM(120), 도 2의 NVM(220), 도 3의 NVM(300) 또는 도 5의 NVM(510))에서 버퍼링할지 여부를 결정하기 위한 프로세스(800)가 도시되어 있다. 일부 실시예들에서, 프로세스(800)는 프로세스(700)(도 7)의 적어도 하나의 휴리스틱을 적용하는 단계(708) 및 전송할지를 결정하는 단계(710)의 더 상세한 도면을 나타낼 수 있다.
프로세스(800)는 단계 802에서 시작할 수 있으며, 단계 804에서 제어 회로는 큐(예로서, 도 5의 큐(502))에 저장된 기입 커맨드의 크기를 결정할 수 있다.
이어서, 단계 806에서, 제어 회로는 기입 커맨드의 크기가 미리 결정된 임계치 미만인지를 결정할 수 있다. 단계 806에서 제어 회로가 기입 커맨드의 크기가 미리 결정된 임계치 미만이 아닌 것으로 (예로서, 기입 커맨드가 큰 기입 커맨드인 것으로) 결정하는 경우, 프로세스(800)는 단계 808로 이동할 수 있다.
단계 808에서, 제어 회로는 기입 커맨드를 큐로부터 NVM으로 (예로서, 도 5의 경로(504)를 통해) 디스패치하도록 버스 제어기에 지시할 수 있다. 이어서, 프로세스(800)는 단계 810에서 종료될 수 있다.
단계 806에서 제어 회로가 기입 커맨드의 크기가 미리 결정된 임계치 미만인 것으로(예로서, 기입 커맨드가 작은 기입 커맨드인 것으로) 결정하는 경우, 프로세스(800)는 단계 812로 이동할 수 있다.
단계 812에서, 제어 회로는 큐에 저장된 기입 커맨드들의 수가 미리 결정된 수를 초과하는지를 결정할 수 있다. 단계 812에서 제어 회로가 큐에 저장된 기입 커맨드들의 수가 미리 결정된 수를 초과하는 것으로 결정하는 경우, 프로세스(800)는 단계 814로 이동할 수 있다.
단계 814에서, 제어 회로는 기입 커맨드들을 기입 다중 커맨드로 결합할 수 있다. 이어서, 프로세스(800)는 단계 808로 이동할 수 있으며, 여기서 기입 다중 커맨드가 큐로부터 NVM으로 디스패치될 수 있다.
단계 812에서 제어 회로가 큐에 저장된 기입 커맨드들의 수가 미리 결정된 수를 초과하지 않는 것으로 대신 결정하는 경우, 프로세스(800)는 단계 816으로 이동할 수 있다.
단계 816에서, 제어 회로는 큐에서 가장 최근에 수신된 기입 커맨드들의 세트가 순차적인지를 결정할 수 있다. 단계 816에서 제어 회로가 가장 최근에 수신된 기입 커맨드들이 순차적인 것으로 결정하는 경우, 프로세스(800)는 단계 818로 이동할 수 있다.
단계 818에서, 제어 회로는 큐에서 추가적인 기입 커맨드들을 수신하기를 기다릴 수 있다. 이어서, 단계 820에서, 제어 회로는 파일 시스템(예로서, 도 2의 파일 시스템(210))으로부터 적어도 하나의 추가적인 기입 커맨드가 수신되었는지를 결정할 수 있다. 예컨대, 제어 회로는 짧은 기간(예로서, 수 밀리초) 후에 이러한 결정을 행할 수 있다.
단계 820에서 제어 회로가 파일 시스템으로부터 적어도 하나의 추가적인 기입 커맨드를 수신한 것으로 결정하는 경우, 프로세스(800)는 단계 814로 이동할 수 있으며, 여기서 기입 커맨드들은 기입 다중 커맨드로 결합될 수 있다.
단계 820에서 제어 회로가 파일 시스템으로부터 적어도 하나의 추가적인 기입 커맨드를 수신하지 않은 것으로 결정하는 경우, 프로세스(800)는 단계 822로 이동할 수 있다. 단계 822에서, 제어 회로는 기입 커맨드를 버퍼로 (예로서, 도 5의 경로(520)를 통해) 전송할 수 있다. 이어서, 단계 810에서 프로세스(800)가 종료될 수 있다.
단계 816에서 제어 회로가 큐에서 가장 최근에 수신된 기입 커맨드들의 세트가 순차적이 아닌 것으로 결정하는 경우, 프로세스(800)는 단계 824로 이동할 수 있다. 단계 824에서, 제어 회로는 기입 커맨드의 직전의 디스패치된 기입 커맨드들의 수가 미리 결정된 수를 초과하는지를 결정할 수 있다.
단계 824에서 제어 회로가 디스패치된 기입 커맨드들의 수가 미리 결정된 수를 초과하는 것으로 결정하는 경우, 프로세스(800)는 단계 818로 이동할 수 있으며, 여기서 제어 회로는 큐에서 추가적인 커맨드들을 수신하기를 기다릴 수 있다. 단계 824에서 제어 회로가 디스패치된 기입 커맨드들의 수가 미리 결정된 수를 초과하지 않는 것으로 대신 결정하는 경우, 프로세스(800)는 단계 822로 이동할 수 있으며, 여기서 제어 회로는 기입 커맨드를 버퍼로 전송할 수 있다.
도 7a, 도 7b 및 도 8의 프로세스들(700, 800)은 예시적일 뿐이라는 것을 이해해야 한다. 본 발명의 범위로부터 벗어나지 않고서, 임의의 단계들이 제거, 변경 또는 결합될 수 있으며, 임의의 추가적인 단계들이 추가될 수 있다.
설명된 본 발명의 실시예들은 한정이 아니라 예시의 목적들을 위해 제공된다.
Claims (10)
- 비휘발성 메모리("NVM")로의 디스패치를 위해 기입 커맨드들을 결합하는 방법으로서,
큐로부터 적어도 제1 기입 커맨드를 선택하며, 버퍼로부터 적어도 제2 기입 커맨드를 선택하는 단계 - 상기 NVM은 복수의 페이지들을 포함하고, 상기 적어도 제1 기입 커맨드 및 제2 기입 커맨드가 상기 NVM에서의 적어도 하나의 페이지 경계를 교차하는 경우를 최소화하도록 상기 적어도 제1 기입 커맨드 및 제2 기입 커맨드가 선택됨 -;
기입 다중 커맨드를 형성하기 위해서 상기 적어도 제1 기입 커맨드와 제2 기입 커맨드를 결합하는 단계; 및
상기 기입 다중 커맨드를 상기 NVM으로 디스패치하는 단계
를 포함하는 방법. - 제1항에 있어서,
상기 적어도 제1 기입 커맨드와 제2 기입 커맨드를 결합하는 단계는 적어도 제1 암호화 시드를 상기 적어도 제1 기입 커맨드에 적용하는 단계를 더 포함하는 방법. - 제2항에 있어서,
상기 적어도 제2 기입 커맨드는 암호화되지 않는 방법. - 제3항에 있어서,
상기 적어도 제1 기입 커맨드와 제2 기입 커맨드를 결합하는 단계는,
휘발성 메모리로부터 적어도 제2 암호화 시드를 검색하는 단계; 및
상기 적어도 제2 암호화 시드를 상기 적어도 제2 기입 커맨드에 적용하는 단계
를 더 포함하는 방법. - 복수의 페이지들을 포함하는 비휘발성 메모리("NVM");
상기 NVM과 통신하도록 동작하는 버스 제어기;
기입 커맨드들의 세트를 저장하기 위한 버퍼 및 큐를 포함하는 휘발성 메모리; 및
제어 회로
를 포함하고,
상기 제어 회로는,
상기 버퍼에 저장된 기입 커맨드들의 세트가 현재 적어도 하나의 페이지 경계와 정렬되어 있는지 여부를 결정하고,
상기 버퍼에 저장된 기입 커맨드들의 세트가 현재 상기 적어도 하나의 페이지 경계와 정렬되어 있지 않다고 결정하는 것에 응답하여, 상기 적어도 하나의 페이지 경계까지 상기 버퍼를 채우는데 필요한 채움 크기(fill size)를 검출하고,
상기 채움 크기와 동일한 크기를 갖는 적어도 하나의 기입 커맨드가 상기 큐에 존재하는지 여부를 결정하며,
상기 채움 크기와 동일한 크기를 갖는 적어도 하나의 기입 커맨드가 상기 큐에 존재한다고 결정하는 것에 응답하여, 상기 적어도 하나의 기입 커맨드를 상기 큐로부터 상기 버퍼로 전송하도록 동작하는 시스템. - 제5항에 있어서,
상기 제어 회로는, 상기 채움 크기와 동일한 크기를 갖는 적어도 하나의 기입 커맨드가 상기 큐에 존재하는지 여부를 결정하기 위해서 최적합(best-fit) 알고리즘을 이용하도록 동작하는 시스템. - 제5항에 있어서,
상기 버퍼에 저장된 기입 커맨드들의 세트가 현재 상기 적어도 하나의 페이지 경계와 정렬되어 있다고 결정하는 것에 응답하여, 상기 제어 회로는,
상기 기입 커맨드들의 세트를 기입 다중 커맨드로 결합하며,
상기 버스 제어기에 상기 기입 다중 커맨드를 상기 버퍼로부터 상기 NVM으로 디스패치할 것을 지시하도록 동작하는 시스템. - 제5항에 있어서,
상기 제어 회로는,
적어도 하나의 측파대 신호를 수신하고,
무효 데이터로 적어도 하나의 페이지 정렬된 부분의 끝까지 상기 버퍼를 채우고,
상기 기입 커맨드들의 세트와 상기 무효 데이터를 기입 다중 커맨드로 결합하며,
상기 버스 제어기에 상기 기입 다중 커맨드를 상기 버퍼로부터 상기 NVM으로 디스패치할 것을 지시하도록 동작하는 시스템. - 제5항에 있어서,
상기 기입 커맨드들의 세트는 암호화된 커맨드들을 포함하는 시스템. - 제9항에 있어서,
암호화 모듈을 더 포함하고,
상기 채움 크기와 동일한 크기를 갖는 적어도 하나의 커맨드가 상기 큐에 존재한다고 결정하는 것에 응답하여, 상기 제어 회로는,
상기 암호화 모듈에 상기 적어도 하나의 커맨드를 암호화할 것을 지시하며,
상기 적어도 하나의 암호화된 커맨드를 상기 버퍼에 저장하도록 동작하는 시스템.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/036,460 | 2011-02-28 | ||
US13/036,460 US20120221767A1 (en) | 2011-02-28 | 2011-02-28 | Efficient buffering for a system having non-volatile memory |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020120019692A Division KR20120098505A (ko) | 2011-02-28 | 2012-02-27 | 비휘발성 메모리를 갖는 시스템에 대한 효율적인 버퍼링 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20120098547A KR20120098547A (ko) | 2012-09-05 |
KR101624007B1 true KR101624007B1 (ko) | 2016-05-24 |
Family
ID=45808178
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020120019692A KR20120098505A (ko) | 2011-02-28 | 2012-02-27 | 비휘발성 메모리를 갖는 시스템에 대한 효율적인 버퍼링 |
KR1020120020909A KR101624007B1 (ko) | 2011-02-28 | 2012-02-29 | 비휘발성 메모리를 갖는 시스템에 대한 효율적인 버퍼링 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020120019692A KR20120098505A (ko) | 2011-02-28 | 2012-02-27 | 비휘발성 메모리를 갖는 시스템에 대한 효율적인 버퍼링 |
Country Status (6)
Country | Link |
---|---|
US (3) | US20120221767A1 (ko) |
EP (1) | EP2492817A3 (ko) |
KR (2) | KR20120098505A (ko) |
CN (1) | CN102750226B (ko) |
TW (2) | TWI503822B (ko) |
WO (1) | WO2012118743A1 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11461238B2 (en) | 2019-08-28 | 2022-10-04 | SK Hynix Inc. | Storage device, memory controller, and method for fetching write commands from submission queues to perform full page writes |
Families Citing this family (83)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120221767A1 (en) * | 2011-02-28 | 2012-08-30 | Apple Inc. | Efficient buffering for a system having non-volatile memory |
US9021178B2 (en) * | 2011-05-02 | 2015-04-28 | Western Digital Technologies, Inc. | High performance path for command processing |
US8645723B2 (en) | 2011-05-11 | 2014-02-04 | Apple Inc. | Asynchronous management of access requests to control power consumption |
US8745369B2 (en) * | 2011-06-24 | 2014-06-03 | SanDisk Technologies, Inc. | Method and memory system for managing power based on semaphores and timers |
US10877669B1 (en) * | 2011-06-30 | 2020-12-29 | Amazon Technologies, Inc. | System and method for providing a committed throughput level in a data store |
US9134909B2 (en) * | 2011-08-30 | 2015-09-15 | International Business Machines Corporation | Multiple I/O request processing in a storage system |
US9235502B2 (en) | 2011-09-16 | 2016-01-12 | Apple Inc. | Systems and methods for configuring non-volatile memory |
KR101889298B1 (ko) * | 2011-11-08 | 2018-08-20 | 삼성전자주식회사 | 불휘발성 메모리를 포함하는 메모리 장치 및 불휘발성 메모리의 제어 방법 |
US8938583B1 (en) * | 2011-11-16 | 2015-01-20 | Western Digital Technologies, Inc. | System and method for concurrently executing data access requests |
US9456053B2 (en) | 2011-12-14 | 2016-09-27 | Level 3 Communications, Llc | Content delivery network |
US9769123B2 (en) * | 2012-09-06 | 2017-09-19 | Intel Corporation | Mitigating unauthorized access to data traffic |
US20140337472A1 (en) | 2012-12-13 | 2014-11-13 | Level 3 Communications, Llc | Beacon Services in a Content Delivery Framework |
US10791050B2 (en) | 2012-12-13 | 2020-09-29 | Level 3 Communications, Llc | Geographic location determination in a content delivery framework |
US10701149B2 (en) | 2012-12-13 | 2020-06-30 | Level 3 Communications, Llc | Content delivery framework having origin services |
US10652087B2 (en) | 2012-12-13 | 2020-05-12 | Level 3 Communications, Llc | Content delivery framework having fill services |
US10701148B2 (en) | 2012-12-13 | 2020-06-30 | Level 3 Communications, Llc | Content delivery framework having storage services |
US9634918B2 (en) | 2012-12-13 | 2017-04-25 | Level 3 Communications, Llc | Invalidation sequencing in a content delivery framework |
US9722882B2 (en) | 2012-12-13 | 2017-08-01 | Level 3 Communications, Llc | Devices and methods supporting content delivery with adaptation services with provisioning |
WO2014098839A1 (en) * | 2012-12-19 | 2014-06-26 | Hewlett-Packard Development Company | Nvram path selection |
CN103914397B (zh) * | 2013-01-09 | 2018-01-30 | 深圳市江波龙电子有限公司 | 闪存存储设备及其管理方法 |
US10089224B2 (en) * | 2013-03-15 | 2018-10-02 | The Boeing Company | Write caching using volatile shadow memory |
US9473561B2 (en) * | 2013-03-15 | 2016-10-18 | International Business Machines Corporation | Data transmission for transaction processing in a networked environment |
KR102101304B1 (ko) * | 2013-03-15 | 2020-04-16 | 삼성전자주식회사 | 메모리 컨트롤러 및 메모리 컨트롤러의 동작 방법 |
US9047189B1 (en) | 2013-05-28 | 2015-06-02 | Amazon Technologies, Inc. | Self-describing data blocks of a minimum atomic write size for a data store |
US9880926B1 (en) * | 2013-08-20 | 2018-01-30 | Seagate Technology Llc | Log structured reserved zone for a data storage device |
US9412455B2 (en) | 2013-09-11 | 2016-08-09 | Kabushiki Kaisha Toshiba | Data write control device and data storage device |
CN111309256B (zh) * | 2013-11-07 | 2024-04-30 | 奈特力斯股份有限公司 | 混合内存模块以及操作混合内存模块的系统和方法 |
CN103617101A (zh) * | 2013-12-12 | 2014-03-05 | 北京旋极信息技术股份有限公司 | 一种掉电保护方法及装置 |
US9798493B2 (en) * | 2013-12-16 | 2017-10-24 | International Business Machines Corporation | Firmware bypass for medium-access commands |
KR102301230B1 (ko) * | 2014-12-24 | 2021-09-10 | 삼성전자주식회사 | 가상화된 gpu들에 대한 스케줄링을 수행하는 방법 및 이를 위한 디바이스 |
KR102364381B1 (ko) | 2015-03-06 | 2022-02-18 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그의 동작방법 |
KR102370733B1 (ko) | 2015-04-13 | 2022-03-08 | 에스케이하이닉스 주식회사 | 출력 커맨드들을 전송하는 컨트롤러 및 그것의 동작 방법 |
WO2017069773A1 (en) * | 2015-10-23 | 2017-04-27 | Hewlett-Packard Development Company, L.P. | Write commands filtering |
US9948620B2 (en) * | 2015-12-15 | 2018-04-17 | International Business Machines Corporation | Management of encryption within processing elements |
US10007319B2 (en) * | 2015-12-17 | 2018-06-26 | Microsemi Solutions (U.S.), Inc. | Power saving in multi-directional data transfer |
CN105677585B (zh) * | 2015-12-31 | 2019-01-15 | 联想(北京)有限公司 | 一种数据处理方法、电子设备 |
JP6444917B2 (ja) | 2016-03-08 | 2018-12-26 | 東芝メモリ株式会社 | ストレージシステム、情報処理システムおよび制御方法 |
US9591047B1 (en) | 2016-04-11 | 2017-03-07 | Level 3 Communications, Llc | Invalidation in a content delivery network (CDN) |
KR102547795B1 (ko) | 2016-05-04 | 2023-06-27 | 에스케이하이닉스 주식회사 | 데이터 처리 시스템 및 데이터 처리 시스템의 동작 방법 |
US10459855B2 (en) * | 2016-07-01 | 2019-10-29 | Intel Corporation | Load reduced nonvolatile memory interface |
KR102529696B1 (ko) * | 2016-07-14 | 2023-05-10 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
KR102641107B1 (ko) * | 2016-07-29 | 2024-02-27 | 삼성전자주식회사 | 스토리지 장치, 이를 포함하는 시스템 및 그 동작 방법 |
CN106713450A (zh) * | 2016-12-21 | 2017-05-24 | 广州优视网络科技有限公司 | 基于读写分离模式的下载提速方法及装置 |
KR102681659B1 (ko) * | 2017-01-12 | 2024-07-05 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
TWI601060B (zh) * | 2017-01-17 | 2017-10-01 | 群聯電子股份有限公司 | 資料傳輸方法、記憶體儲存裝置及記憶體控制電路單元 |
TWI635391B (zh) * | 2017-02-14 | 2018-09-11 | 點序科技股份有限公司 | 快閃記憶體以及其管理方法 |
US10296473B2 (en) * | 2017-03-24 | 2019-05-21 | Western Digital Technologies, Inc. | System and method for fast execution of in-capsule commands |
CN108572790B (zh) * | 2017-04-20 | 2021-11-26 | 深圳市得一微电子有限责任公司 | 一种固态硬盘写入指令排序方法、固态硬盘 |
US10014056B1 (en) * | 2017-05-18 | 2018-07-03 | Sandisk Technologies Llc | Changing storage parameters |
CN107506138B (zh) * | 2017-08-11 | 2020-12-18 | 东莞记忆存储科技有限公司 | 一种固态硬盘提升寿命的方法 |
KR102293069B1 (ko) | 2017-09-08 | 2021-08-27 | 삼성전자주식회사 | 불휘발성 메모리 장치 및 제어기를 포함하는 스토리지 장치, 제어기, 그리고 스토리지 장치의 동작 방법 |
US10514748B2 (en) * | 2017-09-27 | 2019-12-24 | Western Digital Technologies, Inc. | Reactive power management for non-volatile memory controllers |
US10861504B2 (en) | 2017-10-05 | 2020-12-08 | Advanced Micro Devices, Inc. | Dynamic control of multi-region fabric |
US10558591B2 (en) * | 2017-10-09 | 2020-02-11 | Advanced Micro Devices, Inc. | Method and apparatus for in-band priority adjustment forwarding in a communication fabric |
US10430117B2 (en) | 2017-10-23 | 2019-10-01 | Micron Technology, Inc. | Host accelerated operations in managed NAND devices |
US10409726B2 (en) * | 2017-10-30 | 2019-09-10 | Micron Technology, Inc. | Dynamic L2P cache |
JP7012520B2 (ja) * | 2017-11-29 | 2022-01-28 | ラピスセミコンダクタ株式会社 | データ書き込み方法及び記憶装置 |
US11196657B2 (en) | 2017-12-21 | 2021-12-07 | Advanced Micro Devices, Inc. | Self identifying interconnect topology |
US11016890B2 (en) * | 2018-02-05 | 2021-05-25 | Micron Technology, Inc. | CPU cache flushing to persistent memory |
US10705747B2 (en) | 2018-03-21 | 2020-07-07 | Micron Technology, Inc. | Latency-based storage in a hybrid memory system |
US10969994B2 (en) * | 2018-08-08 | 2021-04-06 | Micron Technology, Inc. | Throttle response signals from a memory system |
US11074007B2 (en) * | 2018-08-08 | 2021-07-27 | Micron Technology, Inc. | Optimize information requests to a memory system |
US10782916B2 (en) * | 2018-08-08 | 2020-09-22 | Micron Technology, Inc. | Proactive return of write credits in a memory system |
KR102691851B1 (ko) * | 2018-08-29 | 2024-08-06 | 에스케이하이닉스 주식회사 | 불휘발성 메모리 장치, 이를 포함하는 데이터 저장 장치 및 그 동작 방법 |
US10719462B2 (en) * | 2018-09-25 | 2020-07-21 | Intel Corporation | Technologies for computational storage via offload kernel extensions |
CN109445690B (zh) * | 2018-10-08 | 2020-10-23 | 苏州浪潮智能科技有限公司 | 一种raid卡性能优化方法、装置、终端及存储介质 |
KR102689927B1 (ko) * | 2018-11-16 | 2024-07-31 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작방법 |
US11614889B2 (en) * | 2018-11-29 | 2023-03-28 | Advanced Micro Devices, Inc. | Aggregating commands in a stream based on cache line addresses |
CN111625180B (zh) | 2019-02-27 | 2021-05-28 | 英韧科技(上海)有限公司 | 数据写入方法及装置、存储介质 |
CN109992212B (zh) * | 2019-04-10 | 2020-03-27 | 苏州浪潮智能科技有限公司 | 一种数据写入方法和一种数据读取方法 |
US11113198B2 (en) * | 2019-05-06 | 2021-09-07 | Micron Technology, Inc. | Timed data transfer between a host system and a memory sub-system |
CN112015527B (zh) * | 2019-05-29 | 2024-03-22 | 闪迪技术有限公司 | 管理从提交队列获取和执行命令 |
US11669272B2 (en) * | 2019-05-31 | 2023-06-06 | Micron Technology, Inc. | Predictive data transfer based on availability of media units in memory sub-systems |
US11507522B2 (en) | 2019-12-06 | 2022-11-22 | Advanced Micro Devices, Inc. | Memory request priority assignment techniques for parallel processors |
US11223575B2 (en) | 2019-12-23 | 2022-01-11 | Advanced Micro Devices, Inc. | Re-purposing byte enables as clock enables for power savings |
US11379151B2 (en) | 2020-03-31 | 2022-07-05 | Western Digital Technologies, Inc. | Flow control of large sequential host read commands based on a queue threshold |
US11537510B2 (en) * | 2020-04-24 | 2022-12-27 | Western Digital Technologies, Inc. | Storage devices having minimum write sizes of data |
US11294598B2 (en) * | 2020-04-24 | 2022-04-05 | Western Digital Technologies, Inc. | Storage devices having minimum write sizes of data |
US11513736B2 (en) | 2021-03-08 | 2022-11-29 | Western Digital Technologies, Inc. | Revised host command generation for unaligned access |
US11803332B2 (en) * | 2021-03-29 | 2023-10-31 | Micron Technology, Inc. | Sideband communication management |
US11934695B2 (en) * | 2021-06-23 | 2024-03-19 | Western Digital Technologies, Inc. | Aligned command based firmware architecture for unaligned write handling |
US20230266896A1 (en) * | 2022-02-18 | 2023-08-24 | Samsung Electronics Co., Ltd. | Memory system for tailoring data, host system for controlling the memory system, and operation method of the memory system |
US12039198B2 (en) | 2022-05-20 | 2024-07-16 | Western Digital Technologies, Inc. | Dynamic write shaping |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080320209A1 (en) | 2000-01-06 | 2008-12-25 | Super Talent Electronics, Inc. | High Performance and Endurance Non-volatile Memory Based Storage Systems |
US20100031056A1 (en) | 2007-07-27 | 2010-02-04 | Hitachi, Ltd. | Storage system to which removable encryption/decryption module is connected |
KR100953252B1 (ko) | 2007-02-15 | 2010-04-16 | 후지쯔 가부시끼가이샤 | 데이터 암호화 장치, 데이터 복호화 장치 및 데이터 암호화 방법 |
US20100174847A1 (en) | 2009-01-05 | 2010-07-08 | Alexander Paley | Non-Volatile Memory and Method With Write Cache Partition Management Methods |
Family Cites Families (57)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4433374A (en) * | 1980-11-14 | 1984-02-21 | Sperry Corporation | Cache/disk subsystem with cache bypass |
US5724592A (en) | 1995-03-31 | 1998-03-03 | Intel Corporation | Method and apparatus for managing active power consumption in a microprocessor controlled storage device |
US5651137A (en) * | 1995-04-12 | 1997-07-22 | Intel Corporation | Scalable cache attributes for an input/output bus |
JP3821536B2 (ja) | 1997-05-16 | 2006-09-13 | 沖電気工業株式会社 | 不揮発性半導体ディスク装置 |
US6233693B1 (en) | 1998-05-06 | 2001-05-15 | International Business Machines Corporation | Smart DASD spin-up |
US6748493B1 (en) * | 1998-11-30 | 2004-06-08 | International Business Machines Corporation | Method and apparatus for managing memory operations in a data processing system using a store buffer |
US6748441B1 (en) * | 1999-12-02 | 2004-06-08 | Microsoft Corporation | Data carousel receiving and caching |
US6397301B1 (en) * | 1999-12-29 | 2002-05-28 | Intel Corporation | Preventing access to secure area of a cache |
US8266367B2 (en) * | 2003-12-02 | 2012-09-11 | Super Talent Electronics, Inc. | Multi-level striping and truncation channel-equalization for flash-memory system |
JP4694040B2 (ja) | 2001-05-29 | 2011-06-01 | ルネサスエレクトロニクス株式会社 | 半導体記憶装置 |
GB0123416D0 (en) | 2001-09-28 | 2001-11-21 | Memquest Ltd | Non-volatile memory control |
US6925573B2 (en) | 2002-01-02 | 2005-08-02 | Intel Corporation | Method and apparatus to manage use of system power within a given specification |
US7400062B2 (en) | 2002-10-15 | 2008-07-15 | Microsemi Corp. - Analog Mixed Signal Group Ltd. | Rack level power management |
US20050213761A1 (en) * | 2002-12-02 | 2005-09-29 | Walmsley Simon R | Storing number and a result of a function on an integrated circuit |
JP4252828B2 (ja) * | 2003-03-19 | 2009-04-08 | 株式会社日立製作所 | キャッシュ制御方法、ノード装置、プログラム |
US7146455B2 (en) * | 2003-05-19 | 2006-12-05 | Accton Technology Corporation | System and method for optimized access to memory devices requiring block writing |
CN1886749B (zh) | 2003-11-28 | 2012-06-13 | 松下电器产业株式会社 | 记录装置 |
US8112574B2 (en) * | 2004-02-26 | 2012-02-07 | Super Talent Electronics, Inc. | Swappable sets of partial-mapping tables in a flash-memory system with a command queue for combining flash writes |
US7155623B2 (en) | 2003-12-03 | 2006-12-26 | International Business Machines Corporation | Method and system for power management including local bounding of device group power consumption |
US20070083491A1 (en) * | 2004-05-27 | 2007-04-12 | Silverbrook Research Pty Ltd | Storage of key in non-volatile memory |
JP4447977B2 (ja) * | 2004-06-30 | 2010-04-07 | 富士通マイクロエレクトロニクス株式会社 | セキュアプロセッサ、およびセキュアプロセッサ用プログラム。 |
US7305572B1 (en) | 2004-09-27 | 2007-12-04 | Emc Corporation | Disk drive input sequencing for staggered drive spin-up |
US7657756B2 (en) * | 2004-10-08 | 2010-02-02 | International Business Machines Corporaiton | Secure memory caching structures for data, integrity and version values |
US7363442B2 (en) * | 2004-11-12 | 2008-04-22 | International Business Machines Corporation | Separate handling of read and write of read-modify-write |
JP2006185407A (ja) | 2004-12-01 | 2006-07-13 | Matsushita Electric Ind Co Ltd | ピーク電力制御方法および装置 |
JP2006195569A (ja) | 2005-01-11 | 2006-07-27 | Sony Corp | 記憶装置 |
US7440215B1 (en) | 2005-03-30 | 2008-10-21 | Emc Corporation | Managing disk drive spin up |
US7444526B2 (en) | 2005-06-16 | 2008-10-28 | International Business Machines Corporation | Performance conserving method for reducing power consumption in a server system |
US7562234B2 (en) | 2005-08-25 | 2009-07-14 | Apple Inc. | Methods and apparatuses for dynamic power control |
US20070211551A1 (en) | 2005-11-25 | 2007-09-13 | Yoav Yogev | Method for dynamic performance optimization conforming to a dynamic maximum current level |
US7609564B2 (en) * | 2005-12-31 | 2009-10-27 | Intel Corporation | Systems and techniques for non-volatile memory buffering |
US7793059B2 (en) | 2006-01-18 | 2010-09-07 | Apple Inc. | Interleaving policies for flash memory |
US7587559B2 (en) | 2006-08-10 | 2009-09-08 | International Business Machines Corporation | Systems and methods for memory module power management |
US20080107275A1 (en) * | 2006-11-08 | 2008-05-08 | Mehdi Asnaashari | Method and system for encryption of information stored in an external nonvolatile memory |
US7953954B2 (en) * | 2007-01-26 | 2011-05-31 | Micron Technology, Inc. | Flash storage partial page caching |
JP4347351B2 (ja) * | 2007-02-15 | 2009-10-21 | 富士通株式会社 | データ暗号化装置、データ復号化装置、データ暗号化方法、データ復号化方法およびデータ中継装置 |
JP4356765B2 (ja) * | 2007-04-20 | 2009-11-04 | ソニー株式会社 | 情報処理装置および方法、並びにプログラム |
US7895397B2 (en) * | 2007-09-12 | 2011-02-22 | Intel Corporation | Using inter-arrival times of data requests to cache data in a computing environment |
US20120191982A1 (en) * | 2007-12-06 | 2012-07-26 | Levin Timothy Evert | Non-volatile storage of encrypted data |
US20090313416A1 (en) * | 2008-06-16 | 2009-12-17 | George Wayne Nation | Computer main memory incorporating volatile and non-volatile memory |
US7961544B2 (en) | 2008-08-05 | 2011-06-14 | Sandisk Il Ltd. | Storage system and method for managing a plurality of storage devices |
JP5489434B2 (ja) | 2008-08-25 | 2014-05-14 | 株式会社日立製作所 | フラッシュメモリ搭載ストレージ装置 |
US8601213B2 (en) * | 2008-11-03 | 2013-12-03 | Teradata Us, Inc. | System, method, and computer-readable medium for spool cache management |
US8386808B2 (en) | 2008-12-22 | 2013-02-26 | Intel Corporation | Adaptive power budget allocation between multiple components in a computing system |
CN101498994B (zh) * | 2009-02-16 | 2011-04-20 | 华中科技大学 | 一种固态硬盘控制器 |
US8566510B2 (en) * | 2009-05-12 | 2013-10-22 | Densbits Technologies Ltd. | Systems and method for flash memory management |
US8307258B2 (en) | 2009-05-18 | 2012-11-06 | Fusion-10, Inc | Apparatus, system, and method for reconfiguring an array to operate with less storage elements |
US8281227B2 (en) | 2009-05-18 | 2012-10-02 | Fusion-10, Inc. | Apparatus, system, and method to increase data integrity in a redundant storage system |
US20110173462A1 (en) | 2010-01-11 | 2011-07-14 | Apple Inc. | Controlling and staggering operations to limit current spikes |
US20110252187A1 (en) * | 2010-04-07 | 2011-10-13 | Avigdor Segal | System and method for operating a non-volatile memory including a portion operating as a single-level cell memory and a portion operating as a multi-level cell memory |
US9235530B2 (en) * | 2010-05-31 | 2016-01-12 | Sandisk Technologies Inc. | Method and system for binary cache cleanup |
TWI455136B (zh) * | 2010-07-01 | 2014-10-01 | Silicon Motion Inc | 用來進行資料整形之方法以及相關之記憶裝置及其控制器 |
US8826051B2 (en) | 2010-07-26 | 2014-09-02 | Apple Inc. | Dynamic allocation of power budget to a system having non-volatile memory and a processor |
US8522055B2 (en) | 2010-07-26 | 2013-08-27 | Apple Inc. | Peak power validation methods and systems for non-volatile memory |
US8555095B2 (en) | 2010-07-26 | 2013-10-08 | Apple Inc. | Methods and systems for dynamically controlling operations in a non-volatile memory to limit power consumption |
US20120159042A1 (en) * | 2010-12-21 | 2012-06-21 | Western Digital Technologies, Inc. | Data storage device executing a unitary command comprising two cipher keys to access a sector spanning two encryption zones |
US20120221767A1 (en) * | 2011-02-28 | 2012-08-30 | Apple Inc. | Efficient buffering for a system having non-volatile memory |
-
2011
- 2011-02-28 US US13/036,460 patent/US20120221767A1/en not_active Abandoned
-
2012
- 2012-02-24 TW TW101106297A patent/TWI503822B/zh not_active IP Right Cessation
- 2012-02-24 TW TW101134054A patent/TWI537952B/zh not_active IP Right Cessation
- 2012-02-27 KR KR1020120019692A patent/KR20120098505A/ko not_active Application Discontinuation
- 2012-02-27 WO PCT/US2012/026752 patent/WO2012118743A1/en active Application Filing
- 2012-02-28 EP EP12157312A patent/EP2492817A3/en not_active Withdrawn
- 2012-02-28 CN CN201210114701.9A patent/CN102750226B/zh active Active
- 2012-02-29 KR KR1020120020909A patent/KR101624007B1/ko active IP Right Grant
-
2015
- 2015-04-22 US US14/693,260 patent/US9703700B2/en active Active
-
2017
- 2017-06-22 US US15/630,376 patent/US9996457B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080320209A1 (en) | 2000-01-06 | 2008-12-25 | Super Talent Electronics, Inc. | High Performance and Endurance Non-volatile Memory Based Storage Systems |
KR100953252B1 (ko) | 2007-02-15 | 2010-04-16 | 후지쯔 가부시끼가이샤 | 데이터 암호화 장치, 데이터 복호화 장치 및 데이터 암호화 방법 |
US20100031056A1 (en) | 2007-07-27 | 2010-02-04 | Hitachi, Ltd. | Storage system to which removable encryption/decryption module is connected |
US20100174847A1 (en) | 2009-01-05 | 2010-07-08 | Alexander Paley | Non-Volatile Memory and Method With Write Cache Partition Management Methods |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11461238B2 (en) | 2019-08-28 | 2022-10-04 | SK Hynix Inc. | Storage device, memory controller, and method for fetching write commands from submission queues to perform full page writes |
Also Published As
Publication number | Publication date |
---|---|
CN102750226A (zh) | 2012-10-24 |
KR20120098505A (ko) | 2012-09-05 |
EP2492817A3 (en) | 2012-11-14 |
TW201306034A (zh) | 2013-02-01 |
US20150227460A1 (en) | 2015-08-13 |
TWI503822B (zh) | 2015-10-11 |
US20120221767A1 (en) | 2012-08-30 |
US20170286290A1 (en) | 2017-10-05 |
TWI537952B (zh) | 2016-06-11 |
CN102750226B (zh) | 2015-11-25 |
EP2492817A2 (en) | 2012-08-29 |
US9996457B2 (en) | 2018-06-12 |
KR20120098547A (ko) | 2012-09-05 |
US9703700B2 (en) | 2017-07-11 |
WO2012118743A1 (en) | 2012-09-07 |
TW201250691A (en) | 2012-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101624007B1 (ko) | 비휘발성 메모리를 갖는 시스템에 대한 효율적인 버퍼링 | |
CN107346290B (zh) | 使用并行化日志列表重放分区逻辑到物理数据地址转换表 | |
US8595414B2 (en) | Selectively combining commands for a system having non-volatile memory | |
US10817415B2 (en) | Data storage device and method including device or controller-based space allocation and host-based mapping table searching | |
KR102466412B1 (ko) | 스토리지 장치 및 스토리지 장치의 동작 방법 | |
US10802733B2 (en) | Methods and apparatus for configuring storage tiers within SSDs | |
JP5907255B2 (ja) | Lsb及びmsbページにおける選択的データ記憶 | |
US8171239B2 (en) | Storage management method and system using the same | |
US8452911B2 (en) | Synchronized maintenance operations in a multi-bank storage system | |
US9213645B2 (en) | Command aware partial page programming | |
US20160062885A1 (en) | Garbage collection method for nonvolatile memory device | |
US9189383B2 (en) | Nonvolatile memory system and data processing method | |
TW201227741A (en) | Data storage device, user device and data write method | |
US10481979B2 (en) | Storage system, computing system, and methods thereof | |
CN102279712A (zh) | 一种适用于互联网存储系统的存储控制方法、系统和装置 | |
CN109408417A (zh) | 存储装置的地址映射方法和操作方法 | |
KR20220087782A (ko) | 메모리 컨트롤러 및 이를 포함하는 저장 장치 | |
US8972650B2 (en) | Methods and systems for performing efficient page reads in a non-volatile memory | |
US11520519B2 (en) | Storage device and method of operating the same | |
US8544424B2 (en) | System, controller and method thereof for transmitting and distributing data stream | |
US20120198126A1 (en) | Methods and systems for performing selective block switching to perform read operations in a non-volatile memory | |
CN116108508A (zh) | 固态驱动器的操作方法、数据存储装置及其操作方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A107 | Divisional application of patent | ||
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20190417 Year of fee payment: 4 |