KR20230162440A - 스토리지 장치, 스토리지 장치의 동작 방법 및 스토리지 장치를 포함하는 전자 시스템 - Google Patents

스토리지 장치, 스토리지 장치의 동작 방법 및 스토리지 장치를 포함하는 전자 시스템 Download PDF

Info

Publication number
KR20230162440A
KR20230162440A KR1020220062337A KR20220062337A KR20230162440A KR 20230162440 A KR20230162440 A KR 20230162440A KR 1020220062337 A KR1020220062337 A KR 1020220062337A KR 20220062337 A KR20220062337 A KR 20220062337A KR 20230162440 A KR20230162440 A KR 20230162440A
Authority
KR
South Korea
Prior art keywords
completion
host
entry
storage device
cache
Prior art date
Application number
KR1020220062337A
Other languages
English (en)
Inventor
박준범
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020220062337A priority Critical patent/KR20230162440A/ko
Priority to CN202310552434.1A priority patent/CN117093517A/zh
Priority to US18/199,765 priority patent/US20230409495A1/en
Publication of KR20230162440A publication Critical patent/KR20230162440A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/18Handling requests for interconnection or transfer for access to memory bus based on priority control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • G06F13/26Handling requests for interconnection or transfer for access to input/output bus using interrupt with priority control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

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

Abstract

스토리지 장치, 스토리지 장치의 동작 방법 및 스토리지 장치를 포함하는 전자 시스템이 개시된다. 본 개시의 실시예에 따른 스토리지 장치는, 비휘발성 메모리 장치 및 상기 비휘발성 메모리 장치를 제어하며, 호스트로부터의 커맨드를 실행하고 상기 호스트의 메모리 및 적어도 하나의 캐시 중 상기 커맨드에 대한 완료 엔트리가 기입될 위치를 선택하고, 상기 메모리 및 상기 적어도 하나의 캐시 중 상기 완료 엔트리가 기입될 위치를 나타내는 인터럽트 벡터 넘버를 포함하는 인터럽트를 상기 호스트로 전달하는 스토리지 컨트롤러를 포함할 수 있다.

Description

스토리지 장치, 스토리지 장치의 동작 방법 및 스토리지 장치를 포함하는 전자 시스템{Storage device, operating method of storage device and electronic system including storage device}
본 개시의 기술적 사상은 스토리지 시스템에 관한 것이며, 더욱 상세하게는, 완료 큐를 호스트 시스템의 캐시에 포스팅하는 스토리지 장치, 이의 동작 방법 및 스토리지 장치를 포함하는 전자 시스템에 관한 것이다.
직접 캐시 액세스(Direct Cache Access: DCA)는 입출력 장치로부터의 데이터가 호스트 시스템의 캐시 내에 배치되는 것을 허용하는 정보 처리 시스템 프로토콜이다. DCA는 데이터를 호스트 시스템의 메모리 내에 배치하기 전에, 배치하는 대신에 또는 배치하는 동시에 데이터를 호스트 시스템의 캐시 내에 배치하고, 프리페치 힌트(Prefetch Hint)를 이용하여, 프로세서 캐시 내로의 데이터 배치를 트리거함으로써 시스템 메모리의 액세스 대기 시간 및 대역폭 제한들을 방지하는 데 이용될 수 있다.
본 개시의 기술적 사상은, 완료 엔트리를 직접 호스트 시스템 내의 캐시에 포스팅하고, 캐시된 완료 엔트리를 나타내는 인터럽트를 발생하는 스토리지 장치, 이의 동작 방법 및 스토리지 장치를 포함하는 전자 시스템을 데 있다.
본 개시의 예시적 실시예에 따른, 스토리지 장치는, 비휘발성 메모리 장치 및 상기 비휘발성 메모리 장치를 제어하며, 호스트로부터의 커맨드를 실행하고 상기 호스트의 메모리 및 적어도 하나의 캐시 중 상기 커맨드에 대한 완료 엔트리가 기입될 위치를 선택하고, 상기 메모리 및 상기 적어도 하나의 캐시 중 상기 완료 엔트리가 기입될 위치를 나타내는 인터럽트 벡터 넘버를 포함하는 인터럽트를 상기 호스트로 전달하는 스토리지 컨트롤러를 포함할 수 있다.
본 개시의 기술적 사상에 따른 스토리지 장치, 이의 동작 방법 및 스토리지장치를 포함하는 전자 시스템에 따르면, 스토리지 장치가 호스트로부터 수신한 커맨드를 실행하여 완료 엔트리를 생성하고, 완료 엔트리를 처리하기 위한 시간에 따른 레이턴시를 기초로 호스트 내에 메모리 및 적어도 하나의 캐시 중 완료 엔트리가 포스팅 될 위치를 선택하고, 완료 엔트리를 선택된 위치에 포스팅하며, 완료 엔트리가 선택된 위치를 나타내는 위치 정보를 포함하는 인터럽트를 발생할 수 있다. 이에 따라, 호스트가 완료 엔트리의 위치 정보를 기초로 완료 엔트리 처리의 우선 순위를 조정함으로써 완료 엔트리들의 처리에 있어 병목현상이 발생하는 것을 방지하고, 입출력에 대하여 세분화된 응답 시간을 제공할 수 있다. 따라서, 스토리지 장치 및 스토리지 장치를 포함하는 전자 시스템의 처리 성능이 향상될 수 있다.
도 1은 본 개시의 실시예에 따른 전자 시스템을 개략적으로 나타내는 블록도이다.
도 2는 본 개시의 실시예에 따른 전자 시스템의 일 예를 나타내는 블록도이다.
도 3은 본 개시의 실시예에 따른 호스트에 구비되는 제출 큐 및 완료 큐를 나타낸다.
도 4a 및 도 4b는 본 개시의 실시예에 따른 스토리지 장치의 완료 엔트리 포스팅 및 인터럽트 전송 방법을 나타낸다.
도 5 본 개시의 실시예에 따른 스토리지 장치의 완료 엔트리 포스팅 및 인터럽트 전송 방법을 나타낸다.
도 6a 및 도 6b는 본 개시의 실시예에 따른 스토리지 컨트롤러를 개략적으로 나타내는 블록도이다.
도 7은 본 개시의 실시예에 따른 스토리지 장치의 동작을 나타내는 흐름도이다.
도 8은 본 개시의 실시예에 따른 스토리지 장치의 동작을 나타내는 흐름도이다.
도 9는 본 개시의 실시예에 따른 스토리지 장치에서 전송하는 완료 엔트리 패킷을 예시적으로 나타낸다.
도10은 본 개시의 실시예에 따른 스토리지 장치에서 전송하는 인터럽트 패킷을 예시적으로 나타낸다.
도 11은 본 개시의 실시예에 따른 호스트의 소프트웨어 구조를 개략적으로 나타낸다.
도 12a는 본 개시의 실시예에 따른 전자 시스템의 완료 엔트리 처리를 나타낸다.
도 12b는 비교예에 따른 전자 시스템의 완료 엔트리 처리를 나타내다.
도 13은 본 개시의 실시예에 따른 SSD 시스템을 나타내는 블록도이다.
도 14는 본 개시의 실시예에 따른 컴퓨팅 시스템을 나타내는 블록도이다.
이하, 첨부한 도면을 참조하여 본 개시의 실시예에 대해 상세히 설명한다.
도 1은 본 개시의 실시예에 따른 전자 시스템을 개략적으로 나타내는 블록도이다.
전자 시스템(10)은 전자 장치에 내장(embedded)되거나 또는 전자 장치로 구현될 수 있다. 전자 장치는 예를 들어, PC(personal computer), 데이터 서버, UMPC(Ultra Mobile PC), 워크스테이션, 넷북(net-book), 네트워크-결합 스토리지(network-attached storage, NAS), 스마트 텔레비전(smart television), IoT (Internet of Things) 장치, 또는 휴대용 전자 기기로 구현될 수 있다. 휴대용 전자 기기는, 랩탑 컴퓨터, 이동 전화기, 스마트폰, 태블릿 PC, PDA(personal digital assistant), EDA(enterprise digital assistant), 디지털 스틸 카메라, 디지털 비디오 카메라, 오디오 장치, PMP(portable multimedia player), PND(personal navigation device), MP3 플레이어, 휴대용 게임 콘솔(handheld game console), e-북(e-book), 웨어러블 기기 등일 수 있다.
도 1을 참조하면, 전자 시스템(10)은 호스트(100) 및 스토리지 장치(200)를 포함할 수 있다.
호스트(100)(또는 호스트 시스템)는 전자 시스템(10)의 전반적인 동작을 관리한다. 호스트(100)는 스토리지 장치(200)에 데이터를 저장하고, 스토리지 장치(200)로부터 데이터를 독출할 수 있다. 호스트(100)는 스토리지 장치(200)에 커맨드(CMD)을 전송할 수 있다. 예컨대 호스트(100)는 스토리지 장치(200)에 기입 커맨드 및 기입 데이터를 전송하거나 또는 스토리지 장치(200)에 독출 커맨드를 전송할 수 있다. 스토리지 장치(200)는 커맨드(CMD)을 실행하고, 실행 완료에 따른 완료 엔트리(CE)를 호스트(100)로 전송할 수 있다. 완료 엔트리(CE)는 커맨드(CMD)가 성공적으로 실행 완료되었는지 여부 또는 커맨드(CMD)를 실행할 때 에러가 발생하였는지 여부와 같은 커맨드(CMD)의 프로세싱에 대한 정보를 포함할 수 있다. 완료 엔트리(CE)는 호스트(100)의 메모리(120) 및/또는 캐시(CC)에 포스팅될 수 있다. 스토리지 장치(200)는 또한, 완료 엔트리(CE)의 포스팅을 알리는 인터럽트(INT)를 호스트(100)로 전송할 수 있다.
호스트(100)는 프로세서(110), 메모리(120), 및 인터페이스 회로(130)를 포함할 수 있다. 프로세서(110), 메모리(120), 및 인터페이스 회로(130)는 시스템 버스(140)를 통해 통신할 수 있다.
프로세서(110)는 CPU(Central Processing Unit), 프로세서, 마이크로프로세서 또는 어플리케이션 프로세서(Application Processor, AP) 등으로 구현될 수 있으며, 실시예에 있어서, 프로세서(110)는 시스템 온 칩(System-On-a-Chip, SoC)으로 구현될 수 있다.
프로세서(110)는 메모리(120)에 로드되는 다양한 소프트웨어(응용 프로그램, 운영 체제, 파일 시스템, 장치 드라이버)를 실행할 수 있다. 프로세서(110)는 동종 또는 이종의 멀티 코어를 포함할 수 있다.
프로세서(110)는 캐시(CC)를 포함할 수 있으며, 예를 들어, 캐시(CC)는 멀티 코어 각각에 전용되는 캐시(예컨대 L2 캐시) 및 멀티 코어에 공유되는 캐시(예컨대 L3 캐시)를 포함할 수 있다.
메모리(120)에는 프로세서(110)에서 처리될 응용 프로그램이나 데이터가 로드될 수 있다. 메모리(120)에는 프로세서(110)의 처리에 따라 생성되는 데이터가 임시 저장될 수 있다. 메모리(120)는 시스템 메모리로 지칭될 수 있다. 메모리(120)는 휘발성 메모리 또는 비휘발성 메모리로 구현될 수 있다. 휘발성 메모리는 DRAM(dynamic Random Access Memory), 및 SRAM(Static RAM)을 포함할 수 있다. 비휘발성 메모리는 ReRAM, PRAM, MRAM 등과 같은 저항성 메모리를 포함할 수 있다.
본 개시의 실시예에 따른 전자 시스템(10)에 따르면, 호스트(100)의 메모리(120)에 제출 큐(SQ)가 구비되고, 메모리(120) 및 캐시(CC) 각각에 제출 큐(SQ)에 페어링되는 완료 큐들(CQa, CQb)이 구비될 수 있다. 여기서, 완료 큐들(CQa, CQb)은 물리적으로 서로 다른 위치, 예컨대 메모리(120) 및 캐시(CC)에 구비되지만, 모두 하나의 제출 큐(SQ)에 페어링되는 바, 논리적으로 하나의 완료 큐에 해당될 수 있다. 실시예에 있어서, 완료 큐들(CQa, CQb) 각각에 인터럽트 벡터 넘버가 할당될 수 있다.
하나의 제출 큐(SQ)에 페어링되는 완료 큐(CQa, CQb)는 호스트(100)에 의해서 기입되는 대기열로서, 스토리지 장치(200)에 전송할 커맨드들에 대응할 수 있다. 제출 큐(SQ)는 호스트(100)에 의해 기입 또는 공급되고, 스토리지 장치(200)에 의해서 소비될 수 있다. 완료 큐(CQ)는 스토리지 장치(200)에 의해서 기입되는 완료 엔트리들(QE)의 대기열로서 호스트(100)에 의해서 요청된 커맨드의 완료 여부를 나타낸다. 완료 큐(CQa, CQb)는 스토리지 장치(200)에 의해서 기입되고, 호스트(100)에 의해서 소비될 수 있다.
초기화 단계(phase)에서, 호스트(100)는 하나 이상의 제출 큐 및 이에 페어링되는 하나 이상의 완료 큐를 생성할 수 있다. 예를 들어, 제출 큐에 대하여 하나의 완료 큐가 페어링되거나 또는 다수의 제출 큐(SQ)에 대하여 하나의 완료 큐가 페어링될 수 있다.
제출 큐(SQ) 및 완료 큐(SQa)는 메모리(120)의 영역을 할당받고, 완료 큐(SQb)는 캐시(CC)의 영역을 할당 받을 수 있다. 호스트(100)는 각각의 큐에 대한 베이스 어드레스, 뎁스(depth) 등과 같은 큐 정보를 스토리지 장치(200)로 전송함으로써, 스토리지 장치(200)에 제출 큐(SQ) 및 완료 큐들(CQa, CQb)을 통지할 수 있다. 스토리지 장치(200)는 큐 정보를 기초로 제출 큐(SQ)로부터 커맨드(CMD)를 패치하거나, 완료 큐들(CQa, CQb)에 완료 엔트리(CE)를 포스팅할 수 있다.
인터페이스 회로(130)는 호스트(100)와 스토리지 장치(200) 사이에서 물리적인 연결을 제공한다. 인터페이스 회로(130)의 프로토콜로는 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI) 중 적어도 어느 하나일 수 있다.
인터페이스 회로(130)는 호스트(100)에서 발행하는 다양한 접근 요청에 대응하는 커맨드(CMD), 어드레스, 데이터 등을 스토리지 장치(200)와의 프로토콜에 따라 변환하고, 변환된 커맨드(CMD), 어드레스, 데이터 등을 스토리지 장치(200)로 제공할 수 있다.
인터페이스 회로(130)는 스토리지 장치(200)로부터 다양한 응답 신호, 예컨대 완료 엔트리(CE) 및 인터럽트(INT)를 수신하고, 완료 엔트리(CE) 및 인터럽트(INT)를 호스트(100) 내의 구성들, 예컨대 프로세서(110), 캐시(CC) 및 메모리(120) 중 대응하는 구성에 제공할 수 있다. 예를 들어, 인터페이스 회로(130)는 완료 엔트리(CE)를 메모리(120) 내의 완료 큐(CQa) 및/또는 캐시(CC) 내의 완료 큐(CQb)로 전송할 수 있다. 예를 들어, 인터페이스 회로(130)는 인터럽트(INT)를 프로세서(110)에 구비되는 코어에 제공할 수 있다.
스토리지 장치(200)는 호스트(100)로부터 제공되는 커맨드(CMD)에 응답하여 비휘발성 메모리 장치(220, NVM)에 접근하거나, 다양한 요청된 동작을 수행할 수 있다. 스토리지 장치(200)는 커맨드(CMD)를 실행하고, 커맨드(CMD)의 실행이 완료되면, 완료 엔트리(CE) 및 인터럽트(INT)를 생성하고, 이들을 설정된 프로토콜에 따라 호스트(100)로 전송할 수 있다.
스토리지 장치(200)는, 스토리지 컨트롤러(210), 및 비휘발성 메모리(220)를 포함할 수 있다. 실시예에 있어서, 스토리지 장치(200)는 PCIe 인터페이스의 Cache Direct Access(CDA)를 사용하는 NVMe(non-volatile memory express) 기반의 SSD(Solide State Driver)일 수 있다.
비휘발성 메모리(220)는 데이터를 저장할 수 있다. 비휘발성 메모리(220)는호스트(100)로부터 제공되는 데이터를 저장할 수 있다. 비휘발성 메모리(220)는 스토리지 장치(200)의 전원이 차단되어도 저장된 데이터를 유지할 수 있는 비휘발성의 메모리 셀들을 포함하는 메모리 셀 어레이를 포함할 수 있으며, 메모리 셀 어레이는 복수의 메모리 블록으로 구분될 수 있다. 복수의 메모리 블록은 메모리 셀들이 2차원적으로 동일한 평면(또는 레이어)에 배치되는 2차원 수평 구조 또는 비휘발성 메모리 셀들이 3차원적으로 배치되는 3차원(3D) 수직 구조를 가질 수 있다. 메모리 셀은 한 비트의 데이터를 저장하는 싱글 레벨 셀(single level cell, SLC) 또는 두 비트 이상의 데이터를 저장하는 멀티 레벨 셀(multi-level cell, MLC)일 수 있다. 그러나, 이에 제한되는 것은 아니며, 각 메모리 셀은 3 비트 데이터를 저장하는 트리플 레벨 셀(triple level cell, TLC) 또는 4비트 데이터를 저장하는 쿼드러플 레벨 셀(quadruple level cell, QLC) 일 수도 있다.
일부 실시예들에서, 비휘발성 메모리(220)는 각각이 메모리 셀 어레이를 포함하는 복수의 다이들(dies), 또는 복수의 칩들(chips)을 포함할 수 있다. 예를 들어, 비휘발성 메모리(220)는 복수의 칩들을 포함하고, 복수의 칩들 각각은 복수의 다이들을 포함할 수 있다. 실시예에 있어서, 비휘발성 메모리(220)는 또한, 각각이 복수의 칩들을 포함하는 복수의 채널을 포함할 수 있다.
일 실시예에서, 비휘발성 메모리(220)는 NAND 플래시 메모리 장치일 수 있다. 그러나, 본 개시의 기술적 사상은 이에 한정되지 않고, 비휘발성 메모리(220)는 ReRAM(resistive RAM), PRAM(phase change RAM), MRAM(magnetic RAM)과 같은 저항성 메모리 장치들로 구현될 수 있다.
스토리지 컨트롤러(210)는 스토리지 장치(200)의 전반적인 동작을 제어할 수 있다. 스토리지 장치(200)에 전원이 인가되면, 스토리지 컨트롤러(210)는 펌웨어(firmware)를 실행할 수 있다. 비휘발성 메모리(220)가 낸드 플래시 메모리 장치인 경우, 스토리지 컨트롤러(210)는 호스트(100)와 비휘발성 메모리(200) 간의 통신을 제어하기 위한 플래시 변환 레이어(Flash Translation Layer, FTL)와 같은 펌웨어를 실행할 수 있다. 예를 들어, 스토리지 컨트롤러(210)는 호스트로부터 데이터 및 논리 블록 어드레스(Logical Block Address, LBA)를 수신할 수 있고, 논리 블록 어드레스(LBA)와 물리 블록 어드레스(Physical Block Address, PBA)를 연결할 수 있다. 물리 블록 어드레스(PBA)는 비휘발성 메모리(220)에 포함되는 메모리 셀들 중 데이터가 저장될 메모리 셀의 주소를 나타낼 수 있다.
스토리지 컨트롤러(210)는 호스트(100)로부터의 독출/기입을 요청하는 커맨드(CMD)에 응답하여 비휘발성 메모리(220)에 저장된 데이터를 독출하도록 또는 비휘발성 메모리(220)에 데이터를 프로그램하도록 비휘발성 메모리(220)를 제어할 수 있다.
실시예에 있어서, 스토리지 컨트롤러(210)는 CQ 스티어링 모듈(CQSM)을 포함할 수 있다. CQ 스티어링 모듈(CQSM)은 커맨드(CMD)의 실행이 완료되면, 호스트(100)에 구비되는 메모리(120) 및 적어도 하나의 캐시(CC) 중 커맨드(CMD)에 따른 완료 엔트리(CE)가 기입(저장)될 위치(예컨대 포스팅 위치)를 선택할 수 있다. 실시예에 있어서, CQ 스티어링 모듈(CQSM)은 완료 엔트리(CE)를 처리하기 위한 시간에 따른 레이턴시를 기초로 메모리(120) 및 적어도 하나의 캐시(CC) 중 완료 엔트리(CE)가 포스팅될 위치를 선택할 수 있다.
스토리지 컨트롤러(210)는 완료 엔트리(CQ)를 선택된 위치에 배치된 완료 큐(CQa 또는 CQb)에 포스팅하며, 선택된 위치를 나타내는 정보, 예컨대 캐싱 정보를 포함하는 인터럽트(INT)를 호스트(100)로 전송할 수 있다. 완료 엔트리(CQ) 및 인터럽트(INT)는 호스트(100)와 스토리지 장치(200) 간에 설정된 통신 프로토콜에 기초하여 생성되는 패킷으로 구현될 수 있으며, 완료 엔트리(CQ)를 포함하는 패킷은 완료 엔트리 패킷으로, 인터럽트(INT)를 포함하는 패킷은 인터럽트 패킷으로 지칭될 수 있다. 완료 엔트리 패킷은 완료 엔트리(CE)가 기입되는 위치를 나타내는 위치 정보를 포함할 수 있으며, 인터럽트 패킷은 완료 엔트리(CE)가 포스팅되는 완료 큐(CQa 또는 CQb)에 할당된 인터럽트 벡터 넘버를 캐싱 정보로서 포함할 수 있다.
스토리지 컨트롤러(210)가 메모리(120) 및 적어도 하나의 캐시(CC) 중 완료 엔트리(CE)가 포스팅 될 위치를 선택하고, 완료 엔트리(CE)를 선택된 위치에 구비되는 완료 큐(CQa, CQb)에 포스팅하고, 선택된 위치를 나타내는 인터럽트(INT)를 생성하는 구체적인 동작은 이하 도 2내지 도 10을 참조하여 상세하게 설명하기로 한다.
호스트(100)는 인터럽트 벡터 넘버, 다시 말해서 완료 엔트리(CE)가 저장된 위치를 나타내는 위치 정보를 기초로 완료 엔트리 처리의 우선 순위를 조정함으로써 완료 엔트리들의 처리에 있어 병목현상이 발생하는 것을 방지하고, 입출력에 대하여 세분화된 응답 시간을 제공하고, 입출력 레이턴시를 최적화할 수 있다.
도 2는 본 개시의 실시예에 따른 전자 시스템의 일 예를 나타내는 블록도이다.
도 2를 참조하면, 전자 시스템(10a)은 호스트(100a) 및 스토리지 장치(200a)를 포함할 수 있으며, 호스트(100a)는 프로세서(110a), 메모리(120a) 및 루트 컴플렉스(130a)를 포함할 수 있다. 실시예에 있어서 프로세서(110a), 메모리(120a) 및 루트 컴플렉스(130a)는 별개의 반도체 칩으로 구현되거나 또는 실시예에 있어 프로세서(110a) 및 메모리(120a), 또는 프로세서(110a) 및 루트 컴플렉스(130a)는 하나의 반도체 칩에 집적될 수 있다. 실시예에 있어서 호스트(100a)와 스토리지 장치(200a)는 PCIe 인터페이스 기반의 버스를 통해 통신할 수 있다.
프로세서(110a)는 복수의 코어, 예컨대 제1 코어(111) 및 제2 코어(112)를 포함할 수 있으며, 제1 코어(111) 및 제2 코어(112) 각각은 전용 캐시, 예컨대 L2 캐시(11, 12)를 각각 포함할 수 있다. 제1 코어(111) 및 제2 코어(112)는 공유 캐시, 예컨대 L3 캐시(13)를 공유할 수 있다. L2 캐시들(11, 12) 및 L3 캐시(13) 각각에 완료 큐(CQc, CQd, CQb)가 배치될 수 있다. 다시 말해서 L2 캐시들(11, 12) 및 L3 캐시(13)들 각각의 일부 영역이 완료 큐로 쓰일 수 있다.
메모리(120a)는 예를 들어 DRAM을 포함할 수 있다. 메모리(120a)는 제출 큐(SQ) 및 제출 큐(SQ)에 페어링되는 완료 큐(CQa)를 포함할 수 있다. 여기서 L3 캐시(13)에 구비되는 완료 큐(CQb) 및 L2 캐시(11 또는 12)에 구비되는 완료 큐(CQc 또는 CQd)는 메모리(120a)에 구비되는 완료 큐(CQa)와 함께 하나의 완료 큐로 간주되며, 제출 큐(SQ)에 페어링될 수 있다.
루트 컴플렉스(130a)는 프로세서(110a) 및 메모리(120a)를 포함하는 서브 시스템과 스토리지 장치(200a) 간을 연결해준다. 루트 컴플렉스(130a)와 스토리지 장치(200a) 간의 통신들은 TLP(Transaction Layer Packet)들에 기초하고, NVMe 프로토콜에 따를 수 있다.
루트 컴플렉스(130a)는 호스트(100a)와 스토리지 장치(200a) 간에 전송되는 신호, 예컨대, 완료 엔트리 및 인터럽트를 패킷 형태로 송수신하고, 패킷의 헤더로부터의 해당 신호가 전송될 목적지를 나타내는 위치 정보를 기초로 신호를 목적지로 전송할 수 있다.
루트 콤플렉스(130a)는 제출 큐(SQ)에 기입된 커맨드를 스토리지 장치(200a)에 전송할 수 있다. 루트 컴플렉스(130a)는 스토리지 장치(200a)로부터 완료 엔트리를 수신하고, 완료 엔트리에 포함된 위치 정보를 기초로 L2 캐시(11 또는 12), L3 캐시(13) 및 메모리(120a) 중 위치 정보가 나타내는 위치의 완료 큐로 완료 엔트리를 전송할 수 있다. 완료 엔트리는 해당 위치에 구비되는 완료 큐에 기입될 수 있다.
실시예에 있어서, 루트 컴플렉스(130a)는 완료 엔트리가 L2 캐시(11 또는 12), 또는 L3 캐시(13)에 기입될 때, 다시 말해서, 완료 엔트리가 캐시될 때, 메모리(120a)의 완료 큐(CQa)에도 완료 엔트리를 기입할 수 있다.
또한, 루트 컴플렉스(130a)는 스토리지 장치(200a)로부터 수신되는 인터럽트에 포함된 위치 정보를 기초로 인터럽트를 위치 정보에 대응하는 코어, 예컨대 제1 코어(111) 또는 제2 코어(112)로 전송할 수 있다. 여기서 인터럽트는 완료 엔트리가 저장된 완료 큐에 할당된 인터럽트 벡터 넘버를 포함할 수 있다. 인터럽트에 대응하는 코어는 인터럽트 벡터 넘버를 기초로 완료 엔트리가 캐시되었는지 및 어떤 캐시에 캐시되었는지를 판단할 수 있으며, 인터럽트들의 우선 처리 순서를 결정할 수 있다.
스토리지 장치(200a)는 PCIe 버스 기반의 Cache Direct Memory Access(CDMA)를 사용하는 NVMe SSD(Solide State Drive)로 구현될 수 있다. NVMe는 PCIe 인터페이스를 기반으로 한 저장 장치를 위한 통신 규격이며, PCIe 기반의 SSD를 위한 커맨드 세트 및 기능 세트를 정의할 수 있다. 스토리지 장치(200a)는 호스트(100a)로부터의 커맨드를 실행하고, 커맨드에 따른 동작이 완료되면 완료 엔트리를 생성하고, 메모리(120a) 및 적어도 하나의 캐시, 예컨대 L2 캐시(11 또는 12), 및 L3 캐시(13) 중 완료 엔트리가 기입될 위치를 결정하며, 완료 엔트리를 해당 위치로 포스팅할 수 있다. 또한, 스토리지 장치(200a)는 완료 엔트리가 기입되는 위치의 완료 큐에 할당된 인터럽트 벡터 넘버를 포함하는 인터럽트 벡터를 생성하고, 이를 호스트(100a)로 전송할 수 있다.
도 3은 본 개시의 실시예에 따른 호스트에 구비되는 제출 큐 및 완료 큐를 나타낸다.
도 3을 참조하면, 호스트(100)는 초기화 단계에서 하나 이상의 제출 큐들(SQ1, SQ2) 및 하나 이상의 대응하는 완료 큐들(CQ1, CQ2)을 생성할 수 있다. 예컨대 제1 제출 큐(SQ1)와 제1 완료 큐(CQ1)이 페어링되고, 제2 제출 큐(SQ2)와 제2 완료 큐(CQ2)가 페어링될 수 있다. 도 3에서는 하나의 제출 큐(예를 들어 SQ1)와 하나의 완료 큐(예를 들어 CQ1)가 페어링되는 것으로 도시되었으나 이에 제한되는 것은 아니며, 복수개의 제출 큐와 하나의 완료 큐가 페어링될 수 있다.
제출 큐들(SQ1, SQ2)에는 호스트(100)에서 발생하는 커맨드가 기입되고, 완료 큐들(CQ1, CQ2)에는 스토리지 장치(도 1의 120, 도 2의 120a)가 커맨드를 실행하고, 커맨드의 완료에 기초하여 생성하는 완료 엔트리가 기입될 수 있다.
제1 제출 큐(SQ1) 및 제2 제출 큐(SQ2)는 메모리(110)에 배치될 수 있다. 제1 제출 큐(SQ1)에 페어링되는 제1 완료 큐(CQ1)는 메모리(110)에 배치되는 완료 큐(CQ1a)(이하, 제1 큐로 지칭함) 및 프로세서(120)에 배치되는 적어도 하나의 완료 큐(CQ1b, CQ1c)(이하 제2 큐 및 제3 큐로 각각 지칭함)를 포함할 수 있다. 예를 들어, 제2 큐(CQ1b)는 L3 캐시(13)에 배치되고, 제3 큐(CQ1c)는 코어, 예컨대 제1 코어(도 2의 111)에 전용되는 L2 캐시(11)에 배치될 수 있다. 도 3에서는 L2 캐시(11) 및 L3 캐시(13)에 제2 큐(CQ1b) 및 제3 큐(CQ1c)가 배치되는 것으로 도시되었으나, 이에 제한되는 것은 아니고, L3 캐시(13)에 완료 큐가 배치되거나 또는 L2 캐시(11)에 완료 큐가 배치될 수 있다.
제1 큐(CQ1a), 제2 큐(CQ1b) 및 제3 큐(CQ1c)는 물리적으로 서로 다른 위치에 배치되지만, 제1 제출 큐(SQ1)에 페어링되는 하나의 완료 큐, 즉 제1 완료 큐(CQ1)에 포함될 수 있다.
제2 제출 큐(SQ2)에 페어링되는 제2 완료 큐(CQ2)는 메모리(110)에 배치될 수 있다. 그러나, 이에 제한되는 것은 아니며, 제2 완료 큐(CQ2) 또한 제1 완료 큐(CQ1)과 유사하게 메모리(110) 및 프로세서(120)에 각각 구비되는 적어도 두 개의 큐를 포함할 수 있다.
완료 큐들(CQ1, CQ2) 각각에는 인터럽트 벡터 넘버(IVN)가 할당될 수 있다. 예를 들어 호스트(100)가 초기 단계에서 완료 큐들(CQ1, CQ2)을 생성할 때, 각각의 완료 큐에 인터럽트 벡터 넘버(INV)를 할당할 수 있다. 여기서, 제1 완료 큐(CQ1)에 포함되는 제1 큐(CQ1a), 제2 큐(CQ1b) 및 제3 큐(CQ1c) 각각에 서로 다른 인터럽트 벡터 넘버가 할당될 수 있다. 예를 들어, 도 3에 예시적으로 도시된 바와 같이, 제1 큐(CQ1a), 제2 큐(CQ1b) 및 제3 큐(CQ1c)에 '1', '3' 및 '4'가 인터럽트 벡터 넘버(INV)로서 할당되고, 제2 완료 큐(CQ2a)에 '2'가 인터럽트 벡터 넘버(INV)로서 할당될 수 있다.
실시예에 있어서, 제1 제출 큐(SQ1) 및 제1 완료 큐(CQ1)의 뎁스가 동일하고, 제2 제출 큐(SQ2) 및 제2 완료 큐(CQ2)의 뎁스가 동일할 수 있다. 실시예에 있어서, 제1 완료 큐(CQ1)에 포함되는 제1 큐(CQ1a)의 뎁스는 제1 제출 큐(SQ1)의 뎁스와 동일할 수 있다. 또는 제1 완료 큐(CQ1)에 포함되는 제1 큐(CQ1a), 제2 큐(CQ1b) 및 제3 큐(CQ1c)의 뎁스들의 합이 제1 제출 큐(SQ1)의 뎁스와 동일할 수 있다.
도 1을 참조하여 전술한 바와 같이, 제출 큐들(SQ1, SQ2)은 호스트(100)에 의해서 기입 또는 공급되고, 스토리지 장치(도 1의 200)에 의해서 소비된다. 다시 말해서, 제출 큐들(SQ1, SQ2)의 테일 포인터(TP)는 호스트(100)가 커맨드를 기입함으로써 진전시킬 수 있다. 테일 포인터(TP)의 위치는 스토리지 장치(200)에 전달될 수 있다. 호스트(100)는 새로운 커맨드가 제출 큐(SQ1 또는 SQ2)에 기록되었음을 알리는 테일 도어벨을 스토리지 장치(200)로 전송할 수 있다. 스토리지 장치(200)는 해당 커맨드를 제출 큐(SQ1 또는 SQ2)로부터 패치하고, 실행할 수 있다.
스토리지 장치(200)는 커맨드를 실행하고, 실행 완료를 나타내는 완료 엔트리를 완료 큐(CQ1 또는 CQ2)에 제공함으로써, 제출 큐(SQ1)의 헤드 포인터(HP)를 진전시킬 수 있다.
완료 큐들(CQ1, CQ2)은 스토리지 장치(200)에 의해서 기입되고, 호스트(100)에 의해서 소비된다. 완료 큐들(CQ1, CQ2)의 테일 포인터(TP)는 스토리지 장치(200)가 완료 엔트리를 기입함에 의해서 진전될 수 있다. 스토리지 장치(200)로부터 해당 완료 엔트리에 대응하는 인터럽트가 전송되면, 호스트(100)는 제출 큐(SQ1,SQ2)에 기입한 커맨드에 대한 제반 처리 절차를 완료하기 위한 내부 동작을 수행할 수 있으며, 인터럽트에 응답하여 완료 큐들(CQ1, CQ2)의 헤드 포인터(HP)를 진전시키고, 새로운 헤드 포인터(TP)의 위치를 스토리지 장치(200)로 전송할 수 있다. 이러한 호스트(100)의 스토리지 장치(200)로의 헤드 포인터(HP)의 통지는 스토리지 장치(200)의 도어벨 레지스터(미도시됨)에 기입됨으로써 달성될 수 있다.
프로세서(도 1의 110)가 커맨드의 완료를 처리할 때, 인터럽트(INT)에 응답하여 호스트(100)에 존재하는 완료 큐를 검색할 수 있다. 전술한 바와 같이 완료 큐, 예컨대 제1 완료 큐(CQ1)는 적어도 하나의 캐시, 예컨대 L2 캐시(11), L3 캐시(13) 및 메모리(120)에 배치될 수 있다. 하나의 완료 큐에 하나의 인터럽트 벡터 넘버가 할당될 경우, 코어(도 2의 111)가 인터럽트를 기초로 완료 엔트리가 기입된 완료 큐의 위치를 판단하기 어렵다. 완료 엔트리가 캐시, 예컨대 L2 캐시(11) 또는 L3 캐시(13)에 존재하다가 추출되어 메모리(120)에 위치할 때 처리되면, 커맨드 처리에 추가 레이턴시가 발생하게 된다. 입출력 레이턴시의 증가는 전자 시스템의 성능 저하를 야기할 수 있다.
그러나 본 개시의 실시예에 따른 전자 시스템(도 1의 10)은, 제1 완료 큐(CQ1)에 포함되는 제1 큐(CQ1a), (CQ1b) 및 제3 큐(CQ1c) 각각에 상이한 인터럽트 벡터 넘버를 할당하고, 완료 엔트리가 기입된 큐에 대응하는 인터럽트 벡터 넘버를 포함하는 인터럽트가 프로세서(110)의 코어에 제공되는 바, 코어는 인터럽트 벡터 넘버를 기초로, 완료 엔트리가 저장된 위치를 판단할 수 있으며, 캐싱된 완료 엔트리를 우선적으로 처리할 수 있다. 이에 따라 입출력 레이턴시가 최적화될 수 있다.
도 4a 및 도 4b는 본 개시의 실시예에 따른 스토리지 장치의 완료 엔트리 포스팅 및 인터럽트 전송 방법을 나타낸다.
4a 및 도 4b를 참조하면, 프로세서(110)는 복수의 코어, 예컨대 제1 코어(111) 내지 제N 코어(11N)를 포함하며, 복수의 코어는 전용 캐시, 예컨대 L2 캐시(11)를 포함할 수 있다. 복수의 코어는 L3 캐시(13)를 공유할 수 있다. 4a 및 도 4b에서는 제1 코어(111) 내지 제N 코어(11N)가 하나의 L3 캐시(13)를 공유하는 것으로 도시되었으나, 이에 제한되는 것은 아니며, 프로세서(110)는 복수의 L3 캐시(13)을 포함하고, 제1 코어(111) 내지 제N 코어(11N)중 일부 코어들이 하나의 L캐시(13)를 공유하고, 다른 일부 코어들이 다른 하나의 L3 캐시(13)를 공유할 수 있다.
메모리(120), L3 캐시(13) 및 제1 코어(111)의 L2 캐시(12)에 제1 제출 큐(SQ1)에 페어링되는 제1 완료 큐, 예컨대 제1 큐(CQ1a), 제2 큐(CQ1b), 제3 큐(CQ1c)가 각각 배치될 수 있다.
스토리지 장치(200)는 제1 제출 큐(SQ1)로부터 커맨드, 예컨대 제1 커맨드(CMD1), 제2 커맨드(CMD2) 및 제3 커맨드(CMD3)를 순차적으로 읽어오고, 제1 커맨드(CMD1), 제2 커맨드(CMD2) 및 제3 커맨드(CMD3) 실행할 수 있다.
커맨드의 실행이 완료되면, 스토리지 장치(200)는 완료 엔트리를 완료 큐에 포스팅할 수 있다. 예를 들어, 스토리지 장치(200)는 제1 완료 엔트리(CE1)를 L2 캐시(11)에 배치된 제3 큐(CQ1c)에 포스팅하고, 제2 완료 엔트리(CE2)를 L3 캐시(13)에 배치된 제2 큐(CQ1b)에 포스팅하고, 제3 완료 엔트리(CE3)를 메모리(120)에 배치된 제1 큐(CQ1a)에 포스팅할 수 있다.
실시예에 있어서 도 4b에 도시된 바와 같이, L3 캐시(13)에 배치된 제2 큐(CQ1b) 및 L2 캐시(11)에 배치된 제3 큐(CQ1c)에 완료 엔트리가 포스팅될 때, 해당 완료 엔트리는 메모리(120)에 배치된 제1 큐(CQ1a)에도 포스팅될 수 있다. 예를 들어, 제1 완료 엔트리(CE1)는 제3 큐(CQ1c)에 포스팅 됨과 동시에 또는 이후에 제1 큐(CQ1a)에 포스팅될 수 있다. 다시 말해서, 완료 엔트리가 캐싱될 때, 완료 엔트리는 메모리(120)에도 기입될 수 있다.
스토리지 장치(200)는 완료 엔트리를 완료 큐에 포스팅한 후, 인터럽트를 코어, 예컨대 제1 코어(111)에 전송할 수 있다. 이때, 인터럽트는 대응하는 완료 엔트리의 캐싱 여부 및 어떤 캐시에 캐싱되었는지를 나타내는 캐싱 정보(caching information)를 포함할 수 있다. 예를 들어, 스토리지 장치(200)는 제1 완료 엔트리(CE1)가 L2 캐시에 캐싱되었음을 나타내는 캐싱 정보를 포함하는 제1 인터럽트(INT1)를 제1 코어(111)에 전송하고, 제2 완료 엔트리(CE2)가 L3 캐시에 캐싱되었음을 나타내는 캐싱 정보를 포함하는 제2 인터럽트(INT2)를 제1 코어(111)에 전송하고, 제3 완료 엔트리(CE3)가 캐싱되지 않고, 메모리(120)에 기입되었음을 나타내는 캐싱 정보를 포함하는 제3 인터럽트(INT3)를 제1 코어(111)에 전송할 수 있다.
실시예에 있어서, 캐싱 정보는 인터럽트 벡터 넘버를 포함할 수 있다. 도 3을 참조하여 설명한 바와 같이, 각각의 완료 큐, 예컨대 제1 큐(CQ1a), 제2 큐(CQ1b) 및 제3 큐(CQ1c)에 서로 다른 인터럽트 벡터 넘버가 할당될 수 있다. 인터럽트는 대응하는 완료 엔트리가 기입된 완료 큐에 할당된 인터럽트 벡터 넘버를 포함할 수 있다. 제1 코어(111)는 인터럽트에 포함된 인터럽트 벡터 넘버를 기초로 해당 완료 엔트리가 캐싱되었는지 및 어떤 캐시에 캐싱되었는지 판단할 수 있다.
예를 들어, 제1 인터럽트(INT1)는 제1 완료 엔트리(CE1)가 기입된 L2 캐시(11)의 제3 완료 큐(CQ1c)에 할당된 인터럽트 벡터 넘버를 포함할 수 있으며, 제1 코어(111)는 제1 인터럽트(INT1)의 인터럽트 벡터 넘버를 기초로 제1 완료 엔트리(CE1)가 L2 캐시(11)에 캐시되었다고 판단할 수 있으며, L2 캐시(11)에 구비된 제3 완료 큐(CQ1c)로부터 제1 완료 엔트리(CE1)를 읽을 수 있다.
제1 코어(111)는 인터럽트 벡터 넘버를 기초로 완료 엔트리가 캐싱되었는지 및 어떤 캐시에 캐싱되었는지를 판단하고, 해당 완료 엔트리의 우선 순위를 조정할 수 있다. 예를 들어, 제1 코어(111)는 캐싱된 완료 엔트리, 예컨대 제1 완료 엔트리(CE1) 또는 제2 완료 엔트리(CE2)를 캐싱되지 않은 완료 엔트리, 예컨대 제3 완료 엔트리(CE3)에 우선하여 처리할 수 있다. 캐싱된 완료 엔트리가 처리되지 못하고 축출(eviction)되어 메모리(120)에 위치하게 된 후, 처리될 경우, 완료 엔트리가 캐싱되었을 때 처리되는 경우보다 레이턴시(latency)가 증가할 수 있다. 따라서, 제1 코어(111)는 캐싱된 완료 엔트리를 우선하여 처리함으로써, 대응하는 커맨드의 완료 레이턴시를 감소시킬 수 있다.
설명의 편의를 위하여 도 4a 및 도 4b에는 제1 코어(111)에 관련된 제1 제출 큐(SQ1) 및 제1 완료 큐의 제1 큐(CQ1a), 제2 큐(CQ1b) 및 제3 큐(CQ1c)가 도시되고, 이들과 관련된 완료 엔트리의 포스팅 및 인터럽트에 대하여 상기와 같이 설명하였다. 그러나, 전술한 설명은 다른 코어에 대하여도 적용될 수 있다.
도 5는 본 개시의 실시예에 따른 스토리지 장치의 완료 엔트리 포스팅 및 인터럽트 전송 방법을 나타낸다. 프로세서(110)는 제1 코어(111) 및 제2 코어(112)를 포함하는 것을 가정하기로 한다.
도 5를 참조하면, 제1 제출 큐(SQ1)에 페어링되는 제1 완료 큐의 제1 큐(CQ1a), 제2 큐(CQ1b) 및 제3 큐(CQ1c)가 각각 메모리(120), L3 캐시(13) 및 제1 코어(111)의 L2 캐시(11)에 배치되고, 제2 제출 큐(SQ2)에 페어링되는 제2 완료 큐의 제1 큐(CQ2a) 및 제2 큐(CQ2b)가 각각 메모리(120), 및 L3 캐시(13)에 배치될 수 있다.
스토리지 장치(200)는 제1 제출 큐(SQ1)으로부터 커맨드들(CMD1, CMD2, CMD3)을 순차적으로 읽어오고 실행하며, 커맨드의 실행이 완료됨을 나타내는 완료 엔트리들(CE1,CE2,CE3)을 제1 완료 큐의 제1 큐(CQ1a), 제2 큐(CQ1b), 제3 큐(CQ1c)에 포스팅할 수 있다.
스토리지 장치(200)는 제1 코어(111)에 제1 완료 엔트리(CE1)에 대응하는 제1 인터럽트(IN1a)를 전송하고, 제2 완료 엔트리(CE2)에 대응하는 제2 인터럽트(INT2a)를 전송하고, 제3 완료 엔트리(CE3)에 대응하는 제3 인터럽트(INT3a)를 전송할 수 있다.
제1 코어(111)에 제공되는 제1 인터럽트(INT1a) 및 제2 인터럽트(INT2a)는 캐시 인터럽트(cached interrupt)로서, 제1 완료 엔트리(CE1) 및 제2 완료 엔트리(CE2)가 각각 제1 코어(111)의 L2 캐시(11) 및 L3 캐시(13)에 캐싱되었음을 나타내는 캐싱 정보를 포함할 수 있다. 예를 들어 캐싱 정보는 제2 큐(CQ1b) 및 제3 큐(CQ1c)에 할당된 인터럽트 벡터 넘버일 수 있다. 제1 코어(111)에 제공되는 제3 인터럽트(INT3a)는 논-캐시 인터럽트로서, 제3 완료 엔트리(CE3)가 메모리(120)에 기입되었음을 나타내는 캐싱 정보, 예컨대 인터럽트 벡터 넘버를 포함할 수 있다.
스토리지 장치(200)는또한, 제2 제출 큐(SQ2)로부터 커맨드들(CMD1, CMD2, CMD3)을 순차적으로 읽어오고 실행하며, 커맨드의 실행이 완료됨을 나타내는 완료 엔트리들(CE1,CE2,CE3)을 제2 완료 큐의 제1 큐(CQ2a), 및 제2 큐(CQ2b)에 포스팅할 수 있다.
스토리지 장치(200)는 제2 코어(112)에 제1 완료 엔트리(CE1)에 대응하는 제1 인터럽트(IN1b)를 전송하고, 제2 완료 엔트리(CE2)에 대응하는 제2 인터럽트(INT2b)를 전송하고, 제3 완료 엔트리(CE3)에 대응하는 제3 인터럽트(INT3b)를 전송할 수 있다.
제2 코어(112)에 제공되는 제1 인터럽트(INT1b)는 캐시 인터럽트이며, 제1 완료 엔트리(CE1)가 L3 캐시(13)에 캐싱되었음을 나타내는 캐싱 정보를 포함할 수 있다. 예를 들어, 캐싱 정보는 제2 큐(CQ2b)에 할당된 인터럽트 벡터 넘버일 수 있다. 제2 코어(112)에 제공되는 제2 인터럽트(INT2b) 및 제3 인터럽트(INT3b)는 논-캐시 인터럽트로서, 제2 완료 엔트리(CE2) 및 제3 완료 엔트리(CE3)가 메모리(120)에 기입되었음을 나타내는 캐싱 정보, 예컨대 인터럽트 벡터 넘버를 각각 포함할 수 있다.
도 6a 및 도 6b는 본 개시의 실시예에 따른 스토리지 컨트롤러를 개략적으로 나타내는 블록도이다.
도 6a 및 도 6b를 참조하면, 스토리지 컨트롤러(210)는 프로세서(211), RAM(Random Access Memory)(212), 호스트 인터페이스(213), 버퍼(214) 및 비휘발성 메모리(NVM) 인터페이스(215)를 포함할 수 있다. 이들은 버스(216)를 통해 서로 통신할 수 있다.
프로세서(211)는 중앙 처리 장치나 마이크로 프로세서 등을 포함할 수 있으며, 스토리지 컨트롤러(210)의 전반적인 동작을 제어할 수 있다. 실시예에 있어서, 프로세서(211)는 멀티 코어 프로세서로 구현될 수 있고, 예를 들어, 듀얼 코어 프로세서 또는 쿼드 코어(quad) 프로세서로 구현될 수 있다.
프로세서(211)는 비휘발성 메모리(220)에 대한 읽기/쓰기 동작에 필요한 다양한 제어 정보를 호스트 인터페이스(213) 및 NVM 인터페이스(215)의 레지스터들에 전달할 수 있다. 프로세서(211)는 스토리지 컨트롤러(210)의 다양한 제어 동작을 위해 제공되는 펌웨어에 따라 동작할 수 있다. 예를 들면, 프로세서(211)는 비휘발성 메모리(220)를 관리하기 위한 가비지 컬렉션(Garbage collection)이나, 주소 맵핑, 웨어 레벨링 등을 수행하기 위한 플래시 변환 계층(FTL)을 실행할 수 있다.
RAM(212)은 동작 메모리, 버퍼 메모리, 캐시 메모리 등으로 사용될 수 있다. 예를 들어, RAM(211)은 DRAM, SRAM과 같은 휘발성 메모리, 또는 PRAM, FRAM, ReRAM 과 같은 비휘발성 메모리로 구현될 수도 있다. RAM(212)은 프로세서(211)에 의해 실행되는 소프트웨어 및/또는 펌웨어를 로딩할 수 있다. 예를 들어, 스토리지 장치(200)의 부팅 시에, 소프트웨어 및/또는 펌웨어가 비휘발성 메모리(220)로부터 RAM(212)으로 로드될 수 있다.
버퍼(214)는 비휘발성 메모리(220)에 기입될 데이터 또는 비휘발성 메모리(220)로부터 독출된 데이터를 임시 저장할 수 있다. 버퍼(214)는 DRAM, SRAM과 같은 휘발성 메모리, 또는 PRAM, FRAM, ReRAM 과 같은 비휘발성 메모리로 구현될 수도 있다.
NVM 인터페이스(215)는 스토리지 컨트롤러(210)와 비휘발성 메모리(220) 사이의 인터페이스를 제공할 수 있다. 실시예에 있어서, NVM 인터페이스(215)의 개수는 스토리지 장치(200)에 포함된 비휘발성 메모리 칩의 개수 또는, 스토리지 컨트롤러(210)와 비휘발성 메모리(220) 사이의 채널들의 개수에 대응할 수 있다.
호스트 인터페이스(213)는 프로세서(211)의 제어에 따라, 호스트(100)와 통신하도록 구성된다. 호스트 인터페이스(213)에는 USB (Universal Serial Bus), ATA(AT Attachment), SATA (Serial AT Attachment), PATA(Parallel AT Attachment), SAS (Serial Attached SCSI), HSIC (High Speed Interchip), SCSI (Small Computer System Interface), PCI (Peripheral Component Interconnection), PCIe (PCI express), UFS (Universal Flash Storage), SD (Secure Digital), MMC (MultiMedia Card), eMMC (embedded MMC), DIMM (Dual In-line Memory Module), RDIMM (Registered DIMM), LRDIMM (Load Reduced DIMM) , ESDI(Enhanced Small Disk Interface), IDE(Integrated Drive Electronics) 등과 같은 다양한 인터페이스 방식들 중 적어도 하나가 적용될 수 있다.
호스트 인터페이스(213)는 완료 엔트리를 생성하고, 호스트(100)에 포스팅하며, 완료 엔트리에 대응하는 인터럽트를 호스트(100)로 전송할 수 있다. 실시예에 있어서, 호스트 인터페이스(213)는 완료 엔트리 포스팅 모듈(CEPM), 인터럽트 생성 모듈(IGM) 및 CQ 스티어링 모듈(CQSM)을 포함할 수 있다. 실시예에 있어서, 완료 엔트리 포스팅 모듈(CEPM), 인터럽트 생성 모듈(IGM) 및 CQ 스티어링 모듈(CQSM)은 하드웨어 회로로 구현될 수 있다.
CQ 스티어링 모듈(CQSM)은 커맨드의 실행이 완료되면, 호스트(100)에 구비되는 메모리 및 적어도 하나의 캐시 중 커맨드에 따른 완료 엔트리가 기입될 위치를 선택할 수 있다. 실시예에 있어서, CQ 스티어링 모듈(CQSM)은 완료 엔트리를 처리하기 위한 시간에 따른 레이턴시를 기초로 메모리(120) 및 적어도 하나의 캐시(CC) 중 완료 엔트리(CE)가 포스팅 될 위치를 선택할 수 있다. CQ 스티어링 모듈(CQSM)의 구체적인 동작에 대하여 도 8을 참조하여 후술하기로 한다.
실시예에 있어서, CQ 스티어링 모듈(CQSM)은 소프트웨어, 또는 펌웨어로 구현될 수 있으며, 도 6b에 도시된 바와 같이, 메모리(212)에 로딩될 수 있다. 메모리(212)에 로딩된 인스턱션들을 프로세서(211)가 실행함으로써, 전술한 CQ 스티어링 모듈(CQSM)의 기능이 수행될 수 있다.
완료 엔트리 포스팅 모듈(CEPM)은 CQ 스티어링 모듈(CQSM)이 선택한 위치에구비되는 완료 큐로 완료 엔트리를 전송할 수 있다. 완료 엔트리는 패킷 형태, 예컨대 완료 엔트리 패킷으로서 호스트(100)로 전송될 수 있으며, 완료 엔트리 패킷의 헤더에 완료 엔트리가 기입될 위치, 예컨대 호스트(100)의 메모리(도1 의 120) 및 적어도 하나의 캐시(CC)를 나타내는 위치 정보가 포함될 수 있다.
인터럽트 생성 모듈(IGM)은 완료 엔트리가 포스팅되었음을 알리는 인터럽트를 생성한다. 실시예에 있어서, 인터럽트 생성 모듈(IGM)은 인터럽트 벡터 테이블을 포함할 수 있으며, 인터럽트 벡터 테이블을 기초로 엔트리에 대응하는 인터럽트를 생성할 수 있다. 인터럽트 생성 모듈(IGM)은 메시지 형식의 인터럽트(Message Signaled Interrupt; MSI)를 생성할 수 있다.
인터럽트는 대응하는 완료 엔트리가 기입되는 위치를 나타내는 정보, 예컨대 완료 엔트리가 캐싱되었는지 여부 및 어떤 캐시에 캐싱되었는지 등을 나타내는 캐싱 정보를 포함할 수 있다. 실시예에 있어서, 캐싱 정보는 완료 엔트리가 기입되는 위치에 구비되는 완료 큐에 할당된 인터럽트 벡터 넘버일 수 있다. 인터럽트는 패킷 형태, 예컨대 인터럽트 패킷으로서 호스트(100)로 전송될 수 있으며, 인터럽트 패킷의 헤더에 캐싱 정보가 포함될 수 있다. 인터럽트 패킷의 헤더는 호스트(100)의 프로세서(도 1의 110)에 구비되는 복수의 코어 인터럽트가 전송될 코어를 나타내는 위치 정보를 포함할 수 있다.
도 7은 본 개시의 실시예에 따른 스토리지 장치의 동작을 나타내는 흐름도이다. 도 7의 동작은 스토리지 장치(도 1의 200)의 스토리지 컨트롤러(210)에서 수행될 수 있다.
도 7을 참조하면, 스토리지 컨트롤러(210)는 호스트로부터 커맨드를 수신하고, 수신된 커맨드를 실행할 수 있다(S110). 실시예에 있어서, 스토리지 컨트롤러(210)는 커맨드 큐를 포함할 수 있으며, 커맨드 큐에 커맨드가 기입될 수 있다. 스토리지 컨트롤러(210)는 커맨드의 실행을 스케쥴링할 수 있다.
스토리지 컨트롤러(210)는 커맨드 실행 완료에 따른 완료 엔트리를 생성할 수 있다(S120). 완료 엔트리는 커맨드에 따른 동작이 정상적으로 수행되었는지 여부 등을 포함할 수 있다.
스토리지 컨트롤러(210)는 호스트(도 1의 100)의 메모리 및 적어도 하나의 캐시 중 완료 엔트리의 목적지를 선택할 수있다(S130). 스토리지 컨트롤러(210)는 완료 엔트리(CE)를 처리하기 위한 시간에 따른 레이턴시를 기초로 완료 엔트리의 목적지, 다시 말해서 완료 엔트리가 포스팅 될 위치를 선택할 수 있다.
스토리지 컨트롤러(210)는 완료 엔트리를 선택된 목적지로 포스팅할 수 있다(S140). 스토리지 컨트롤러(210)는 완료 엔트리의 목적지를 나타내는 위치 정보 및 완료 엔트리를 포함하는 완료 엔트리패킷을 호스트(100)로 전송할 수 있다. 예를 들어, 스토리지 컨트롤러(210)는 완료 엔트리 패킷을 호스트(도 2의 100a)의 루트 컴플렉스(도 2의 130a)로 전송하고, 루트 콤플렉스(130a)는 완료 엔트리 패킷의 헤더에 포함된 위치 정보를 기초로 완료 엔트리를 메모리 또는 적어도 하나의 캐시에 기입할 수 있다.
스토리지 컨트롤러(220)는 완료 엔트리에 대응하는 인터럽트를 호스트(100)로 전송할 수 있다(S150). 인터럽트는 헤더에 완료 엔트리가 캐싱되었는지 여부 및 어떤 캐시에 캐싱되었는지를 나타내는 캐싱 정보를 포함하는 인터럽트 패킷으로 구현될 수 있다. 도 1 내지 도 5를 참조하여 설명한 바와 같이, 하나의 완료 큐에 포함되며 서로 다른 위치(예컨대 메모리, L2 캐시, L3 캐시 등)에 구비되는 완료 큐 각각에 인터럽트 벡터 넘버가 할당되며, 캐싱 정보는 완료 엔트리의 목적지에 구비되는 완료 큐에 할당된 인터럽트 벡터 넘버를 포함할 수 있다.
호스트(100)는 인터럽트 벡터 넘버를 기초로 완료 엔트리가 캐싱되었는지 여부 및 완료 엔트리가 우선적으로 처리되어야 하는지 등을 판단하고, 완료 엔트리들의 처리 순서를 결정할 수 있다. 호스트(100)는 인터럽트 벡터 넘버를 기초로 인터럽트 벡터 넘버에 대응하는 완료 큐에 기입된 완료 엔트리를 처리할 수 있다.
도 8은 본 개시의 실시예에 따른 스토리지 장치의 동작을 나타내는 흐름도이다. 구체적으로, 도 8은 스토리지 컨트롤러(도 1의 210)에 구비되는 CQ 스티어링 모듈(도 1의 CQSM)이 완료 엔트리의 목적지를 결정하는 방법을 예시적으로 나타낸다.
도 8을 참조하면, CQ 스티어링 모듈(CQSM)은 완료 엔트리의 커맨드에 대한 수행 시간에 대한 정보를 수집할 수 있다(S210). 예를 들어, 커맨드가 비휘발성 메모리(도1의 220)에 데이터의 기입을 요청할 경우, CQ 스티어링 모듈(CQSM)은 커맨드가 커맨드 큐에 기입되고, 커맨드가 실행되어 데이터가 비휘발성 메모리(220)에 기입 완료되기 까지의 시간에 대한 수행 시간을 확인할 수 있다.
CQ 스티어링 모듈(CQSM)은 커맨드의 수행 시간이 제1 기준 시간 이상인지 여부를 판단할 수 있다(S220). 실시예에 있어서 제1 기준 시간은 커맨드의 타겟 레이턴시를 기초로 설정될 수 있으며, 예를 들어 제1 기준 시간은 타겟 레이턴시의 80%에 해당할 수 있다.
CQ 스티어링 모듈(CQSM)은 수행 시간이 제1 기준 시간 이상이면 완료 엔트리의 목적지를 제1 캐시로 설정할 수 있다(S230). 실시예에 있어서, 제1 캐시는 코어의 전용 캐시, 예컨대 L2 캐시일 수 있다.
CQ 스티어링 모듈(CQSM)은 커맨드의 수행 시간이 제1 기준 시간 미만이면,수행 시간이 제2 기준 시간 이상인지 여부를 판단할 수 있다(S240). 실시예에 있어서 제2 기준 시간은 커맨드의 타겟 레이턴시를 기초로 설정될 수 있으며, 제1 기준 시간보다 짧을 수 있다. 예를 들어 제1 기준 시간은 타겟 레이턴시의 60%에 해당할 수 있다.
CQ 스티어링 모듈(CQSM)은 수행 시간이 제2 기준 시간 이상이면 완료 엔트리의 목적지를 제2 캐시로 설정할 수 있 다(S250). 실시예에 있어서, 제2 캐시는 코어들 간의 공유 캐시, 예컨대 L3 캐시일 수 있다.
CQ 스티어링 모듈(CQSM)은 수행 시간이 제2 기준 시간 미만이면, 완료 엔트리의 목적지를 메모리로 설정할 수 있다(S260). 이와 같이, CQ 스티어링 모듈(CQSM)은 커맨드의 수행 시간을 기초로 완료 엔트리의 목적지를 설정할 수 있으며, 수행 시간이 길수록 커맨드에 대응하는 완료 엔트리가 호스트(도 1의 100)에서 우선 처리될 수 있도록 코어에 근접한 저장 영역, 다시 말해서 코어의 접근 시간이 빠른 캐시를 완료 엔트리의 목적지로 선택할 수 있다. 이에 따라 커맨드의 수행 시간이 길더라도 완료 엔트리가 빠르게 처리될 수 있는 바, 커맨드의 완료 레이턴시(커맨드가 발행된 후, 완료 엔트리가 처리되기 까지의 시간)이 감소될 수 있다.
도 9는 본 개시의 실시예에 따른 스토리지 장치에서 전송하는 완료 엔트리 패킷을 예시적으로 나타낸다. 도 9는 PCIe 기반의 패킷을 나타낸다.
도 9에 도시된 바와 같이, 완료 엔트리 패킷(CEP)은 헤더(HDa) 및 페이로드(PL)를 포함할 수 있다. 페이로드(PL)는 완료 엔트리(CE)를 포함할 수 있다. 헤더(HDa)는 복수의 필드들, 예컨대 제어 필드들, 요청자 ID(RID), 스티어링 태그(ST), 어드레스(ADDR) 및 프로세싱 힌트(PH)를 포함할 수 있다. 제어 필드들은, 헤더의 사이즈, 및 패킷의 성격, 옵션적으로 사용되는 CRC의 존재 여부, 어드레스 처리 방식, 페이로드(PL)의 사이즈 등을 나타내는 제어 값들을 포함할 수 있다. 요청자 ID(ID)는 패킷을 전송한 장치의 ID에 할당된 ID를 포함할 수 있으며, 스티어링 태그(ST)는 프로세서(도 1의 110)에 포함되는 복수의 코어 중, 패킷의 데이터, 예컨대 완료 엔트리(CE)를 처리할 코어를 나타내며, 어드레스(ADDR)는 호스트(도 1의 100) 가 인식하는 패킷의 데이터가 전송될 호스트(도 1의 100) 내의 위치를 나타낸다. 프로세싱 힌트(PH)는 완료 엔트리의 목적지를 나타내는 위치 정보를 포함할 수 있다. 비제한적인 예로서, 프로세싱 힌트(PH)가 '00'으로 설정될 경우, 메모리(도 1의 120)를 나타내고, '01'로 설정되면, L2 캐시를,'10'으로 설정되면 L3 를 나타낼 수 있다. 실시예에 있어서, 헤더(HDa)는 제어 필드들, 요청자 ID(RID), 스티어링 태그(ST), 어드레스(ADDR) 및 프로세싱 힌트(PH)를 포함하는 16바이트의 데이터, 다시 말해서 4개의 더블 워드(DW)로 구현될 수 있다.
도 10은 본 개시의 실시예에 따른 스토리지 장치에서 전송하는 인터럽트 패킷을 예시적으로 나타낸다. 도 10은 PCIe 기반의 패킷을 나타낸다.
도 10에 도시된 바와 같이, 인터럽트 패킷(INTP)은 헤더(HDb) 및 페이로드(PL)를 포함할 수 있다. 헤더(HDb)는 복수의 필드들, 예컨대 제어 필드들, 요청자 ID(RID), 스티어링 태그(ST)를 포함할 수 있다. 실시예에 있어서, 헤더"(HDa)는 8바이트의 데이터로 구현될 수 있다. 스티어링 태그(ST)는 프로세서(도 1의 110)에 포함되는 복수의 코어 중, 패킷의 데이터, 예컨대 인터럽트가 전송될 코어를 나타내며, 페이로드(PL)는 인터럽트 벡터 넘버(INV)를 포함할 수 있다. 스티어링 태그(ST)를 기초로 인터럽트가 해당 코어로 전송되며, 코어는 페이로드(PL)의 인터럽트 벡터 넘버(INV)를 기초로 완료 엔트리가 캐싱되었는지 여부 및 어떤 캐시에 캐싱되었는지를 판단할 수 있다.
도 11은 본 개시의 실시예에 따른 호스트의 소프트웨어 구조를 개략적으로 나타낸다.
도 11을 참조하면, 호스트(100)의 소프트웨어는 간략히 사용자 모드에서 실행되는 응용 프로그램들(121) 및 커널 모드에서 실행되는 커널(122)을 포함할 수 있으며, 커널(122)은, 입출력 시스템(122) 및 디바이스 드라이버(123)를 포함할 수 있다. 도시되지 않았으나, 파일 시스템이 커널 모드에서 실행될 수 있다. 호스트(100)의 소프트웨어는 메모리(도 1의 120)에 로드된 후에 프로세서(110)에 의해서 실행될 수 있다.
응용 프로그램들(121)은 기본적인 서비스로서 구동되거나, 사용자의 요청에 의해서 호스트(도 1의 100)에서 구동되는 상위 계층의 소프트웨어이다. 다양한 서비스를 제공하기 위하여 복수의 응용 프로그램들(APP0, APP1, APP2, APP3)이 실행될 수 있다.
예를 들어, 사용자에 의해 동영상 파일의 재생이 요청되면, 동영상을 재생하기 위한 응용 프로그램이 실행될 수 있다. 실행된 응용 프로그램은 사용자가 요청한 동영상 파일을 재생하기 위하여 스토리지 장치(도 1의 200)로 읽기 요청을 생성할 수 있으며, 읽기 요청을 위한 커맨드는 제출 큐에 기입될 수 있다. 스토리지 장치(200)가 해당 커맨드를 제출 큐로부터 패치하고 실행하게 된다.
커널(122)은 운영 체제의 구성 요소가 의존하는 핵심 프로그램으로서, 하드웨어 구성 요소에 액세스하고 호스트에서 실행해야 하는 프로세스와 일정을 예약하는 데 사용되며 응용 프로그램들(121)및 하드웨어 간의 상호 작용을 관리한다.
입출력 시스템(123)은 다양한 입출력 장치들, 예컨대 스토리지 장치(200)의 다양한 제어를 위한 시스템이다. 입출력 시스템(123)은 MI(Management Instrumentation) 루틴들, 전력 관리자, 입출력 관리자 등을 포함할 수 있다.
장치 드라이버(128)는 입출력 장치, 예컨대 스토리지 장치(200)를 운영 체제 레벨에서 제어하기 위한 제어 모듈이다. 사용자에 의해서 또는 응용 프로그램들(121)로부터 스토리지 장치(200)로의 액세스 요청이 발생하면, 장치 드라이버(124)가 호출된다. 장치 드라이버(128)는 스토리지 장치(200)를 제어하기 위한 커널의 소프트웨어 모듈로 제공될 수 있다.
실시예에 있어서, 장치 드라이버(124)는 초기화 단계에서, 제출 큐 및 완료큐를 생성할 수 있으며, 호스트(도 1의 100)의 메모리(도 1의 200) 및 적어도 하나의 캐시(도 1의 CC)에 완료 큐를 생성하고, 완료 큐 각각에 인터럽트 벡터 넘버를 할당할 수 있다. 실시예에 있어서, 장치 드라이버(124)는 패킷, 예컨대 완료 엔트리 패킷(도 9의 CEP) 및 인터럽트 패킷(도 10의 INTP)에서 스티어링 태그(ST)를 읽고 완료 엔트리 패킷(CEP)에서 프로세싱 힌트(PH)를 읽을 수 있다.
도 12a는 본 개시의 실시예에 따른 전자 시스템의 완료 엔트리 처리를 나타내고 도 12b는 비교예에 따른 전자 시스템의 완료 엔트리 처리를 나타내다.
스토리지 장치(200)는 호스트(100)로부터의 커맨드를 실행하고, 커맨드의 실행이 완료되었음을 나타내는 완료 엔트리(CE)를 호스트(100)에 구비되는 메모리 또는 적어도 하나의 캐시 중 선택된 위치에 전송하고, 완료 엔트리(CE)의 전송을 나타내는 인터럽트를 호스트(100)로 전송할 수 있다.
예를 들어, 도 12a에 도시된 바와 같이, 스토리지 장치(200)는 완료 엔트리(CE1)를 메모리의 제1 완료 큐(CQ1a)로 전송(포스팅)할 수 있다(S10). 스토리지 장치(200)는 제1 인터럽트 벡터 넘버(IVN1)를 포함하는 제1 인터럽트를 호스트(100)로 전송할 수 있다(S20). 여기서, 제1 인터럽트 벡터 넘버(IVN1)는 제1 완료 큐(CQ1a)에 할당된 인터럽트 벡터 넘버로서, 완료 엔트리(CE1)이 메모리의 제1 완료 큐(CQ1a)에 포스팅되었음을 나타낼 수 있다. 제1 인터럽트가 코어로 전송되고, 코어는 인터럽트 서비스 루틴(ISR)을 실행할 수 있다(S30). 예를 들어, 코어는 메모리로부터 완료 엔트리(CE1)를 독출하고, 완료 처리(completion processing), 및 완료(done)할 수 있다. 인터럽트 서비스 루틴(ISR)이 완료되면, 코어는 제1 인터럽트가 전송되기 전에 수행하던 처리를 수행할 수 있다.
계속하여, 스토리지 장치(200)는 완료 엔트리(CE2)를 메모리의 제2 완료 큐(CQ2)로 전송할 수 있다(S40). 스토리지 장치(200)는 제2 인터럽트 벡터 넘버(INV2)를 포함하는 제2 인터럽트를 호스트(100)로 전송할 수 있다(S50). 제2 인터럽트 벡터 넘버(IVN2)는 제2 완료 큐(CQ2)에 할당된 인터럽트 벡터 넘버로서, 완료 엔트리(CE2)가 제2 완료 큐(CQ2)에 포스팅되었음을 나타낼 수 있다. 제2 인터럽트가 코어로 전송되고, 코어는 인터럽트 서비스 루틴(ISR)을 실행할 수 있다(S60).
스토리지 장치(200)는 완료 엔트리(CE3)를 캐시의 제1 완료 큐(CQ1b)로 전송하고(S70), 제3 인터럽트 벡터 넘버(INV3)을 포함하는 제3 인터럽트를 호스트(100)로 전송할 수 있다. 제3 인터럽트 벡터 넘버(INV3)은 캐시의 제1 완료 큐(CQ1b)에 할당된 인터럽트 벡터 넘버로서, 완료 엔트리(CE3)가 캐시의 제1 완료 큐(CQ1b)에 캐싱되었음을 나타낼 수 있다.
캐시 인터럽트(cached interrupt)는 논-캐시 인터럽트보다 우선 순위가 높을 수 있다. 제2 인터럽트에 대응하여 코어가 인터럽트 서비스 루틴(ISR)을 실행할 때, 완료 엔트리(CE3)가 캐싱되었음을 나타내는 제3 인터럽트가 수신되면, 코어는 제2 인터럽트에 대응하는 인터럽트 서비스 루틴(ISR)의 실행을 임시 중단하고, 제3 인터럽트에 대응하는 인터럽트 서비스 루틴(ISR)을 실행할 수 있다(S90). 코어는 캐시로부터 완료 엔트리(CE3)를 독출하고, 완료 엔트리(CE3)에 따른 완료 처리를 수행한 후 완료할 수 있다.
제3 인터럽트에 대응하는 인터럽트 서비스 루틴(ISR)이 완료되면, 코어는 제2 인터럽트에 대응하는 인터럽트 서비스 루틴(ISR)을 계속하여 실행하여 완료할 수 있다(S100)
도 12b를 참조하여 비교예에 따른 전자 시스템의 완료 엔트리들의 처리를 설명한다. 비교예에 따른 전자 시스템(10')에서는 메모리 및 캐시에 하나의 완료 큐에 포함되는 완료 큐가 각각 생성될 수 있으나, 메모리 및 캐시에 각각 구비되는 완료 큐에는 동일한 인터럽트 벡터 넘버가 할당될 수 있다. 다시 말해서 하나의 완료 큐가 물리적으로 복수의 위치에 배치되더라도 동일한 인터럽트 벡터 넘버가 할당될 수 있다.
S10a 내지 S60a의 단계는 도 12a의 S10 내지 S60의 단계와 동일하므로 중복되는 설명은 생략하기로 한다.
스토리지 장치(200)는 완료 엔트리(CE3)를 캐시의 제1 완료 큐(CQ1b)로 전송하고(S70a), 완료 엔트리(CE3)가 제1 인터럽트 벡터 넘버를 포함하는 제3 인터럽트를 호스트(100)로 전송할 수 있다(S80a). 제1 인터럽트는 벡터 넘버는 제1 완료 큐(CQ1a, CQ1b)에 할당된 인터럽트 벡터 넘버이다.
완료 엔트리(CE3)에 대한 처리가 지연될 수 있으며 완료 엔트리(CE3)는 캐시에서 메모리로 축출될 수 있다(S90a). 예를 들어, S60a 단계에서 제2 인터럽트에 따른 인터럽트 서비스 루틴이 실행되는 동안, 완료 엔트리(CE3)에 대한 처리가 지연될 수 있다.
코어는 제2 인터럽트에 따른 인터럽트 서비스 루틴이 완료된 후, 제3 인터럽트에 따른 인터럽트 서비스 루틴을 실행할 수 있다(S100a). 코어는 메모리로부터 완료 엔트리(CE3)을 독출하고, 완료 처리를 수행한 후, 인터럽트 서비스 루틴을 완료할 수 있다.
코어가 메모리를 액세스하는데 소요되는 시간은 캐시를 액세스하는데 소요되는 시간보다 길 수 있다. 따라서, 도 12b의 비교예에 따른 전자 장치(10')의 완료 엔트리 처리 방법과 같이, 완료 엔트리(CE3)가 캐시에 저장되었을 때 처리되지 못하고, 메모리로 축출된 후 처리될 경우, 레이턴시가 증가할 수 있다.
그러나, 도 12a를 참조하여 설명한 본 개시의 실시예에 따른 전자 장치(10)의 완료 엔트리 처리 방법은 코어가 인터럽트에 포함된 인터럽트 벡터 넘버를 기초로 완료 엔트리가 캐싱되었는지 및 어떤 캐시에 캐싱되었는지를 판단하고, 완료 엔트리가 캐싱된 경우, 우선적으로 처리할 수 있다. 이와 같이, 완료 엔트리들의 처리 순서가 조정됨에 따라 완료 엔트리들의 처리에 있어 병목현상이 발생하는 것을 방지하고, 입출력 레이턴시를 최적화할 수 있다.
도 13은 본 개시의 실시예에 따른 SSD 시스템을 나타내는 블록도이다.
SSD 시스템(1000)은 수백 개의 가상 머신들을 수행하는 수십 개의 호스트 머신들 또는 서버들로 구성되는 데이터 센터에 구비될 수 있다. 예를 들어, 메모리 SSD 시스템(1000)은 랩탑 컴퓨터, 데스크탑 컴퓨터, 서버 컴퓨터, 워크 스테이션, 휴대용 통신 단말기, PDA(Personal Digital Assistant), PMP(Portable Multimedia Player), 스마트 폰, 테블릿 PC 등과 같은 컴퓨팅 장치, 가상 머신 또는 그것의 가상 컴퓨팅 장치일 수 있다. 또는, SSD 시스템(1000)은 그래픽스 카드와 같은 컴퓨팅 시스템에 포함된 구성 요소들 중 일부일 수 있다. SSD 시스템(1000)은 이하에서 설명되는 하드웨어 구성에 한정되지 않으며 다른 구성들도 가능하다.
도 13을 참조하면, SSD 시스템(1000)은 호스트(1100) 및 SSD(1200)를 포함할 수 있다.
호스트(1100)는 데이터를 처리할 수 있는 데이터 처리 장치를 의미할 수 있다. 호스트(1100)는 운영 체제(operating system, OS) 및/또는 다양한 응용 프로그램(application)을 수행할 수 있다. 호스트(1110)는 CPU(Central Processing Unit), GPU(Graphics Processing Unit), NPU(Neural Processing Unit), DSP(Digital Signal Processor), 마이크로프로세서 또는 어플리케이션 프로세서(Application Processor, AP) 등을 포함할 수 있다. 호스트(1100)는 하나 이상의 프로세서들 및 메인 메모리(예컨대 DRAM)을 포함할 수 있다. 전술한 바와 같이, 하나 이상의 프로세서에 구비되는 캐시 및 메인 메모리에 완료 큐가 생성될 수 있으며, 완료 큐 각각에 인터럽트 벡터 넘버가 할당될 수 있다.
호스트(1100)는 다양한 프로토콜을 사용하여 SSD(1200)와 통신할 수 있다. 예를 들어, 호스트(1100)는 PCI-E(Peripheral Component Interconnect-Express), ATA(Advanced Technology Attachment), SATA(Serial ATA), PATA(Parallel ATA) 또는 SAS(serial attached SCSI)와 같은 인터페이스 프로토콜을 사용하여 SSD(1200)와 통신할 수 있다. 이외에도, UFS(Universal Flash Storage), USB(Universal Serial Bus), MMC(Multi-Media Card), ESDI(Enhanced Small Disk Interface) 또는 IDE(Integrated Drive Electronics) 등과 같은 다른 다양한 인터페이스 프로토콜들이 호스트(1100)와 SSD(1200) 사이의 프로토콜에 적용될 수 있다.
SSD(1200)는 PCIe 버스 기반의 Cache Direct Memory Access(CDMA)를 사용하는 NVMe SSD로 구현될 수 있다. SSD(1200)는 신호 커넥터를 통해 호스트(1100)와 신호를 주고 받으며, 전원 커넥터를 통해 전원을 입력 받는다. SSD(1200)는 SSD 컨트롤러(1210), 보조 전원 장치(1220) 및 메모리 장치들(1230, 1240, 1250)을 포함할 수 있다. 메모리 장치들(1230, 1240, 1250)은 NAND 플래시 메모리 장치일 수 있다.
도 6a 및 도 6b를 참조하여 설명한 스토리지 컨트롤러(6a, 6b)가 SSD 컨트롤러(1220)로서 적용될 수 있다. SSD 컨트롤러(1220)는 CQ 스티어링 모듈(CQSM)을 포함할 수 있으며, CQ 스티어링 모듈(CQSM)은 완료 엔트리의 호스트(1100)의 적어도 하나의 캐시 및 메모리 중 완료 엔트리가 기입될 위치를 선택할 수 있다. SSD 컨트롤러(1220)는 완료 엔트리를 선택된 위치에 구비되는 완료 큐에 포스팅하고, 완료 엔트리가 선택된 위치에 포스팅되었음을 알리는 인터럽트를 호스트(1100)에 전송할 수 있다. 인터럽트는 MSI로 구현될 수 있으며, 완료 엔트리가 기입되는 완료 큐에 할당된 인터럽트 벡터 넘버를 포함할 수 있다.
호스트(1100)의 프로세서는 인터럽트에 포함된 인터럽트 벡터 넘버를 기초로 완료 엔트리가 캐싱되었는지 여부를 판단하고, 완료 엔트리의 처리 순서를 결정할 수 있다. 예를 들어, 호스트(1100)는 캐싱된 완료 엔트리를 논-캐싱된 완료 엔트리보다 우선하여 처리할 수 있다.
도 14는 본 개시의 실시예에 따른 컴퓨팅 시스템을 나타내는 블록도이다.
도 14를 참조하면 컴퓨팅 시스템(2000)은 PCIe 인터페이스 기반의 입출력 계층 구조(I/O hierarchy)들을 포함할 수 있다. 컴퓨팅 시스템(2000)은 CPU(2110), DRAM 컨트롤러(2120), DRAM(2130), PICe RC(2140), 스위치(2210), 브리지(2260), 및 복수의 엔드 포인트들을 포함할 수 있으며, 복수의 엔드 포인트는, 복수의 PCIe 엔드 포인트(2220, 2230, 2250, 2270), 레거시 엔드 포인트(2240) 및 PCI-X 엔드 포인트(2280)을 포함할 수 있다. 엔드 포인트들의 구성은 변경될 수 있다.
CPU(2110), DRAM 컨트롤러(2120), DRAM(2130), PICe RC(2140)는 호스트(2100)에 포함될 수 있으며 PCIe 기반의 시스템 버스(2150)를 통해 서로 통신할 수 있다.
호스트(2100)는 도 1의 호스트(100)에 적용될 수 있다. CPU(2110)의 적어도 하나의 캐시(2111) 및 DRAM(2130)에 완료 큐들(CQa, CQb)이 생성될 수 있으며, 완료 큐들(CQa, CQb)에는 각각의 인터럽트 벡터 넘버가 할당될 수 있다. 완료 큐(CQa, CQb)는 하나의 제출 큐에 페어링될 수 있다.
PCIe RC(2140)는 호스트(2100)와 복수의 엔드 포인트들을 연결한다. PCIe RC(2140)는 복수의 엔드 포인트들로 부터의 TLP를 해석하고 해당 신호를 대응하는 장치 예컨대 CPU(2110), DRAM(2130)으로 전송할 수 있다.
PCIe RC(2140)는 엔드 포인트들과 직접 연결되거나, 스위치(2210) 또는 브리지(2260)을 통해 엔드 포인트들과 간접적으로 연결될 수 있다. 도 14의 도시에 의하면, PCIe RC(2140)는 스위치(2210)를 통해 PCIe 엔드 포인트들(2220, 2230) 및 레거시 엔드 포인트(2240)과 연결될 수 있다. 또한 PCIe RC(2140)는 PCIe 엔드 포인트(2250)와 직접 연결되거나, 브리지(2260)를 통해 PCIe 엔드 포인트(2270) 및 PCI-X 엔드 포인트(2280)와 연결될 수 있다.
스위치(2210) 및 브릿지(2260)는 PCIe RC(2140)에 복수의 엔드 포인트들을 연결할 수 있는 장치이다. 스위치(2210)는 하드웨어 적으로 송수신되는 패킷을 처리하고, 브릿지(2260)는 소프트웨어적으로 송수신되는 패킷을 처리할 수 있다. 스위치(2210) 및 브릿지(2260)는 다운스트림 포트 및 업스트림을 포함할 수 있다. 도 14에서, 스위치(2210)는 두 개의 PCIe 엔드 포인트들(2220, 2230) 및 한 개의 레거시 엔드 포인트(2240)과 연결된다. 이 경우, 두 개의 PCIe 엔드 포인트들(2220, 2230) 및 한 개의 레거시 엔드 포인트(2240)은 스위치(2210)의 다운스트림 포트와 연결될 되고, PCIe RC(2140)는 스위치(2210)의 업스트림 포트와 연결될 것이다.
PCIe RC(2140)와 연결된 엔드 포인트들(2220, 2230, 2240, 2250, 2270, 2280), 스위치(2210) 및 브릿지(226)들은 하나의 계층 구조를 형성한다. 엔드 포인트는 트랜잭션의 주체로서 SSD, USB와 같은 저장 장치, 또는 그래픽 장치와 같은 주변 장치들일 수 있다. 엔드 포인트들(2220, 2230, 2240, 2250, 2270, 2280)은 리퀘스터(Requester)로서 트랜잭션을 개시하거나 컴플리터(Completer)로서 트랜잭션에 응답할 수 있다. 엔드 포인트들(2220, 2230, 2240, 2250, 2270, 2280)은 CPU(2110) 및 메모리(2130)와 연결되는 입출력 계층 구조의 최하위에 위치하는 장치 또는 구성 요소일 수 있다.
복수의 PCIe 엔드 포인트(2220, 2230, 2250, 2270) 중 적어도 하나의 엔드 포인트, 예컨대 PCIe 엔드 포인트(2220)는 CPU(2110)로부터의 커맨드를 실행하고, 커맨드의 실행 결과를 나타내는 완료 엔트리를 생성하며, 적어도 하나의 캐시(2111) 및 DRAM(2130) 중 완료 엔트리가 기입될 위치를 선택할 수 있다. PCIe 엔드 포인트(2220)는 완료 엔트리를 선택된 위치에 구비되는 완료 큐, 예컨대 완료 큐(CQa) 또는 완료 큐(CQb)로 포스팅할 수 있다. PCIe 엔드 포인트(2220)는 완료 엔트리가 캐시되는지 여부를 나타내는 인터럽트를 CPU(2110)로 전송할 수 있다. 인터럽트는 완료 엔트리가 기입되는 완료 큐에 할당된 인터럽트 벡터 넘버를 포함할 수 있다.
PCIe RC(2140)는 PCIe 엔드 포인트(2220)로부터 수신되는 완료 엔트리 패킷의 헤더로부터 위치 정보를 읽고, 완료 엔트리를 선택된 위치, 예컨대 적어도 하나의 캐시(2111) 또는 DRAM(2130)로 전송할 수 있다. 또한, PCIe RC(2140)는 인터럽트 패킷의 헤더로부터 위치 정보(예컨대 스티어링 태그)를 읽고, 인터럽트를 CPU(2110)에 구비되는 복수의 코어 중 해당 코어로 전송할 수 있다. 코어는 인터럽트의 인터럽트 벡터 넘버를 기초로 완료 엔트리가 캐싱되었는지 여부(및 어떤 캐시에 캐싱되었는지)를 판단하고, 완료 엔트리의 처리 순서를 결정할 수 있다. 예를 들어 코어는 완료 엔트리가 캐싱된 경우 우선적으로 처리할 수 있다.
이상에서와 같이 도면과 명세서에서 예시적인 실시예들이 개시되었다. 본 명세서에서 특정한 용어를 사용하여 실시예들을 설명되었으나, 이는 단지 본 개시의 기술적 사상을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 개시의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 개시의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.
100: 호스트 200: 스토리지 장치
110: 프로세서 120: 메모리
130: 인터페이스 회로 210: 스토리지 컨트롤러
220: 비휘발성 메모리

Claims (20)

  1. 비휘발성 메모리 장치; 및
    상기 비휘발성 메모리 장치를 제어하며, 호스트로부터의 커맨드를 실행하고 상기 호스트의 메모리 및 적어도 하나의 캐시 중 상기 커맨드에 대한 완료 엔트리가 기입될 위치를 선택하고, 상기 메모리 및 상기 적어도 하나의 캐시 중 상기 완료 엔트리가 기입될 위치를 나타내는 인터럽트 벡터 넘버를 포함하는 인터럽트를 상기 호스트로 전달하는 스토리지 컨트롤러를 포함하는 스토리지 장치.
  2. 제1 항에 있어서, 상기 컨트롤러는,
    상기 호스트의 메모리 및 적어도 하나의 캐시 중 상기 선택된 위치에 대한 위치 정보를 포함하는 완료 엔트리 패킷을 상기 호스트로 전송하는 것을 특징으로 하는 스토리지 장치.
  3. 제1 항에 있어서, 상기 완료 엔트리 패킷의 헤더는 상기 위치 정보를 포함하는 프로세싱 힌트를 포함하는 것을 특징으로 하는 스토리지 장치.
  4. 제1 항에 있어서, 상기 컨트롤러는,
    상기 인터럽트 벡터 넘버를 포함하는 페이로드를 포함하는 인터럽트 패킷을 상기 호스트로 전송하는 것을 특징으로 하는 스토리지 장치.
  5. 제4 항에 있어서, 상기 인터럽트 패킷의 헤더는 상기 호스트의 복수의 코어 중 대응하는 코어를 나타내는 스티어링 태그를 포함하는 것을 특징으로 하는 스토리지 장치.
  6. 제1 항에 있어서, 상기 컨트롤러는,
    상기 완료 엔트리가 상기 적어도 하나의 캐시에 기입되면, 상기 완료 엔트리가 캐싱됨을 나타내는 캐시 인터럽트(cached interrupt)를 상기 호스트로 전송하고,
    상기 완료 엔트리가 메모리에 기입되면, 상기 완료 엔트리가 캐시되지 않음을 나타내는 논-캐시 인터럽트(non-cached interrupt)를 상기 호스트로 전송하는 것을 특징으로 하는 스토리지 장치.
  7. 제6 항에 있어서, 상기 캐시 인터럽트는 상기 논-캐시 인터럽트보다 우선 순위가 높은 것을 특징으로 하는 스토리지 장치.
  8. 제1 항에 있어서, 상기 컨트롤러는,
    상기 완료 엔트리에 대응하는 상기 커맨드의 수행 시간을 기초로 상기 완료 엔트리가 기입될 위치를 선택하는 것을 특징으로 하는 스토리지 장치.
  9. 제1 항에 있어서, 상기 적어도 하나의 캐시는,
    상기 호스트에 구비되는 복수의 코어 각각의 전용 캐시 또는 상기 복수의 코어가 공유하는 공유 캐시 중 적어도 하나를 포함하는 것을 특징으로 하는 스토리지 장치.
  10. 제1 항에 있어서, 상기 스토리지 컨트롤러는,
    PCIe 인터페이스를 기초로 상기 완료 엔트리를 상기 인터럽트를 상기 호스트로 전송하는 인터페이스 회로를 포함하는 것을 특징으로 하는 스토리지 장치.
  11. 비휘발성 메모리 장치; 및
    상기 비휘발성 메모리 장치를 제어하며, 호스트로부터의 커맨드를 실행하고 상기 호스트의 메모리 및 적어도 하나의 캐시 중 상기 커맨드에 대한 완료 엔트리가 기입될 위치에 대한 위치 정보 및 상기 완료 엔트리를 포함하는 완료 엔트리 패킷을 상기 호스트로 전송하고,
    상기 완료 엔트리가 상기 적어도 하나의 캐시 중 하나에 캐시되었는지 여부를 나타내는 캐싱 정보를 포함하는 인터럽트 패킷을 상기 호스트로 전달하는 스토리지 컨트롤러를 포함하는 스토리지 장치.
  12. 제11 항에 있어서, 상기 캐싱 정보는,
    상기 완료 엔트리가 기입될 위치에 구비되는 완료 큐에 할당된 인터럽트 벡터 넘버를 포함하는 것을 특징으로 하는 스토리지 장치.
  13. 제11 항에 있어서, 상기 스토리지 컨트롤러는,
    상기 완료 엔트리에 대응하는 상기 커맨드의 수행 시간을 기초로 상기 완료 엔트리가 기입될 위치를 선택하는 것을 특징으로 하는 스토리지 장치.
  14. 제11 항에 있어서, 상기 스토리지 컨트롤러는,
    상기 수행 시간이 기준 시간 이상이면 상기 적어도 하나의 캐시를 상기 완료 엔트리가 기입될 상기 위치로 선택하고,
    상기 수행 시간이 기준 시간 미만이면, 상기 메모리를 상기 완료 엔트리가 기입될 상기 위치로 선택하는 것을 특징으로 하는 스토리지 장치.
  15. 제11 항에 있어서, 상기 스토리지 컨트롤러는,
    NVMe(non-volatile memory express) 프로토콜로 상기 완료 엔트리 패킷 및 상기 인터럽트 패킷을 생성하는 것을 특징으로 하는 스토리지 장치.
  16. 복수의 코어를 포함하는 프로세서 및 메모리를 포함하는 호스트; 및
    비휘발성 메모리를 포함하는 스토리지 장치를 포함하고,
    상기 스토리지 장치는, 상기 호스트로부터의 커맨드를 실행하고 상기 프로세서에 구비되는 적어도 하나의 캐시 및 상기 메모리 중 상기 커맨드에 대한 완료 엔트리가 기입될 위치를 선택하고, 상기 적어도 하나의 캐시 및 상기 메모리 중 상기 완료 엔트리가 기입될 위치에 구비되는 완료 큐에 할당된 인터럽트 벡터 넘버를 포함하는 인터럽트를 상기 호스트로 전송하는 하는 전자 시스템.
  17. 제16 항에 있어서, 상기 스토리지 장치는,
    상기 커맨드의 실행 시간이 기준 시간 이상이면 상기 적어도 하나의 캐시를 상기 완료 엔트리가 기입될 상기 위치로 선택하고,
    상기 실행 시간이 기준 시간 미만이면, 상기 메모리를 상기 완료 엔트리가 기입될 상기 위치로 선택하는 것을 특징으로 하는 전자 시스템.
  18. 제16 항에 있어서, 상기 스토리지 장치는,
    상기 호스트의 메모리 및 적어도 하나의 캐시 중 상기 선택된 위치에 대한 위치 정보를 프로세싱 힌트 필드에 포함하는 완료 엔트리 패킷을 상기 호스트로 전송하는 것을 특징으로 하는 전자 시스템.
  19. 제16 항에 있어서, 상기 스토리지 장치는,
    상기 인터럽트 벡터 넘버 및 상기 복수의 코어 중 상기 인터럽트가 전송될 코어에 대한 정보를 포함하는 인터럽트 패킷을 상기 호스트로 전송하는 것을 특징으로 하는 전자 시스템.
  20. 제16 항에 있어서, 상기 호스트 및 상기 스토리지 장치는 PCIe 인터페이스를 기초로 통신하는 것을 특징으로 하는 전자 시스템.
KR1020220062337A 2022-05-20 2022-05-20 스토리지 장치, 스토리지 장치의 동작 방법 및 스토리지 장치를 포함하는 전자 시스템 KR20230162440A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020220062337A KR20230162440A (ko) 2022-05-20 2022-05-20 스토리지 장치, 스토리지 장치의 동작 방법 및 스토리지 장치를 포함하는 전자 시스템
CN202310552434.1A CN117093517A (zh) 2022-05-20 2023-05-16 存储装置、存储装置的操作方法和电子系统
US18/199,765 US20230409495A1 (en) 2022-05-20 2023-05-19 Storage device, operation method of the storage device, and electronic system including the storage device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020220062337A KR20230162440A (ko) 2022-05-20 2022-05-20 스토리지 장치, 스토리지 장치의 동작 방법 및 스토리지 장치를 포함하는 전자 시스템

Publications (1)

Publication Number Publication Date
KR20230162440A true KR20230162440A (ko) 2023-11-28

Family

ID=88781988

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220062337A KR20230162440A (ko) 2022-05-20 2022-05-20 스토리지 장치, 스토리지 장치의 동작 방법 및 스토리지 장치를 포함하는 전자 시스템

Country Status (3)

Country Link
US (1) US20230409495A1 (ko)
KR (1) KR20230162440A (ko)
CN (1) CN117093517A (ko)

Also Published As

Publication number Publication date
CN117093517A (zh) 2023-11-21
US20230409495A1 (en) 2023-12-21

Similar Documents

Publication Publication Date Title
US10534560B2 (en) Data storage device and data processing system having the same
US10896136B2 (en) Storage system including secondary memory that predicts and prefetches data
US9772802B2 (en) Solid-state device management
CN113448504A (zh) 具有用于实现内部固态驱动器操作的外部软件执行的固态驱动器
TWI719654B (zh) 閃存實體資源集合管理裝置及方法以及電腦程式產品
KR102595233B1 (ko) 데이터 처리 시스템 및 그것의 동작 방법
US11645011B2 (en) Storage controller, computational storage device, and operational method of computational storage device
KR20190066466A (ko) 기입 레이턴시를 줄일 수 있는 저장 장치의 동작 방법
US20220100425A1 (en) Storage device, operating method of storage device, and operating method of computing device including storage device
US11614892B2 (en) Memory system architecture for heterogeneous memory technologies
KR20210025344A (ko) 이종 메모리를 갖는 메인 메모리 장치, 이를 포함하는 컴퓨터 시스템, 그것의 데이터 관리 방법
US20190042415A1 (en) Storage model for a computer system having persistent system memory
US20240086113A1 (en) Synchronous write method and device, storage system and electronic device
US20230229357A1 (en) Storage controller, computational storage device, and operational method of computational storage device
KR102634776B1 (ko) 데이터 저장 장치 및 그것의 동작 방법
KR102434840B1 (ko) 데이터 저장 장치
KR20230162440A (ko) 스토리지 장치, 스토리지 장치의 동작 방법 및 스토리지 장치를 포함하는 전자 시스템
WO2022246036A1 (en) Adjustable timer component for semiconductor devices
KR20220045342A (ko) 호스트 장치, 데이터 저장 장치, 데이터 처리 시스템 및 데이터 처리 방법
KR20210003370A (ko) 하드웨어 로직을 이용하여 통신 오버헤드를 감소시킨 스토리지 장치
US20240012564A1 (en) Memory controller and storage device including the same
US11054993B2 (en) Mass storage system having peer-to-peer data movements between a cache and a backend store
KR20240010310A (ko) 컴퓨팅 시스템 및 그 동작 방법
KR20220044069A (ko) 스토리지 장치, 스토리지 장치의 동작 방법, 그리고 스토리지 장치를 포함하는 컴퓨팅 장치의 동작 방법