KR102331926B1 - 저장 장치를 포함하는 호스트 시스템의 동작 방법 및 저장 장치 제어기의 동작 방법 - Google Patents
저장 장치를 포함하는 호스트 시스템의 동작 방법 및 저장 장치 제어기의 동작 방법 Download PDFInfo
- Publication number
- KR102331926B1 KR102331926B1 KR1020170154289A KR20170154289A KR102331926B1 KR 102331926 B1 KR102331926 B1 KR 102331926B1 KR 1020170154289 A KR1020170154289 A KR 1020170154289A KR 20170154289 A KR20170154289 A KR 20170154289A KR 102331926 B1 KR102331926 B1 KR 102331926B1
- Authority
- KR
- South Korea
- Prior art keywords
- host
- storage device
- debugging data
- interface
- pcie
- Prior art date
Links
Images
Classifications
-
- 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/38—Information transfer, e.g. on bus
-
- 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/1694—Configuration of memory controller to different memory types
-
- 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
-
- 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
- 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
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
- G06F13/423—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus with synchronous protocol
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
본 발명의 실시 예에 따른 저장 장치를 제어하는 저장 장치 제어기의 동작 방법은 외부로부터 PCIe(peripheral component interconnect express) 인터페이스를 통해 디버깅 데이터 요청 커맨드를 수신하는 단계 및 상기 PCIe 인터페이스에 포함된 레지스터에 디버깅 데이터를 저장하는 단계를 포함한다. 본 발명에 따르면, 저장 장치 제어기는 PCIe 인터페이스만을 사용하여 호스트로 디버깅 데이터를 전달할 수 있다. 따라서, 저장 장치 제어기는 빠른 속도로 디버깅 데이터를 전달 할 수 있고, 디버깅 데이터를 전달하는데 있어서 별도의 장비가 필요하지 않을 수 있다.
Description
본 발명은 저장 장치를 포함하는 호스트 시스템에 관한 것으로, 좀 더 상세하게는 디버깅 동작을 수행하기 위한 호스트 시스템의 동작 방법 및 저장 장치 제어기의 동작 방법에 관한 것이다.
플래시 메모리 장치는 컴퓨터, 스마트폰, PDA, 디지털 카메라, 캠코더, 보이스 레코더, MP3 플레이어, 휴대용 컴퓨터와 같은 정보 기기들의 음성 및 영상 데이터 저장 매체로서 널리 사용되고 있다. 플래시 메모리 기반의 대용량 저장 장치의 대표적인 예로 솔리드 스테이트 드라이브(SSD; solid state drive)가 있다. 최근에 SSD는 호스트(host)와 연결되는 고속 인터페이스(high speed interface)로서, PCIe(peripheral component interconnect express) 기반의 NVMe(nonvolatile memory express) 인터페이스를 사용한다.
NVMe 인터페이스 기반의 SSD에 불량이 발생된 경우, SSD의 불량을 분석하기 위한 디버깅(debugging) 데이터가 획득되어야 한다. 호스트는 NVMe 인터페이스를 통해 디버깅 데이터를 획득할 수 있지만, 다양한 원인으로 인하여 데이터 획득에 있어서 어려움이 존재한다. 예를 들어, NVMe 인터페이스에 문제가 발생되거나 NVMe 인터페이스를 이용하는 소프트웨어 또는 펌웨어(firmware)에 문제가 발생되는 경우, 호스트는 NVMe 인터페이스를 통해 디버깅 데이터를 획득할 수 없다.
본 발명의 목적은 NVMe 인터페이스를 사용하지 않고 디버깅 동작을 수행하는 호스트 시스템의 동작 방법 및 저장 장치 제어기의 동작 방법을 제공하는데 있다.
본 발명의 실시 예에 따른 저장 장치를 제어하는 저장 장치 제어기의 동작 방법은 외부로부터 PCIe(peripheral component interconnect express) 인터페이스를 통해 디버깅 데이터 요청 커맨드를 수신하는 단계 및 상기 PCIe 인터페이스에 포함된 레지스터에 디버깅 데이터를 저장하는 단계를 포함한다.
본 발명의 다른 실시 예에 따른 저장 장치를 제어하는 저장 장치 제어기의 동작 방법은 호스트로부터 PCIe(peripheral component interconnect express) 인터페이스를 통해 디버깅 데이터 요청 커맨드를 수신하는 단계 및 상기 호스트에 포함된 호스트 버퍼 메모리에 디버깅 데이터를 저장하는 단계를 포함한다.
본 발명의 실시 예에 따른 호스트 및 저장 장치를 포함하는 호스트 시스템의 동작 방법은 상기 호스트가 디버깅 동작을 시작하는 단계, 상기 호스트가 제1 장치 드라이버의 동작을 정지하고 제2 장치 드라이버를 동작시키는 단계, 상기 호스트가 상기 제2 장치 드라이버로부터 생성된 디버깅 데이터 요청 커맨드를 상기 저장 장치로 전달하는 단계 및 상기 저장 장치가 PCIe(peripheral component interconnect express) 인터페이스를 통해 디버깅 데이터를 상기 호스트로 전달하는 단계를 포함한다.
본 발명에 따르면, 저장 장치 제어기는 PCIe 인터페이스만을 사용하여 호스트로 디버깅 데이터를 전달할 수 있다. 따라서, 저장 장치 제어기는 빠른 속도로 디버깅 데이터를 전달 할 수 있고, 디버깅 데이터를 전달하는데 있어서 별도의 장비가 필요하지 않을 수 있다.
도 1은 본 발명의 실시 예에 따른 호스트 시스템을 보여주는 블록도이다.
도 2는 본 발명의 실시 예에 따른 호스트 시스템의 계층을 예시적으로 보여주는 블록도이다.
도 3은 도 1의 호스트 시스템의 디버깅 동작의 실시 예를 설명하기 위한 블록도이다.
도 4는 도 3의 호스트 시스템의 예시적인 동작 방법에 대한 순서도이다.
도 5는 도 3의 호스트 시스템의 디버깅 동작에 사용되는 프로토콜의 예시를 설명하기 위한 도면이다.
도 6은 도 3의 저장 장치 제어기의 동작 방법을 보여주는 순서도이다.
도 7은 본 발명에 따른 호스트 시스템의 디버깅 동작에 대한 다른 실시 예를 설명하기 위한 블록도이다.
도 8은 도 7의 호스트 시스템의 예시적인 동작 방법에 대한 순서도이다.
도 9는 도 7의 호스트 시스템의 디버깅 동작에 사용되는 프로토콜의 예시를 설명하기 위한 도면이다.
도 10은 도 7의 저장 장치 제어기의 동작 방법을 보여주는 순서도이다.
도 11은 본 발명의 실시 예에 따른 제2 장치 드라이버의 동작을 보여주는 순서도이다.
도 12는 본 발명의 실시 예에 따른 SSD를 예시적으로 보여주는 도면이다.
도 13은 본 발명의 실시 예에 따른 호스트 시스템을 예시적으로 보여주는 블록도이다.
도 2는 본 발명의 실시 예에 따른 호스트 시스템의 계층을 예시적으로 보여주는 블록도이다.
도 3은 도 1의 호스트 시스템의 디버깅 동작의 실시 예를 설명하기 위한 블록도이다.
도 4는 도 3의 호스트 시스템의 예시적인 동작 방법에 대한 순서도이다.
도 5는 도 3의 호스트 시스템의 디버깅 동작에 사용되는 프로토콜의 예시를 설명하기 위한 도면이다.
도 6은 도 3의 저장 장치 제어기의 동작 방법을 보여주는 순서도이다.
도 7은 본 발명에 따른 호스트 시스템의 디버깅 동작에 대한 다른 실시 예를 설명하기 위한 블록도이다.
도 8은 도 7의 호스트 시스템의 예시적인 동작 방법에 대한 순서도이다.
도 9는 도 7의 호스트 시스템의 디버깅 동작에 사용되는 프로토콜의 예시를 설명하기 위한 도면이다.
도 10은 도 7의 저장 장치 제어기의 동작 방법을 보여주는 순서도이다.
도 11은 본 발명의 실시 예에 따른 제2 장치 드라이버의 동작을 보여주는 순서도이다.
도 12는 본 발명의 실시 예에 따른 SSD를 예시적으로 보여주는 도면이다.
도 13은 본 발명의 실시 예에 따른 호스트 시스템을 예시적으로 보여주는 블록도이다.
이하에서, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
본 발명의 실시 예에 따른 호스트 시스템은 호스트 및 PCIe 디바이스를 포함할 수 있다. PCIe 디바이스는 PCIe 표준 프로토콜(protocol)을 따르는 인터페이스를 통해 호스트와 통신을 수행하는 디바이스를 의미한다. 예를 들어, PCIe 디바이스는 NVMe 디바이스, 그래픽 처리 장치(GPU; Graphics Processing Unit), 네트워크 인터페이스 카드(NIC; Network Interface Card) 등을 포함할 수 있다. PCIe 디바이스는 PCIe 슬롯(slot)에 장착되어 호스트 시스템에 연결될 수 있다.
이하에서는, 설명의 편의를 위해, PCIe 디바이스들 중 NVMe 디바이스를 기준으로 본 발명의 실시 예들을 설명한다. 그러나, 본 발명이 NVMe 디바이스에 한정되는 것은 아니며, PCIe 인터페이스 기반의 디바이스들에는 모두 적용될 수 있다.
도 1은 본 발명의 실시 예에 따른 호스트 시스템을 보여주는 블록도이다. 도 1을 참조하면, 호스트 시스템(10)은 저장 장치(11) 및 호스트(300)를 포함하고, 저장 장치(11)는 저장 장치 제어기(100) 및 메모리 장치(200)를 포함한다. 예를 들어, 저장 장치(11)는 NVMe 디바이스일 수 있다.
메모리 장치(200)는 SRAM(Static RAM), DRAM(Dynamic RAM), SDRAM(Synchronous DRAM), ROM(Read Only Memory), PROM(Programmable ROM), EPROM(Electrically Programmable ROM), EEPROM(Electrically Erasable and Programmable ROM), 플래시 메모리, PRAM(Phase-change RAM), MRAM(Magnetic RAM), RRAM(Resistive RAM), FRAM(Ferroelectric RAM) 등과 같은 휘발성 또는 불휘발성 메모리들 중 적어도 하나를 포함할 수 있다. 예를 들어, 메모리 장치(200)가 플래시 메모리인 경우, 저장 장치(11)는 NVMe SSD일 수 있다.
저장 장치 제어기(100)는 호스트 인터페이스(110), 인터페이스 제어부(120) 및 메모리 인터페이스(130)를 포함할 수 있다. 저장 장치 제어기(100)는 호스트 인터페이스(110)를 통해 호스트(300)와 통신할 수 있다. 예를 들어, 저장 장치 제어기(100)는 PCIe 표준 규약에 따른 프로토콜(이하, PCIe 프로토콜)또는 NVMe 표준 규약에 따른 프로토콜(이하, NVMe 프로토콜)에 기초하여 호스트(300)와 통신을 수행할 수 있다.
저장 장치 제어기(100)는 호스트 인터페이스(110)를 통해 호스트(300)로부터 커맨드(CMD) 및 데이터(DATA)를 수신할 수 있고, 호스트(300)로 데이터(DATA)를 송신할 수 있다.
인터페이스 제어부(120)는 호스트 인터페이스(110)의 입출력 데이터를 관리할 수 있다. 예시적으로, 인터페이스 제어부(120)는 호스트 인터페이스(110)로 수신되는 커맨드(CMD) 또는 데이터(DATA)를 확인할 수 있다. 인터페이스 제어부(120)는 수신된 커맨드(CMD)에 응답하여 대응하는 동작을 수행할 수 있다.
인터페이스 제어부(120)는 하드웨어, 소프트웨어 또는 펌웨어(firmware)의 형태로 구현될 수 있다. 또는 인터페이스 제어부(120)는 하드웨어, 소프트웨어 또는 펌웨어들의 조합의 형태로 구현될 수 있다.
저장 장치 제어기(100)는 메모리 인터페이스(130)를 통해 메모리 장치(200)와 통신을 수행할 수 있다. 예시적으로, 저장 장치 제어기(100)는 호스트(300)로부터 제공된 커맨드(CMD)에 기초하여 메모리 장치(200)를 제어할 수 있다. 저장 장치 제어기(100)는 메모리 인터페이스(130)를 통해 메모리 장치(200)로부터 데이터를 인출하거나 메모리 장치(200)로 데이터를 저장할 수 있다.
호스트(300)는 디바이스 인터페이스(310), 제1 장치 드라이버(320) 및 제2 장치 드라이버(330)를 포함할 수 있다. 호스트(300)는 디바이스 인터페이스(310)를 통해 저장 장치 제어기(100)로 커맨드(CMD) 및 데이터(DATA)를 송신하고, 저장 장치 제어기(100)로부터 데이터(DATA)를 수신할 수 있다. 예시적으로, 디바이스 인터페이스(310)는 PCIe 프로토콜에 기초하여 동작하는 PCIe 인터페이스를 포함할 수 있다. 호스트(300)는 디바이스 인터페이스(310)를 통해 PCIe 프로토콜 또는 NVMe 프로토콜에 따라 저장 장치 제어기(100)와 통신을 수행할 수 있다.
호스트(300)는 저장 장치 제어기(100)와 통신을 수행하기 위해 제1 장치 드라이버(320) 또는 제2 장치 드라이버(330)를 이용할 수 있다. 제1 장치 드라이버(320) 및 제2 장치 드라이버(330)는 각각 정해진 규약에 따른 프로토콜에 기초하여 호스트(300)와 저장 장치 제어기(100) 사이의 통신을 수행할 수 있다. 예시적으로, 제1 장치 드라이버(320)는 NVMe 프로토콜에 기초하여 동작할 수 있다. 제2 장치 드라이버(330)는 PCIe 프로토콜에 기초하여 동작할 수 있다.
저장 장치(11)가 NVMe 디바이스인 경우, 호스트(300)는 제1 장치 드라이버(320)를 통해 저장 장치(11)를 제어할 수 있다. 제1 장치 드라이버(320)를 통해 저장 장치(11)가 제어되는 경우, 저장 장치(11)는 호스트(300)에서 NVMe 디바이스로 인식될 수 있다. 또는 호스트(300)는 제2 장치 드라이버(330)를 통해 저장 장치(11)를 제어할 수 있다. 제2 장치 드라이버(330)를 통해 저장 장치(11)가 제어되는 경우, 저장 장치(11)는 호스트(300)에서 PCIe 디바이스로 인식(즉, 가상화)될 수 있다.
본 발명의 실시 예에 따르면, 호스트(300)는 제1 장치 드라이버(320)를 통해 저장 장치(11)를 제어할 수 있다. 제1 장치 드라이버(320)는 NVMe 프로토콜에 기초하여 저장 장치(11)와 통신을 수행할 수 있다. 저장 장치(11)에 불량이 발생되는 등의 이유로 저장 장치(11)에 대한 디버깅 동작이 수행되는 경우, 호스트(300)는 제1 장치 드라이버(320)의 동작을 정지하고 제2 장치 드라이버(330)를 동작시킬 수 있다. 제2 장치 드라이버(330)는 PCIe 프로토콜에 기초하여 저장 장치(11)와 통신을 수행할 수 있다.
제2 장치 드라이버(330)는 디버깅 데이터를 수집하기 위한 커맨드(CMD)를 생성하고, 생성된 커맨드(CMD)를 저장 장치 제어기(100)로 전달할 수 있다. 커맨드(CMD)는 호스트 인터페이스(110)를 통해 저장 장치 제어기(100)로 전달될 수 있다. 인터페이스 제어부(120)는 호스트 인터페이스(110)로 전달된 커맨드(CMD)에 응답하여 디버깅 데이터를 수집할 수 있다. 인터페이스 제어부(120)는 수집한 디버깅 데이터를 호스트 인터페이스(110)를 통해 제2 장치 드라이버(330)로 전달할 수 있다.
제2 장치 드라이버(330)는 디버깅 데이터를 수집하기 위해 PCIe 프로토콜에 기반한 별도의 방식을 사용할 수 있다. 제2 장치 드라이버(330)가 저장 장치 제어기(100)로부터 디버깅 데이터를 수집하기 위해 사용하는 별도의 방식에 대한 상세한 설명은 후술되는 도면들을 통해 설명될 것이다.
도 2는 본 발명의 실시 예에 따른 호스트 시스템의 계층을 예시적으로 보여주는 블록도이다. 도 1 및 도 2를 참조하면, 호스트 시스템(10)의 계층은 애플리케이션(301), 운영체제(302), 제1 장치 드라이버(320), 제2 장치 드라이버(330), PCIe 인터페이스(111), NVMe 인터페이스(112), NVMe 제어부(121) 및 PCIe 제어부(122)를 포함할 수 있다. 애플리케이션(201), 운영체제(202), 제1 장치 드라이버(320) 및 제2 장치 드라이버(330)는 호스트(300)에 포함되는 소프트웨어일 수 있다. PCIe 인터페이스(111) 및 NVMe 인터페이스(112)는 저장 장치 제어기(100)의 호스트 인터페이스(110)에 포함될 수 있다. NVMe 제어부(121) 및 PCIe 제어부(122)는 저장 장치 제어기(100)의 인터페이스 제어부(120)에 포함될 수 있다.
애플리케이션(301)은 호스트 시스템(10) 상에서 구동되는 다양한 응용 프로그램들을 포함할 수 있다. 예를 들어, 애플리케이션(301)은 저장 장치(11)에 대한 디버깅 동작을 수행하는 응용 프로그램을 포함할 수 있다. 애플리케이션(301)의 실행에 따라 호스트(300)와 저장 장치(11) 사이의 통신 수행이 요구될 수 있다.
운영체제(302)는 호스트 시스템(10)을 구성하는 CPU(미도시), 메모리(미도시) 및 저장 장치(11)의 자원을 관리할 수 있다. 운영체제(302)는 메모리(미도시) 및 저장 장치(11) 내의 메모리 주소들을 관리할 수 있다. 예를 들어, 운영체제(302)는 저장 장치(11)에 대한 디버깅 데이터가 저장될 메모리 주소들을 관리할 수 있다.
애플리케이션(301)의 실행에 따라 운영체제(302)는 호스트(300)의 메모리 주소 또는 저장 장치(11) 내의 메모리 주소들을 할당할 수 있다. 할당된 메모리 주소는 호스트 시스템(10)의 동작을 위해 이용될 수 있다. 예를 들어, 운영체제(302)는 디버깅 데이터가 저장될 메모리 주소를 할당할 수 있다. 디버깅 동작에 따라 수집된 디버깅 데이터는 할당된 메모리 주소에 저장될 수 있다.
제1 장치 드라이버(320)는 NVMe 프로토콜에 기초하여 저장 장치(11)를 제어하기 위해 사용될 수 있다. 예시적으로, 애플리케이션(301)의 실행에 따라 제1 장치 드라이버(320)는 운영체제(302)로부터 커맨드(CMD)를 생성하기 위한 정보를 수집할 수 있다. 제1 장치 드라이버(320)는 수집된 정보에 기초하여 NVMe 프로토콜에 따라 커맨드(CMD)를 생성할 수 있다. 제1 장치 드라이버(320)는 생성된 커맨드(CMD)를 디바이스 인터페이스(310)를 통해 저장 장치 제어기(100)로 전달할 수 있다.
제2 장치 드라이버(330)는 PCIe 프로토콜에 기초하여 저장 장치(11)를 제어하기 위해 사용될 수 있다. 예시적으로, 애플리케이션(301)의 실행에 따라 제2 장치 드라이버(330)는 운영체제(302)로부터 커맨드(CMD)를 생성하기 위한 정보를 수집할 수 있다. 제2 장치 드라이버(330)는 수집된 정보에 기초하여 PCIe 기반의 프로토콜에 따라 커맨드(CMD)를 생성할 수 있다. 제2 장치 드라이버(330)는 디바이스 인터페이스(310)를 통해 생성된 커맨드(CMD)를 저장 장치 제어기(100)로 전달할 수 있다.
PCIe 인터페이스(111)는 PCIe 프로토콜에 따라 커맨드(CMD) 및 데이터(DATA)를 송수신하는 통신 경로일 수 있다. NVMe 인터페이스(112)는 NVMe 프로토콜에 따라 커맨드(CMD) 및 데이터(DATA)를 송수신하는 통신 경로일 수 있다. NVMe 프로토콜은 PCIe 프로토콜을 기반으로 형성될 수 있다. 이에 따라, NVMe 인터페이스(112)는 PCIe 인터페이스(111)를 거쳐 커맨드(CMD) 및 데이터(DATA)를 송수신할 수 있다.
NVMe 제어부(121)는 NVMe 인터페이스(112)에 대한 관리 동작을 수행할 수 있다. 예시적으로, NVMe 제어부(121)는 NVMe 인터페이스(112)를 통해 송수신되는 입출력 데이터를 관리할 수 있다. 예를 들어, NVMe 제어부(121)는 NVMe 인터페이스(112)로 전달된 커맨드(CMD) 또는 데이터(DATA)를 확인할 수 있다. NVMe 제어부(121)는 NVMe 인터페이스(112)를 통해 데이터(DATA)를 호스트(300)로 전달할 수 있다. NVMe 제어부(121)가 소프트웨어 또는 펌웨어 형태로 구현되는 경우, NVMe 제어부(121)는 저장 장치 제어기(100) 내부의 메모리 공간(예를 들어, ROM; Read Only Memory)에 저장될 수 있다.
PCIe 제어부(122)는 PCIe 인터페이스(111)에 대한 관리 동작을 수행할 수 있다. 예시적으로, PCIe 제어부(122)는 PCIe 인터페이스(111)를 통해 송수신되는 입출력 데이터를 관리할 수 있다. 예를 들어, PCIe 제어부(122)는 PCIe 인터페이스(111)로 전달된 커맨드(CMD) 또는 데이터(DATA)를 확인할 수 있다. PCIe 제어부(122)는 PCIe 인터페이스(111)를 통해 데이터(DATA)를 호스트(300)로 전달할 수 있다. PCIe 제어부(122)가 소프트웨어 또는 펌웨어 형태로 구현되는 경우, PCIe 제어부(122)는 저장 장치 제어기(100) 내부의 메모리 공간(예를 들어, ROM)에 저장될 수 있다.
본 발명의 실시 예에 따르면, 호스트(300)는 제1 장치 드라이버(320)를 통해 저장 장치 제어기(100)로 커맨드(CMD)를 전달할 수 있다. 예시적으로, 제1 장치 드라이버(320)에서 생성된 커맨드(CMD)는 NVMe 프로토콜에 기초하여 생성될 수 있다. NVMe 프로토콜에 기초하여 생성된 커맨드(CMD)가 전달되는 경우, NVMe 인터페이스(112)가 사용될 수 있다. 커맨드(CMD)는 PCIe 인터페이스(111)를 거쳐 NVMe 인터페이스(112)로 전달될 수 있다. NVMe 제어부(121)는 NVMe 인터페이스(112)를 통해 전달된 커맨드(CMD)를 확인하고, 커맨드(CMD)에 대응하는 동작을 수행할 수 있다.
NVMe 제어부(121)는 제1 장치 드라이버(320)로부터 전달된 커맨드(CMD)를 처리한 후 NVMe 인터페이스(112)를 통해 커맨드(CMD) 처리 결과를 제1 장치 드라이버(320)로 전달할 수 있다.
이와 같이, 제1 장치 드라이버(320)가 동작되는 경우, 호스트(300)와 저장 장치 제어기(100)는 인밴드(inband)(또는, 메인밴드(mainband))를 통해 통신을 수행할 수 있다. 즉, 본 명세서에서 인밴드라 함은 호스트(300)와 저장 장치 제어기(100) 사이의 통신에 있어서, NVMe 인터페이스(112)가 사용되는 통신 경로일 수 있다. 호스트 시스템(10)의 일반적인 동작에 있어서, 호스트(300) 및 저장 장치 제어기(100)는 인밴드를 통해 통신을 수행할 수 있다.
본 발명의 실시 예에 따르면, 저장 장치(11)에 불량이 발생되는 경우, 호스트(300)는 저장 장치(11)에 대한 디버깅 동작을 수행할 수 있다. 호스트(300)는 디버깅 동작을 통해 저장 장치(11)로부터 디버깅 데이터를 수신하고, 수신된 디버깅 데이터를 분석하여 저장 장치(11)의 불량 원인을 확인할 수 있다.
디버깅 동작을 수행하는 경우, 호스트(300)는 제1 장치 드라이버(320)의 동작을 정지시키고 제2 장치 드라이버(330)를 동작시킬 수 있다. 예시적으로, 제2 장치 드라이버(330)는 제1 장치 드라이버(320)와 구분되는 별도의 소프트웨어일 수 있다. 호스트(300)는 제2 장치 드라이버(330)를 통해 디버깅 데이터를 수집하기 위한 커맨드(CMD)를 저장 장치 제어기(100)로 전달할 수 있다. 저장 장치 제어기(100)는 커맨드(CMD)를 수신하고, 디버깅 데이터를 제2 장치 드라이버(330)로 전달할 수 있다. 예를 들어, 디버깅 데이터는 덤프 데이터(dump data) 또는 로그 데이터(log data)를 포함할 수 있다.
제2 장치 드라이버(330)는 PCIe 인터페이스(111)를 통해 커맨드(CMD)를 전달할 수 있다. PCIe 제어부(122)는 PCIe 인터페이스(111)로 수신된 커맨드(CMD)를 확인하고, 커맨드(CMD)에 대응하는 동작을 수행할 수 있다. PCIe 제어부(122)는 디버깅 데이터를 수집하고, 수집된 디버깅 데이터를 PCIe 인터페이스(111)를 통해 제2 장치 드라이버(330)로 전달할 수 있다.
제2 장치 드라이버(330)는 NVMe 인터페이스(112)를 사용하지 않고 저장 장치 제어기(100)와 통신을 수행할 수 있다. 이에 따라, 제2 장치 드라이버(330)는 PCIe 프로토콜에 기초하여 저장 장치 제어기(100)와 통신을 수행할 수 있다.
이와 같이, 제2 장치 드라이버(330)가 동작되는 경우, 사이드밴드(sideband)를 통해 통신이 수행될 수 있다. 즉, 본 명세서에 따른 사이드밴드는 호스트(300)와 저장 장치 제어기(100) 사이의 통신에 있어서, NVMe 인터페이스(112)가 사용되지 않는 통신 경로일 수 있다. 예시적으로, 호스트(300) 및 저장 장치 제어기(100)는 디버깅 동작을 수행하기 위해 사이드밴드를 이용하여 통신을 수행할 수 있다.
사이드밴드를 통한 디버깅 동작 과정을 살펴보면, 호스트(300)는 저장 장치(11)의 디버깅 동작을 수행하기 위한 애플리케이션(301)을 실행할 수 있다. 애플리케이션(301)의 실행에 따라 제2 장치 드라이버(330)가 동작할 수 있다. 또는 애플리케이션(301)의 실행에 따라 운영 체제(302)를 통해 제2 장치 드라이버(330)가 동작할 수 있다.
제2 장치 드라이버(330)는 디버깅 데이터를 수집하기 위한 커맨드(CMD)를 생성할 수 있다. 제2 장치 드라이버(330)는 운영 체제(302)로부터 관련된 정보를 획득하여 커맨드(CMD)를 생성할 수 있다. 제2 장치 드라이버(330)는 생성한 커맨드(CMD)를 사이드밴드(즉, PCIe 인터페이스(111))를 통해 저장 장치 제어기(100)로 전달할 수 있다.
PCIe 제어부(122)는 제2 장치 드라이버(330)로부터 전달된 커맨드(CMD)를 PCIe 인터페이스(111)를 통해 확인할 수 있다. PCIe 제어부(122)는 수집된 디버깅 데이터를 사이드밴드(즉, PCIe 인터페이스(111))를 통해 제2 장치 드라이버(330)로 전달할 수 있다. 애플리케이션(301)은 전달된 디버깅 데이터로부터 저장 장치(11)의 불량 원인을 확인할 수 있다.
상술한 바와 같이, 본 발명의 실시 예에 따른 디버깅 동작은 사이드밴드를 통해 수행될 수 있다. 이에 따라, 인밴드 상의 하드웨어, 소프트웨어 또는 펌웨어에 문제가 발생되더라도 사이드밴드 상의 하드웨어, 소프트웨어 또는 펌웨어를 통해 디버깅 동작이 수행될 수 있다.
도 2에서 도시한 바와 같이, PCIe 제어부(122) 및 NVMe 제어부(121)는 인터페이스 제어부(120)에 각각 별도로 존재할 수 있다. 그러나, 본 발명은 이에 한정되지 않으며, PCIe 제어부(122) 및 NVMe 제어부(121)가 각각 구분되어 존재하지 않을 수 있다. 이 경우, 인터페이스 제어부(120)는 PCIe 제어부(122) 및 NVMe 제어부(121)의 기능을 모두 포함할 수 있다.
도 3은 도 1의 호스트 시스템의 디버깅 동작의 실시 예를 설명하기 위한 블록도이다. 도 1 내지 도 3을 참조하면, 호스트 시스템(10)은 저장 장치(11) 및 호스트(300)를 포함하고, 저장 장치(11)는 저장 장치 제어기(100) 및 메모리 장치(200)를 포함할 수 있다. 저장 장치 제어기(100)는 호스트 인터페이스(110), 인터페이스 제어부(120) 및 메모리 인터페이스(130)를 포함할 수 있다. 호스트(300)는 디바이스 인터페이스(310), 제1 장치 드라이버(320) 및 제2 장치 드라이버(330)를 포함할 수 있다. 저장 장치 제어기(100), 메모리 장치(200) 및 호스트(300)는 도 1의 저장 장치 제어기(100), 메모리 장치(200) 및 호스트(300)와 동일하므로, 중복되는 상세한 설명은 생략된다.
호스트 인터페이스(110)는 PCIe 인터페이스(111) 및 NVMe 인터페이스(112)를 포함할 수 있다. PCIe 인터페이스(111) 및 NVMe 인터페이스(112)는 도 2의 PCIe 인터페이스(111) 및 NVMe 인터페이스(112)와 동일하므로, 중복되는 상세한 설명은 생략된다.
PCIe 인터페이스(111)는 레지스터(113)를 포함할 수 있다. 제2 장치 드라이버(330)와 인터페이스 제어부(120)는 레지스터(113)를 통해 커맨드(CMD) 및 데이터(DATA)를 송수신할 수 있다. 예를 들어, 레지스터(113)는 PCIe 확장된 설정 레지스터 공간(PCIe extended configuration register space)에 포함될 수 있다.
디버깅 데이터를 요청하기 위해, 제2 장치 드라이버(330)는 커맨드(CMD)를 레지스터(113)에 저장할 수 있다. 인터페이스 제어부(120)는 레지스터(113)에 저장된 커맨드(CMD)를 확인하고 디버깅 데이터를 수집할 수 있다. 인터페이스 제어부(120)는 수집한 디버깅 데이터를 레지스터(113)에 저장할 수 있다. 제2 장치 드라이버(330)는 레지스터(113)에 저장된 디버깅 데이터를 읽음으로써 디버깅 데이터를 수신할 수 있다.
본 발명의 실시 예에 따르면, 저장 장치(11)에 대한 디버깅 동작은 사이드밴드를 통해 수행될 수 있다. 즉, 디버깅 동작을 위해 제2 장치 드라이버(330), 디바이스 인터페이스(310), PCIe 인터페이스(111) 및 인터페이스 제어부(120)가 사용될 수 있다. 호스트(300)는 PCIe 인터페이스(111)만을 이용하여 저장 장치 제어기(100)로 디버깅 데이터를 요청하고, 저장 장치 제어기(100)로부터 디버깅 데이터를 수신할 수 있다.
호스트(300)는 인밴드 상에 있는 하드웨어, 소프트웨어 또는 펌웨어에 문제가 발생되더라도, 사이드밴드 상에 있는 하드웨어, 소프트웨어 또는 펌웨어를 이용하여 디버깅 동작을 수행할 수 있다. 또한, 사이드밴드를 통한 디버깅 동작에 있어서, 별도의 인터페이스 또는 장치가 필요하지 않을 수 있다. 따라서, 본 발명의 호스트 시스템(10)은 하드웨어에 대한 변경 없이 PCIe 인터페이스(111)를 이용하여 빠른 속도로 디버깅 동작을 수행할 수 있다.
도 4는 도 3의 호스트 시스템의 예시적인 동작 방법에 대한 순서도이다. 도 3 및 도 4를 참조하면, S11 단계에서, 호스트(300)는 디버깅 동작을 시작할 수 있다. 예를 들어, 저장 장치(11)에 불량이 발생된 경우, 호스트(300)는 디버깅 동작을 시작할 수 있다. 또는 저장 장치(11)에 대한 불량 발생과 상관 없이, 호스트(300)는 디버깅 동작을 시작할 수 있다.
S12 단계에서, 호스트(300)는 디버깅 동작을 수행하기 위해 제1 장치 드라이버(320)의 동작을 중지하고, 제2 장치 드라이버(330)를 동작시킬 수 있다.
S13 단계에서, 호스트(300)는 저장 장치 제어기(100)로 디버깅 데이터 요청 커맨드(CMD)를 전송할 수 있다. 예시적으로, 호스트(300)는 제2 장치 드라이버(330)를 통해 디버깅 데이터 요청 커맨드(CMD)를 생성하고, 생성된 커맨드(CMD)를 저장 장치 제어기(100)로 전송할 수 있다. 생성된 커맨드(CMD)는 PCIe 인터페이스(111)에 포함된 레지스터(113)에 저장될 수 있다.
S14 단계에서, 저장 장치 제어기(100)는 커맨드(CMD)가 수신되었음을 호스트(300)로 알려줄 수 있다. 예시적으로, 저장 장치 제어기(100)는 PCIe 인터페이스(111)의 레지스터(113)를 주기적으로 확인하거나 호스트(300)로부터의 폴링(polling) 동작에 의해 커맨드(CMD)가 수신되었음을 확인할 수 있다. 또는 저장 장치 제어기(100)는 호스트(300)로부터 전송된 인터럽트(interrupt)를 수신하고, 레지스터(113)를 확인함으로써 커맨드(CMD)가 수신되었음을 확인할 수 있다.
S15 단계에서, 호스트(300)는 읽기 요청 커맨드(CMD)를 저장 장치 제어기(100)로 전송할 수 있다. 읽기 요청 커맨드(CMD)는 호스트(300)가 디버깅 데이터를 읽기 전에 저장 장치 제어기(100)로 전송하는 커맨드일 수 있다. 호스트(300)는 읽기 요청 커맨드(CMD)를 PCIe 인터페이스(111)의 레지스터(113)에 저장할 수 있다.
S16 단계에서, 저장 장치 제어기(100)는 읽기 요청 커맨드(CMD)에 응답하여 레지스터(113)를 통해 디버깅 데이터를 호스트(300)로 전달할 수 있다. 예시적으로, 저장 장치 제어기(100)는 디버깅 데이터를 수집하여 레지스터(113)에 저장함으로써 디버깅 데이터를 호스트(300)로 전달할 수 있다. 저장 장치 제어기(100)는 디버깅 데이터를 레지스터(113)에 저장한 후 전송이 완료되었음을 호스트(300)로 알려줄 수 있다.
호스트(300)는 레지스터(113)에 저장된 디버깅 데이터를 읽음으로써 디버깅 데이터를 획득할 수 있다. 호스트(300)는 획득된 디버깅 데이터로부터 저장 장치(11)의 불량 원인을 확인할 수 있다.
도 5는 도 3의 호스트 시스템의 디버깅 동작에 사용되는 프로토콜의 예시를 설명하기 위한 도면이다. 도 2, 도 3 및 도 5를 참조하면, 호스트 시스템(10)은 PCIe 인터페이스(111)의 레지스터(113)를 이용하여 커맨드(CMD) 및 데이터(DATA)를 송수신할 수 있다. 예를 들어, 레지스터(113)는 PCIe 확장된 설정 공간 내의 제조사 특정 레지스터(vendor specific register)일 수 있다.
호스트(300)는 제2 장치 드라이버(330)를 통해 디버깅 데이터를 수집할 수 있다. 저장 장치 제어기(100)는 인터페이스 제어부(120)를 통해 디버깅 데이터를 제공할 수 있다. 또는 저장 장치 제어기(100)는 인터페이스 제어부(120)에 포함된 PCIe 제어부(122)를 통해 디버깅 데이터를 제공할 수 있다.
이하에서는, 설명의 편의를 위해, 호스트 시스템(10)의 제2 장치 드라이버(330) 및 인터페이스 제어부(120)를 기준으로 디버깅 동작에 사용되는 프로토콜을 설명한다.
디버깅 동작을 위한 애플리케이션(301)이 실행되는 경우, 제2 장치 드라이버(330)는 디버깅 데이터 요청 커맨드(CMD)를 생성할 수 있다. S21 단계에서, 제2 장치 드라이버(330)는 디버깅 데이터 요청 커맨드(CMD)를 PCIe 인터페이스(111)의 레지스터(113)에 저장할 수 있다.
S22 단계에서, 인터페이스 제어부(120)는 디버깅 데이터 요청 커맨드(CMD)의 수신을 확인하고, 커맨드(CMD)의 수신을 가리키는 값(예를 들어, ACK; acknowledge character)을 레지스터(113)에 저장할 수 있다. 예시적으로, 인터페이스 제어부(120)는 레지스터(113)를 주기적으로 확인하거나 호스트(300)에 의한 폴링 동작을 수행함으로써 커맨드(CMD)가 수신되었음을 확인할 수 있다. 또는 인터페이스 제어부(120)는 제2 장치 드라이버(330)로부터 전송된 인터럽트를 수신하여 레지스터(113)를 확인할 수 있다.
S23 단계에서, 제2 장치 드라이버(330)는 읽기 요청 커맨드(CMD)를 레지스터(113)에 저장할 수 있다. 인터페이스 제어부(120)는 디버깅 데이터 요청 커맨드(CMD)의 수신 확인과 동일한 방법으로, 읽기 요청 커맨드(CMD)의 수신을 확인할 수 있다.
S24 단계에서, 인터페이스 제어부(120)는 읽기 요청 커맨드(CMD)에 응답하여 디버깅 데이터 요청 커맨드(CMD)를 인출할 수 있다. 인터페이스 제어부(120)는 인출된 디버깅 데이터 요청 커맨드(CMD)를 해석하여 커맨드(CMD)가 요구하는 동작을 확인할 수 있다. S25 단계에서, 인터페이스 제어부(120)는 디버깅 데이터 요청 커맨드(CMD)에 따라 디버깅 데이터를 레지스터(113)에 저장할 수 있다.
인터페이스 제어부(120)는 디버깅 데이터를 레지스터(113)에 저장한 후, S26 단계에서, 디버깅 데이터의 쓰기 완료를 나타내는 값(예를 들어, 완료 메시지)을 레지스터(113)에 저장할 수 있다. 제2 장치 드라이버(330)는 디버깅 데이터의 쓰기 완료를 확인한 후, S27 단계에서, 레지스터(113)에 저장된 디버깅 데이터를 읽을 수 있다.
S21 내지 S27 단계에 따라, 호스트(300)는 레지스터(113)를 이용하여 저장 장치 제어기(100)로 디버깅 데이터를 요청할 수 있고, 저장 장치 제어기(100)는 레지스터(113)를 이용하여 호스트(300)로 디버깅 데이터를 전달할 수 있다.
도 5에 도시된 바에 의하면, 인터페이스 제어부(120)는 하나의 읽기 요청 커맨드(CMD)에 기초하여 디버깅 데이터를 제공할 수 있다. 그러나, PCIe 인터페이스(111)에 포함된 레지스터(113)를 이용하는 경우, 인터페이스 제어부(120)는 한 번에 디버깅 데이터를 레지스터(113)로 저장하지 못할 수 있다. 즉, 인터페이스 제어부(120)는 복수개의 읽기 요청 커맨드(CMD)에 기초하여 디버깅 데이터를 제공할 수 있다. 예를 들어, 레지스터(113)의 메모리 용량이 제한된 경우, 디버깅 데이터를 분할하여 저장할 수 있다. 이러한 경우, S23 내지 S27 단계의 동작들이 반복되어 수행될 수 있다.
상술한 바와 같이, 본 발명의 실시 예에 따른 호스트 시스템(10)은 PCIe 인터페이스(111)에 이미 존재하는 레지스터(113)를 이용하여 디버깅 데이터를 수집할 수 있다. 따라서, 호스트 시스템(10)은 기존 하드웨어에 대한 변경 없이 사이드밴드를 통해 디버깅 데이터를 수집할 수 있다.
도 6은 도 3의 저장 장치 제어기의 동작 방법을 보여주는 순서도이다. 도 3 및 도 6을 참조하면, S111 단계에서, 저장 장치 제어기(100)는 호스트(300)로부터 디버깅 데이터 요청 커맨드(CMD)를 수신할 수 있다. S112 단계에서, 저장 장치 제어기(100)는 호스트(300)로 커맨드(CMD)의 수신을 알릴 수 있다. S113 단계에서, 저장 장치 제어기(100)는 호스트(300)로부터 읽기 요청 커맨드(CMD)를 수신할 수 있다. S114 단계에서, 저장 장치 제어기(100)는 읽기 요청 커맨드(CMD)에 응답하여 PCIe 인터페이스(111)에 포함된 레지스터(113)에 디버깅 데이터를 저장할 수 있다. S115 단계에서, 저장 장치 제어기(100)는 디버깅 데이터의 쓰기 완료를 호스트(300)로 알릴 수 있다.
도 7은 본 발명에 따른 호스트 시스템의 디버깅 동작에 대한 다른 실시 예를 설명하기 위한 블록도이다. 도 7을 참조하면, 호스트 시스템(20)은 저장 장치(21) 및 호스트(600)를 포함할 수 있다. 저장 장치(21)는 저장 장치 제어기(400) 및 메모리 장치(500)를 포함할 수 있다. 저장 장치 제어기(400) 및 호스트(600)의 동작은 도 1 및 도 3의 저장 장치 제어기(100) 및 호스트(300)의 동작과 유사하므로, 상세한 설명은 생략된다.
호스트(600)는 디바이스 인터페이스(610), 제1 장치 드라이버(620), 제2 장치 드라이버(630) 및 호스트 버퍼 메모리(640)를 포함할 수 있다. 디바이스 인터페이스(610), 제1 장치 드라이버(620) 및 제2 장치 드라이버(630)의 동작은 도 1 및 도 3의 디바이스 인터페이스(310), 제1 장치 드라이버(320) 및 제2 장치 드라이버(330)의 동작과 유사하므로, 상세한 설명은 생략된다.
호스트 버퍼 메모리(640)는 호스트(600)에 포함되는 메모리(미도시) 중 저장 장치 제어기(400)가 독립적으로 사용할 수 있는 메모리 영역일 수 있다. 따라서, 저장 장치 제어기(400)는 호스트 버퍼 메모리(640)에 직접 접근을 할 수 있고, 호스트 버퍼 메모리(640)에 데이터(DATA)를 저장할 수 있다. 예시적으로, 저장 장치 제어기(400)는 디바이스 인터페이스(610)를 통해 호스트 버퍼 메모리(640)에 데이터(DATA)를 저장할 수 있다.
제2 장치 드라이버(630)는 호스트 버퍼 메모리(640)의 입출력 데이터를 관리할 수 있다. 예를 들어, 제2 장치 드라이버(630)는 호스트 버퍼 메모리(640)에 저장된 데이터(DATA)를 인출하고, 인출된 데이터(DATA)를 애플리케이션 또는 별도의 메모리 영역으로 전달할 수 있다.
저장 장치 제어기(400)는 PCIe 인터페이스(411), NVMe 인터페이스(412), 인터페이스 제어부(420)를 포함할 수 있다. PCIe 인터페이스(411), NVMe 인터페이스(412), 인터페이스 제어부(420)의 동작은 도 3의 PCIe 인터페이스(111), NVMe 인터페이스(112), 인터페이스 제어부(120)의 동작과 유사하므로, 상세한 설명은 생략된다.
인터페이스 제어부(420)는 PCIe 인터페이스(411)를 통해 데이터(DATA)를 호스트(600)로 전달할 수 있다. 인터페이스 제어부(420)는 레지스터(413)에 데이터(DATA)를 저장함으로써 데이터(DATA)를 호스트(600)로 전달할 수 있다. 또는, 인터페이스 제어부(420)는 호스트 버퍼 메모리(640)에 데이터(DATA)를 저장함으로써 호스트(600)로 데이터(DATA)를 전달할 수 있다.
본 발명의 실시 예에 있어서, 호스트(600)는 제2 장치 드라이버(630)를 통해 저장 장치 제어기(400)로 커맨드(CMD)를 전달할 수 있다. 제2 장치 드라이버(630)는 저장 장치 제어기(400)가 호스트 버퍼 메모리(640)로 디버깅 데이터를 직접 저장할 것을 요구할 수 있다. 이 경우, 커맨드(CMD)는 호스트 버퍼 메모리(640)의 주소 정보를 포함할 수 있다. 예시적으로, 제2 장치 드라이버(630)는 레지스터(413)에 커맨드(CMD)를 저장함으로써 커맨드(CMD)를 저장 장치 제어기(400)로 전달할 수 있다.
인터페이스 제어부(420)는 호스트(600)로부터 수신된 커맨드(CMD)를 확인하고, 디버깅 데이터를 호스트(600)로 전달할 수 있다. 예시적으로, 인터페이스 제어부(420)는 레지스터(413)에 저장된 커맨드(CMD)를 확인하고, 커맨드(CMD)에 응답하여 디버깅 데이터를 호스트 버퍼 메모리(640)에 저장할 수 있다. 인터페이스 제어부(420)는 커맨드(CMD)에 포함된 호스트 버퍼 메모리(640)의 주소로 디버깅 데이터를 저장할 수 있다.
이에 따라, 호스트(600)는 호스트 버퍼 메모리(640)에 저장된 디버깅 데이터로부터 저장 장치(21)의 불량 원인을 확인할 수 있다.
도 7의 호스트 시스템(20)에 따르면, 호스트(600)는 사이드밴드를 통해 디버깅 데이터를 획득할 수 있다. 즉, 디버깅 동작을 위해 제2 장치 드라이버(630), 디바이스 인터페이스(610), PCIe 인터페이스(411) 및 인터페이스 제어부(420)가 사용될 수 있다. 호스트(600)는 PCIe 인터페이스(411)만을 이용하여 저장 장치 제어기(400)로 디버깅 데이터를 요청하고, 저장 장치 제어기(400)로부터 디버깅 데이터를 수신할 수 있다.
호스트(600)는 PCIe 인터페이스(411)에 이미 존재하는 레지스터(413)와 호스트(600)에 이미 존재하는 호스트 버퍼 메모리(640)를 이용하여 디버깅 데이터를 획득할 수 있다. 따라서, 호스트 시스템(20)은 별도의 하드웨어 추가 없이 저장 장치(21)에 대한 디버깅 데이터를 수집할 수 있다.
일반적으로 호스트 버퍼 메모리(640)의 용량은 레지스터(413)의 용량보다 클 수 있다. 따라서, 저장 장치 제어기(400)가 호스트 버퍼 메모리(640)로 디버깅 데이터를 직접 저장하는 경우, 디버깅 데이터를 한 번에 저장(예를 들어, 버스트 쓰기(burst write))할 수 있다.
도 8은 도 7의 호스트 시스템의 예시적인 동작 방법에 대한 순서도이다. 도 7 및 도 8을 참조하면, 호스트(600) 및 저장 장치 제어기(400)는 S31 내지 S35 단계의 동작들을 수행할 수 있다. S31 내지 S35 단계의 동작들은 도 4의 S11 내지 S15 단계의 동작들과 동일하므로 상세한 설명은 생략된다.
S35 단계로부터, 저장 장치 제어기(400)는 읽기 요청 커맨드(CMD)를 수신할 수 있다. S36 단계에서, 저장 장치 제어기(400)는 읽기 요청 커맨드(CMD)에 응답하여 디버깅 데이터를 호스트(600)로 전달할 수 있다. 예시적으로, 저장 장치 제어기(400)는 디버깅 데이터를 호스트 버퍼 메모리(640)에 저장함으로써 디버깅 데이터를 호스트(600)로 전달할 수 있다. 저장 장치 제어기(400)는 디버깅 데이터를 호스트 버퍼 메모리(640)에 저장한 후, 전송이 완료되었음을 호스트(600)로 알려줄 수 있다.
도 9는 도 7의 호스트 시스템의 디버깅 동작에 사용되는 프로토콜의 예시를 설명하기 위한 도면이다. 도 7 및 도 9를 참조하면, 호스트 시스템(20)은 레지스터(413) 및 호스트 버퍼 메모리(640)를 이용하여 커맨드(CMD) 및 데이터(DATA)를 송수신할 수 있다.
호스트(600)는 제2 장치 드라이버(630)를 통해 디버깅 데이터 수집할 수 있다. 저장 장치 제어기(400)는 인터페이스 제어부(420)를 통해 디버깅 데이터를 제공할 수 있다.
이하에서는, 설명의 편의를 위해, 호스트 시스템(20)에 포함된 제2 장치 드라이버(630) 및 인터페이스 제어부(420)를 기준으로 디버깅 동작에 사용되는 프로토콜을 설명한다.
호스트(600)로부터 디버깅 동작이 요청되는 경우, 제2 장치 드라이버(630)는 디버깅 데이터 요청 커맨드(CMD)를 생성할 수 있다. 생성된 디버깅 데이터 요청 커맨드(CMD)는 호스트 버퍼 메모리(640)를 통해 디버깅 데이터를 수신하기 위한 커맨드(CMD)일 수 있다. 예를 들어, 디버깅 데이터 요청 커맨드(CMD)는 메모리 주소 정보를 포함할 수 있다. 메모리 주소 정보는 디버깅 데이터가 저장될 호스트 버퍼 메모리(640)의 주소를 나타낼 수 있다.
커맨드(CMD)를 생성한 이후, 제2 장치 드라이버(630) 및 인터페이스 제어부(420)는 S41 내지 S42 단계의 동작들을 수행할 수 있다. S41 내지 S42 단계의 동작들은 도 5의 S21 내지 S22 단계의 동작들과 동일하므로 상세한 설명은 생략된다.
S43 단계에서, 제2 장치 드라이버(630)는 읽기 요청 커맨드(CMD)를 레지스터(413)에 저장할 수 있다. 읽기 요청 커맨드(CMD)는 디버깅 데이터를 한 번에 전송할 것(예를 들어, 버스트 읽기(burst read))을 요구하는 커맨드(CMD)일 수 있다.
S44 단계에서, 인터페이스 제어부(420)는 읽기 요청 커맨드(CMD)에 응답하여 디버깅 데이터 요청 커맨드(CMD)를 인출하고 해석할 수 있다. 이에 따라, 인터페이스 제어부(420)는 디버깅 데이터를 저장할 호스트 버퍼 메모리(640)의 주소를 확인할 수 있다.
S45 단계에서, 인터페이스 제어부(420)는 디버깅 데이터를 할당된 호스트 버퍼 메모리(640)의 주소로 저장할 수 있다. 인터페이스 제어부(420)는 호스트 버퍼 메모리(640)에 직접 접근하여 디버깅 데이터를 저장할 수 있다. 이 경우, 인터페이스 제어부(420)는 읽기 요청 커맨드(CMD)에 따라 디버깅 데이터를 한 번에 호스트 버퍼 메모리(640)로 저장할 수 있다(예를 들어, 버스트 쓰기(burst write)).
인터페이스 제어부(420)는 디버깅 데이터를 호스트 버퍼 메모리(640)로 저장한 후, S46 단계에서, 디버깅 데이터의 쓰기 완료를 나타내는 값(예를 들어, 완료 메시지)을 호스트 버퍼 메모리(640)에 저장할 수 있다. 예를 들어, 인터페이스 제어부(420)는 호스트 버퍼 메모리(640)의 컴플리션 큐(completion queue)에 쓰기 완료를 나타내는 값을 저장할 수 있다.
제2 장치 드라이버(630)는 디버깅 데이터의 쓰기 완료를 확인한 후, S47 단계에서, 호스트 버퍼 메모리(640)에 저장된 디버깅 데이터를 읽을 수 있다.
S41 내지 S47 단계에 따라, 호스트(600)는 레지스터(413)를 이용하여 저장 장치 제어기(400)로 디버깅 데이터를 요청할 수 있고, 저장 장치 제어기(400)는 호스트 버퍼 메모리(640)를 이용하여 디버깅 데이터를 호스트(600)로 전달할 수 있다.
도 10은 도 7의 저장 장치 제어기의 동작 방법을 보여주는 순서도이다. 도 7 및 도 10을 참조하면, 저장 장치 제어기(400)는 S211 내지 S213 단계의 동작들을 수행할 수 있다. S211 내지 S213 단계의 동작들은 도 6의 S111 내지 S113 단계의 동작들과 유사하므로 상세한 설명은 생략된다.
S214 단계에서, 저장 장치 제어기(400)는 수신된 읽기 요청 커맨드(CMD)에 응답하여 호스트 버퍼 메모리(640)로 디버깅 데이터를 저장할 수 있다. 예시적으로, S211 단계에서 수신된 디버깅 데이터 요청 커맨드(CMD)는 호스트 버퍼 메모리(640)의 주소를 포함할 수 있다. 저장 장치 제어기(400)는 디버깅 데이터 요청 커맨드(CMD)에 기초하여 할당된 주소로 디버깅 데이터를 저장할 수 있다.
S215 단계에서, 저장 장치 제어기(400)는 디버깅 데이터의 쓰기 완료를 호스트(600)로 알릴 수 있다. 예시적으로, 저장 장치 제어기(400)는 호스트 버퍼 메모리(640)에 쓰기 완료를 나타내는 값을 저장할 수 있다.
상술한 바와 같이, 설명의 편의를 위해, 도 3에서는 호스트 버퍼 메모리를 이용하지 않는 예시를 설명하였고, 도 7에서는 호스트 버퍼 메모리를 이용하는 예시를 설명하였지만, 본 발명은 이에 한정되지 않는다. 본 발명에 따른 하나의 실시 예에 있어서, 호스트 시스템은 호스트 버퍼 메모리를 이용하여 디버깅 데이터를 수집할 수 있고, PCIe 인터페이스의 레지스터만을 이용하여 디버깅 데이터를 수집할 수 있다.
예를 들어, 저장 장치 제어기는 디버깅 데이터 요청 커맨드(CMD)에 기초하여 PCIe 인터페이스의 레지스터 또는 호스트 버퍼 메모리에 디버깅 데이터를 저장할 수 있다. 디버깅 데이터 요청 커맨드(CMD)가 메모리 주소를 포함하지 않은 경우, 저장 장치 제어기는 PCIe 인터페이스의 레지스터로 디버깅 데이터를 저장할 수 있다. 디버깅 데이터 요청 커맨드(CMD)가 호스트 버퍼 메모리 주소를 포함하는 경우, 저장 장치 제어기는 호스트 버퍼 메모리로 디버깅 데이터를 저장할 수 있다.
따라서, 본 발명의 실시 예에 따른 호스트 시스템은 상황에 따라 PCIe 인터페이스의 레지스터 또는 호스트 버퍼 메모리 중 하나로 디버깅 데이터를 수집할 수 있다. 예를 들어, 저장 장치 제어기가 호스트 버퍼 메모리에 직접 접근이 불가능한 경우, 호스트 시스템은 PCIe 인터페이스의 레지스터를 통해 디버깅 데이터를 수집할 수 있다.
도 11은 본 발명의 실시 예에 따른 제2 장치 드라이버의 동작을 보여주는 순서도이다. 도 11을 참조하면, 제2 장치 드라이버는 디버깅 동작을 수행하는 애플리케이션의 실행에 따라 동작할 수 있다. S311 단계에서, 제2 장치 드라이버는 디버깅 데이터 요청 커맨드를 생성할 수 있다. 디버깅 데이터 요청 커맨드는 메모리 주소를 포함할 수 있다. 또는 디버깅 데이터 요청 커맨드는 메모리 주소를 포함하지 않을 수 있다. 메모리 주소가 포함되지 않은 커맨드는 저장 장치 제어기가 PCIe 인터페이스의 레지스터에 디버깅 데이터를 저장할 것을 요구하는 커맨드일 수 있다. 메모리 주소가 포함된 커맨드는 저장 장치 제어기가 호스트 버퍼 메모리에 디버깅 데이터를 저장할 것을 요구하는 커맨드일 수 있다.
S312 단계에서, 제2 장치 드라이버는 생성한 디버깅 데이터 요청 커맨드를 PCIe 인터페이스를 통해 저장 장치로 전달할 수 있다. 예시적으로, 제2 장치 드라이버는 디버깅 데이터 요청 커맨드를 PCIe 인터페이스에 포함된 레지스터에 저장할 수 있다.
S313 단계에서, 제2 장치 드라이버는 저장 장치로부터 커맨드 수신 확인 응답(ACK)을 수신할 수 있다. S314 단계에서, 제2 장치 드라이버는 PCIe 인터페이스를 통해 저장 장치로 읽기 요청 커맨드를 전달할 수 있다. 예시적으로, 제2 장치 드라이버는 읽기 요청 커맨드를 PCIe 인터페이스에 포함된 레지스터에 저장할 수 있다.
S315 단계에서, 제2 장치 드라이버는 저장 장치로부터 디버깅 데이터 쓰기 완료 메시지를 수신할 수 있다. S316 단계에서, 제2 장치 드라이버는 디버깅 데이터를 획득할 수 있다. 예시적으로, 제2 장치 드라이버는 PCIe 인터페이스의 레지스터로부터 디버깅 데이터를 인출할 수 있다. 또는 제2 장치 드라이버는 호스트 버퍼 메모리로부터 디버깅 데이터를 인출할 수 있다.
제2 장치 드라이버는 획득한 디버깅 데이터를 애플리케이션으로 전달할 수 있다. 애플리케이션은 디버깅 데이터로부터 저장 장치의 불량 원인을 확인할 수 있다.
도 12는 본 발명의 실시 예에 따른 SSD를 예시적으로 보여주는 도면이다. 도 12를 참조하면, SSD(1000)는 복수의 불휘발성 메모리 패키지들(1100) 및 제어기(1200)를 포함할 수 있다. 예를 들어, SSD(1000)는 NVMe SSD일 수 있다.
불휘발성 메모리 패키지들(1100) 각각은 복수의 불휘발성 메모리 장치들을 포함할 수 있다. 불휘발성 메모리 장치는 낸드 플래시 메모리(NAND Flash Memory), 수직형 낸드 플래시 메모리(Vertical NAND; VNAND), 노아 플래시 메모리(NOR Flash Memory), 저항성 램(RRAM; Resistive Random Access Memory), 상변화 메모리(PRAM; Phase-change Memory), 자기저항 메모리(MRAM; Magnetoresistive Random Access Memory), 강유전체 메모리(FRAM; Ferroelectric Random Access Memory), 스핀주입 자화반전 메모리(STT-RAM; Spin Transfer Torque Random Access Memory) 등이 될 수 있다.
제어기(1200)는 프로세서(1210), 버퍼 메모리(1220), 에러 정정 회로(1230), 호스트 인터페이스(1240) 및 불휘발성 메모리 인터페이스(1250)를 포함할 수 있다. 예시적으로, 제어기(1200)는 도 1 내지 도 11에서 설명된 저장 장치 제어기를 포함할 수 있다. 제어기(1200)는 복수의 채널들(CH1~CHi)을 통해 불휘발성 메모리 패키지들(1100)에 연결될 수 있다.
프로세서(1210)는 제어기(1200)에 포함된 각각의 구성요소들을 제어하고, 제어기(1200)의 동작에 필요한 연산을 수행할 수 있다. 프로세서(1210)는 제어부(1211)를 포함할 수 있다. 제어부(1211)는 불휘발성 메모리 패키지들(1100)의 데이터 입출력을 관리하고, 제어기(1200)에 포함된 각각의 구성요소의 데이터 입출력을 관리할 수 있다. 제어부(1211)는 본 발명의 실시 예에 따른 인터페이스 제어부의 동작들을 수행할 수 있다.
버퍼 메모리(1220)는 제어기(1200)의 동작에 필요한 데이터를 임시로 저장할 수 있다. 예를 들어, 제어기(1200)는 디버깅 데이터를 수집하고, 수집된 디버깅 데이터를 버퍼 메모리(1220)에 저장할 수 있다. 호스트로부터 디버깅 데이터에 대한 요청이 수신되면, 제어기(1200)는 버퍼 메모리(1220)에 저장된 디버깅 데이터를 호스트로 전달할 수 있다.
에러 정정 회로(1230)는 쓰기 동작에서 프로그램될 데이터의 에러 정정 코드 값을 계산하고, 읽기 동작에서 읽혀진 데이터를 에러 정정 코드 값에 기초하여 정정할 수 있다.
호스트 인터페이스(1240)는 호스트와 통신을 수행하기 위한 인터페이스 기능을 제공할 수 있다. 호스트 인터페이스(1240)는 다양한 인터페이스에 의해 구현될 수 있으며, 복수의 인터페이스들로 구현될 수 있다. 예를 들어, 호스트 인터페이스(1240)는 본 발명의 실시 예에 따른 PCIe 인터페이스 및 NVMe 인터페이스를 포함할 수 있다. 따라서, 제어기(1200)는 호스트 인터페이스(1240)에 포함된 레지스터(미도시)를 통해 호스트로부터 디버깅 데이터 요청 커맨드를 수신하고, 디버깅 데이터를 전달할 수 있다. 또는 제어기(1200)는 디버깅 데이터 요청 커맨드에 따라 디버깅 데이터를 호스트로 직접 전달할 수 있다.
불휘발성 메모리 인터페이스(1250)는 불휘발성 메모리 패키지들(1100)과 통신을 수행하기 위한 인터페이스 기능을 제공할 수 있다. 제어기(1200)는 불휘발성 메모리 인터페이스(1250)를 통해 불휘발성 메모리 패키지들(1100)로부터 데이터를 수신할 수 있다. 예를 들어, 제어기(1200)는 불휘발성 메모리 인터페이스(1250)를 통해 불휘발성 메모리 패키지들(1100)에 관한 덤프 데이터 또는 로그 데이터를 수신할 수 있다.
도 13은 본 발명의 실시 예에 따른 호스트 시스템을 예시적으로 보여주는 블록도이다. 도 13을 참조하면, 호스트 시스템(2000)은 호스트(2100) 및 PCIe 디바이스(2200)를 포함할 수 있다. 호스트(2100)와 PCIe 디바이스(2200)는 PCIe 버스를 통해 연결될 수 있으며, PCIe 인터페이스에 기초하여 통신을 수행할 수 있다.
호스트(2100)는 적어도 하나의 중앙 처리 장치(2110), 호스트 버퍼 메모리(2120) 및 PCIe 제어기(2130)를 포함할 수 있다. 중앙 처리 장치(2110)는 호스트(2100)의 동작에 필요한 제어 기능, 연산 기능 등을 수행할 수 있다. 호스트 버퍼 메모리(2120)는 PCIe 디바이스(2200)가 독립적으로 사용할 수 있는 메모리 영역일 수 있다. 예시적으로, 호스트에 포함된 운영 체제는 호스트 버퍼 메모리(2120)의 영역들 중 PCIe 디바이스(2200)가 사용할 메모리 영역을 할당할 수 있다. PCIe 디바이스(2200)는 호스트 버퍼 메모리(2120)에 직접 접근하여 데이터를 인출하거나 저장할 수 있다.
PCIe 제어기(2130)는 PCIe 디바이스(2200)로 호스트(2100)의 명령을 전달하거나, PCIe 디바이스(2200)로부터 수신된 데이터를 호스트(2100)로 전달할 수 있다. PCIe 제어기(2130)는 PCIe 디바이스(2200)로 커맨드를 전달함으로써 PCIe 디바이스(2200)의 동작을 제어할 수 있다. 예시적으로, PCIe 제어기(2130)는 PCIe 디바이스(2200)를 제어하기 위한 적어도 하나 이상의 장치 드라이버(2131)를 포함할 수 있다. 장치 드라이버(2131)는 정해진 프로토콜에 기초하여 PCIe 디바이스(2200)로 전달될 커맨드를 생성할 수 있다. 예를 들어, 장치 드라이버(2131)는 본 발명의 실시 예에 따른 제2 장치 드라이버를 포함할 수 있다. 제2 장치 드라이버는 PCIe 디바이스(2200)의 디버깅 동작을 위한 커맨드를 생성하고, PCIe 버스를 통해 PCIe 디바이스(2200)로 생성한 커맨드를 전달할 수 있다.
PCIe 디바이스(2200)는 디바이스 제어기(2210)를 포함할 수 있다. 디바이스 제어기(2210)는 PCIe 디바이스(2200)의 동작을 제어할 수 있다. 예를 들어, PCIe 디바이스(2200)는 NVMe 디바이스, 그래픽 처리 장치(GPU), 네트워크 인터페이스 카드(NIC) 등을 포함할 수 있다. 디바이스 제어기(2210)는 PCIe 디바이스(2200)의 종류에 기초하여 PCIe 디바이스(2200)의 동작을 제어할 수 있다.
디바이스 제어기(2210)는 PCIe 인터페이스(2220)를 통해 호스트(2100)와 통신을 수행할 수 있다. PCIe 인터페이스(2220)는 레지스터(2221)를 포함할 수 있다. 디바이스 제어기(2210)와 호스트(2100)는 레지스터(2221)를 이용하여 통신을 수행할 수 있다. 예시적으로, 호스트(2100)는 PCIe 디바이스(2200)에 대한 디버깅 동작을 수행하기 위해 레지스터(2221)를 이용할 수 있다. 예를 들어, 드라이버(2131)는 디버깅 데이터 요청 커맨드를 레지스터(2221)에 저장할 수 있다. 디바이스 제어기(2210)는 커맨드에 응답하여 디버깅 데이터를 레지스터(2221)에 저장할 수 있다. 이에 따라, 호스트(2100)는 PCIe 디바이스(2200)로부터 디버깅 데이터를 수신할 수 있다.
또는, 디바이스 제어기(2210)와 호스트(2100)는 레지스터(2221) 및 호스트 버퍼 메모리(2120)를 이용하여 통신을 수행할 수 있다. 예시적으로, 호스트(2100)는 PCIe 디바이스(2200)에 대한 디버깅 동작을 수행하기 위해 레지스터(2221) 및 호스트 버퍼 메모리(2120)를 이용할 수 있다. 예를 들어, 드라이버(2131)는 디버깅 데이터 요청 커맨드를 레지스터(2221)에 저장할 수 있다. 디바이스 제어기(2210)는 커맨드에 응답하여 디버깅 데이터를 호스트 버퍼 메모리(2120)에 저장할 수 있다. 이에 따라, 호스트(2100)는 PCIe 디바이스(2200)로부터 디버깅 데이터를 수신할 수 있다.
상술한 바와 같이, 본 발명의 실시 예에 따르면, 호스트(2100)는 PCIe 디바이스(2200)에 대한 디버깅 동작을 수행할 수 있다. 본 발명은 이미 존재하는 PCIe 인터페이스(2220) 또는 호스트 버퍼 메모리(2120)를 이용함으로써 별도의 하드웨어에 대한 추가 없이 디버깅 데이터를 수집할 수 있다.
상술된 내용은 본 발명을 실시하기 위한 구체적인 실시 예들이다. 본 발명은 상술된 실시 예들뿐만 아니라, 단순하게 설계 변경되거나 용이하게 변경할 수 있는 실시 예들 또한 포함할 것이다. 또한, 본 발명은 실시 예들을 이용하여 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다. 따라서, 본 발명의 범위는 상술된 실시 예들에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 할 것이다.
10, 20: 호스트 시스템 100, 400: 저장 장치 제어기
110, 410: 호스트 인터페이스 120, 420: 인터페이스 제어부
130, 430: 메모리 장치 111, 411: PCIe 인터페이스
112, 412: NVMe 인터페이스 210, 610: 디바이스 인터페이스
220, 620: 제1 장치 드라이버 230, 630: 제2 장치 드라이버
110, 410: 호스트 인터페이스 120, 420: 인터페이스 제어부
130, 430: 메모리 장치 111, 411: PCIe 인터페이스
112, 412: NVMe 인터페이스 210, 610: 디바이스 인터페이스
220, 620: 제1 장치 드라이버 230, 630: 제2 장치 드라이버
Claims (20)
- 저장 장치를 제어하는 저장 장치 제어기의 동작 방법에 있어서,
NVMe(nonvolatile memory express) 프로토콜을 이용하여, 상기 저장 장치 및 호스트 장치 사이의 PCIe(peripheral component interconnect express) 인터페이스를 통해 상기 저장 장치에 액세스하는 상기 호스트 장치와 통신하는 단계;
상기 저장 장치 및 상기 호스트 장치 사이의 상기 NVMe 프로토콜을 이용하여, 상기 통신하는 단계의 실패에 기초하여 호스트 장치로부터 PCIe 인터페이스를 통해 디버깅 데이터 요청 커맨드를 수신하고, 상기 디버깅 데이터 요청은 PCIe 프로토콜에 기초하는 단계; 및
상기 디버깅 데이터 요청 커맨드를 수신하는 것에 응답하여, 상기 NVMe 프로토콜을 이용한 상기 저장 장치 및 상기 호스트 장치 사이의 상기 통신의 상기 실패를 디버깅하기 위한 디버깅 데이터를 상기 PCIe 프로토콜을 이용하여 상기 PCIe 인터페이스를 통해 상기 호스트 장치로 전달하는 단계를 포함하는 동작 방법. - 제 1 항에 있어서,
상기 디버깅 데이터를 상기 PCIe 인터페이스의 레지스터에 저장하는 단계를 더 포함하되,
상기 레지스터는 상기 PCIe 인터페이스의 PCIe 확장된 설정 레지스터 공간(PCIe extended configuration register space)에 포함되는 동작 방법. - 제 2 항에 있어서,
상기 디버깅 데이터는 덤프 데이터(dump data) 및 로그 데이터(log data) 중 적어도 하나를 포함하는 동작 방법. - 제 2 항에 있어서,
상기 디버깅 데이터 요청 커맨드는 상기 레지스터로 저장되는 동작 방법. - 제 2 항에 있어서,
상기 디버깅 데이터 요청 커맨드의 수신을 알리는 단계; 및
상기 호스트 장치로부터 읽기 요청 커맨드를 수신하는 단계를 더 포함하되,
상기 디버깅 데이터는 상기 읽기 요청 커맨드의 수신에 응답하여 상기 레지스터로 저장되는 동작 방법. - 제 5 항에 있어서,
상기 읽기 요청 커맨드는 상기 레지스터로 저장되는 동작 방법. - 제 5 항에 있어서,
상기 디버깅 데이터의 상기 저장 이후, 상기 레지스터에 상기 디버깅 데이터가 쓰기 완료되었는지 나타내는 정보를 저장하는 단계를 더 포함하는 동작 방법. - 제 1 항에 있어서,
상기 디버깅 데이터를 상기 호스트 장치에 포함된 호스트 버퍼 메모리에 저장하는 단계를 더 포함하는 동작 방법. - 제 8 항에 있어서,
상기 디버깅 데이터 요청 커맨드는 상기 PCIe 인터페이스에 포함된 레지스터로 저장되는 동작 방법. - 제 8 항에 있어서,
상기 디버깅 데이터 요청 커맨드는 상기 호스트 버퍼 메모리의 주소 정보를 포함하는 동작 방법. - 제 10 항에 있어서,
상기 디버깅 데이터는 상기 호스트 버퍼 메모리의 영역들 중 상기 주소 정보에 대응하는 영역으로 저장되는 동작 방법. - 제 8 항에 있어서,
상기 디버깅 데이터 요청 커맨드의 수신을 상기 호스트 장치로 알리는 단계; 및
상기 호스트 장치로부터 읽기 요청 커맨드를 수신하는 단계를 더 포함하되,
상기 디버깅 데이터는 상기 읽기 요청 커맨드에 응답하여 저장되는 동작 방법. - 제 12 항에 있어서,
상기 읽기 요청 커맨드는 상기 PCIe 인터페이스에 포함된 레지스터로 저장되는 동작 방법. - 제 12 항에 있어서,
상기 읽기 요청 커맨드는 상기 디버깅 데이터와 관련된 버스트 읽기(burst read)를 요청하는 커맨드인 동작 방법. - 제 14 항에 있어서,
상기 호스트 버퍼 메모리에 상기 디버깅 데이터를 버스트 쓰기(burst write)하는 동작 방법. - 제 12 항에 있어서,
상기 디버깅 데이터의 저장 이후, 상기 호스트 버퍼 메모리에 상기 디버깅 데이터가 쓰기 완료되었는지 나타내는 정보를 저장하는 단계를 더 포함하는 동작 방법. - 호스트 장치 및 저장 장치를 포함하는 호스트 시스템의 동작 방법에 있어서,
NVMe(nonvolatile memory express) 프로토콜을 이용하여, 상기 저장 장치 및 상기 호스트 장치 사이의 PCIe(peripheral component interconnect express) 인터페이스를 통해 상기 저장 장치에 액세스하는 상기 호스트 장치와 통신하는 단계;
상기 NVMe 프로토콜을 이용하여, 상기 PCIe 인터페이스를 통해 상기 저장 장치 및 상기 호스트 장치 사이의 상기 통신의 실패를 검출하는 단계;
상기 호스트 장치가 상기 NVMe 프로토콜을 이용한 상기 저장 장치 및 상기 호스트 장치 사이의 상기 통신의 상기 실패의 검출에 응답하여, PCIe 프로토콜을 이용하여 PCIe 인터페이스를 통해 상기 저장 장치로 디버깅 데이터 요청 커맨드를 전달하는 단계;
상기 저장 장치가 상기 PCIe 프로토콜을 이용하여, 상기 PCIe 인터페이스를 통해 상치 호스트 장치로 디버깅 데이터를 전달하는 단계; 및
상기 호스트 장치에 의해, 상기 디버깅 데이터의 수신에 응답하여, 상기 NVMe 프로토콜을 이용한 상기 저장 장치 및 상기 호스트 장치 사이의 상기 통신의 상기 실패를 디버깅하는 단계를 포함하는 동작 방법. - 제 17 항에 대하여,
상기 호스트 장치 및 상기 저장 장치는, 상기 NVMe 프로토콜에 기초하여 동작하는 제 1 드라이버 및 상기 PCIe 프로토콜에 기초하여 동작하는 제 2 드라이버를 포함하는 동작 방법. - 제 17 항에 대하여,
상기 호스트 장치로 상기 디버깅 데이터를 전달하는 단계는, 상기 저장 장치가 상기 PCIe 인터페이스에 포함된 레지스터에 상기 디버깅 데이터를 저장하는 단계를 포함하는 동작 방법. - 제 17 항에 대하여,
상기 호스트 장치로 상기 디버깅 데이터를 전달하는 단계는, 상기 저장 장치가 상기 호스트 장치에 포함된 호스트 버퍼 메모리에 상기 디버깅 데이터를 저장하는 단계를 포함하는 동작 방법.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170154289A KR102331926B1 (ko) | 2017-11-17 | 2017-11-17 | 저장 장치를 포함하는 호스트 시스템의 동작 방법 및 저장 장치 제어기의 동작 방법 |
US16/034,887 US10585822B2 (en) | 2017-11-17 | 2018-07-13 | Operation method of host system including storage device and operation method of storage device controller |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170154289A KR102331926B1 (ko) | 2017-11-17 | 2017-11-17 | 저장 장치를 포함하는 호스트 시스템의 동작 방법 및 저장 장치 제어기의 동작 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190056891A KR20190056891A (ko) | 2019-05-27 |
KR102331926B1 true KR102331926B1 (ko) | 2021-11-29 |
Family
ID=66533033
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020170154289A KR102331926B1 (ko) | 2017-11-17 | 2017-11-17 | 저장 장치를 포함하는 호스트 시스템의 동작 방법 및 저장 장치 제어기의 동작 방법 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10585822B2 (ko) |
KR (1) | KR102331926B1 (ko) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200081628A1 (en) * | 2018-09-12 | 2020-03-12 | Dell Products, Lp | Apparatus and Method for Monitoring Insertion and Removal of Devices |
US11971789B2 (en) | 2020-06-16 | 2024-04-30 | Samsung Electronics Co., Ltd. | Systems, methods, and apparatus for crash recovery in storage devices |
US11755459B2 (en) | 2021-03-23 | 2023-09-12 | Western Digital Technologies, Inc. | Management of a debug buffer based on priority information |
CN115312110A (zh) * | 2021-05-08 | 2022-11-08 | 瑞昱半导体股份有限公司 | 芯片验证系统及其验证方法 |
US11822490B2 (en) * | 2021-10-14 | 2023-11-21 | Samsung Electronics Co., Ltd. | Systems, methods, and devices for accessing a device operating system over an interconnect |
US12045494B2 (en) * | 2022-09-29 | 2024-07-23 | SanDisk Technologies, Inc. | AER and AEN for overlapping cross feature |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090216964A1 (en) | 2008-02-27 | 2009-08-27 | Michael Palladino | Virtual memory interface |
US20160062652A1 (en) | 2014-08-29 | 2016-03-03 | Dell Products, Lp | System and Method for Providing Personality Switching in a Solid State Drive Device |
US20160378579A1 (en) | 2015-06-23 | 2016-12-29 | Microsoft Technology Licensing, Llc | Atypical Reboot Data Collection And Analysis |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4244049A (en) * | 1979-02-02 | 1981-01-06 | Burroughs Corporation | Method and apparatus for enhancing I/O transfers in a named data processing system |
US5978902A (en) * | 1997-04-08 | 1999-11-02 | Advanced Micro Devices, Inc. | Debug interface including operating system access of a serial/parallel debug port |
KR100866951B1 (ko) * | 2005-10-28 | 2008-11-05 | 삼성전자주식회사 | 메모리에 저장된 데이터를 보호할 수 있는 프로그래머블프로세서 및 방법 |
US9032164B2 (en) | 2006-02-17 | 2015-05-12 | Emulex Corporation | Apparatus for performing storage virtualization |
US7603500B2 (en) | 2007-08-10 | 2009-10-13 | Dell Products L.P. | System and method for allowing coexistence of multiple PCI managers in a PCI express system |
US8812443B2 (en) * | 2007-10-01 | 2014-08-19 | International Business Machines Corporation | Failure data collection system apparatus and method |
JP5299559B2 (ja) * | 2010-03-19 | 2013-09-25 | 富士通株式会社 | 情報処理装置及び情報処理装置のデバイス情報収集処理方法 |
US20130031419A1 (en) * | 2011-07-28 | 2013-01-31 | International Business Machines Corporation | Collecting Debug Data in a Secure Chip Implementation |
WO2013048493A1 (en) | 2011-09-30 | 2013-04-04 | Intel Corporation | Memory channel that supports near memory and far memory access |
US9043649B2 (en) * | 2012-06-18 | 2015-05-26 | Intel Corporation | Method and apparatus for output of high-bandwidth debug data/traces in ICS and SoCs using embedded high speed debug |
US8706938B2 (en) * | 2012-06-20 | 2014-04-22 | International Business Machines Corporation | Bandwidth limiting on generated PCIE packets from debug source |
US9043500B2 (en) | 2012-06-30 | 2015-05-26 | Intel Corporation | System and method for generating a virtual PCI-type configuration space for a device |
US9594718B2 (en) | 2013-01-24 | 2017-03-14 | Qualcomm Innovation Center, Inc. | Hardware accelerated communications over a chip-to-chip interface |
US9298658B2 (en) | 2013-02-26 | 2016-03-29 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Using PCI-E extended configuration space to send IOCTLS to a PCI-E adapter |
EP2972922A1 (en) | 2013-03-14 | 2016-01-20 | Intel Corporation | Generic method to build virtual pci device and virtual mmio device |
US9910689B2 (en) | 2013-11-26 | 2018-03-06 | Dynavisor, Inc. | Dynamic single root I/O virtualization (SR-IOV) processes system calls request to devices attached to host |
US9384093B1 (en) * | 2014-05-28 | 2016-07-05 | Microsemi Storage Solutions (U.S.), Inc. | Raid enabled NVME device |
US10078113B1 (en) * | 2015-06-11 | 2018-09-18 | Xilinx, Inc. | Methods and circuits for debugging data bus communications |
US9672091B2 (en) * | 2015-11-10 | 2017-06-06 | Samsung Electronics Co., Ltd. | Storage device and debugging method thereof |
US10055377B2 (en) * | 2016-02-24 | 2018-08-21 | Western Digital Technologies, Inc. | Using a proprietary framework on a standards-based embedded device |
-
2017
- 2017-11-17 KR KR1020170154289A patent/KR102331926B1/ko active IP Right Grant
-
2018
- 2018-07-13 US US16/034,887 patent/US10585822B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090216964A1 (en) | 2008-02-27 | 2009-08-27 | Michael Palladino | Virtual memory interface |
US20160062652A1 (en) | 2014-08-29 | 2016-03-03 | Dell Products, Lp | System and Method for Providing Personality Switching in a Solid State Drive Device |
US20160378579A1 (en) | 2015-06-23 | 2016-12-29 | Microsoft Technology Licensing, Llc | Atypical Reboot Data Collection And Analysis |
Also Published As
Publication number | Publication date |
---|---|
KR20190056891A (ko) | 2019-05-27 |
US10585822B2 (en) | 2020-03-10 |
US20190155765A1 (en) | 2019-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102331926B1 (ko) | 저장 장치를 포함하는 호스트 시스템의 동작 방법 및 저장 장치 제어기의 동작 방법 | |
TWI709857B (zh) | 記憶體系統及控制方法 | |
US10133668B2 (en) | Technologies for providing cross data storage device communications | |
US9858015B2 (en) | Solid-state storage management | |
WO2017084565A1 (zh) | 存储数据访问方法及相关的控制器、设备、主机和系统 | |
US9244865B2 (en) | Obtaining diagnostic information through host interfaces | |
KR20200056538A (ko) | 호스트 메모리 버퍼를 사용하는 스토리지 장치 및 그것의 메모리 관리 방법 | |
CN113760185B (zh) | 内存块回收方法和装置 | |
CN109901791B (zh) | 信息处理装置以及信息处理装置的执行方法 | |
KR102558947B1 (ko) | 데이터 저장 장치 | |
US11645011B2 (en) | Storage controller, computational storage device, and operational method of computational storage device | |
KR20190066466A (ko) | 기입 레이턴시를 줄일 수 있는 저장 장치의 동작 방법 | |
CN112214157B (zh) | 主机输出输入命令的执行装置及方法及存储介质 | |
US20170242820A1 (en) | Using a proprietary framework on a standards-based embedded device | |
US10664418B2 (en) | Peripheral device controlling device, operation method thereof, and operation method of peripheral device controlling device driver | |
KR102219759B1 (ko) | 저장 장치, 그것을 포함하는 데이터 저장 시스템 및 그것의 동작 방법 | |
US20230229357A1 (en) | Storage controller, computational storage device, and operational method of computational storage device | |
CN110647359A (zh) | 半导体装置、其操作方法和具有其的层叠存储装置 | |
KR20170110810A (ko) | 데이터 처리 시스템 및 그것의 동작 방법 | |
US10564847B1 (en) | Data movement bulk copy operation | |
KR20220080915A (ko) | 스토리지 장치와 호스트 장치의 구동 방법 및 스토리지 장치 | |
EP4148572B1 (en) | Computational storage device and storage system including the computational storage device | |
KR20160111222A (ko) | 반도체 메모리 장치 및 메모리 컨트롤러를 포함하는 메모리 시스템, 그것을 포함하는 컴퓨팅 시스템 | |
KR20120021490A (ko) | 양방향 통신 기법을 갖는 저장 장치 그리고 그것을 포함한 시스템 | |
KR20150116627A (ko) | 컨트롤러 및 그것을 포함하는 데이터 저장 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |