KR20180045103A - 적응형 인터럽트를 생성하는 데이터 저장 장치 및 그것의 동작 방법 - Google Patents
적응형 인터럽트를 생성하는 데이터 저장 장치 및 그것의 동작 방법 Download PDFInfo
- Publication number
- KR20180045103A KR20180045103A KR1020160138584A KR20160138584A KR20180045103A KR 20180045103 A KR20180045103 A KR 20180045103A KR 1020160138584 A KR1020160138584 A KR 1020160138584A KR 20160138584 A KR20160138584 A KR 20160138584A KR 20180045103 A KR20180045103 A KR 20180045103A
- Authority
- KR
- South Korea
- Prior art keywords
- host
- controller
- interrupt
- completion queue
- queue
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 30
- 230000003044 adaptive effect Effects 0.000 title abstract description 6
- 238000013500 data storage Methods 0.000 claims abstract description 42
- 238000012544 monitoring process Methods 0.000 claims abstract description 12
- 238000012545 processing Methods 0.000 abstract description 2
- 238000011017 operating method Methods 0.000 abstract 1
- 230000015654 memory Effects 0.000 description 43
- 238000010586 diagram Methods 0.000 description 12
- 238000013403 standard screening design Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 239000002360 explosive Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1642—Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
-
- 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/0614—Improving the reliability of storage systems
-
- 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/0653—Monitoring storage devices or systems
-
- 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/0658—Controller construction 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/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/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
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)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
본 발명은 저장 장치에 관한 것으로, 좀 더 자세하게는 적응형 인터럽트를 생성하는 데이터 저장 장치에 관한 것이다. 본 발명에 따른 데이터 저장 장치는 컨트롤러를 포함할 수 있다. 컨트롤러는 상기 호스트의 명령을 실행하고, 상기 호스트의 완료 큐를 업데이트하고, 인터럽트를 상기 호스트로 전송할 수 있다. 상기 컨트롤러는 상기 완료 큐의 테일 도어벨과 헤드 도어벨을 모니터링하고, 상기 모니터링 결과를 참조하여 상기 인터럽트를 생성할 수 있다. 본 발명에 따른 데이터 저장 장치의 동작 방법은 상기 호스트의 명령을 처리하고, 상기 호스트의 완료 큐를 업데이트 하는 단계, 상기 완료 큐의 테일 도어벨과 헤드 도어벨을 모니터링하는 단계, 및 상기 모니터링 결과를 참조하여 인터럽트를 상기 호스트로 전송하는 단계를 포함할 수 있다. 본 발명의 실시 예에 따른 데이터 저장 장치는 호스트의 완료 큐 상태를 고려하여 인터럽트를 생성할 수 있다. 따라서, 본 발명의 실시 예에 따른 데이터 저장 장치에 의해 호스트의 성능은 향상될 수 있다.
Description
본 발명은 저장 장치 및 그것의 동작 방법에 관한 것으로, 좀 더 자세하게는 적응형 인터럽트를 생성하는 데이터 저장 장치 및 그것의 동작 방법에 관한 것이다.
플래시 메모리 장치는 컴퓨터, 스마트폰, PDA, 디지털 카메라, 캠코더, 보이스 리코더, MP3 플레이어, 휴대용 컴퓨터(Handheld PC)와 같은 정보 기기들의 음성 및 영상 데이터 저장 매체로서 널리 사용되고 있다. 플래시 메모리 기반의 대용량 스토리지 장치의 대표적인 예로 솔리드 스테이트 드라이브(Solid State Drive; 이하 SSD)가 있다. SSD의 폭발적인 수요 증가와 함께 그 용도는 다양하게 분화되고 있다. 예를 들면, 서버용 SSD, 클라이언트용 SSD, 데이터 센터용 SSD 등으로 용도가 세분화될 수 있다. SSD의 인터페이스는 다양한 용도에 따라 최적의 속도와 신뢰성을 제공할 수 있어야 한다. 이에 따라, SSD의 컨트롤러의 성능도 급격하게 향상되었다.
SSD의 컨트롤러의 성능이 급격하게 향상됨에 따라, 컨트롤러는 호스트가 요청한 명령을 빠르게 수행하고, 호스트가 처리해야 할 인터럽트(Interrupt)를 자주 생성한다. 컨트롤러의 잦은 인터럽트로 인하여, 호스트는 인터럽트 서비스 루틴(Interrupt Service Routine)을 자주 수행해야 한다. 이로 인해, 호스트의 성능이 감소될 수 있다. 따라서, 호스트의 성능을 고려하여 인터럽트를 생성하는 데이터 저장 장치가 필요하다.
본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명은 적응형 인터럽트를 생성하는 데이터 저장 장치 및 그것의 동작 방법을 제공할 수 있다.
본 발명에 따른 데이터 저장 장치는 컨트롤러를 포함할 수 있다. 컨트롤러 상기 호스트의 명령을 실행하고, 상기 호스트의 완료 큐를 업데이트하고, 인터럽트를 상기 호스트로 전송할 수 있다. 상기 컨트롤러는 상기 완료 큐의 테일 도어벨과 헤드 도어벨을 모니터링하고, 상기 모니터링 결과를 참조하여 상기 인터럽트를 생성할 수 있다.
본 발명에 따른 데이터 저장 장치의 동작 방법은 상기 호스트의 명령을 실행하고, 상기 호스트의 완료 큐를 업데이트 하는 단계, 상기 완료 큐의 테일 도어벨과 헤드 도어벨을 모니터링 하는 단계, 및 상기 모니터링 결과를 참조하여 인터럽트를 상기 호스트로 전송하는 단계를 포함할 수 있다.
본 발명의 실시 예에 따른 데이터 저장 장치는 호스트의 완료 큐 상태를 고려하여 인터럽트를 생성할 수 있다. 따라서, 본 발명의 실시 예에 따른 데이터 저장 장치에 의해 호스트의 성능은 향상될 수 있다.
도 1은 본 발명에 따른 데이터 저장 장치가 적용된 컴퓨터 시스템을 예시적으로 보여주는 블록도이다.
도 2는 도 1에서 도시된 호스트 및 데이터 저장 장치 사이의 동작을 예시적으로 보여주는 도면이다.
도 3 및 도 4는 도 1에서 도시된 컨트롤러의 동작을 예시적으로 보여주는 타이밍도이다.
도 5는 도 1에서 도시된 컨트롤러 및 호스트의 동작을 예시적으로 보여주는 도면이다.
도 6은 도 1에서 도시된 컨트롤러의 동작을 예시적으로 보여주는 순서도이다.
도 7은 도 6에서 도시된 S250 단계를 상세하게 설명하는 순서도이다.
도 8은 도 1에서 도시된 컨트롤러를 예시적으로 보여주는 블록도이다.
도 9는 도 1에서 도시된 컨트롤러를 예시적으로 보여주는 블록도이다.
도 10은 본 발명에 따른 데이터 저장 장치가 적용된 컴퓨터 시스템을 예시적으로 보여주는 블록도이다.
도 2는 도 1에서 도시된 호스트 및 데이터 저장 장치 사이의 동작을 예시적으로 보여주는 도면이다.
도 3 및 도 4는 도 1에서 도시된 컨트롤러의 동작을 예시적으로 보여주는 타이밍도이다.
도 5는 도 1에서 도시된 컨트롤러 및 호스트의 동작을 예시적으로 보여주는 도면이다.
도 6은 도 1에서 도시된 컨트롤러의 동작을 예시적으로 보여주는 순서도이다.
도 7은 도 6에서 도시된 S250 단계를 상세하게 설명하는 순서도이다.
도 8은 도 1에서 도시된 컨트롤러를 예시적으로 보여주는 블록도이다.
도 9는 도 1에서 도시된 컨트롤러를 예시적으로 보여주는 블록도이다.
도 10은 본 발명에 따른 데이터 저장 장치가 적용된 컴퓨터 시스템을 예시적으로 보여주는 블록도이다.
아래에서는, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
도 1은 본 발명에 따른 데이터 저장 장치가 적용된 컴퓨터 시스템을 예시적으로 보여주는 블록도이다. 도 1을 참조하면, 컴퓨터 시스템(100)은 호스트(Host, 110) 및 데이터 저장 장치(Storage Device, 120)를 포함할 수 있다.
호스트(110)는 데이터 저장 장치(120)에 데이터를 쓰거나, 데이터 저장 장치(120)로부터 데이터를 읽을 수 있다. 이를 위해, 호스트(110)는 데이터 저장 장치(120)에 데이터를 쓰거나, 데이터 저장 장치(120)로부터 데이터를 읽는 등의 다양한 명령들을 생성한다.
도 1을 참조하면, 호스트(110)는 호스트 메모리(111)를 포함할 수 있다. 호스트 메모리(111)에는 호스트(110)에서 처리할 응용 프로그램이나 데이터가 로드(Load)될 수 있다. 특히, 호스트 메모리(111)는 제출 큐(Submission Queue; SQ)와 완료 큐(Completion Queue; CQ)를 포함할 수 있다. 제출 큐(SQ)는 호스트(110)에 의해 기입되는 대기열일 수 있다. 제출 큐(SQ)는 호스트(110)에 의해 생성된 명령이 저장될 수 있다. 완료 큐(CQ)는 데이터 저장 장치(120)에 의해 기입되는 대기열일 수 있다. 완료 큐(CQ)는 호스트(110)에 의해 요청된 명령에 대한 완료 정보가 저장될 수 있다. 제출 큐(SQ)와 완료 큐(CQ) 각각은 원형으로 도시되어있다. 다만, 제출 큐(SQ)와 완료 큐(CQ) 각각의 형태는 설명의 이해를 돕기 위해 원형으로 도시된 것이다. 호스트 메모리(111)에서 제출 큐(SQ) 및 완료 큐(CQ)를 위해 임의의 물리적인 어드레스 범위가 지정되면, 어드레스 범위에 해당하는 메모리 셀들이 각각 제출 큐(SQ) 또는 완료 큐(CQ)로 지정될 수 있다.
도 1을 참조하면, 호스트(110)는 데이터 저장 장치(120)를 사용하기 위한 명령을 생성하고 이를 호스트 메모리(111)에 저장할 수 있다. 좀 더 구체적으로, 호스트(110)에 의해 생성된 명령은 호스트 메모리(111)의 제출 큐 엔트리(SQ Entry)에 저장될 수 있다. 호스트(110)에 의해 생성된 명령은 화살표 방향으로 제출 큐 엔트리(SQ Entry)에 계속해서 저장될 수 있다. 호스트(110)는 명령을 제출 큐 엔트리(SQ Entry)에 저장하고, 제출 큐 테일(SQ Tail)을 새로이 업데이트 할 수 있다. 이를 위해, 호스트(110)는 컨트롤러(121)의 제출 큐 테일 도어벨(SQ Tail Doorbell; SQTDBL, 미도시)을 업데이트할 수 있다. 여기서, 제출 큐 테일 도어벨(SQTDBL)은 일종의 레지스터로, 제출 큐 테일(SQ Tail)의 어드레스 정보 등이 저장될 수 있다.
데이터 저장 장치(120)는 호스트의 명령을 처리할 수 있다. 좀 더 구체적으로, 데이터 저장 장치(120)는 컨트롤러(121)를 포함할 수 있다. 컨트롤러(121)는 제출 큐(SQ)를 참고하여 호스트(110)에 의해 생성된 명령을 패치(Fetch)할 수 있다. 좀 더 구체적으로, 컨트롤러(121)는 제출 큐 테일 도어벨(SQTDBL)을 참고할 수 있다. 이 때, 컨트롤러(121)는 제출 큐 헤드(SQ Head)에서부터 화살표 방향으로 순서대로 제출 큐 엔트리(SQ Entry)를 패치할 수 있다. 패치 후, 컨트롤러(121)는 제출 큐 엔트리(SQ Entry)에 저장된 명령을 처리하고 완료할 수 있다. 완료 후, 컨트롤러(121)는 호스트 메모리(111)의 완료 큐 엔트리(CQ Entry)에 완료된 명령의 상태를 쓸 수 있다. 컨트롤러(121)는 완료된 명령의 상태를 화살표 방향으로 완료 큐 엔트리(CQ Entry)에 순서대로 저장할 수 있다. 컨트롤러(121)는 완료된 명령의 상태를 완료 큐 엔트리(CQ Entry)에 저장하고, 완료 큐 테일(CQ Tail)을 새로이 업데이트 할 수 있다. 컨트롤러(121)는 완료 큐 테일 도어벨(CQ Tail Doorbell; CQTDBL, 도 8 후술)을 업데이트할 수 있다. 여기서, 완료 큐 테일 도어벨(CQTDBL)은 일종의 레지스터로, 완료 큐 테일(CQ Tail)의 어드레스 정보 등이 저장될 수 있다.
다시, 호스트(110)는 완료 큐 엔트리(CQ Entry)를 처리할 수 있다. 호스트(110)는 완료 정보를 처리하고, 완료 큐 헤드(CQ Head)를 새로이 업데이트할 수 있다. 또한, 호스트(110)는 업데이트된 완료 큐 헤드(CQ Head) 정보를 컨트롤러(121)로 전달할 수 있다. 이를 위해, 호스트(110)는 컨트롤러(121)의 완료 큐 헤드 도어벨(CQ Head Doorbell; CQHDBL, 도 8 후술)을 업데이트할 수 있다. 여기서, 완료 큐 헤드 도어벨(CQHDBL)은 일종의 레지스터로, 완료 큐 헤드(CQ Head)의 어드레스 정보 등이 저장될 수 있다.
컨트롤러(121)는 호스트(110)에 의해 완료 큐 엔트리(CQ Entry)가 처리될 수 있도록 인터럽트(Interrupt)를 생성하고, 이를 호스트(110)로 전송할 수 있다. 호스트(110)는 인터럽트를 참조하여, 인터럽트 서비스 루틴(Interrupt Service Routine; ISR)을 수행할 수 있다. 인터럽트 서비스 루틴에 따라, 호스트(110)는 완료 큐 테일(CQ Tail)을 확인하고, 완료 큐 엔트리(CQ Entry)를 처리할 수 있다.
본 발명의 실시 예에 따른 컨트롤러(121)는 완료 큐(CQ)를 모니터링(Monitoring)하고, 모니터링 결과를 참조하여 인터럽트를 생성할 수 있다. 컨트롤러(121)는 완료 큐(CQ)를 모니터링 하기 위해, 완료 큐 테일 도어벨(CQTDBL) 및 완료 큐 헤드 도어벨(CQHDBL)을 확인할 수 있다. 전술한대로, 컨트롤러(121)는 호스트(110) 명령을 완료하고, 완료 큐 테일 도어벨(CQTDBL)을 업데이트한다. 따라서, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)을 참조하여, 완료 큐 테일(CQ Tail)을 확인할 수 있다. 또한, 호스트(110)는 완료 큐 엔트리(CQ Entry)를 처리하고, 컨트롤러(121)의 완료 큐 헤드 도어벨(CQHDBL)을 업데이트한다. 따라서, 컨트롤러(121)는 완료 큐 헤드 도어벨(CQHDBL)을 참조하여, 완료 큐 헤드(CQ Head)를 확인할 수 있다.
완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이는 완료 큐(CQ)의 상태를 나타낼 수 있다. 즉, 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이는 호스트(110)가 처리하지 못한 완료 큐 엔트리들(CQ Entries)의 개수를 의미할 수 있다. 예를 들어, 호스트(110)가 인터럽트 서비스 루틴을 원활하게 수행하는 경우, 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이는 상대적으로 작아질 수 있다. 반대로, 호스트(110)가 인터럽트 서비스 루틴을 원활하게 수행하지 못하는 경우, 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이는 상대적으로 커질 수 있다. 즉, 호스트(110)의 상태에 따라, 완료 큐 엔트리(CQ Entry)는 펜딩(Pending)될 수 있다. 이 경우, 컨트롤러(121)가 인터럽트를 생성하면, 호스트(110)의 성능은 저하될 수 있다.
본 발명의 실시 예에 따른 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이가 작을 때 인터럽트를 생성할 수 있다. 즉, 호스트(110)가 인터럽트 서비스 루틴을 원활하게 수행할 수 있는 경우, 컨트롤러(121)는 인터럽트를 생성할 수 있고, 호스트(110)가 인터럽트 서비스 루틴을 원활하게 수행할 수 없는 경우, 컨트롤러(121)는 인터럽트를 생성하지 않을 수 있다. 즉, 호스트(110)의 성능 향상을 위해, 컨트롤러(121)는 적응형 인터럽트(Adaptive Interrupt)를 생성할 수 있다.
도 2는 도 1에서 도시된 호스트 및 데이터 저장 장치 사이의 동작을 예시적으로 보여주는 도면이다. 도 2는 도 1을 참조하여 설명될 것이다.
S110 단계에서, 호스트(110)는 데이터 저장 장치를 사용하기 위한 명령을 생성하고, 명령을 제출 큐 엔트리(SQ Entry)에 쓸 수 있다. 또한, 호스트(110)는 제출 큐 테일(SQ Tail)을 업데이트할 수 있다.
S120 단계에서, 호스트(110)는 새로운 명령이 제출 큐(SQ)에 쓰여졌음을 알리기 위해, 제출 큐 테일 도어벨(SQTDBL)을 업데이트할 수 있다. 좀 더 구체적으로, 호스트(110)는 컨트롤러(121)의 제출 큐 테일 도어벨(SQTDBL)에 새로운 제출 큐 테일(SQ Tail) 정보를 기입할 수 있다.
S130 단계에서, 컨트롤러(121)는 제출 큐 테일 도어벨(SQTDBL)을 참조하여, 제출 큐 엔트리(SQ Entry)를 패치할 수 있다. 이 때, 하나 또는 그 이상의 제출 큐 엔트리들(SQ Entries)이 순서대로 패치될 수 있다. 좀 더 구체적으로, 컨트롤러(121)는 제출 큐 헤드(SQ Head)부터 제출 큐 테일(SQ Tail)까지 저장된 명령들을 순서대로 패치할 수 있다.
S140 단계에서, 컨트롤러(121)는 패치된 명령들에 대응되는 동작을 실행할 수 있다. 이 때, 제출 큐(SQ)에 저장된 명령들은 패치 순서대로 실행될 수도 있고, 그렇지 않을 수도 있다. 도시되진 않았지만, 데이터 저장 장치는 불휘발성 메모리(Nonvolatile Memory) 또는 휘발성 메모리(Volatile Memory)를 포함할 수 있다. 컨트롤러(121)는 불휘발성 메모리 장치 또는 휘발성 메모리의 특성을 고려하여 제출 큐 엔트리(SQ Entry)에 저장된 명령을 실행할 수 있다.
S150 단계에서, 컨트롤러(121)는 제출 큐(SQ)로부터 패치한 명령에 대한 완료를 알리기 위해 완료 큐 엔트리(CQ Entry)를 쓸 수 있다. 예시적으로, 완료 큐 엔트리(CQ Entry)의 크기는 16 바이트(Byte)일 수 있다. 완료 큐 엔트리(CQ Entry)는 제출 큐 식별자(SQ Identifier; SQID), 제출 큐 헤드 포인터(SQ Head Pointer; SQHD), 상태 필드(Status Field; SF), 페이즈 태그(Phase Tag; P), 명령 식별자(Command Identifier; CID) 등을 포함할 수 있다.
S160 단계에서, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL) 및 완료 큐 헤드 도어벨(CQHDBL)을 모니터링 할 수 있다. 전술한대로, 완료 큐 테일 도어벨(CQTDBL)은 컨트롤러(121)에 의해 업데이트될 수 있다. 완료 큐 헤드 도어벨(CQHDBL)은 호스트(110)에 의해 업데이트될 수 있다. 이후, 컨트롤러(121)는 모니터링 결과를 참조하여 인터럽트를 생성할지 여부를 결정할 수 있다.
S170 단계에서, 컨트롤러(121)는 선택적으로 인터럽트를 생성하고, 인터럽트를 호스트(110)로 전송할 수 있다. 인터럽트는 핀 기반의 신호일 수도 있고, 메시지 신호 기반의 인터럽트(Message Signaled Interrupt: 이하, MSI) 또는 MSI-X 방식으로 전송될 수 있다.
S180 단계에서, 호스트(110)는 컨트롤러(121)로부터 인터럽트를 수신하고, 완료 큐 엔트리(CQ Entry)를 처리할 수 있다. 좀 더 구체적으로, 호스트(110)는 인터럽트 서비스 루틴을 수행할 수 있다. 호스트(110)는 요청한 명령이 정상적으로 처리되면 그에 상응하는 후속 명령을 새로 생성할 수 있다. 그러나 호스트(110)는 요청한 명령이 정상적으로 처리되지 않은 경우, 다시 명령을 생성하거나 에러를 복구하는 동작을 수행할 수 있다.
S190 단계에서, 호스트(110)는 완료 큐 엔트리(CQ Entry)가 처리되었음을 알리기 위해, 완료 큐 헤드 도어벨(CQHDBL)을 업데이트할 수 있다. 좀 더 구체적으로, 호스트(110)는 완료 큐 헤드(CQ Head)가 변경되었음을 컨트롤러(121)에 알릴 수 있다. 업데이트된 완료 큐 헤드 도어벨(CQHDBL)은 전술한 S160 단계에서 컨트롤러(121)에 의해 사용될 수 있다.
도 3 및 도 4는 도 1에서 도시된 컨트롤러의 동작을 예시적으로 보여주는 타이밍도이다. 도 3 및 도 4는 도 1 및 도 2를 참조하여 설명될 것이다.
T1 시점에서, 컨트롤러(도 1 참조, 121)는 완료 신호를 생성할 수 있다. 좀 더 구체적으로, 컨트롤러(121)는 완료 큐 엔트리(CQ Entry)를 쓸 수 있다. T1 시점에서 소정의 시간이 경과된 후, 컨트롤러(121)는 인터럽트를 생성할 수 있다. 상술한 동작은 도 2의 S150 단계 내지 S170 단계와 대응될 수 있다. 도 3 및 도 4를 참조하면, 완료 큐 테일 도어벨(CQTDBL)은 N+1이고, 완료 큐 헤드 도어벨(CQHDBL)은 N일 수 있다. 여기서, N은 임의의 정수이고, 상술한 수치들에 의해 본 발명이 제한되지는 않는다.
T1 시점부터 T2 시점까지, 컨트롤러(121)는 계속해서 완료 신호들을 생성할 수 있다. 또한, 컨트롤러(121)는 완료 신호들을 생성한 후 소정의 시간이 경과된 후에 인터럽트들을 생성할 수 있다. 컨트롤러(121)는 제출 큐 엔트리(SQ Entry)를 처리하였으므로 계속해서 완료 큐 테일 도어벨(CQTDBL)을 업데이트할 수 있다. 도 3 및 도 4를 참조하면, 완료 큐 테일 도어벨(CQTDBL)은 N+1, N+2, N+3으로 순차적으로 업데이트될 수 있다. 그러나, 호스트(도 1 참조, 110)는 컨트롤러(121)로부터 인터럽트를 수신하였음에도 불구하고, 완료 큐 헤드 도어벨(CQHDBL)을 업데이트하지 못할 수 있다. 예시적으로, 호스트(110)는 과부하 상태에 있어 인터럽트 서비스 루틴을 수행하지 못할 상태일 수 있다. 이러한 경우, 완료 큐 헤드 도어벨(CQHDBL)은 계속해서 N으로 유지될 수 있다.
T2 시점에서, 여전히, 컨트롤러(121)는 완료 신호를 생성할 수 있다. 그러나 도 3을 참조하면, 호스트(110)가 인터럽트를 T2 시점 이전부터 처리하지 못했음에도 불구하고, 여전히 인터럽트가 생성될 수 있다. 반면에, 도 4를 참조하면, 본 발명의 실시 예에 따라, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이를 확인하고 인터럽트를 생성하지 않을 수 있다. 따라서, 본 발명의 실시 예에 따라, 호스트(110)는 T2 시점 이후로는 인터럽트를 수신하지 않으므로, 도 3의 경우에 비해 도 4의 경우에서 과부하 상태를 더 빨리 벗어날 수 있다. 도 3 및 도 4를 참조하면, 설명의 편의를 위해 T3 시점이 같은 위치에 도시되었으나, 도 4의 T3 시점은 도 3의 T3 시점보다 더 빠를 수 있다. 즉, 호스트(110)의 성능은 본 발명의 실시 예에 따른 컨트롤러(121)에 의해 향상될 수 있다.
예시적으로 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이가 문턱값(Threshold)보다 크면 컨트롤러(121)는 인터럽트를 생성하지 않을 수 있다. 도 3 및 도 4를 참조하면, 문턱값은 3으로 설정되었으나, 이러한 수치에 의해 본 발명이 제한되지 않는다. 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이와 문턱값을 비교하고, 비교 결과에 따라 인터럽트를 생성할 수 있다. 본 발명의 실시 예에 따르면, 문턱값은 호스트(110) 또는 컨트롤러(121)에 의해 설정될 수 있다.
T3 시점에서, 호스트(110)는 완료 큐 헤드 도어벨(CQHDBL)을 업데이트할 수 있다. 좀 더 구체적으로, 완료 큐 헤드 도어벨(CQHDBL)은 N에서 N+7로 업데이트될 수 있다. 즉, 호스트(110)는 완료 큐 엔트리(CQ Entry)를 처리한다. 동시에, 컨트롤러(121)는 T3 시점 이전과 마찬가지로 계속해서 완료 신호를 생성할 수 있다. 도 3을 참조하면, 완료 큐(CQ) 상태와 무관하게 인터럽트가 계속해서 생성된다. 반면에 도 4를 참조하면, 완료 큐 헤드 도어벨(CQHDBL)의 차이가 3보다 작아졌으므로, 컨트롤러(121)는 다시 인터럽트를 생성할 수 있다. 즉 본 발명에 의하면, 컨트롤러(121)는 완료 큐(CQ)의 처리 상태를 고려하여 적응형 방식으로 인터럽트를 생성할 수 있다. T3 시점부터 T4 시점 사이의 동작은 전술한 T1 시점부터 T2 시점 사이의 동작과 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL) 값들만 상이하고, 대체로 동일하다.
T4 시점에서, 전술한 T2 시점에서의 동작과 마찬가지로, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이를 확인하고 인터럽트를 생성하지 않을 수 있다. 도 4를 참조하면, 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이가 다시 3보다 커졌으므로, 컨트롤러(121)는 인터럽트를 생성하지 않을 수 있다.
도 5는 도 1에서 도시된 컨트롤러 및 호스트의 동작을 예시적으로 보여주는 도면이다. 도 5는 도 1 내지 도 4를 참조하여 설명될 것이다.
도 5를 참조하면, 컨트롤러(121)는 호스트(110)의 명령을 완료하고, 완료 큐 테일 도어벨(CQTDBL)을 업데이트할 수 있다. 호스트(110)는 완료 큐(CQ)의 완료 큐 엔트리(CQ Entry)를 처리하고, 완료 큐 헤드 도어벨(CQHDBL)을 업데이트할 수 있다. 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL) 및 완료 큐 헤드 도어벨(CQHDBL)을 모두 모니터링 할 수 있다. 좀 더 구체적으로, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL) 및 완료 큐 헤드 도어벨(CQHDBL)의 차이를 계산할 수 있다. 컨트롤러(121)는 상술한 차이를 참조하여 인터럽트의 생성 여부를 결정할 수 있다.
도 5를 참조하면, 완료 큐 테일 도어벨(CQTDBL) 및 완료 큐 헤드 도어벨(CQHDBL)이 모두 0인 경우는 컴퓨터 시스템(100)의 초기 상태를 의미할 수 있다. 이후, 완료 큐 테일 도어벨(CQTDBL) 및 완료 큐 헤드 도어벨(CQHDBL) 각각은 컨트롤러(121) 및 호스트(110)에 의해 업데이트될 수 있다. 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL) 및 완료 큐 헤드 도어벨(CQHDBL)의 차이가 3보다 작거나 같은 경우, 인터럽트를 생성할 수 있다(Interrupt = 1). 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL) 및 완료 큐 헤드 도어벨(CQHDBL)의 차이가 3보다 큰 경우, 인터럽트를 생성하지 않을 수 있다(Interrupt = 0). 도 5에서 음영으로 도시된 부분은 도 4에서 인터럽트가 발생되는 구간(T1 내지 T2 구간 및 T3 내지 T4 구간)과 대응될 수 있다. 도 5에서 음영으로 도시되지 않은 부분은 도 4에서 인터럽트가 발생되는 않는 구간(T2 내지 T3 구간 및 T4 이후 구간)과 대응될 수 있다. 그리고, 도 5에서 도시된 수치들에 의해 본 발명이 제한되지 않는다.
도 6은 도 1에서 도시된 컨트롤러의 동작을 예시적으로 보여주는 순서도이다. 도 6은 도 1 및 도 2를 참조하여 설명될 것이다.
S210 단계에서, 컨트롤러(121)는 호스트(110)로부터 제출 큐 테일 도어벨(SQTDBL)을 수신할 수 있다. 제출 큐 테일 도어벨(SQTDBL)은 호스트(110)에 의해 업데이트될 수 있다. 호스트(110)는 데이터 저장 장치(120)를 사용하기 위한 명령을 제출 큐 엔트리(SQ Entry)에 저장하고, 제출 큐 테일 도어벨(SQTDBL)을 업데이트할 수 있다. S210 단계는 도 2의 S120 단계와 대응될 수 있다.
S220 단계에서, 컨트롤러(121)는 제출 큐(SQ)로부터 제출 큐 엔트리(SQ Entry)를 패치할 수 있다. 이 때, 컨트롤러(121)는 제출 큐 헤드(SQ Head)부터 제출 큐 테일(SQ Tail)까지 상응하는 제출 큐 엔트리들(SQ Entries)을 순서대로 또는 한꺼번에 패치할 수 있다. S220 단계는 도 2의 S130 단계와 대응될 수 있다.
S230 단계에서, 컨트롤러(121)는 S220 단계에서 패치한 명령에 해당하는 실행을 진행할 수 있다. 컨트롤러(121)는 패치한 명령을 순서대로 실행하거나 순서를 바꾸어서 실행할 수 있다. S230 단계는 도 2의 S140 단계와 대응될 수 있다.
S240 단계에서, 컨트롤러(121)는 완료 큐 엔트리(CQ Entry)를 쓸 수 있다. S240 단계는 컨트롤러(121)가 제출 큐(SQ)로부터 패치한 명령에 대한 실행을 완료한 후에 수행될 수 있다. 그리고, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)을 업데이트할 수 있다. 업데이트된 완료 큐 테일 도어벨(CQTDBL)은 완료 큐 엔트리(CQ Entry)가 새로 쓰여졌음을 의미할 수 있다. S240 단계는 도 2의 S150 단계와 대응될 수 있다.
S250 단계에서, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)을 모니터링 할 수 있다. 전술한대로, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL) 모두를 확인할 수 있다. S250 단계는 도 7에서 상세하게 설명된다. S250 단계는 도 2의 S160 단계와 대응될 수 있다.
S260 단계에서, 컨트롤러(121)는 모니터링 결과에 기초하여 인터럽트를 호스트(110)로 전송할 수 있다. 컨트롤러(121)는 인터럽트를 호스트(110)에 전송하지 않을 수도 있다. S260 단계는 도 2의 S170 단계와 대응될 수 있다.
S270 단계에서, 컨트롤러(121)는 호스트(110)로부터 완료 큐 헤드 도어벨(CQHDBL)을 수신할 수 있다. 호스트(110)는 완료 큐 헤드(CQ Head)가 업데이트되었고, 그 위치를 컨트롤러(121)에 알리기 위해, 완료 큐 헤드 도어벨(CQHDBL)을 컨트롤러(121)로 전송할 수 있다. S270 단계는 도 2의 S190 단계와 대응될 수 있다.
도 7은 도 6에서 도시된 S250 단계를 상세하게 설명하는 순서도이다. 도 7은 도 1, 도 2, 및 도 6을 참조하여 설명될 것이다.
S251 단계에서, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이를 계산할 수 있다. 예시적으로, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)을 업데이트할 때 상술한 차이를 계산할 수 있다.
S252 단계에서, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이와 문턱값을 비교할 수 있다. 문턱값은 사전에 결정된 고정적인 값이거나, 호스트(110) 또는 컨트롤러(121)에 의해 변경될 수 있는 가변적인 값일 수 있다. 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이가 문턱값보다 작거나 같은 경우(Yes), S253 단계가 수행될 수 있다. 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이가 문턱값보다 큰 경우(No), S254 단계가 수행될 수 있다.
S253 단계에서, 컨트롤러(121)는 인터럽트를 생성할 수 있다. 반면에 S254 단계에서, 컨트롤러(121)는 인터럽트를 생성하지 않을 수 있다. 본 발명의 실시 예에 따르면, 컨트롤러(121)는 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)을 모니터링하고 완료 큐(CQ)의 상태를 확인할 수 있다. 즉, 컨트롤러(121)는 완료 큐(CQ)의 상태를 고려하여 인터럽트를 생성할 수 있다.
도 8은 도 1에서 도시된 컨트롤러를 예시적으로 보여주는 블록도이다. 도 8을 참조하면, 컨트롤러(200)는 완료 큐 테일 도어벨(CQTDBL, 210), 완료 큐 헤드 도어벨(CQHDBL, 220), 문턱값 레지스터(Threshold Register, 230), 계산기(Calculator, 240), 및 인터럽트 컨트롤러(Interrupt Controller, 250)를 포함할 수 있다.
완료 큐 테일 도어벨(CQTDBL)에는 완료 큐 테일(CQ Tail)에 대한 정보가 포함될 수 있다. 즉, 컨트롤러(200)는 완료 큐 엔트리(CQ Entry)를 쓰고, 완료 큐 테일(CQ Tail)에 대한 정보를 완료 큐 테일 도어벨(210)에 저장할 수 있다. 완료 큐 테일(CQ Tail)은 컨트롤러(200)에 의해 업데이트 되므로, 컨트롤러(200)는 완료 큐 테일(CQ Tail)에 대한 정보를 저장할 수 있다.
완료 큐 헤드 도어벨(CQHDBL)에는 완료 큐 헤드(CQ Head)에 대한 정보가 포함될 수 있다. 호스트(도 1 참조, 110)는 완료 큐 엔트리(CQ Entry)를 처리하고, 완료 큐 헤드 도어벨(CQHDBL)을 업데이트할 수 있다. 즉, 완료 큐 헤드 도어벨(220)는 호스트(110)에 의해 업데이트될 수 있다.
문턱값 레지스터(230)에는 문턱값이 저장될 수 있다. 문턱값은 호스트(110)의 성능을 판단하는 하나의 지표로 이용될 수 있다. 전술한대로, 문턱값은 사전에 결정된 값이거나, 호스트(110) 또는 컨트롤러(200)에 의해 변경될 수 있다.
계산기(240)는 완료 큐 테일 도어벨(210) 및 완료 큐 헤드 도어벨(220)의 값들을 참조하여 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이를 계산할 수 있다. 계산기(240)는 다양한 논리 회로들(예를 들면, AND, NAND, OR, NOR, XOR, XNOR 등)의 조합으로 구현될 수 있다. 계산기(240)는 계산 결과를 인터럽트 컨트롤러(250)로 전달할 수 있다.
인터럽트 컨트롤러(250)는 계산 결과 및 문턱값을 참조하여 인터럽트의 생성 여부를 결정할 수 있다. 전술한대로, 인터럽트 컨트롤러(250)는 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이가 문턱값보다 작거나 같은 경우에는 인터럽트를 생성하고, 완료 큐 테일 도어벨(CQTDBL)과 완료 큐 헤드 도어벨(CQHDBL)의 차이가 문턱값보다 큰 경우에는 인터럽트를 생성하지 않을 수 있다.
완료 큐 테일 도어벨(210), 완료 큐 헤드 도어벨(220), 문턱값 레지스터(230), 계산기(240), 및 인터럽트 컨트롤러(250)는 하드웨어 방식 또는 소프트웨어 방식으로 구현될 수 있다. 예를 들면, 완료 큐 테일 도어벨(210), 완료 큐 헤드 도어벨(220), 문턱값 레지스터(230), 계산기(240), 및 인터럽트 컨트롤러(250)는 FPGA(Field Programmable Gate Array) 또는 ASIC(Application Specific Integrated Circuit) 등으로 구현될 수 있다.
도 9는 도 1에서 도시된 컨트롤러를 예시적으로 보여주는 블록도이다. 도 9를 참조하면, 컨트롤러(300)는 CPU(310), 호스트 인터페이스(Host Interface, 320), 버퍼 매니저(Buffer Manager, 330), 및 플래시 인터페이스(Flash Interface, 340)를 포함할 수 있다.
CPU(310)는 불휘발성 메모리 장치들에 대한 읽기 또는 쓰기 동작에 필요한 다양한 제어 정보를 호스트 인터페이스(320) 및 플래시 인터페이스(340)의 레지스터들에 전달한다. CPU(310)는 컨트롤러(300)의 다양한 제어 동작을 위해 제공되는 펌웨어에 따라 동작할 수 있다. 예를 들면, CPU(310)는 불휘발성 메모리 장치들을 관리하기 위한 가비지 컬렉션(Garbage collection)이나, 주소 맵핑, 웨어 레벨링 등을 수행하기 위한 플래시 변환 계층(FTL)을 실행할 수 있다.
호스트 인터페이스(320)는 제출 큐 테일 도어벨(SQTDBL, 321), 완료 큐 헤드 도어벨(CQHDBL, 322), 완료 큐 테일 도어벨(CQTDBL, 323), 문턱값 레지스터(324), 계산기(325), 및 인터럽트 컨트롤러(326)를 포함할 수 있다. 호스트 인터페이스(320)는 호스트의 제출 큐(123)의 테일 정보를 저장하기 위한 제출 큐 테일 도어벨(321)을 포함할 수 있다. 그 외, 완료 큐 헤드 도어벨(322), 완료 큐 테일 도어벨(323), 문턱값 레지스터(324), 계산기(325), 및 인터럽트 컨트롤러(326)는 도 8에서 설명된 것과 대체로 유사하다. 호스트 인터페이스(320)는 호스트의 버스 포맷(Bus Format)에 대응하여 스토리지 장치(200)와의 인터페이싱을 제공한다. 인터페이싱의 예시는 도 10에서 후술한다.
다른 실시 예에 있어서, 완료 큐 테일 도어벨(323) 및 문턱값 레지스터(324)는 호스트 인터페이스(320)와 분리되어 배치될 수도 있다. 추가로, 컨트롤러(300)는 완료 큐 테일 도어벨(323) 및 문턱값 레지스터(324)를 포함하지 않고, 완료 큐 테일 정보 및 문턱값 정보를 버퍼 메모리에 저장할 수도 있다. 유사하게, 계산기(325)는 호스트 인터페이스(320)와 분리되어 배치될 수 있다. 추가로, 컨트롤러(300)는 계산기(325)를 포함하지 않고, CPU(310)를 이용하여 완료 큐 테일 도어벨(323)과 완료 큐 헤드 도어벨(322)의 차이를 계산할 수 있다.
버퍼 매니저(330)는 버퍼 메모리(미도시)의 읽기 및 쓰기 동작들을 제어한다. 예를 들면, 버퍼 매니저(330)는 쓰기 데이터(Write data)나 읽기 데이터(Read data)를 버퍼 메모리에 임시로 저장할 수 있다. 버퍼 매니저(330)는 CPU(310)의 제어에 따라 버퍼 메모리의 메모리 영역을 스트림 단위로 구분하여 관리할 수 있다.
플래시 인터페이스(340)는 플래시 메모리 장치(미도시)와 데이터를 교환할 수 있다. 플래시 인터페이스(340)는 버퍼 메모리로부터 전달되는 데이터를 각각의 메모리 채널들(CH1, CH2,… , CHn)을 통해 플래시 메모리 장치에 저장할 수 있다. 그리고 플래시 메모리 장치로부터 읽혀진 데이터는 플래시 인터페이스(340)에 의해 취합될 수 있다. 취합된 데이터는 이후 버퍼 메모리에 저장될 수도 있다.
도 10은 본 발명에 따른 데이터 저장 장치가 적용된 컴퓨터 시스템을 예시적으로 보여주는 블록도이다. 도 10을 참조하면, 컴퓨터 시스템(1000)은 호스트(1100) 및 데이터 저장 장치(1200)를 포함할 수 있다. 호스트(1100)는 프로세서(1110), 호스트 메모리(1120), 및 인터페이스 회로(Interface Circuit, 1130)를 포함할 수 있다.
프로세서(1110)은 호스트 메모리(1120)에 로드된 다양한 소프트웨어(응용 프로그램, 운영 체제, 장치 드라이버)를 실행한다. 프로세서(1110)은 운영 체제(OS), 응용 프로그램들(Application Program)을 실행할 수 있다. 프로세서(1110)은 동종 멀티-코어 프로세서(Homogeneous Multi-Core Processor) 또는 이종 멀티-코어 프로세서(Heterogeneous Multi-Core Processor)로 제공될 수 있다.
호스트 메모리(1120)에는 프로세서(1110)에서 처리할 응용 프로그램이나 데이터들이 로드된다. 그리고 데이터 저장 장치(1200)로 전달될 명령어에 대한 큐(Queue)를 관리하기 위한 입출력 스케줄러(I/O Scheduler, 1121)가 호스트 메모리(1120)에 로드될 수 있다. 입출력 스케줄러(1121)에서 제출 큐(SQ)와 완료 큐(CQ)가 관리될 수 있다. 제출 큐(SQ)는 호스트(1100)에 의해서 기입되는 대기열이고, 제출 큐(SQ)에는 데이터 저장 장치(1200)에 전송되는 명령들이 저장될 수 있다. 그리고 완료 큐(CQ)는 데이터 저장 장치(1200)에 의해서 기입되는 대기열이고, 완료 큐(CQ)에는 호스트(1100)에 의해서 요청된 명령의 완료 정보가 저장될 수 있다.
인터페이스 회로(1130)는 호스트(1100)와 데이터 저장 장치(1200) 사이에서 물리적인 연결을 제공한다. 즉, 인터페이스 회로(1130)는 호스트(1100)에서 발행하는 다양한 접근 요청에 대응하는 명령, 어드레스, 데이터 등을 데이터 저장 장치(1200)와의 인터페이싱 방식으로 변환한다. 인터페이스 회로(1130)의 프로토콜로는 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express(Peripheral Component Interconnect Express), ATA(Advanced Technology Attachment), PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI) 중 적어도 어느 하나일 수 있다. 예시적으로, 인터페이스 회로(1130)는 PCI express 방식으로 데이터를 교환하는 NVMe(NVM express) 프로토콜이 적용될 수 있다.
데이터 저장 장치(1200)는 호스트(1100)로부터 제공되는 명령에 응답하여 불휘발성 메모리들(1220_1~1220_n)에 접근하거나, 호스트(1100)가 요청한 다양한 동작들을 수행할 수 있다. 이를 위해, 데이터 저장 장치는(1200)는 컨트롤러(1210), 불휘발성 메모리들(NVMs, 1220_1~1220_n), 및 버퍼 메모리(1230)를 포함할 수 있다.
컨트롤러(1210)는 호스트(1100)와 데이터 저장 장치(1200) 사이에서 인터페이스를 제공할 수 있다. 본 발명의 실시 예에 따르면, 컨트롤러(1210)는 완료 큐(CQ) 상태를 참조하여, 인터럽트를 생성할 수 있다.
버퍼 메모리(1230)는 컨트롤러(1210)의 동작 메모리, 캐시 메모리 또는 버퍼 메모리로 사용될 수 있다. 버퍼 메모리(1230)는 불휘발성 메모리들(1220_1~1220_n)의 캐시 메모리로 사용될 수도 있다. 버퍼 메모리(1230)는 컨트롤러(1210)가 실행하는 코드들 및 명령들을 저장할 수 있다. 컨트롤러(1210)는 컨트롤러(1210)에 의해 처리되는 데이터를 저장할 수 있다. 예시적으로, 버퍼 메모리(1230)는 휘발성 메모리(예를 들면, DRAM 또는 SRAM)을 포함할 수 있다.
불휘발성 메모리들(1220_1~1220_n)은 컨트롤러(1210)의 제어에 응답하여 데이터 입출력을 수행할 수 있다. 예를 들어, 불휘발성 메모리들(1220_1~1220_n)은 NAND 플래시 메모리(NAND flash memory), NOR 플래시 메모리(NOR flash memory), FRAM(Ferroelectric Random Access Memory), PRAM(Phase Change Random Access Memory), TRAM(Thyristor Random Access Memory), MRAM(Magnetic Random Access Memory), 또는 노어 플래시 메모리(NOR flash memory) 등일 수 있다.
위에서 설명한 내용은 본 발명을 실시하기 위한 구체적인 예들이다. 본 발명에는 위에서 설명한 실시 예들뿐만 아니라, 단순하게 설계 변경하거나 용이하게 변경할 수 있는 실시 예들도 포함될 것이다. 또한, 본 발명에는 상술한 실시 예들을 이용하여 앞으로 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다.
100, 1000: 컴퓨터 시스템
110, 1100 호스트
111, 1120: 호스트 메모리
120, 1200: 데이터 저장 장치
121, 200, 300, 1210: 컨트롤러
210, 323: 완료 큐 테일 도어벨
220, 322: 완료 큐 헤드 도어벨
230, 324: 문턱값 레지스터
240, 325: 계산기
250, 326: 인터럽트 컨트롤러
110, 1100 호스트
111, 1120: 호스트 메모리
120, 1200: 데이터 저장 장치
121, 200, 300, 1210: 컨트롤러
210, 323: 완료 큐 테일 도어벨
220, 322: 완료 큐 헤드 도어벨
230, 324: 문턱값 레지스터
240, 325: 계산기
250, 326: 인터럽트 컨트롤러
Claims (10)
- 호스트와 연결된 데이터 저장 장치에 있어서,
상기 호스트의 명령을 실행하고, 상기 호스트의 완료 큐(Completion Queue)를 업데이트하고, 인터럽트(Interrupt)를 상기 호스트로 전송하는 컨트롤러를 포함하되,
상기 컨트롤러는 상기 완료 큐의 테일 도어벨(Tail Doorbell)과 헤드 도어벨(Head Doorbell)을 모니터링(Monitoring)하고, 상기 모니터링 결과를 참조하여 상기 인터럽트를 생성하는 데이터 저장 장치. - 제 1 항에 있어서,
상기 컨트롤러는 상기 테일 도어벨과 상기 헤드 도어벨의 차이를 계산하는 데이터 저장 장치. - 제 2 항에 있어서,
상기 컨트롤러는 상기 차이에 기초하여, 상기 완료 큐의 상태를 확인하는 데이터 저장 장치. - 제 2 항에 있어서,
상기 컨트롤러는 상기 차이가 문턱값(Threshold)보다 작거나 같은 경우에는 상기 인터럽트를 생성하고, 상기 차이가 상기 문턱값보다 큰 경우에는 상기 인터럽트를 생성하지 않는 데이터 저장 장치. - 제 4 항에 있어서,
상기 문턱값은 사전에 결정된 값이거나, 상기 호스트에 의해 변경되는 데이터 저장 장치. - 제 1 항에 있어서,
상기 컨트롤러는 상기 호스트의 명령을 처리하고 상기 테일 도어벨을 상기 호스트로 전송하고, 상기 호스트로부터 상기 헤드 도어벨을 수신하는 데이터 저장 장치. - 제 6 항에 있어서,
상기 테일 도어벨과 상기 헤드 도어벨을 저장하기 위한 레지스터를 더 포함하는 데이터 저장 장치. - 호스트와 연결된 데이터 저장 장치의 동작 방법에 있어서,
상기 호스트의 명령을 실행하고, 상기 호스트의 완료 큐(Completion Queue)를 업데이트 하는 단계;
상기 완료 큐의 테일 도어벨(Tail Doorbell)과 헤드 도어벨(Head Doorbell)을 모니터링(Monitoring)하는 단계; 및
상기 모니터링 결과를 참조하여 인터럽트(Interrupt)를 상기 호스트로 전송하는 단계를 포함하는 데이터 저장 장치의 동작 방법. - 제 8 항에 있어서,
상기 모니터링하는 단계는:
상기 테일 도어벨과 상기 헤드 도어벨의 차이를 계산하는 단계; 및
상기 차이와 문턱값(Threshold)을 비교하는 단계를 포함하는 데이터 저장 장치의 동작 방법. - 제 9 항에 있어서,
상기 인터럽트를 상기 호스트로 전송하는 단계는:
상기 차이가 상기 문턱값보다 작거나 같은 경우에 상기 인터럽트를 생성하는 단계; 및
상기 차이가 상기 문턱값보다 큰 경우에 상기 인터럽트를 생성하지 않는 단계를 포함하는 데이터 저장 장치의 동작 방법.
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160138584A KR20180045103A (ko) | 2016-10-24 | 2016-10-24 | 적응형 인터럽트를 생성하는 데이터 저장 장치 및 그것의 동작 방법 |
US15/702,275 US20180113615A1 (en) | 2016-10-24 | 2017-09-12 | Storage device generating adaptive interrupt and operating method thereof |
CN201710991881.1A CN107977164A (zh) | 2016-10-24 | 2017-10-23 | 产生自适应中断的存储装置及其操作方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160138584A KR20180045103A (ko) | 2016-10-24 | 2016-10-24 | 적응형 인터럽트를 생성하는 데이터 저장 장치 및 그것의 동작 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20180045103A true KR20180045103A (ko) | 2018-05-04 |
Family
ID=61969592
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020160138584A KR20180045103A (ko) | 2016-10-24 | 2016-10-24 | 적응형 인터럽트를 생성하는 데이터 저장 장치 및 그것의 동작 방법 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20180113615A1 (ko) |
KR (1) | KR20180045103A (ko) |
CN (1) | CN107977164A (ko) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115858414A (zh) * | 2022-12-13 | 2023-03-28 | 东信和平科技股份有限公司 | 基于中断和缓冲区的spi数据传输方法、系统和控制器 |
US11625195B2 (en) | 2021-02-18 | 2023-04-11 | SK Hynix Inc. | Memory system and operating method of memory system storing doorbell information in the buffer memory |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10509569B2 (en) | 2017-03-24 | 2019-12-17 | Western Digital Technologies, Inc. | System and method for adaptive command fetch aggregation |
US10466903B2 (en) | 2017-03-24 | 2019-11-05 | Western Digital Technologies, Inc. | System and method for dynamic and adaptive interrupt coalescing |
US10387081B2 (en) * | 2017-03-24 | 2019-08-20 | Western Digital Technologies, Inc. | System and method for processing and arbitrating submission and completion queues |
US10452278B2 (en) | 2017-03-24 | 2019-10-22 | Western Digital Technologies, Inc. | System and method for adaptive early completion posting using controller memory buffer |
US10466904B2 (en) | 2017-03-24 | 2019-11-05 | Western Digital Technologies, Inc. | System and method for processing and arbitrating submission and completion queues |
KR102560251B1 (ko) * | 2018-06-20 | 2023-07-26 | 삼성전자주식회사 | 반도체 장치 및 반도체 시스템 |
CN109165105A (zh) * | 2018-08-17 | 2019-01-08 | 郑州云海信息技术有限公司 | 一种主机和物理机系统 |
US11054995B2 (en) | 2018-09-07 | 2021-07-06 | Micron Technology, Inc. | Row hammer protection for a memory device |
US11055022B2 (en) * | 2019-03-25 | 2021-07-06 | Western Digital Technologies, Inc. | Storage system and method for early host command fetching in a low queue depth environment |
CN110109626B (zh) * | 2019-05-20 | 2022-01-25 | 哈尔滨工业大学 | 一种基于FPGA的NVMe SSD命令处理方法 |
CN110659122A (zh) * | 2019-07-31 | 2020-01-07 | 杭州阿姆科技有限公司 | 一种ssd中断实现方法及装置 |
DE102020110559A1 (de) * | 2019-08-14 | 2021-02-18 | Samsung Electronics Co., Ltd. | Rechensystem zur Reduzierung von Latenz zwischen seriell verbundenen elektronischen Vorrichtungen |
CN111221755B (zh) * | 2019-12-28 | 2020-11-10 | 重庆秦嵩科技有限公司 | 一种FPGA2子模块的io中断控制方法 |
CN111221476B (zh) * | 2020-01-08 | 2022-03-29 | 深圳忆联信息系统有限公司 | 提升ssd性能的前端命令处理方法、装置、计算机设备及存储介质 |
KR20210094178A (ko) | 2020-01-20 | 2021-07-29 | 삼성전자주식회사 | 직렬로 연결된 전자 장치들 사이에서 컴플리션을 조기에 전송하기 위한 컴퓨팅 시스템 |
JP2022048716A (ja) * | 2020-09-15 | 2022-03-28 | キオクシア株式会社 | ストレージシステム |
CN114490106A (zh) * | 2020-11-13 | 2022-05-13 | 瑞昱半导体股份有限公司 | 信息交换系统与方法 |
CN112486574B (zh) * | 2020-12-16 | 2024-07-05 | 江苏国科微电子有限公司 | 一种完成队列的回复管理方法、装置、设备及存储介质 |
KR20220165128A (ko) * | 2021-06-07 | 2022-12-14 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 데이터 처리 시스템 |
CN114048156B (zh) * | 2021-10-28 | 2024-05-03 | 山东云海国创云计算装备产业创新中心有限公司 | 一种多通道多映射中断控制器 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6145061A (en) * | 1998-01-07 | 2000-11-07 | Tandem Computers Incorporated | Method of management of a circular queue for asynchronous access |
US6918116B2 (en) * | 2001-05-15 | 2005-07-12 | Hewlett-Packard Development Company, L.P. | Method and apparatus for reconfiguring thread scheduling using a thread scheduler function unit |
US8588228B1 (en) * | 2010-08-16 | 2013-11-19 | Pmc-Sierra Us, Inc. | Nonvolatile memory controller with host controller interface for retrieving and dispatching nonvolatile memory commands in a distributed manner |
CN106021147B (zh) * | 2011-09-30 | 2020-04-28 | 英特尔公司 | 在逻辑驱动器模型下呈现直接存取的存储设备 |
US9348537B2 (en) * | 2013-09-10 | 2016-05-24 | Qualcomm Incorporated | Ascertaining command completion in flash memories |
CN104077198B (zh) * | 2014-06-19 | 2017-06-06 | 华为技术有限公司 | 门铃db恢复方法及装置、具有该装置的输入/输出i/o设备 |
US9626309B1 (en) * | 2014-07-02 | 2017-04-18 | Microsemi Storage Solutions (U.S.), Inc. | Method and controller for requesting queue arbitration and coalescing memory access commands |
KR102238652B1 (ko) * | 2014-11-12 | 2021-04-09 | 삼성전자주식회사 | 데이터 저장 장치, 이의 작동 방법, 및 이를 포함하는 데이터 처리 시스템의 작동 방법 |
KR102309798B1 (ko) * | 2015-04-16 | 2021-10-06 | 삼성전자주식회사 | Sr-iov 기반 비휘발성 메모리 컨트롤러 및 그 비휘발성 메모리 컨트롤러에 의해 큐에 리소스를 동적 할당하는 방법 |
KR20170032502A (ko) * | 2015-09-14 | 2017-03-23 | 삼성전자주식회사 | 스토리지 장치 및 그것의 인터럽트 발생 방법 |
-
2016
- 2016-10-24 KR KR1020160138584A patent/KR20180045103A/ko unknown
-
2017
- 2017-09-12 US US15/702,275 patent/US20180113615A1/en not_active Abandoned
- 2017-10-23 CN CN201710991881.1A patent/CN107977164A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11625195B2 (en) | 2021-02-18 | 2023-04-11 | SK Hynix Inc. | Memory system and operating method of memory system storing doorbell information in the buffer memory |
CN115858414A (zh) * | 2022-12-13 | 2023-03-28 | 东信和平科技股份有限公司 | 基于中断和缓冲区的spi数据传输方法、系统和控制器 |
Also Published As
Publication number | Publication date |
---|---|
CN107977164A (zh) | 2018-05-01 |
US20180113615A1 (en) | 2018-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20180045103A (ko) | 적응형 인터럽트를 생성하는 데이터 저장 장치 및 그것의 동작 방법 | |
US11550477B2 (en) | Processing host write transactions using a non-volatile memory express controller memory manager | |
US9740439B2 (en) | Solid-state storage management | |
US10353587B2 (en) | Data storage device and method of processing data thereof | |
US10157142B2 (en) | Offload data transfer engine for a block data transfer interface | |
KR20180016679A (ko) | 호스트 메모리를 이용하는 데이터 저장 장치 및 그것의 동작 방법 | |
TW202042050A (zh) | 利用自我調整寫緩衝區釋放的存儲介質編程 | |
US10572402B2 (en) | Storage device communicating with host according to multicast communication protocol and communication method of host | |
CN112948292A (zh) | 储存设备及其中断生成方法 | |
US10901624B1 (en) | Dummy host command generation for supporting higher maximum data transfer sizes (MDTS) | |
CN110806837A (zh) | 数据处理系统及其操作方法 | |
US11199992B2 (en) | Automatic host buffer pointer pattern detection | |
US20220100425A1 (en) | Storage device, operating method of storage device, and operating method of computing device including storage device | |
US20150019796A1 (en) | Data storage device and operating method thereof | |
CN109558266B (zh) | 主动错误更正失败处理方法 | |
KR20210039171A (ko) | 메모리 시스템을 포함하는 데이터 처리 시스템에서 동작 정보를 송수신하는 방법 및 장치 | |
TWI670595B (zh) | 主動錯誤更正失敗處理方法 | |
US20240296131A1 (en) | Storage controller managing completion timing, and operating method thereof | |
TW202316259A (zh) | 用於控制資料處理系統中的共享記憶體的設備和方法 | |
US11714697B2 (en) | Reset and replay of memory sub-system controller in a memory sub-system | |
US20210191884A1 (en) | Storage controller managing completion timing, and operating method thereof | |
KR20220127076A (ko) | 컨트롤러 및 컨트롤러의 동작 방법 | |
CN113138950A (zh) | 在串联连接的电子装置之间提前发送完成的计算系统 | |
US20240168876A1 (en) | Solving submission queue entry overflow using metadata or data pointers | |
EP4258097A1 (en) | Operation method of host device and operation method of storage device |