KR20200051450A - 스트림 데이터를 처리하는 스토리지 장치, 그것의 포함하는 컴퓨팅 시스템, 그리고 그것의 동작 방법 - Google Patents
스트림 데이터를 처리하는 스토리지 장치, 그것의 포함하는 컴퓨팅 시스템, 그리고 그것의 동작 방법 Download PDFInfo
- Publication number
- KR20200051450A KR20200051450A KR1020190027103A KR20190027103A KR20200051450A KR 20200051450 A KR20200051450 A KR 20200051450A KR 1020190027103 A KR1020190027103 A KR 1020190027103A KR 20190027103 A KR20190027103 A KR 20190027103A KR 20200051450 A KR20200051450 A KR 20200051450A
- Authority
- KR
- South Korea
- Prior art keywords
- streaming
- buffer
- stream data
- host
- data
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 40
- 238000012545 processing Methods 0.000 title description 35
- 239000000872 buffer Substances 0.000 claims abstract description 209
- 230000015654 memory Effects 0.000 claims abstract description 151
- 239000007787 solid Substances 0.000 claims description 9
- 238000012546 transfer Methods 0.000 claims description 5
- 238000013507 mapping Methods 0.000 claims description 2
- 239000000284 extract Substances 0.000 claims 1
- 238000012005 ligant binding assay Methods 0.000 description 41
- 238000010586 diagram Methods 0.000 description 26
- 238000007726 management method Methods 0.000 description 24
- 230000004044 response Effects 0.000 description 23
- 230000002093 peripheral effect Effects 0.000 description 14
- 230000005540 biological transmission Effects 0.000 description 10
- 230000003936 working memory Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 238000013403 standard screening design Methods 0.000 description 6
- 238000003491 array Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 239000012464 large buffer Substances 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000001960 triggered effect Effects 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/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/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- 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/0626—Reducing size or complexity 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/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
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)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
가상 메모리를 사용하는 호스트에 연결되는 스토리지 장치는, 스트리밍 접근 명령어를 수신하며, 상기 스트리밍 접근 명령어에 포함되는 LBA 리스트 및 청크 사이즈에 따라 요청된 스트림 데이터를 추가 명령어 없이 불휘발성 메모리 장치로부터 프리패치하여 버퍼로 순차적으로 로드하는 솔리드 스테이트 드라이브, 그리고 상기 가상 메모리 상에 등록된 스트리밍 영역에 접근하여 상기 버퍼에 로드되는 상기 스트림 데이터를 상기 청크 사이즈 단위로 순차적으로 읽어내는 인-스토리지 컴퓨팅부를 포함하되, 상기 버퍼는 상기 스트리밍 영역의 가상 메모리 주소로 상기 가상 메모리에 맵핑된다.
Description
본 발명은 전자 장치에 관한 것으로, 좀 더 구체적으로는 스트림 데이터를 효과적으로 저장하고 출력할 수 있는 스토리지 장치, 컴퓨팅 시스템, 그리고 그것의 동작 방법에 관한 것이다.
근래 다양한 유형의 전자 장치들이 널리 이용되고 있다. 전자 장치는 그것에 포함되는 전자 회로들의 동작들에 따라 고유의 기능들을 수행한다. 전자 장치는 고유의 기능들을 수행함에 따라 사용자에게 서비스들을 제공한다.
예로서, 솔리드 스테이트 드라이브(Solid State Drive: 이하, SSD)는 스토리지 장치의 한 예이다. SSD는 외부 장치(예컨대, 호스트 장치, 주변 장치 등)의 요청에 응답하여 데이터를 저장하거나 저장된 데이터를 출력한다. SSD는 SSD에 포함되는 불휘발성 메모리 장치(NVM)에 데이터를 저장하거나 불휘발성 메모리 장치에 저장된 데이터를 출력하여 사용자에게 스토리지 서비스를 제공한다.
한편, 정보 처리 기술이 발달하고 많은 양의 데이터가 생성됨에 따라, 스토리지 장치에서 많은 양의 데이터를 빠르게 처리하는 것은 중요한 이슈로 되었다. 따라서, 스토리지 장치의 성능, 용량 등의 속성들과 관련하여 사용자들의 다양한 요구사항을 충족시키는 것이 필요하게 되었다. 특히, 스트림 데이터의 서비스를 제공하는 시스템에서, 스트림 데이터의 송수신에 따른 스토리지 장치의 대역폭 감소는 서비스 품질을 크게 저하시킨다. 스트림 데이터를 사용하는 시스템에서 사용자들의 다양한 요구사항을 충족시키기 위해, 스토리지 장치의 구성 및 동작을 개선하기 위한 방법들이 제안되고 있다.
본 발명의 목적은 메모리 자원의 공유 기법을 적용하는 인터페이스를 채용한 시스템에서 스트림 데이터의 전송시 발생하는 스토리지 장치의 대역폭 감소 및 전송 지연 시간을 최소화할 수 있는 기술을 제공하는데 있다.
본 발명의 실시 예에 따른 가상 메모리를 사용하는 호스트에 연결되는 스토리지 장치는, 스트리밍 접근 명령어를 수신하며, 상기 스트리밍 접근 명령어에 포함되는 LBA 리스트 및 청크 사이즈에 따라 요청된 스트림 데이터를 추가 명령어 없이 불휘발성 메모리 장치로부터 프리패치하여 버퍼로 순차적으로 로드하는 솔리드 스테이트 드라이브, 그리고 상기 가상 메모리 상에 등록된 스트리밍 영역에 접근하여 상기 버퍼에 로드되는 상기 스트림 데이터를 상기 청크 사이즈 단위로 순차적으로 읽어내는 인-스토리지 컴퓨팅부를 포함하되, 상기 버퍼는 상기 스트리밍 영역의 가상 메모리 주소로 상기 가상 메모리에 맵핑된다.
본 발명의 다른 실시 예에 따른 컴퓨팅 시스템은, 가상 메모리 공간을 사용하여 메모리 자원을 관리하는 호스트, 스트리밍 접근 명령어를 수신하며, 상기 스트리밍 접근 명령어에 포함되는 LBA 리스트 및 청크 사이즈에 따라 요청된 스트림 데이터를 추가 명령어 없이 불휘발성 메모리 장치로부터 프리패치하여 버퍼로 순차적으로 로드하는 스토리지 장치, 그리고 상기 가상 메모리 공간에 등록된 스트리밍 영역에 접근하여 상기 버퍼에 로드되는 상기 스트림 데이터를 상기 청크 사이즈 단위로 순차적으로 읽어내는 필드 프로그래머블 게이트 어레이(FPGA)를 포함한다.
본 발명의 실시 예에 따른 가상 메모리 공간을 사용하는 호스트에 연결되며, 불휘발성 메모리 장치 및 버퍼를 포함하는 스토리지 장치의 동작 방법은, 상기 버퍼의 물리 주소를 상기 가상 메모리 공간의 스트리밍 윈도에 대응하는 주소 범위에 등록하는 단계, 상기 스토리지 장치에서 스트림 데이터에 대응하는 LBA 리스트와 상기 스트림 데이터의 관리 단위 정보를 포함하는 스트리밍 접근 명령어를 수신하는 단계, 상기 LBA 리스트를 참조하여 상기 스트림 데이터를 상기 불휘발성 메모리 장치로부터 프리패치하여 상기 관리 단위로 상기 버퍼에 순차적으로 로드하는 단계, 타깃 장치에서 상기 가상 메모리 공간의 상기 스트리밍 윈도에 접근하는 단계, 상기 스트리밍 윈도로의 접근을 상기 버퍼로 리다이랙션하는 단계, 그리고 상기 버퍼에 순차적으로 로드되는 상기 스트림 데이터를 상기 관리 단위로 상기 타깃 장치로 전송하는 단계를 포함한다.
이상과 같은 본 발명의 실시 예에 따르면, 싱글 스트림 접근 명령어 만으로 스트림 데이터가 스토리지 장치에서 타깃 장치로 전송 가능하다. 따라서, 스트림 데이터의 전송시에 발생하는 스토리지 장치의 입출력 채널의 대역폭 감소 및 전송 지연 시간을 최소화하고, 인-스토리지 컴퓨팅의 효율을 높일 수 있다.
도 1은 본 발명의 실시 예에 따른 스토리지 장치를 포함하는 전자 시스템의 예시적인 구성을 보여주는 블록도이다.
도 2는 도 1의 호스트와 스토리지 장치의 예시적인 구성을 보여주는 블록도이다.
도 3a, 도 3b 및 도 3c는 본 발명의 실시 예에 따른 스트리밍 접근 명령어를 예시적으로 보여주는 도면들이다.
도 4는 호스트의 가상 메모리 공간을 간략히 보여주는 메모리 맵이다.
도 5는 본 발명의 SSD의 예시적인 구성을 보여주는 블록도이다.
도 6은 도 5의 SSD 컨트롤러의 예시적인 구성을 보여주는 블록도이다.
도 7은 도 6에 도시된 본 발명의 스트리밍 매니저의 동작을 간략히 보여주는 순서도이다.
도 8은 본 발명의 스트리밍 읽기 명령어에 따라 수행되는 데이터의 이동 경로를 예시적으로 보여주는 블록도이다.
도 9는 본 발명의 환상 큐 형태의 버퍼 관리 방법을 예시적으로 보여주는 도면이다.
도 10은 본 발명의 스토리지 장치에서 수행되는 인-스토리지 컴퓨팅을 위한 스트리밍 읽기 명령어와 그에 대한 스토리지 장치의 응답을 예시적으로 보여주는 도면이다.
도 11은 도 5의 SSD 컨트롤러의 다른 실시 예를 보여주는 블록도이다.
도 12는 도 11의 스트리밍 매니저의 구성을 보여주는 블록도이다.
도 13은 본 발명의 다른 실시 예에 따른 호스트의 가상 메모리 공간에서 스트리밍 영역을 할당하는 방법을 보여주는 도면이다.
도 14는 본 발명의 스트리밍 쓰기 명령어에 따라 수행되는 데이터의 이동 경로를 예시적으로 보여주는 블록도이다.
도 15는 본 발명의 다른 실시 예에 따른 스토리지 장치를 포함하는 전자 시스템을 보여주는 블록도이다.
도 16은 도 15의 호스트, 스토리지 장치, 그리고 FPGA의 예시적인 구성을 보여주는 블록도이다.
도 2는 도 1의 호스트와 스토리지 장치의 예시적인 구성을 보여주는 블록도이다.
도 3a, 도 3b 및 도 3c는 본 발명의 실시 예에 따른 스트리밍 접근 명령어를 예시적으로 보여주는 도면들이다.
도 4는 호스트의 가상 메모리 공간을 간략히 보여주는 메모리 맵이다.
도 5는 본 발명의 SSD의 예시적인 구성을 보여주는 블록도이다.
도 6은 도 5의 SSD 컨트롤러의 예시적인 구성을 보여주는 블록도이다.
도 7은 도 6에 도시된 본 발명의 스트리밍 매니저의 동작을 간략히 보여주는 순서도이다.
도 8은 본 발명의 스트리밍 읽기 명령어에 따라 수행되는 데이터의 이동 경로를 예시적으로 보여주는 블록도이다.
도 9는 본 발명의 환상 큐 형태의 버퍼 관리 방법을 예시적으로 보여주는 도면이다.
도 10은 본 발명의 스토리지 장치에서 수행되는 인-스토리지 컴퓨팅을 위한 스트리밍 읽기 명령어와 그에 대한 스토리지 장치의 응답을 예시적으로 보여주는 도면이다.
도 11은 도 5의 SSD 컨트롤러의 다른 실시 예를 보여주는 블록도이다.
도 12는 도 11의 스트리밍 매니저의 구성을 보여주는 블록도이다.
도 13은 본 발명의 다른 실시 예에 따른 호스트의 가상 메모리 공간에서 스트리밍 영역을 할당하는 방법을 보여주는 도면이다.
도 14는 본 발명의 스트리밍 쓰기 명령어에 따라 수행되는 데이터의 이동 경로를 예시적으로 보여주는 블록도이다.
도 15는 본 발명의 다른 실시 예에 따른 스토리지 장치를 포함하는 전자 시스템을 보여주는 블록도이다.
도 16은 도 15의 호스트, 스토리지 장치, 그리고 FPGA의 예시적인 구성을 보여주는 블록도이다.
아래에서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자들(이하, 통상의 기술자들)이 본 발명을 용이하게 실시할 수 있도록, 첨부되는 도면들을 참조하여 몇몇 실시 예가 명확하고 상세하게 설명될 것이다.
도 1은 본 발명의 실시 예에 따른 스토리지 장치를 포함하는 전자 시스템의 예시적인 구성을 보여주는 블록도이다. 컴퓨팅 시스템(1000)은 데스크톱 컴퓨터, 랩톱 컴퓨터, 태블릿 컴퓨터, 스마트 폰, 웨어러블 장치, 서버, 전기 자동차, 가전기기 등과 같은 장치들 중 하나일 수 있다. 도 1을 참조하면, 컴퓨팅 시스템(1000)은 크게 호스트 장치(1100)와 스토리지 장치(1200)로 구분할 수 있다.
호스트 장치(1100)는 컴퓨팅 시스템(1000)의 전반적인 동작들을 제어하기 위해 다양한 산술/논리 연산을 처리할 수 있다. 호스트 장치(1100)는 중앙 처리 장치(1110, CPU), 그래픽 처리 장치(1130, GPU), 호스트 메모리(1150), 네트워크 인터페이스 카드(1170, NIC), 그리고 시스템 버스(1190)를 포함할 수 있다. 또는, 호스트 장치(1100)는 범용 CPU(General-purpose Central Processing Unit), 전용 ASIC(Dedicated Application Specific Integrated Circuit), AP(Application Processor) 등과 같이 하나 이상의 프로세서 코어를 포함하는 장치일 수 있다.
중앙 처리 장치(1110)는 호스트 메모리(1150)에 로드된 다양한 소프트웨어(응용 프로그램, 운영 체제, 장치 드라이버)를 실행한다. 중앙 처리 장치(1110)는 운영 체제(OS), 응용 프로그램들(Application Program)을 실행할 수 있다. 중앙 처리 장치(1110)는 동종 멀티-코어 프로세서(Homogeneous Multi-Core Processor) 또는 이종 멀티-코어 프로세서(Heterogeneous Multi-Core Processor)로 제공될 수도 있을 것이다. 특히, 중앙 처리 장치(1110)는 스토리지 장치(1200)에 데이터 베이스 스캔(Data base scan)과 같은 데이터 집약적 워크 로드(Data intensive work load) 처리를 요청할 수 있다. 이 경우, 본 발명의 스토리지 장치(1200)는 인-스토리지 컴퓨팅(In-storage computing)을 수행하여 호스트(1100)로 결과 데이터를 제공할 수 있다.
그래픽 처리 유닛(1130)은 중앙 처리 유닛(1110)의 요청에 따라 다양한 그래픽 연산을 수행한다. 즉, 그래픽 처리 유닛(1130)은 처리 요청된 데이터를 디스플레이에 적합한 데이터로 변환할 수 있다. 그래픽 처리 유닛(1130)에 의해서도 스토리지 장치(1200)로의 스트리밍 접근 요청이 발생할 수 있다. 그래픽 처리 유닛(1130)은 유사한 연산을 반복해서 처리하는 병렬 처리에 유리한 연산 구조를 가진다. 따라서, 최근에는 그래픽 처리 유닛(1130)은 그래픽 연산뿐만 아니라 고속의 병렬 처리를 요구하는 다양한 연산에 사용될 수 있는 구조로 개발되고 있다. 예를 들면, 그래픽 처리 작업 이외의 범용 작업을 하는 그래픽 처리 유닛(1130)을 GPGPU(General Purpose computing on Graphics Processing Units)라고 한다. GPGPU를 통해서 동영상 인코딩 외에도 분자 구조 분석, 암호 해독, 기상 변화 예측 등의 분야에 주로 사용할 수 있다.
호스트 메모리(1150)는 컴퓨팅 시스템(1000)을 동작시키는 데에 이용되는 데이터를 저장할 수 있다. 예로서, 호스트 메모리(1150)는 호스트 장치에 의해 처리된 그리고/또는 처리될 데이터를 저장할 수 있다. 호스트 메모리(1150)는 SRAM(Static Random Access Memory), DRAM(Dynamic RAM), SDRAM(Synchronous DRAM), PRAM(Phase-change RAM), FRAM(Ferro-electric RAM), MRAM(Magneto-resistive RAM), ReRAM(Resistive RAM) 등과 같은 휘발성/불휘발성 메모리 장치를 포함할 수 있다.
네트워크 인터페이스 카드(1170)는 이더넷 스위치(미도시)나 이더넷 페브릭을 컴퓨팅 시스템(1000)과 연결하기 위한 통신 인터페이스이다. 예를 들면, 이더넷 스위치가 유선 랜 네트워크에 대응하는 경우, 네트워크 인터페이스 카드(1170)는 유선 랜카드 등으로 구현될 수 있다. 물론, 이더넷 스위치가 무선 랜인 경우에도 네트워크 인터페이스 카드(1170)는 무선 랜에 대응하는 통신 프로토콜을 처리하는 하드웨어로 구현될 수 있다.
인터페이스 회로(1190)는 호스트(1100)와 스토리지 장치(1200) 사이에서 물리적 연결을 제공한다. 즉, 인터페이스 회로(1190)는 호스트(1100)에서 발행하는 다양한 접근 요청에 대응하는 명령어, 어드레스, 데이터 등을 스토리지 장치(1200)와의 인터페이싱 방식으로 변환한다. 인터페이스 회로(1190)의 프로토콜로는 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI), UFS(Universal Flash Storage) 중 적어도 어느 하나일 수 있다.
스토리지 장치(1200)는 전력이 공급되는지에 관계없이 데이터를 저장할 수 있다. 예로서, 스토리지 장치(1200)는 SSD(Solid State Drive), SD(Secure Digital) 카드, eMMC(Embedded Multimedia Card) 등과 같은 스토리지 매체를 포함할 수 있다. 예시적으로, 본 발명의 스토리지 장치(1200)는 인-스토리지 컴퓨팅부(1210)와 SSD(1230)를 포함할 수 있다.
인-스토리지 컴퓨팅부(1210)는 호스트(1100)로부터의 요청에 응답하여 SSD(1230)에 접근할 수 있다. 예를 들면, 인-스토리지 컴퓨팅부(1210)는 호스트(1100)로부터의 데이터 요청에 응답하여 SSD(1230)에 스트리밍 접근 명령어(Streaming Access command: 이하, SA_CMD)를 전달할 수 있다. 스트리밍 접근 명령어(SA_CMD)는 LBA 리스트, 스트림 ID, 청크 사이즈, 우선순위 등의 정보를 포함할 수 있다.
인-스토리지 컴퓨팅부(1210)는 스트리밍 접근 명령어(Streaming Access command)에 응답하여 출력되는 스트림 데이터를 스토리지 장치(1200) 내부에서 처리할 수 있다. 인-스토리지 컴퓨팅부(1210)에 의해서 처리된 결과 데이터가 호스트(1100)에 반환될 것이다. 인-스토리지 컴퓨팅부(1210)에 의한 연산에 의하여, 스토리지 장치(1200)와 호스트(1100) 사이의 스트림 데이터의 교환에 따른 대역폭 저하 문제가 획기적으로 개선될 수 있다.
SSD(1230)는 호스트(1100) 또는 인-스토리지 컴퓨팅부(1210)로부터 제공되는 요청에 따라 데이터를 저장하거나 출력한다. SSD(1230)는 스트리밍 접근 명령어(스트리밍 읽기 또는 스트리밍 쓰기 명령어)에 응답하여, 스트림 데이터를 요청된 데이터 사이즈 단위로 제공할 수 있다. 예를 들면, SSD(1230)는 요청된 데이터를 버퍼(미도시)에 저장하면, 인-스토리지 컴퓨팅부(1210)의 DMA 엔진(미도시)이 버퍼에 저장된 데이터를 순차적으로 읽어낼 수 있다. 이러한 동작은 후술하는 도면들을 통해서 상세히 설명될 것이다.
이상에서는 본 발명의 인-스토리지 컴퓨팅부(1210)를 포함하는 스토리지 장치(1200)와, 스토리지 장치(1200)가 포함되는 컴퓨팅 시스템(1000)의 구성이 간략히 설명되었다. 본 발명의 스토리지 장치(1200)는 스트리밍 접근 명령어를 사용하여 효율적으로 스트림 데이터를 처리할 수 있다.
도 2는 도 1의 호스트와 스토리지 장치의 예시적인 구성을 보여주는 블록도이다. 도 2를 참조하면, 호스트(1100)와 스토리지 장치(1200)는 컴퓨팅 시스템(1000)을 구성한다.
호스트(1100)는 본 발명의 스트림 데이터의 처리를 위해 중앙 처리 장치(1110), 호스트 메모리(1150), 인터페이스 회로(1190) 그리고 메모리 관리 유닛(1160)을 포함할 수 있다. 여기서, 호스트(1100)에 그래픽 처리 유닛(1130)이나 네트워크 인터페이스 카드(1170)와 같은 구성들이 더 포함될 수 있음은 자명하다. 하지만, 설명의 편의를 위해서 이들 구성들의 기능 설명이나 도시는 생략하기로 한다. 중앙 처리 장치(1110), 호스트 메모리(1150), 그리고 인터페이스 회로(1190)는 도 1의 그것들과 실질적으로 동일하므로 이것들에 대한 설명은 생략하기로 한다.
호스트(1100)는 SSD(1230)의 버퍼(1235)를 호스트(1100)의 가상 메모리 공간(Virtual Memory Space)에 맵핑할 수 있다. 일반적으로, SSD(1230)와 같은 스토리지 장치는 버퍼(1235)를 DMA(Direct Memory Access)를 위한 메모리 공간으로 다른 디바이스에 오픈(Open)하지 않는다. 따라서, 인-스토리지 컴퓨팅부(1210)의 DMA 엔진(1211)에 의해서 자유롭게 접근 가능하도록 호스트(1100)에서 가상 메모리 공간에 등록하여 하나의 맵에서 관리할 수 있다. 이를 위하여, 호스트(1100)는 메모리 관리 유닛(1160)을 포함할 수 있다. 컴퓨팅 시스템(1000)의 부팅이나 초기화 시에, SSD(1230)의 버퍼(1235)의 물리 주소 영역을 가상 메모리 공간(Virtual Memory Space)에 맵핑하여, 스트림 데이터의 전송을 위해 버퍼(1235)를 외부 장치에 공개(Open)할 수 있다. 외부 장치에 의한 가상 메모리 공간으로의 접근은 메모리 관리 유닛(1160)에 의해서 버퍼(1235)로 리다이랙션(Redirection)될 것이다.
스토리지 장치(1200)는 호스트(1100)의 요청에 따라 SSD(1230)로부터 제공된 데이터를 인-스토리지 컴퓨팅(In-storage computing)에 따라 처리한다. 그리고 스토리지 장치(1200)는 인-스토리지 컴퓨팅(In-storage computing)의 결과를 호스트(1100)에 반환할 것이다. 이를 위해, 스토리지 장치(1200)는 인-스토리지 컴퓨팅부(1210), SSD(1230), 그리고 호스트 인터페이스(1250)를 포함할 수 있다.
인-스토리지 컴퓨팅부(1210)는 예시적으로 DMA 엔진(1211), 커널 메모리(1213)를 포함할 수 있다. 인-스토리지 컴퓨팅부(1210)는 예를 들면 하나 이상의 프로세서 코어나 필드 프로그래머블 게이트 어레이(FPGA), ASIC 등으로 구현될 수 있을 것이다. 인-스토리지 컴퓨팅부(1210)는 호스트(1100)의 요청에 따라 본 발명의 스트리밍 접근 명령어(Streaming Access Command)를 SSD(1230)에 제공할 수 있다. 그리고 인-스토리지 컴퓨팅부(1210)는 SSD(1230)로부터 전달되는 스트림 데이터를 인-스토리지 컴퓨팅 방식으로 처리하여 호스트(1100)에 전달할 것이다. DMA 엔진(1211)은 SSD(1230)의 버퍼(1235)에 로드되는 청크 사이즈(Chunk size) 단위의 스트림 데이터를 읽어와 커널 메모리(1213)에 전달할 수 있다.
SSD(1230)는 인-스토리지 컴퓨팅부(1210)로부터의 스트리밍 읽기 명령어에 응답하여 버퍼(1235)에 명령어에 의해서 정의된 청크 사이즈 단위로 저장 매체에서 독출된 데이터를 로드한다. 버퍼(1235)가 호스트(1100)의 가상 메모리 공간에 맵핑됨에 따라, 인-스토리지 컴퓨팅부(1210)의 DMA 엔진(1211)에 의한 접근이 가능하다. 물론, SSD(1230)는 인-스토리지 컴퓨팅부(1210)로부터의 스트리밍 쓰기 명령어에 대해서는 버퍼(1235)에 청크 사이즈 단위로 전달되는 데이터를 저장 매체에 프로그램할 것이다.
호스트 인터페이스(1250)는 호스트(1100)와의 데이터 교환을 위한 스토리지 장치(1200)의 물리적 통신 채널로서 제공된다. 호스트 인터페이스(1250)는 바람직하게는 SSD(1230), 인-스토리지 컴퓨팅부(1210)의 DMA 기능을 지원하는 인터페이싱 프로토콜을 가질 수 있다. 예를 들면, 호스트(1100)의 메모리 관리 유닛(1160)과 호스트 인터페이스(1250)에 의해서 SSD(1230)의 버퍼(1235)는 가상 메모리 공간에서 관리될 수 있을 것이다.
도 3a, 도 3b 및 도 3c는 본 발명의 실시 예에 따른 스트리밍 접근 명령어를 예시적으로 보여주는 도면들이다. 도 3a는 스트리밍 접근 명령어(SA_CMD)를 구성하는 속성들을 보여준다. 도 3b는 NVMe 인터페이스 프로토콜에서 본 발명의 스트리밍 접근 명령어(SA_CMD)를 구성하는 방법을 예시적으로 보여주는 테이블이다. 도 3c는 본 발명의 청크 사이즈 단위로 관리되는 스트림 데이터를 보여주는 도면이다. 여기서, 명령어 포맷은 레지스터 레벨 인터페이스인 NVM Express(NVMe)를 예시로 설명될 것이다. 하지만, 이러한 도시는 설명의 편의를 위한 예시에 불과함은 잘 이해될 것이다.
도 3a를 참조하면, 외부에서 제공되는 스트리밍 요청은 스트리밍 접근 명령어(10, Streaming Access CMD: 이하, SA_CMD)와 목적지 어드레스(20, Destination Addr)를 포함할 수 있다. 스트리밍 접근 명령어(SA_CMD)는 스트리밍 읽기 명령어(SR_CMD) 또는 스트리밍 쓰기 명령어(SW_CMD)일 수 있다. 목적지 어드레스(20)는 SSD(1230)에 포함되는 DMA 엔진(미도시)이 요청된 스트림 데이터를 최종적으로 전달할 메모리 위치를 나타낸다.
스트리밍 접근 명령어(10, SA_CMD)에는 스트림 ID(11), LBA 리스트(12), 청크 사이즈(13), 그리고 우선순위(14)를 포함할 수 있다. 스트림 ID(11)는 멀티-스트림 데이터를 구분하기 위한 식별자(ID) 정보를 포함한다. 멀티-스트림 데이터의 경우, 생성 당시 또는 전송 과정에서 스트림 ID(11)를 할당받을 수 있다. 호스트(1100)에서 구성되는 가상 메모리 공간에서는 스트림 ID(11)별로 스트리밍 윈도가 할당될 수 있을 것이다.
LBA 리스트(12)는 스트리밍 접근 명령어(10)를 통해서 접근 요청되는 LBA들의 리스트이다. 예를 들면, LBA 리스트(12)를 통해서 LBA 리스트(LBA0~LBA10000)가 전달되면, LBA 리스트(LBA0~LBA10000)에 대응하는 SSD(1230, 도 2 참조)의 물리 어드레스 영역이 접근된다. 일반적으로, NVMe 사양의 SSD의 경우, 스트리밍 명령어는 LBA 시작 어드레스와 섹터 수(Sector count)와 같은 정보로 제공된다. 하지만, 본 발명의 스트리밍 접근 명령어(10)는 스트림 데이터에 대응하는 모든 LBA 리스트를 한 번에 제공하여 반복적인 명령어 전달을 최소화할 수 있다.
청크 사이즈(13)는 SSD(1230)의 버퍼(1235)와 인-스토리지 컴퓨팅부(1210) 사이 또는 버퍼(1235)와 외부 장치간의 스트림 데이터의 전송 또는 입출력 단위를 나타낸다. 버퍼(1235)에는 청크 사이즈(13) 단위로 프리패치가 발생하고, 버퍼(1235)로부터 목적지로는 청크 사이즈(13) 단위의 DMA 전송이 발생할 것이다. 청크 사이즈(13)는 추후 설명하게 될 가상 메모리 공간(Virtual Memory Space) 상에서의 스트림 데이터를 위해 할당되는 스트리밍 윈도(Streaming Window)의 크기와 매칭될 수 있다. 우선순위(14)는 대응하는 스트림 ID(11)의 우선순위 정보를 포함한다.
도 3b를 참조하면, NVMe 인터페이스 프로토콜에서 본 발명의 스트리밍 접근 명령어(SA_CMD)를 구현하기 위한 필수 추가 항목들이 설명될 것이다. NVMe 프로토콜에서의 명령어는 기본적으로 32bit(Dword) 단위로 배열될 수 있다.
스트리밍 접근 명령어(SA_CMD)는 일반적인 명령어들이 공통적으로 가지는 필드 영역(예를 들면, Dowrd0, Dword1)과 본 발명의 스트리밍 접근 명령어(SA_CMD)를 위한 필드 영역(DwordN~DwordN+3)을 포함할 수 있다. 명령어들이 공통적으로 가지는 필드 영역들(Dowrd0, Dword1)에는 다양한 요소들(CID, FUSE, Opcode, Namespace ID)을 포함할 수 있다. 예를 들면, 'CID(Command ID)'는 명령어 식별자를 나타내고, 'Fuse'는 명령어 셋을 아토믹 단위로 실행해야 하는지의 여부를 나타낸다. 'Opcode'는 명령어에 대한 동작 속성을 특정하는 코드값에 대응한다. 'Namespace ID'는 네임스페이스의 식별자 정보를 포함한다.
특히, 본 발명의 스트리밍 접근 명령어(SA_CMD)를 구성하기 위한 필드 영역(DwordN~DwordN+3)에는 스트림 ID(DwordN), LBA 리스트(DwordN+1), 청크 사이즈(DwordN+2), 그리고 우선순위(DwordN+3)가 포함된다. 스트림 ID, LBA 리스트, 청크 사이즈, 그리고 우선순위는 앞서 설명된 도 3a의 그것들과 동일한 속성을 갖는다. 스트리밍 접근 명령어(SA_CMD)를 구성하기 위해 스트림 ID, LBA 리스트, 청크 사이즈, 그리고 우선순위 필드를 구성하는 방법은 다양하게 구현 가능하다. 스트리밍 접근 명령어(SA_CMD) 셋을 구성하기 위해 NVMe 프로토콜에서의 명령어 셋에 구비된 예비 필드(Reserved Field)를 사용할 수도 있을 것이다. 또는, 스트리밍 접근 명령어(SA_CMD) 셋을 구성하기 위해 새롭게 정의되는 필드들을 추가하여 본 발명의 스트리밍 접근 명령어(SA_CMD)를 구성할 수 있을 것이다.
도 3c를 참조하면, 스트리밍 요청된 전체 데이터(30)는 복수의 청크들(31~37) 단위로 관리될 수 있다. 스트리밍 접근 명령어(SA_CMD)에 포함되는 LBA 리스트에 기초하여 요청되는 전체 데이터가 정의될 수 있다. 전체 데이터(30)는 각각이 청크 사이즈를 갖는 복수의 분할된 데이터를 포함할 수 있다. 스토리지 장치(1200)는 전체 데이터(30)를 출력하거나 수신하기 위해 청크 사이즈 단위로 분할된 데이터를 관리할 수 있다.
도 4는 호스트의 가상 메모리 공간을 간략히 보여주는 메모리 맵이다. 도 4를 참조하면, 호스트(1100)의 가상 메모리 공간(1161)은 SSD(1230)의 버퍼(1235)의 메모리 영역이 포함될 수 있다.
호스트(1100)에서 메모리 관리 유닛(1160)에 의해서 관리되는 가상 메모리 공간(1161)에는 다양한 주변 장치의 메모리 공간이 등록될 수 있다. 특히, 본 발명의 인-스토리지 컴퓨팅 기능을 갖는 스토리지 장치(1200)를 포함하는 컴퓨팅 시스템(1000)에서는 SSD(1230)의 버퍼(1235)의 일부 메모리 영역 또는 모든 메모리 영역이 호스트(1100)의 가상 메모리 공간(1161)에 등록될 수 있다.
일반적으로 호스트(1100)의 메인 메모리로 제공되는 호스트 메모리(1150)의 경우는 주변 장치들에 의해서 접근이 가능한 공유 메모리이지만, SSD(1230)와 같은 스토리지의 버퍼(1235)의 경우 보안이나 기타 사유로 주변 장치들에 의해서 공유될 수 없다. 따라서, 인-스토리지 컴퓨팅부(1210)의 DMA 엔진(1211)이나 호스트(1100)나 주변 장치들의 DMA 엔진(미도시)에 의해서 직접적으로 접근되기 어렵다. 본 발명의 스트리밍 접근 명령어(SA_CMD)에 따른 데이터 전송을 위해서는 SSD(1230)의 버퍼(1235)는 타깃 장치의 DMA 엔진에 의해서 공유되어 있어야 한다. 본 발명에서는, SSD(1230)의 버퍼(1235)를 타깃 장치의 DMA 엔진에 의해 공유되기 위해 호스트(1100)의 가상 메모리 공간(1161)을 사용하게 될 것이다.
NVMe 기반의 인터페이스를 사용하는 SSD(1230)의 경우, 가상 메모리 공간(1161)으로의 등록은 베이스 어드레스 레지스터(Base Address Register: BAR)를 사용하여 수행될 수 있다. 예를 들면, 컴퓨팅 시스템(1000)의 부팅 시퀀스 또는 초기화 동작시에 버퍼(1235)를 베이스 어드레스 레지스터(BAR)에 등록하면, 버퍼(1235)로 접근하는 주변 장치들이나 호스트(1100)는 가상 메모리 공간(1161)에 등록된 어드레스로 접근하게 된다. 가상 메모리 공간(1161) 상에서 할당된 가상 주소로 접근하면, 이후 메모리 관리 유닛(1160)에 의해서 버퍼(1235)로 리다이랙션(Redirection)된다. 이러한 가상 메모리 공간(1161)을 통해서 인-스토리지 컴퓨팅부(1210)나 호스트(1100) 또는 기타 주변 장치들이 SSD(1230)의 버퍼(1235)를 공유할 수 있다.
호스트(1100)의 가상 메모리 공간(1161)에는 SSD(1230)의 버퍼(1235)의 스트림 데이터의 관리를 위한 가상 주소 범위인 스트리밍 영역(1162)이 포함된다. 스트리밍 영역(1162)에는 스트리밍 접근 명령어(SA_CMD)에 포함되는 청크 사이즈(Chunk size)에 대응하는 적어도 하나의 스트리밍 윈도(Streaming window)가 포함될 수 있다. 스트리밍 윈도(Streaming window)는 스트리밍 접근 명령어(SA_CMD)에 포함되는 스트림 식별자(ID)에 대응하는 입출력 단위로 제공된다. 즉, 멀티-스트림 데이터의 스트림 ID에 대응하는 수의 스트리밍 윈도(Streaming window)들이 스트리밍 영역(1162)에 할당될 수 있다.
예를 들면, SSD(1230)로부터 읽혀지거나 프로그램되는 스트림 데이터의 스트림 ID의 수만큼의 스트리밍 윈도(Streaming window)들이 가상 메모리 공간(1161)에 설정될 수 있다. 인-스토리지 컴퓨팅부(1210)의 DMA 엔진(1211)이 스트리밍 윈도(SW1)에 대응하는 데이터를 읽어야 하는 경우, DMA 엔진(1211)은 가상 메모리 공간(1161)의 어드레스(0xFFFF)와 청크 사이즈(CS)에 대응하는 가상 메모리 공간에 접근하게 될 것이다. 그러면, DMA 엔진(1211)의 접근은 메모리 관리 유닛(1160)에 의해서 SSD(1230)의 버퍼(1235)로 리다이랙션(Redirection)될 것이다.
도 5는 본 발명의 SSD의 예시적인 구성을 보여주는 블록도이다. 도 5를 참조하면, SSD(1230)는 SSD 컨트롤러(210), 불휘발성 메모리 장치(1233), 그리고 버퍼(1235)를 포함할 수 있다.
SSD 컨트롤러(1231)는 외부 장치와 SSD(1230) 사이에서 인터페이싱을 제공한다. SSD 컨트롤러(1231)는 외부로부터 제공되는 스트리밍 접근 명령어(SA_CMD)에 포함되는 스트림 ID, LBA 리스트(LBA List), 청크 사이즈(CS)를 참조하여 불휘발성 메모리 장치(1233)에 접근한다. 예를 들면, 스트리밍 접근 명령어(SA_CMD)가 읽기 명령어에 대응하는 경우, SSD 컨트롤러(1231)는 LBA 리스트(LBA List)에 대응하는 데이터를 청크 사이즈(CS) 단위로 불휘발성 메모리 장치(1233)로부터 프리패치하여 버퍼(1235)에 로드한다. 반면, 스트리밍 접근 명령어가 쓰기 명령어에 대응하는 경우, SSD 컨트롤러(1231)는 외부에서 버퍼(1235)에 청크 사이즈(CS) 단위로 로드되는 쓰기 데이터를 불휘발성 메모리 장치(1233)에 프로그램할 수 있다.
특히, SSD 컨트롤러(1231)는 스트리밍 접근 명령어(SA_CMD)에 따른 불휘발성 메모리 장치(1233) 및 버퍼(1235)의 관리를 수행하기 위한 스트리밍 매니저(1232)를 포함할 수 있다. 스트리밍 매니저(1232)는 스트리밍 접근 명령어(SA_CMD)를 파싱(Parsing)하고, LBA 리스트에 대응하는 스트림 데이터를 청크 사이즈(CS) 단위로 불휘발성 메모리 장치(1233)로부터 버퍼(1235)에 프리패치한다. 또한, 스트리밍 매니저(1232)는 타깃 장치에서 청크 사이즈(CS) 단위로 버퍼(1235)로부터 스트림 데이터(ST_Data)를 읽어가도록 버퍼(1235)를 관리할 수 있다.
도 6은 도 5의 SSD 컨트롤러의 예시적인 구성을 보여주는 블록도이다. 도 6을 참조하면, SSD 컨트롤러(1231)는 프로세서(121), 워킹 메모리(123), 호스트 인터페이스(125), 버퍼 매니저(127) 및 플래시 인터페이스(129)를 포함한다. 이 실시 예에서 본 발명의 스트리밍 명령어를 처리하는 스트리밍 매니저(1232)는 펌웨어 또는 소프트웨어 모듈로 제공될 수 있다.
프로세서(121)는 워킹 메모리(123)에 로드되는 스트리밍 매니저(1232)를 실행한다. 스트리밍 매니저(1232)의 실행에 따라, 프로세서(121)는 읽기/쓰기 동작에 필요한 다양한 제어 정보를 호스트 인터페이스(125) 및 플래시 인터페이스(129)의 레지스터들에 전달한다. 예를 들면, 외부로부터 스트리밍 접근 명령어(SA_CMD)가 입력되면, 호스트 인터페이스(125)의 명령어 레지스터(미도시)에 스트리밍 접근 명령어(SA_CMD)가 저장된다. 호스트 인터페이스(125)는 저장된 명령에 따라 프로세서(121)에 읽기/쓰기 명령이 입력되었음을 알려준다. 프로세서(121)는 호스트 인터페이스(125)에 전달된 스트리밍 접근 명령어(SA_CMD)를 파싱(Parsing)하여 버퍼 매니저(127) 및 플래시 인터페이스(129)를 제어할 것이다.
스트리밍 매니저(1232)의 실행에 따라 프로세서(121)는 LBA 리스트에 대응하는 스트림 데이터를 불휘발성 메모리 장치(1233)로부터 읽어낸다. 프로세서(121)는 불휘발성 메모리 장치(1233)로부터 청크 사이즈(CS) 단위로 스트림 데이터를 프리패치하여 버퍼(1235)에 로드한다. 그리고 프로세서(121)는 버퍼(1235)에 로드된 스트림 데이터의 헤드 포인터(Head Pointer) 및/또는 테일 포인터(Tail Pointer)를 외부로 알려줄 수 있다. 프로세서(121)는 외부로부터의 버퍼(1235)로의 접근을 검출하여 버퍼(1235)에 헤드 포인터(Head Pointer)와 테일 포인터(Tail Pointer)를 관리한다. 더불어, 프로세서(121)는 요청된 스트림 데이터를 청크 사이즈 단위로 로드할 가상 메모리 공간(1161)의 스트리밍 윈도를 관리할 수 있다.
워킹 메모리(123)는 SSD 컨트롤러(1231)를 구동하는데 이용되는 데이터를 저장할 수 있다. 예로서, 워킹 메모리(123)는 SSD 컨트롤러(1231)에 의해 수행될 다양한 펌웨어들이 로드될 수 있다. 예를 들면, 프로세서(121)에 의해서 수행될 플래시 변환 계층(FTL)이나 본 발명의 스트리밍 매니저(1232)와 같은 펌웨어 이미지가 워킹 메모리(123)에 로드되고, 프로세서(121)에 의해서 실행될 수 있다.
호스트 인터페이스(125)는 호스트(1100) 또는 외부 장치와 SSD(1230)와의 물리적 연결을 제공한다. 즉, 호스트 인터페이스(125)는 호스트(1100)의 버스 포맷(Bus format)에 대응하여 SSD(1230)와의 인터페이싱을 제공한다. 호스트(1100)의 버스 포맷은 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI), NVMe, NVMe-oF 중 적어도 하나로 구성될 수 있다.
버퍼 매니저(127)는 버퍼(1235, 도 5 참조)의 읽기 및 쓰기 동작들을 제어한다. 예를 들면, 버퍼 매니저(127)는 쓰기 데이터(Write data)나 읽기 데이터(Read data)를 버퍼(1235)에 일시 저장한다. 예를 들면, 버퍼 매니저(127)는 프로세서(121)의 제어에 따라 버퍼(1235)의 메모리 영역을 스트림 단위로 구분하여 관리할 수 있다. 버퍼 매니저(127)는 프로세서(121)의 제어에 따라 링 버퍼(Ring buffer) 또는 환상 버퍼(Circular buffer)로 구성되는 버퍼(1235)의 헤드 포인터(Head Pointer)나 테일 포인터(Tail Pointer)를 업데이트하고 외부로 출력할 수 있다.
플래시 인터페이스(129)는 불휘발성 메모리 장치(1233)와 데이터를 교환한다. 플래시 인터페이스(129)는 버퍼(1235)로부터 전달되는 데이터를 불휘발성 메모리 장치(1233)에 기입한다. 그리고 플래시 인터페이스(129)는 불휘발성 메모리 장치(1233)로부터 독출된 데이터를 버퍼(1235)에 전달할 수 있다.
상술한 실시 예의 SSD 컨트롤러(1231)는 스트리밍 접근 명령어(SA_CMD)에 응답하여 청크 사이즈(CS) 단위로 버퍼(1235)를 관리할 수 있다. 그리고 SSD 컨트롤러(1231)에 의해 버퍼(1235)의 상태 정보가 SSD(1230)의 외부로 전달될 수 있다. 외부로 전달된 버퍼(1235)의 상태 정보는 청크 사이즈(CS) 단위로 데이터를 전송하는 타깃 장치의 DMA 동작에 참조될 수 있다.
도 7은 도 6에 도시된 본 발명의 스트리밍 매니저의 동작을 간략히 보여주는 순서도이다. 도 7을 참조하면, 본 발명의 스트리밍 접근 명령어(SA_CMD)를 수신하면, SSD(1230)의 스트리밍 매니저(1232)의 스트림 데이터의 전송을 위한 제어 동작이 시작된다.
S110 단계에서, SSD(1230)는 호스트(1100) 또는 다른 주변 장치로부터 제공된 스트리밍 접근 명령어(SA_CMD)를 수신한다. 이때, 스트리밍 접근 명령어(SA_CMD)에는 스트림 ID, LBA 리스트, 청크 사이즈, 그리고 우선순위 값들이 포함될 것이다. 더불어, 스트림 데이터가 전송될 목적지 어드레스도 스트리밍 접근 명령어(SA_CMD)와 함께 제공될 것이다. 하지만, 본 발명의 스트리밍 접근 명령어(SA_CMD)의 구성은 여기에 국한되지 않는다. 멀티-스트림 데이터의 처리를 위한 프리패치와 버퍼(1235)의 제어를 효율적으로 수행하기 위한 다양한 파라미터들이 스트리밍 접근 명령어(SA_CMD)에 포함되거나 추가될 수 있음은 잘 이해될 것이다.
S120 단계에서, 스트리밍 매니저(1232)는 수신된 스트리밍 접근 명령어(SA_CMD)를 파싱(Parsing)한다. 스트리밍 매니저(1232)는 스트리밍 접근 명령어(SA_CMD)의 파싱을 통해서 획득된 LBA 리스트를 통해서 읽어야 할 전체 데이터와 현재까지 출력한 데이터 등을 확인할 수 있다.
S130 단계에서, 스트리밍 매니저(1232)는 현재까지 출력한 데이터에 대한 정보를 바탕으로 버퍼(1235)의 헤드 포인터(HP)나 테일 포인터(TP)를 설정할 수 있다. 버퍼(1235)의 헤드 포인터(HP)나 테일 포인터(TP)에 따라 가상 메모리 공간(1161)의 스트리밍 윈도(Streaming window)로 호스트(1100)나 외부 장치가 접근할때 메모리 관리 유닛(1160)에 의해서 버퍼(1235)로 리다이랙션될 것이다.
S140 단계에서, 스트리밍 매니저(1232)는 가상 메모리 공간(1161) 상에서 예비된 스트리밍 영역(1162)에 스트리밍 윈도(Streaming window)를 업데이트 또는 등록할 수 있다. 즉, 스트리밍 윈도(Streaming window)는 가상 메모리 공간(1161) 상에서의 버퍼(1235)와 타깃 장치 사이에 교환되는 데이터 사이즈(즉, 청크 사이즈)의 크기가 될 것이다. 몇몇 실시 예에서, S140 단계는 컴퓨팅 시스템의 초기화 동작시에 수행되어도 무방하다.
S150 단계에서, 스트리밍 매니저(1232)는 불휘발성 메모리 장치(1233)로부터 요청된 데이터를 프리패치한다. 프리패치된 데이터는 버퍼(1235)에 저장된다. 만일, 버퍼(1235)가 링 버퍼(Ring buffer)로 관리되는 경우, 프리패치된 데이터가 버퍼(1235)에 저장된 후에 버퍼(1235)의 헤드 포인터(Head Pointer)가 갱신될 것이다. 더불어, 스트리밍 매니저(1232)는 버퍼(1235)에 프리패치된 데이터가 호스트(1100) 또는 외부 장치로부터 읽혀진 것을 감지하면, 버퍼(1235)의 테일 포인터(Tail Pointer)를 이동시킬 것이다.
S160 단계에서, 스트리밍 매니저(1232)는 스트리밍 접근 명령어(SA_CMD)를 통해서 요청된 데이터가 모두 목적지 어드레스로 전송되었는지 판단한다. 즉, 스트리밍 매니저(1232)는 제공된 LBA 리스트와 현재까지 출력된 데이터를 비교하여 요청된 스트림 데이터가 모두 서비스되었는지 판단한다. 만일, 요청된 데이터가 모두 타깃 장치로 전달된 경우(Yes 방향), 스트리밍 접근 명령어(SA_CMD)에 대응하는 제반 SSD(1230)의 동작은 종료된다. 반면, 요청된 데이터 중 아직 타깃 장치로 전송할 데이터가 남아 있는 경우(No 방향), 절차는 S150 단계로 복귀한다.
이상에서는 스트리밍 접근 명령어(SA_CMD)에 응답하여 스트림 데이터의 프리패치 및 출력을 수행하는 스트리밍 매니저(1232)의 동작이 설명되었다. 스트리밍 매니저(1232)가 소프트웨어 모듈 형태로 동작하는 것으로 이 실시 예에서 설명되었으나, 본 발명은 여기에 국한되지 않는다. 더불어, 앞서 설명된 순서도의 각 단계들의 순서는 도시된 순서에만 국한되지 않고 전후가 변경될 수도 있음은 잘 이해될 것이다.
도 8은 본 발명의 스트리밍 읽기 명령어에 따라 수행되는 데이터의 이동 경로를 예시적으로 보여주는 블록도이다. 도 8을 참조하면, SSD(1230)는 스트리밍 접근 명령어(SA_CMD)의 LBA 리스트들에 기초하여 불휘발성 메모리 장치(1233)로부터 버퍼(1235)로 데이터를 프리패치한다. 그리고 인-스토리지 컴퓨팅부(1210)는 호스트(1100)의 가상 메모리 공간(1161)에 등록된 스트리밍 윈도(Streaming window #1)에 접근하여 버퍼(1235)의 데이터를 직접 커널(1212)의 에스램(1213)으로 전송받을 수 있다. 여기서, 스트리밍 접근 명령어(SA_CMD)는 스트리밍 읽기 명령어인 것으로 가정하기로 한다.
먼저, 스트리밍 접근 명령어(SA_CMD)에 응답하여 SSD(1230)는 LBA 리스트 및 청크 사이즈를 기초로 불휘발성 메모리 장치(1233)로부터 데이터를 읽어낸다. 이러한 동작은 SSD(1230)에 구동되는 스트리밍 매니저(1232)에 의해서 제어된다. 불휘발성 메모리 장치(1233)로부터 버퍼(1235)로의 프리패치는 스트리밍 접근 명령어(SA_CMD)에 의해서 제공된 청크 사이즈(CS)를 참조하여 수행된다. 즉, 버퍼(1235)에는 청크 사이즈 단위로 데이터가 로드되고 출력된다. 따라서, 링 버퍼(Ring buffer) 형태로 관리되는 경우, 버퍼(1235)의 헤드 포인터(Head Pointer: HP)와 테일 포인터(Tail Pointer: TP)는 청크 사이즈 단위로 진행할 것이다. 버퍼(1235)의 데이터 구조는 본 개시의 예에 한정되지 않고 다양하게 변경 또는 수정될 수 있음이 잘 이해될 것이다.
버퍼(1235)에 프리패치된 데이터는 환상 큐(Circular Queue)의 헤드(Head)와 테일(Tail) 사이에 큐잉될 수 있다. 환상 큐에 프리패치된 데이터는 청크 사이즈 단위로 큐잉될 수 있다.
SSD(1230)의 스트리밍 매니저(1232)는 가상 메모리 공간(1161)에 등록된 스트리밍 영역(1162) 및 스트리밍 윈도(Streaming window)를 관리할 수 있다. 가상 메모리 공간(1161)에서의 스트리밍 영역(1162)은 버퍼(1235)에 로드되는 스트림 데이터를 외부 장치나 호스트(1100)가 접근하기 위한 공유 방식의 하나이다. 따라서, 가상 메모리 공간(1161)에 등록된 제 1 스트리밍 윈도(Streaming window #1)에 대해서 주변 장치나 인-스토리지 컴퓨팅부(1210)는 제한없이 접근할 수 있다. 여기서, 제 1 스트리밍 윈도(Streaming window #1)와 제 2 스트리밍 윈도(Streaming window #2)는 각각 서로 다른 스트리밍 ID에 대응한다. 즉, 버퍼(1235)에 프리패치되는 서로 다른 스트리밍 ID의 청크들이 제 1 스트리밍 윈도(Streaming window #1) 또는 제 2 스트리밍 윈도우(Streaming window #2)에 할당될 것이다.
인-스토리지 컴퓨팅부(1210)가 제 1 스트리밍 윈도(Streaming window #1)에 접근하면, 대응하는 청크가 저장된 버퍼(1235) 상의 메모리 영역으로의 리다이랙션(Redirection)될 것이다. 이러한 리다이랙션은, 호스트(1100)의 메모리 관리 유닛(1160)이나 중앙 처리 장치(1110)에 의해서 관리될 수 있다. 스트리밍 윈도는 청크 크기의 큐잉된 데이터로의 액세스를 가능하게 할 수 있다.
스트리밍 접근 명령어(SA_CMD)에 의해서 SSD(1230)의 버퍼(1235)에 청크 사이즈 단위로 로드된 데이터는, 인-스토리지 컴퓨팅부(1210)에 의해서 직접 커널(1212)의 에스램(1213)과 같은 목적지에 전달될 수 있다. 즉, 버퍼(1235)는 호스트(1100)의 가상 메모리 공간(1161)에 맵핑되어, 인-스토리지 컴퓨팅부(1210)에 의해서 제한없이 접근될 수 있다. 호스트(1100)의 가상 메모리 공간(1161)에 버퍼(1235)가 맵핑됨에 따라, 인-스토리지 컴퓨팅부(1210)의 DMA 엔진(1211)은 스트림 데이터를 디램(1215)을 경유하지 않고 목적지 메모리(예를 들면, 에스램(1213))에 전달할 수 있다.
인-스토리지 컴퓨팅부(1210)는 요청된 전체 데이터를 획득할 때까지, 스트리밍 윈도를 통해 청크 사이즈의 큐잉된 데이터를 여러 차례 획득할 수 있다. 이를 위해, SSD(1230)는 인-스토리지 컴퓨팅부(1210)가 큐잉된 데이터를 획득할 때마다 가상 메모리 공간(1161)에 등록된 스트리밍 윈도(예를 들면, 제 1 스트리밍 윈도)에 대응하는 버퍼(1235)의 포인터(Pointer)를 갱신할 수 있다. 예로서, 인-스토리지 컴퓨팅부(1210)가 큐잉된 데이터를 획득할 때마다, SSD(1230)는 버퍼(1235)의 헤드 포인터(HP)가 다음 차례에 읽힐 큐잉된 데이터를 지시하도록 값을 변경할 수 있다.
인-스토리지 컴퓨팅부(1210)는 스트리밍 윈도(Streaming window #1)에 대응하는 호스트(1100)의 가상 메모리 공간(1161)에 접근한다. 그러면, 호스트(1100)의 CPU(1110)나 별도로 구비되는 메모리 관리 유닛(1160)에 의해서 헤드 포인터(HP)에 대응하는 버퍼(1235) 영역에 리다이랙션된다. 버퍼(1235)로부터 전달받은 청크 사이즈의 스트림 데이터는 커널(1212)의 에스램(1213)에 직접 전달될 수 있다.
인-스토리지 컴퓨팅부(1210)가 버퍼(1235)에 프리패치된 데이터를 획득하는 경우, 환상 큐의 헤드 포인터(HP)는 다음 큐잉된 데이터에 대응하도록 갱신될 수 있다. 한편, 몇몇 경우, 인-스토리지 컴퓨팅부(1210)가 큐잉된 데이터로 액세스하는 동안, SSD(1230)는 메모리 장치로부터 버퍼(1235)로 다른 데이터를 프리패치할 수 있다. 이 경우, 환상 큐의 테일 포인터(TP)는 새롭게 프리패치된 데이터에 대응하도록 갱신될 수 있다.
이러한 방식으로, 인-스토리지 컴퓨팅부(1210)는 단일의 스트리밍 접근 명령어(SA_CMD)를 이용하여, 청크 사이즈 단위로 분할된 스트림 데이터를 순차적으로 획득할 수 있다. 이때, 인-스토리지 컴퓨팅부(1210)는 의도되는 전체 데이터를 획득할 때까지, 스트리밍 윈도를 통해 청크 사이즈의 큐잉된 데이터를 여러 차례 획득할 수 있다. 인-스토리지 컴퓨팅부(1210)가 의도되는 전체 데이터를 획득하는 경우, 스트리밍 읽기 동작은 완료될 수 있다.
몇몇 경우, SSD(1230)의 버퍼(1235)에 스트림 데이터가 프리패치되기 전에 인-스토리지 컴퓨팅부(1210)로부터의 접근 요청이 발생할 수 있다. 이 경우, SSD(1230)는 데이터가 버퍼(1235)로 프리패치될 때까지 인-스토리지 컴퓨팅부(1210)의 요청을 처리하는 것을 지연시킬 수 있다. 몇몇 경우, 환상 큐가 프리패치된 데이터로 꽉 채워진 동안 추가의 스트리밍 읽기 명령어가 수신될 수 있다. 이 경우, SSD(1230)는 환상 큐의 일부 또는 전부가 빌 때까지 추가의 스트리밍 읽기 명령어를 처리하는 것을 지연시킬 수 있다.
상술한 실시 예들에 따르면, 스트림 데이터는 호스트(1100)의 호스트 메모리(1150, 도 2 참조)로 전달하는 대신, SSD(1230)의 버퍼(1235)에 버퍼링될 수 있다. 따라서, 본 발명의 호스트 메모리(1150)의 메모리 공간이 요구되지 않을 수 있고, 전자 장치(1000)의 오버헤드가 경감될 수 있다. SSD(1230)는 전체 데이터를 한꺼번에 버퍼링하는 대신, 청크 사이즈 단위로 분할된 스트림 데이터를 버퍼링할 수 있다. 따라서, SSD(1230)의 버퍼 자원이 효율적으로 이용될 수 있다.
나아가, SSD(1230)의 버퍼(1235)가 외부 장치로부터 액세스 가능하고 액세스 가능한 버퍼(1235) 상에 청크 사이즈의 분할된 데이터가 버퍼링된다. 따라서, 인-스토리지 컴퓨팅부(1210)는 SSD(1230)의 버퍼(1235)로부터 획득되는 의도되는 전체 데이터를 커널(1212)의 에스램(1213)에서 관리할 수 있다. 따라서, DMA 엔진(1211)에 의한 메모리 접근 요청이 반복될 필요가 없어 인-스토리지 컴퓨팅부(1210)의 성능도 향상될 수 있다.
이를 위해, SSD(1230)의 버퍼(1235)는 외부 장치로부터 액세스 가능한 메모리 영역을 포함할 수 있고, 액세스 가능한 메모리 영역에서 청크 사이즈의 프리패치된 데이터를 관리할 수 있다. 몇몇 경우, SSD(1230)의 버퍼(1235)의 전체 영역들이 외부 장치로부터 액세스 가능할 수 있다. 또는, SSD(1230)의 버퍼(1235)의 일부 영역들만 외부 장치로부터 액세스 가능하도록 구성될 수 있고, 나머지 영역들은 보안을 위해 액세스 불가능하도록 구성될 수 있다.
청크 사이즈가 큰 경우, 데이터를 교환하는 레이턴시(Latency)가 증가할 수 있지만, 각 분할된 데이터를 교환하는 대역폭이 증가할 수 있고 통신 성능이 향상될 수 있다. 반면, 청크 사이즈가 작은 경우, 각 분할된 데이터를 교환하는 레이턴시가 감소할 수 있다. 청크 사이즈는 이 관점들을 고려하여 적절히 선택될 수 있다.
환상 큐의 사이즈가 큰 경우, 큰 버퍼 용량이 요구될 수 있지만, 여러 개의 데이터가 동시에 큐잉될 수 있고 통신 성능이 향상될 수 있다. 반면, 환상 큐의 크기가 작은 경우, 작은 버퍼 용량으로도 충분할 수 있다. 환상 큐의 크기는 이 관점들을 고려하여 적절히 선택될 수 있다.
도 9는 본 발명의 환상 큐 형태의 버퍼 관리 방법을 예시적으로 보여주는 도면이다. 도 9를 참조하면, 버퍼(1235)의 스트림 데이터를 저장하는 영역은 환상 큐 방식의 링 버퍼(Ring buffer)로 관리될 수 있다.
스트리밍 매니저(1232)의 구동에 따라, 버퍼(1235)에는 불휘발성 메모리 장치(1233)로부터 청크 사이즈의 데이터가 프리패치된다. 프리패치가 완료되면, 스트리밍 매니저(1232) 또는 버퍼 매니저(127)는 테일 포인터(TP)를 갱신한다. 마찬가지로, 청크 데이터(CH0)가 스트리밍 윈도(SW1)를 접근하는 외부 장치 또는 인-스토리지 컴퓨팅부(1210)로 전달되면, 버퍼(1235)의 헤드 포인터(HP)는 청크 사이즈만큼 이동하게 될 것이다. 이후, 스트리밍 윈도(SW1)로의 접근은 갱신된 헤드 포인터(HP)의 위치에 대응하는 청크 데이터(CH1)로 리다이랙션될 것이다. 이러한 방식으로 버퍼(1235)의 포인터들이 이동한다.
도 10은 본 발명의 스토리지 장치에서 수행되는 인-스토리지 컴퓨팅을 위한 스트리밍 읽기 명령어와 그에 대한 스토리지 장치의 응답을 예시적으로 보여주는 도면이다. 도 10을 참조하면, 호스트(1100)에서 스토리지 장치(1200)에 특정 데이터에 대한 요청(예를 들면, 데이터 베이스 스캔과 같은 데이터 인텐시브 워크로드)을 전송하는 것으로 가정하기로 한다.
S10 단계에서, 호스트(1100)가 스토리지 장치(1200)에 데이터 요청을 전송한다. 여기서, 호스트(1100)가 전송하는 데이터 요청은 스토리지 장치(1200)에 저장된 데이터에 대한 데이터 베이스 스캔(Data base scan)과 같은 요청일 수 있다. 실질적으로, 이러한 데이터 인텐시브 워크로드의 요청은 스토리지 장치(1200)에 구비되는 인-스토리지 컴퓨팅부(1210)로 전달될 것이다. 여기서, 데이터 요청은 호스트(1100)가 전송하는 것으로 설명되었으나, 데이터 요청은 다양한 주변 장치나 호스트(1100) 내부의 CPU(1110), GPU(1130), 네트워크 인터페이스 카드(1170)이나 주변 장치로 제공되는 필드 프로그래머블 게이트 어레이(FPGA), ASIC 등으로부터 발행될 수도 있다.
S20 단계에서, 스토리지 장치(1200)에 구비된 인-스토리지 컴퓨팅부(1210)가 본 발명의 스트리밍 읽기 명령어(Streaming Read CMD)를 SSD(1230)의 SSD 컨트롤러(1231)에 전달한다. 이때, 인-스토리지 컴퓨팅부(1210)는 스트리밍 읽기 명령어(Streaming Read CMD)와 함께 목적지 어드레스(Destination Addr)도 추가적으로 제공할 수 있다. 여기서, 스트리밍 읽기 명령어(Streaming Read CMD)에는 스트림 ID, LBA 리스트, 청크 사이즈(CS), 그리고 우선순위(Priority)가 포함될 수 있다.
S30 단계에서, SSD 컨트롤러(1231)는 스트리밍 읽기 명령어(Streaming Read CMD)에 응답하여 불휘발성 메모리 장치(1233)에 저장된 데이터를 독출하기 위한 프리패치 명령어를 전달한다. SSD 컨트롤러(1231)는 LBA 리스트로부터 수집된 어드레스 정보를 사용하여 불휘발성 메모리 장치(1233)로부터 청크 사이즈(CS)의 데이터를 읽어내도록 불휘발성 메모리 장치(1233)를 제어한다.
S40 단계에서, 불휘발성 메모리 장치(1233)는 SSD 컨트롤러(1231)로부터의 프리패치 명령에 응답하여 스트림 데이터를 청크 사이즈(CS)로 버퍼(1235)로 출력한다. 버퍼(1235)에는 복수의 청크 사이즈(CS)의 데이터가 축적될 수 있을 것이다.
S50 단계에서, 인-스토리지 컴퓨팅부(1210)의 DMA 엔진(1211)에 의해서 가상 메모리 공간(1161)에 등록된 스트리밍 윈도(Streaming window)가 접근될 것이다. 그러면, 버퍼(1235)의 헤드 포인터(HP)에 대응하는 위치로 리다이랙션이 발생하고, 버퍼(1235)에 큐잉된 청크(Chunk_0)에 대응하는 스트림 데이터가 인-스토리지 컴퓨팅부(1210)에 전달된다. 좀더 구체적으로 버퍼(1235)에서 출력된 청크(Chunk_0)에 대응하는 스트림 데이터는 커널 메모리(Kernel memory)로 제공되는 에스램(1213)에 직접 전달될 수 있다.
S32 단계에서, SSD 컨트롤러(1231)는 버퍼(1235)로부터의 데이터 출력에 응답하여 불휘발성 메모리 장치(1233)에 프리패치 명령어를 전달한다. SSD 컨트롤러(1231)는 현재까지 전송된 스트림 데이터와 앞으로 전송할 스트림 데이터를 고려하여 프리패치를 수행할 것이다.
S42 단계에서, 불휘발성 메모리 장치(1233)는 SSD 컨트롤러(1231)의 제어에 따라 청크 사이즈(CS)의 스트림 데이터를 버퍼(1235)로 출력한다.
S52 단계에서, 인-스토리지 컴퓨팅부(1210)의 DMA 엔진(1211)에 의해서 가상 메모리 공간(1161)에 등록된 스트리밍 윈도(Streaming window)가 접근될 것이다. 그러면, 버퍼(1235)의 헤드 포인터(HP)에 대응하는 위치로 리다이랙션이 발생하고, 버퍼(1235)에 큐잉된 청크(Chunk_1)에 대응하는 스트림 데이터가 인-스토리지 컴퓨팅부(1210)에 전달된다. 좀더 구체적으로, 버퍼(1235)에서 출력된 청크(Chunk_1)에 대응하는 스트림 데이터는 커널 메모리(Kernel memory)로 제공되는 에스램(1213)에 직접 전달될 수 있다. 이상에서 설명된 청크(Chunk) 단위의 프리패치 및 인-스토리지 컴퓨팅부(1210)로의 전송은 마지막 청크(Chunk_N-1)가 전송될 때까지 반복될 것이다.
S34 단계에서, SSD 컨트롤러(1231)는 버퍼(1235)로부터의 데이터 출력에 응답하여 불휘발성 메모리 장치(1233)로부터 버퍼(1235)로의 프리패치를 수행한다. SSD 컨트롤러(1231)는 현재까지 전송된 스트림 데이터와 앞으로 전송할 스트림 데이터를 고려하여 프리패치를 수행할 것이다.
S44 단계에서, 불휘발성 메모리 장치(1233)는 SSD 컨트롤러(1231)의 제어에 따라 LBA 리스트에서 정의된 마지막 스트림 데이터(Chunk_N-1)를 버퍼(1235)로 출력한다.
S54 단계에서, 인-스토리지 컴퓨팅부(1210)의 DMA 엔진(1211)에 의해서 가상 메모리 공간(1161)에 등록된 스트리밍 윈도(Streaming window)가 접근될 것이다. 그러면, 버퍼(1235)의 헤드 포인터(HP)에 대응하는 위치로 리다이랙션(Redirection)이 발생하고, 버퍼(1235)에 큐잉된 마지막 청크(Chunk_N-1)에 대응하는 스트림 데이터가 인-스토리지 컴퓨팅부(1210)에 전달된다.
S60 단계에서, 인-스토리지 컴퓨팅부(1210)는 획득된 스트림 데이터를 취합하여 인-스토리지 컴퓨팅을 수행한다. 예를 들면, 인-스토리지 컴퓨팅부(1210)는 획득된 스트림 데이터에 대한 데이터 베이스 스캔과 같은 처리를 수행할 수 있다. 인-스토리지 컴퓨팅이 완료되면, 인-스토리지 컴퓨팅부(1210)는 호스트(1100)에서 요청된 값을 최종적으로 선택할 수 있다.
S70 단계에서, 인-스토리지 컴퓨팅부(1210)는 인-스토리지 컴퓨팅의 결과에 의해서 선택된 데이터만 호스트(1100)로 반환할 것이다.
이상에서 예시적으로 설명된 호스트(1100)와 스토리지 장치(1200) 사이에서의 데이터 입출력은 S10 단계의 데이터 요청과 S70 단계에서의 요청된 데이터의 반환만이 존재한다. 따라서, 본 발명의 스트리밍 접근 명령어를 사용하는 경우, 데이터 인텐시브 워크로드 작업이 수행되는 스토리지 장치(1200)의 대역폭 감소가 현저히 개선될 수 있다.
도 11은 도 5의 SSD 컨트롤러의 다른 실시 예를 보여주는 블록도이다. 도 11을 참조하면, SSD 컨트롤러(1231)는 프로세서(121), 워킹 메모리(123), 호스트 인터페이스(125), 버퍼 매니저(127), 플래시 인터페이스(129), 그리고 하드웨어 블록으로 구성되는 스트리밍 매니저(1232)를 포함할 수 있다. 여기서, 프로세서(121), 워킹 메모리(123), 호스트 인터페이스(125), 버퍼 매니저(127), 그리고 플래시 인터페이스(129)는 앞서 설명된 도 6의 그것들과 실질적으로 동일하므로 이것들에 대한 설명은 생략하기로 한다.
외부로부터 스트리밍 접근 명령어(SA_CMD)가 입력되면, 호스트 인터페이스(125)의 명령어 레지스터(미도시)에 스트리밍 접근 명령어(SA_CMD)가 저장된다. 호스트 인터페이스(125)는 저장된 명령에 따라 프로세서(121)에 읽기/쓰기 명령이 입력되었음을 알려준다. 그러면, 스트리밍 매니저(1232)는 스트리밍 접근 명령어(SA_CMD)에 응답하여 불휘발성 메모리 장치(1233)로부터 버퍼(1235)로 LBA 리스트에 의해서 요청된 데이터를 청크 사이즈로 프리패치할 것이다. 더불어, 스트리밍 매니저(1232)는 버퍼(1235)의 상태를 외부로 전달하여 타깃 장치가 버퍼(1235)에 자유롭게 접근할 수 있도록 중재한다.
예를 들면, 스트리밍 매니저(1232)는 LBA 리스트에 대응하는 스트림 데이터를 불휘발성 메모리 장치(1233)로부터 읽어낸다. 스트리밍 매니저(1232)는 불휘발성 메모리 장치(1233)로부터 청크 사이즈(CS) 단위로 스트림 데이터를 프리패치하여 버퍼(1235)에 로드한다. 그리고 스트리밍 매니저(1232)는 버퍼(1235)에 로드된 스트림 데이터의 헤드 포인터(Head Pointer) 및/또는 테일 포인터(Tail Pointer)를 외부로 알려줄 수 있다. 스트리밍 매니저(1232)는 외부로부터의 버퍼(1235)로의 접근을 검출하여 버퍼(1235)에 헤드 포인터(Head Pointer)와 테일 포인터(Tail Pointer)를 관리한다. 더불어, 스트리밍 매니저(1232)는 요청된 스트림 데이터를 청크 사이즈 단위로 로드할 가상 메모리 공간(1161)의 스트리밍 윈도를 관리할 수 있다.
상술한 실시 예의 SSD 컨트롤러(1231)는 스트리밍 접근 명령어(SA_CMD)에 응답하여 청크 사이즈(CS) 단위로 버퍼(1235)를 관리할 수 있다. 그리고 스트리밍 매니저(1232)에 의해 버퍼(1235)의 상태 정보가 SSD(1230)의 외부로 전달될 수 있다. 외부로 전달된 버퍼(1235)의 상태 정보는 청크 사이즈(CS) 단위로 데이터를 전송하는 타깃 장치의 DMA 동작에 참조될 수 있다.
도 12는 도 11의 스트리밍 매니저의 구성을 예시적으로 보여주는 블록도이다. 도 12를 참조하면, 스트리밍 매니저(1232)는 커맨드 파서(1410), LBA 리스트 매니저(1420), 스트리밍 윈도 매니저(1430), 프리패처(1440), 스트리밍 버퍼 매니저(1450), 그리고 액세스 검출기(1460)를 포함할 수 있다.
커맨드 파서(1410)는 스트리밍 접근 명령어(SA_CMD)를 파싱할 수 있다. 커맨드 파서(1410)는 파싱된 스트리밍 접근 명령어(SA_CMD)로부터 LBA 리스트들, 청크 사이즈 등과 같은 정보를 획득할 수 있다. 커맨드 파서(1410)는 획득된 정보를 LBA 리스트 매니저(1420) 및 스트리밍 윈도 매니저(1430)로 제공할 수 있다.
LBA 리스트 매니저(1420)는 커맨드 파서(1410)로부터 획득된 LBA 리스트에 기초하여, 불휘발성 메모리 장치(1233)로부터 읽힐 전체 데이터, 이미 읽힌(따라서 환상 큐에 큐잉된) 데이터 등의 정보를 관리할 수 있다.
스트리밍 윈도 매니저(1430)는 커맨드 파서(1410)로부터 획득된 LBA 리스트 및 LBA 리스트 매니저(1420)에서 관리되는 정보에 기초하여, 전체 데이터로부터 분할된 스트림 데이터를 외부 장치로 제공하기 위한 스트리밍 윈도를 관리할 수 있다. 예로서, 스트리밍 윈도 매니저(1430)는 큐잉된 데이터가 외부 장치로 제공되도록 스트리밍 윈도를 호스트 가상 메모리 공간에 등록하고 등록된 스트리밍 윈도를 관리할 수 있다. 스트리밍 윈도 매니저(1430)는 호스트(1100)의 메모리 관리 유닛(1160)에 스트리밍 윈도를 관리하기 위한 정보를 제공할 수 있다.
스트리밍 버퍼 매니저(1450)는 스트림 데이터를 위한 버퍼(1235)의 메모리 영역을 관리할 수 있다. 스트리밍 버퍼 매니저(1450)는 스트리밍 윈도 매니저(1430)에 의해 관리되는 스트리밍 윈도와 관련하여 스트림 데이터가 큐잉되고 입력/출력되도록 버퍼(1235)의 동작 및 상태를 관리할 수 있다. 예로서, 스트리밍 버퍼 매니저(1450)는 환상 큐의 데이터 구조를 채용할 수 있으나, 본 개시는 이 예로 한정되지 않는다.
프리패처(1440)는 LBA 리스트 매니저(1420)에서 관리되는 정보에 기초하여, 메모리 장치로부터 읽힌 데이터를 버퍼(1235)로 프리패치할 수 있다. 프리패처(1440)는 불휘발성 메모리 장치(1233)로부터 읽힌 데이터를 청크 사이즈 단위로 프리패치할 수 있다. 프리패처(1440)는 스트리밍 버퍼 매니저(1450)에 의해 지시되는 버퍼(1235)의 메모리 영역으로 데이터를 프리패치할 수 있다.
액세스 검출기(1460)는 외부 장치가 스트리밍 윈도로 액세스하는 것을 검출할 수 있다. 액세스 검출기(1460)에 의해서 외부 장치나 호스트(1100)로부터의 버퍼(1235)로의 액세스를 검출할 수 있고, 검출 결과에 따라 버퍼(1235)의 헤드 포인터(HP)를 갱신할 수 있다. 더불어, 액세스 검출기(1460)의 검출 결과에 따라 불휘발성 메모리 장치(1233)로부터 버퍼(1235)로의 프리패치가 수행될 수 있다.
몇몇 실시 예에서, 스트리밍 매니저(1232)는 스토리지 장치(1200) 내부에 제공될 수 있다. 예로서, SSD(1230)는 SSD 컨트롤러(1231)의 제어에 따라 위에서 설명된 스트리밍 읽기 동작 및 스트리밍 쓰기 동작을 수행할 수 있다. 예로서, SSD 컨트롤러(1231)가 스트리밍 매니저(1232)를 포함할 수 있다. 더불어, 스트리밍 매니저(1232)는 소프트웨어 및/또는 펌웨어의 프로그램 코드로 구현될 수 있고, SSD 컨트롤러(1231)의 프로세서 코어가 프로그램 코드의 명령어 집합들을 실행하여 스트리밍 읽기 동작 및 스트리밍 쓰기 동작을 제공할 수 있다.
몇몇 실시 예에서, 스트리밍 매니저(1232)는 위에서 설명된 동작들을 수행하도록 구성되는 하드웨어 회로들(예컨대, 아날로그 회로, 논리 회로, FPGA, ASIC 등)로 구현될 수 있다. 하드웨어 회로들은 SSD 컨트롤러(1231)에 포함되거나 또는 SSD 컨트롤러(1231)의 외부에 제공될 수 있다. 몇몇 실시 예에서, 스트리밍 매니저(1232)는 소프트웨어와 하드웨어의 하이브리드 형태로 구현될 수 있다.
몇몇 실시 예에서, 스트리밍 매니저(1232)는 스토리지 장치(1200) 외부에 제공될 수 있다. 예로서, 스트리밍 매니저(1232)는 스토리지 장치의 입력/출력단에 제공될 수 있고 따라서 스토리지 장치(1200)와 외부 장치 사이에 있을 수 있다. 이러한 스트리밍 매니저(1232)는 스토리지 장치(1200)로 입력되는 데이터 및 스토리지 장치(1200)로부터 출력되는 데이터에 대해 위에서 설명된 동작들을 수행할 수 있다. 그 밖에, 스트리밍 매니저(1232)의 구현은 다양하게 변경 또는 수정될 수 있다.
나아가, 위 설명들은 읽기 동작 및 쓰기 동작과 관련하여 제공되었으나, 본 개시는 스토리지 장치(1200)와 외부 장치 사이의 통신을 수반하는 어떤 종류의 동작에 대해서든 적용될 수 있다.
도 13은 본 발명의 다른 실시 예에 따른 호스트의 가상 메모리 공간에서 스트리밍 영역을 할당하는 방법을 보여주는 도면이다. 도 13을 참조하면, 호스트(1100)의 가상 메모리 공간(1161)은 복수의 SSD들(1230, 1240, 1250) 각각의 버퍼들(1235, 1245, 1255)의 메모리 영역이 등록될 수 있다.
제 1 SSD(1230)의 버퍼(1235)에 큐잉되는 스트림 데이터의 관리를 위해 버퍼(1235)는 가상 메모리 공간(1161)의 제 1 스트리밍 영역(1162)에 맵핑될 수 있다. 제 1 스트리밍 영역(1162)에는 버퍼(1235)에 저장되는 스트리밍 ID의 수만큼의 스트리밍 윈도들이 할당될 수 있다. 즉, 제 1 스트리밍 영역(1162)은 하나의 제 1 SSD(1230)가 스트림 데이터를 외부와 교환하기 위한 가상 메모리로 할당될 것이다. 외부에서 가상 메모리 공간의 제 1 스트리밍 영역(1162)에 접근하면, 호스트(1100)의 메모리 관리 유닛(1160)에 의해서 제 1 SSD(1230)의 버퍼(1235)로 리다이랙션된다.
반면, 가상 메모리 공간(1161)의 제 2 스트리밍 영역(1164)은 복수의 SSD들(1240, 1250)의 버퍼들(1245, 1255)이 맵핑된다. 즉, 하나의 제 2 가상 메모리 영역(1164)이 복수의 SSD들(1240, 1250)의 버퍼들(1245, 1255)에 입출력되는 스트림 데이터를 커버할 수 있다. 예컨대, 복수의 SSD들(1240, 1250)이 RAID 형태로 구성되는 경우, 이러한 가상 메모리 영역(1164)의 맵핑이 가능하다.
NVMe 기반의 인터페이스를 사용하는 SSD들(1230, 1240, 1250)의 경우, 가상 메모리 공간(1161)으로 버퍼들(1235, 1245, 1255)의 메모리 영역을 등록하기 위해서는 베이스 어드레스 레지스터(BAR)를 사용하여 수행될 수 있다. 이 경우, 외부 장치가 가상 메모리 공간(1161) 상에서 할당된 가상 주소로 접근하면, 이후 메모리 관리 유닛(1160)에 의해서 버퍼들(1235, 1245, 1255) 중 어느 하나로의 접근이 리다이랙션될 수 있다. 이러한 가상 메모리 공간(1161)을 통해서 인-스토리지 컴퓨팅부(1210)나 호스트(1100) 또는 기타 주변 장치들은 버퍼들(1235, 1245, 1255)를 공유할 수 있다.
도 14는 본 발명의 스트리밍 쓰기 명령어에 따라 수행되는 데이터의 이동 경로를 예시적으로 보여주는 블록도이다. 도 14를 참조하면, SSD(1230)는 스트리밍 쓰기 명령어(SW_CMD)의 LBA 리스트들에 기초하여 버퍼(1235)에 로드되는 데이터를 불휘발성 메모리 장치(1233)에 프로그램할 수 있다.
호스트(1100), 주변 장치, 또는 인-스토리지 컴퓨팅부(1210)와 같은 장치에서 스트리밍 쓰기 요청이 발생하면, SSD(1230)로 스트리밍 쓰기 명령어(SW_CMD)가 전달될 것이다. 스트리밍 쓰기 명령어(SW_CMD)에 응답하여 SSD(1230)가 래디 상태가 되면, 인-스토리지 컴퓨팅부(1210)는 스트림 데이터를 가상 메모리 공간에 할당된 스트리밍 윈도(Streaming window #1)를 타깃으로 전송할 것이다. 그러면, 호스트(1100)의 메모리 관리 유닛(1160)에 의해서 스트리밍 윈도(Streaming window #1)는 버퍼(1235)로 리다이랙션된다.
버퍼(1235)에는 스트림 데이터가 청크 사이즈 단위로 저장된다. 예시적으로, 버퍼(1235)가 링 버퍼(Ring buffer) 형태로 관리되는 경우, 쓰기 동작 시에도 버퍼(1235)의 헤드 포인터(Head Pointer: HP)와 테일 포인터(Tail Pointer: TP)는 청크 사이즈 단위로 진행할 것이다. 버퍼(1235)의 데이터 구조는 본 개시의 예에 한정되지 않고 다양하게 변경 또는 수정될 수 있음이 잘 이해될 것이다.
이상에서는 스트리밍 쓰기 명령어(SW_CMD)에 따른 스트림 데이터의 관리 방법이 간략히 설명되었다. 스트리밍 쓰기 동작은 실제적으로 스트리밍 읽기 동작과는 역순으로 실행될 수 있을 것이다.
도 15는 본 발명의 다른 실시 예에 따른 스토리지 장치를 포함하는 전자 시스템을 보여주는 블록도이다. 도 15를 참조하면, 컴퓨팅 시스템(2000)은 호스트 장치(2100), 스토리지 장치(2200), 그리고 FPGA(2300)를 포함할 수 있다. 여기서, 호스트 장치(2100)는 도 1의 호스트 장치(1100)의 기능 및 구성이 실질적으로 동일하므로 상세한 설명은 생략하기로 한다.
스토리지 장치(2200)는 외부에서 제공되는 스트리밍 접근 명령어(SA_CMD)에 응답하여 버퍼(2260)에 스트림 데이터를 요청된 청크 사이즈 단위로 큐잉할 수 있다. 여기서, 스트리밍 접근 명령어(SA_CMD)는 스트리밍 읽기 명령어(SR_CMD)와 스트리밍 쓰기 명령어(SW_CMD)를 모두 통칭하는 의미로 사용될 수 있다. 스토리지 장치(2200)는 SSD(Solid State Drive), SD(Secure Digital) 카드, eMMC(Embedded Multimedia Card) 등과 같은 스토리지일 수 있다.
특히, 버퍼(2260)의 메모리 영역은 호스트(2100)의 가상 메모리 공간(Virtual Memory Space)에 맵핑되어 컴퓨팅 시스템(2000)을 구성하는 장치들에 의해서 공유될 수 있다. 버퍼(2260)는 가상 메모리 공간의 스트리밍 윈도에 대응하는 가상 어드레스와 맵핑될 것이다. 호스트(2100)나 FPGA(2300) 또는 주변 장치들이 가상 메모리 공간의 스트리밍 윈도에 접근하는 방식으로 버퍼(2260)의 메모리 영역을 공유할 수 있다. 스트리밍 접근 명령어(SA_CMD)는 LBA 리스트, 스트리밍 ID, 청크 사이즈, 우선순위 등의 정보를 포함할 수 있다. FPGA(2300)는 스트림 데이터를 스토리지 장치(2200)와 교환하여 처리하는 디바이스의 예시적인 구성에 불과함은 잘 이해될 것이다. FPGA(2300)는 스트림 데이터를 처리할 수 있는 다양한 프로세서, IP(Intellectual Property), ASIC(Application-Specific Integrated Circuit)으로도 구현될 수 있을 것이다.
FPGA(2300)는 스토리지 장치(2200)가 스트리밍 접근 명령어(SA_CMD)에 응답하여 출력되는 스트림 데이터를 처리하고, 처리 결과값을 호스트(2100)로 전송할 수 있다. 스토리지 장치(2200)는 예를 들면, 스트리밍 읽기 명령어(SR_CMD)에 응답하여, 스트림 데이터를 요청된 데이터 사이즈(청크 사이즈) 단위로 버퍼(2260)에 로드할 것이다. 그러면, FPGA(2300)는 가상 메모리 공간에 할당된 스트리밍 윈도를 사용하여 버퍼(2260)에 로드된 스트림 데이터를 전송받을 수 있다. 이 경우, 스트림 데이터의 전송에 따른 호스트(2100)와 스토리지 장치(2200) 사이의 대역폭 감소는 발생하지 않게 된다. 따라서, FPGA(2300)에 의한 연산에 의하여, 스토리지 장치(2200)와 호스트(2100) 사이의 스트림 데이터의 교환에 따른 대역폭 저하 문제가 획기적으로 개선될 수 있다.
이상에서는 본 발명의 다른 실시 예에 따른 컴퓨팅 시스템(1000)의 구성이 간략히 설명되었다. 이 실시 예에서는 스토리지 장치(2200)의 외부에 데이터 인텐시브 워크로드를 처리하는 FPGA(2300)가 위치한다. 여기서, 스트리밍 접근 명령어(SA_CMD)의 발행은 호스트(2100)나 FPGA(2300), 또는 스토리지 장치(2200) 내부에서도 트리거될 수 있음은 잘 이해될 것이다. 스트리밍 접근 명령어(SA_CMD)에 따라 본 발명의 컴퓨팅 시스템(2000)은 효율적으로 스트림 데이터를 처리할 수 있다.
도 16은 도 15의 호스트, 스토리지 장치, 그리고 FPGA의 예시적인 구성을 보여주는 블록도이다. 도 16을 참조하면, 도 1 또는 도 2의 스토리지 장치(1200)와는 달리 스토리지 장치(2200)와 FPGA(2300)는 컴퓨팅 시스템(2000) 내에서 개별적인 장치로 제공된다.
호스트(2100)는 본 발명의 스트림 데이터의 처리를 위해 중앙 처리 장치(2110), 호스트 메모리(2150), 인터페이스 회로(2190) 그리고 메모리 관리 유닛(2160)을 포함할 수 있다. 여기서, 호스트(2100)에 그래픽 처리 유닛(2130)이나 네트워크 인터페이스 카드(2170)와 같은 구성들이 더 포함될 수 있음은 잘 이해될 것이다. 중앙 처리 장치(2110), 호스트 메모리(2150), 그리고 인터페이스 회로(2190)는 도 2의 그것들과 실질적으로 동일하므로 이것들에 대한 설명은 생략하기로 한다.
호스트(2100)의 가상 메모리 공간에는 스토리지 장치(2200)의 버퍼(2260)의 메모리 영역을 FPGA(2300)의 DMA 엔진(2211)이 접근할 수 있는 스트리밍 윈도가 할당될 수 있다. 호스트(2100)의 가상 메모리 공간에 맵핑된 스트리밍 윈도를 관리하기 위해 호스트(2100)는 메모리 관리 유닛(2160)을 포함할 수 있다. 메모리 관리 유닛(2160)은 컴퓨팅 시스템(2000)의 부팅이나 초기화 시에, 스토리지 장치(2200)의 버퍼(2260)를 가상 메모리 공간(Virtual Memory Space)에 등록하여, 스트림 데이터의 입출력을 위한 메모리 공유를 제공할 수 있다.
스토리지 장치(2200)는 스트리밍 읽기 명령어(SR_CMD)에 응답하여 버퍼(2260)에 청크 사이즈 단위로 불휘발성 메모리 장치(2240)에서 독출된 데이터를 로드한다. 또는, 스토리지 장치(2200)는 스트리밍 쓰기 명령어(SW_CMD)에 응답하여 불휘발성 메모리 장치(2240)에서 독출된 데이터를 버퍼(2260)에 청크 사이즈 단위로 로드한다. 버퍼(2260)는 호스트(2100)의 가상 메모리 공간에 맵핑되어 있어, FPGA(2300)의 DMA 엔진(2211)의 접근이 가능하다.
FPGA(2300)는 예시적으로 DMA 엔진(2211), 커널 메모리(2213)를 포함할 수 있다. FPGA(2300)는 예를 들면 하나 이상의 프로세서 코어나 FPGA 등으로 구현될 수 있을 것이다. FPGA(2300)는 호스트(2100)의 요청에 따라 본 발명의 스트리밍 접근 명령어(SA_CMD)를 스토리지 장치(2200)에 제공할 수 있다. 그리고 FPGA(2300)는 스토리지 장치(2200)로부터 전달되는 스트림 데이터를 처리하여 호스트(2100)에 전달할 것이다. DMA 엔진(2211)은 스토리지 장치(2200)의 버퍼(2260)에 로드되는 청크 사이즈 단위의 스트림 데이터를 읽어와 커널 메모리(2213)에 제공할 수 있다.
위 설명들은 본 발명을 구현하기 위한 예시적인 구성들 및 동작들을 제공하도록 의도된다. 본 발명의 기술 사상은 위에서 설명된 실시 예들뿐만 아니라, 위 실시 예들을 단순하게 변경하거나 수정하여 얻어질 수 있는 구현들도 포함할 것이다. 또한, 본 발명의 기술 사상은 위에서 설명된 실시 예들을 앞으로 용이하게 변경하거나 수정하여 달성될 수 있는 구현들도 포함할 것이다.
Claims (20)
- 가상 메모리를 사용하는 호스트에 연결되는 스토리지 장치에 있어서:
LBA 리스트 및 청크 사이즈를 포함하는 스트리밍 접근 명령어를 수신하며, 상기 LBA 리스트 및 상기 청크 사이즈에 따라 요청된 스트림 데이터를 추가 명령어 없이 불휘발성 메모리 장치로부터 프리패치하여 버퍼로 순차적으로 로드하는 솔리드 스테이트 드라이브; 그리고
상기 가상 메모리 상에 등록된 스트리밍 영역에 접근하여 상기 버퍼에 로드되는 상기 스트림 데이터를 상기 청크 사이즈 단위로 순차적으로 읽어내는 인-스토리지 컴퓨팅부를 포함하되,
상기 버퍼는 상기 스트리밍 영역의 가상 메모리 주소에 맵핑되는 스토리지 장치. - 제 1 항에 있어서,
상기 솔리드 스테이트 드라이브는 상기 호스트의 초기화 동작시 상기 버퍼의 물리 주소를 상기 가상 메모리 상의 상기 스트리밍 영역에 맵핑하는 스토리지 장치. - 제 2 항에 있어서,
상기 솔리드 스테이트 드라이브는 PCIe 또는 NVMe 인터페이스 표준에 따라 상기 호스트와 통신하며, 상기 솔리드 스테이트 드라이브는 상기 초기화 동작시 상기 호스트의 베이스 어드레스 레지스터(BAR) 설정을 통해서 상기 버퍼를 상기 가상 메모리의 상기 스트리밍 영역에 등록하는 스토리지 장치. - 제 1 항에 있어서,
상기 스트리밍 접근 명령어는 상기 스트림 데이터의 스트림 식별자(ID)를 더 포함하고, 상기 LBA 리스트는 상기 스트림 데이터의 전체의 논리 주소에 대응하고, 상기 청크 사이즈는 상기 스트림 데이터의 관리 단위를 정의하고, 그리고 상기 스트림 식별자(ID)에는 우선순위가 할당되는 스토리지 장치. - 제 4 항에 있어서,
상기 스트림이 접근 명령어는, 상기 스트림 데이터를 수신하는 목적지 어드레스를 더 포함하는 스토리지 장치. - 제 1 항에 있어서,
상기 인-스토리지 컴퓨팅부는 상기 청크 사이즈 단위로 읽어낸 상기 스트림 데이터에 대한 데이터 베이스 스캔 연산을 수행하는 스토리지 장치. - 제 6 항에 있어서,
상기 인-스토리지 컴퓨팅부는 상기 데이터 베이스 스캔 연산의 결과를 상기 호스트로 전송하는 스토리지 장치. - 제 1 항에 있어서,
상기 스트리밍 접근 명령어는 상기 호스트 또는 상기 인-스토리지 컴퓨팅부에서 발행하는 스토리지 장치. - 제 1 항에 있어서,
상기 인-스토리지 컴퓨팅부가 상기 스트리밍 영역에 접근하면, 상기 스트리밍 영역으로의 접근을 상기 버퍼로 리다이랙션(Redirection)하는 메모리 관리 유닛을 더 포함하는 스토리지 장치. - 제 9 항에 있어서,
상기 스트리밍 영역은 상기 스트리밍 데이터를 상기 청크 사이즈 단위로 관리하기 위한 가상 주소 범위인 스트리밍 윈도(Streaming window)를 포함하는 스토리지 장치. - 제 10 항에 있어서,
상기 스트리밍 접근 명령어는, 상기 스트림 데이터의 스트림 식별자(ID)를 더 포함하고, 상기 스트리밍 윈도는 상기 솔리드 스테이트 드라이브에 할당되는 스트림 식별자(ID)의 수만큼 할당되는 스토리지 장치. - 가상 메모리 공간을 사용하여 메모리 자원을 관리하는 호스트;
스트리밍 접근 명령어를 수신하며, 상기 스트리밍 접근 명령어에 포함되는 LBA 리스트 및 청크 사이즈에 따라 요청된 스트림 데이터를 추가 명령어 없이 불휘발성 메모리 장치로부터 프리패치하여 버퍼로 순차적으로 로드하는 스토리지 장치; 그리고
상기 가상 메모리 공간에 등록된 스트리밍 영역에 접근하여 상기 버퍼에 로드되는 상기 스트림 데이터를 상기 청크 사이즈 단위로 순차적으로 읽어내는 필드 프로그래머블 게이트 어레이(FPGA)를 포함하는 컴퓨팅 시스템. - 제 12 항에 있어서,
상기 스토리지 장치의 데이터 입출력을 위해 제공되는 상기 버퍼는 상기 가상 메모리 공간의 상기 스트리밍 영역에 맵핑되는 컴퓨팅 시스템. - 제 12 항에 있어서,
상기 스트리밍 접근 명령어는, 상기 스트림 데이터의 스트림 식별자(ID), 상기 스트림 데이터의 전체 논리 주소에 대응하는 LBA 리스트, 상기 스트림 데이터의 관리 단위를 정의하는 상기 청크 사이즈, 그리고 상기 스트림 식별자(ID)에 할당되는 우선순위를 포함하는 컴퓨팅 시스템. - 제 12 항에 있어서,
상기 호스트 및 상기 필드 프로그래머블 게이트 어레이(FPGA)는 PCIe 인터페이스 프로토콜에 따라, 그리고 상기 스토리지 장치는 NVMe 인터페이스 프로토콜에 따라 통신하는 컴퓨팅 시스템. - 제 12 항에 있어서,
상기 스토리지 장치는, 상기 스트리밍 접근 명령어를 파싱하여 상기 불휘발성 메모리 장치로부터 상기 스트림 데이터를 상기 청크 사이즈 단위로 독출하여 상기 버퍼에 로드하는 스트리밍 매니저를 포함하는 컴퓨팅 시스템. - 제 16 항에 있어서,
상기 스트리밍 매니저는:
상기 스트리밍 접근 명령어를 해독하여 상기 LBA 리스트와 상기 청크 사이즈를 추출하는 커맨드 파서;
상기 LBA 리스트를 참조하여 상기 불휘발성 메모리 장치로부터 독출할 데이터와 상기 필드 프로그래머블 게이트 어레이(FPGA)로 전송된 데이터에 대한 정보를 관리하는 LBA 리스트 매니저;
상기 LBA 리스트와 상기 청크 사이즈를 기반으로 상기 가상 메모리 공간에 할당되는 스트리밍 윈도를 관리하는 스트리밍 윈도 매니저;
상기 LBA 리스트와 상기 청크 사이즈를 기반으로 상기 버퍼에 큐잉되는 상기 스트림 데이터를 모니터링 및 관리하는 스트리밍 버퍼 매니저; 그리고
상기 LBA 리스트와 상기 청크 사이즈를 기반으로 상기 불휘발성 메모리 장치로부터 상기 스트림 데이터를 읽어내어 상기 버퍼에 로드하는 프리패처를 포함하는 컴퓨팅 시스템. - 제 17 항에 있어서,
상기 스트리밍 매니저는, 상기 필드 프로그래머블 게이트 어레이(FPGA) 또는 상기 호스트에 의한 상기 버퍼로의 접근을 검출하여 상기 스트리밍 버퍼 매니저에게 알려주는 액세스 검출기를 더 포함하는 컴퓨팅 시스템. - 제 12 항에 있어서,
상기 호스트는 상기 가상 메모리 공간의 상기 스트리밍 영역으로의 접근을 상기 버퍼로 리다이랙션(Redirection)하는 메모리 관리 유닛을 포함하는 컴퓨팅 시스템. - 가상 메모리 공간을 사용하는 호스트에 연결되며, 불휘발성 메모리 장치 및 버퍼를 포함하는 스토리지 장치의 동작 방법에 있어서:
상기 버퍼의 물리 주소를 상기 가상 메모리 공간의 스트리밍 윈도에 대응하는 주소 범위에 맵핑하는 단계;
상기 스토리지 장치에서 스트림 데이터에 대응하는 LBA 리스트와 상기 스트림 데이터의 관리 단위를 포함하는 스트리밍 접근 명령어를 수신하는 단계;
상기 LBA 리스트를 참조하여 상기 스트림 데이터를 상기 불휘발성 메모리 장치로부터 프리패치하여 상기 관리 단위로 상기 버퍼에 순차적으로 로드하는 단계;
타깃 장치에서 상기 가상 메모리 공간의 상기 스트리밍 윈도에 접근을 수행하는 단계;
상기 스트리밍 윈도로의 상기 접근을 상기 버퍼로 리다이랙션하는 단계; 그리고
상기 버퍼에 순차적으로 로드되는 상기 스트림 데이터를 상기 관리 단위로 상기 타깃 장치로 전송하는 단계를 포함하는 스토리지 장치의 동작 방법.
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/562,094 US11061591B2 (en) | 2018-11-02 | 2019-09-05 | Storage device processing stream data, system including the same, and operation method thereof |
EP19205624.0A EP3647932B1 (en) | 2018-11-02 | 2019-10-28 | Storage device processing stream data, system including the same, and operation method thereof |
CN201911064637.6A CN111143234B (zh) | 2018-11-02 | 2019-11-01 | 存储设备、包括这种存储设备的系统及其操作方法 |
US17/344,112 US11635902B2 (en) | 2018-11-02 | 2021-06-10 | Storage device processing stream data, system including the same, and operation method |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR20180133653 | 2018-11-02 | ||
KR1020180133653 | 2018-11-02 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20200051450A true KR20200051450A (ko) | 2020-05-13 |
Family
ID=70730091
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190027103A KR20200051450A (ko) | 2018-11-02 | 2019-03-08 | 스트림 데이터를 처리하는 스토리지 장치, 그것의 포함하는 컴퓨팅 시스템, 그리고 그것의 동작 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR20200051450A (ko) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986137A (zh) * | 2021-10-28 | 2022-01-28 | 英韧科技(上海)有限公司 | 存储装置和存储系统 |
WO2022045407A1 (ko) * | 2020-08-28 | 2022-03-03 | 엘지전자 주식회사 | 신호처리장치 및 이를 구비하는 영상표시장치 |
-
2019
- 2019-03-08 KR KR1020190027103A patent/KR20200051450A/ko active IP Right Grant
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022045407A1 (ko) * | 2020-08-28 | 2022-03-03 | 엘지전자 주식회사 | 신호처리장치 및 이를 구비하는 영상표시장치 |
CN113986137A (zh) * | 2021-10-28 | 2022-01-28 | 英韧科技(上海)有限公司 | 存储装置和存储系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111143234B (zh) | 存储设备、包括这种存储设备的系统及其操作方法 | |
US9734085B2 (en) | DMA transmission method and system thereof | |
US9395921B2 (en) | Writing data using DMA by specifying a buffer address and a flash memory address | |
US9824050B2 (en) | Shared PCIe end point system including a PCIe switch and method for initializing the switch | |
US9785545B2 (en) | Method and apparatus for providing dual memory access to non-volatile memory | |
US10445018B2 (en) | Switch and memory device | |
KR101841997B1 (ko) | 순응적 존속을 위한 시스템, 방법 및 인터페이스 | |
US11379374B2 (en) | Systems and methods for streaming storage device content | |
US8874823B2 (en) | Systems and methods for managing data input/output operations | |
EP4220419B1 (en) | Modifying nvme physical region page list pointers and data pointers to facilitate routing of pcie memory requests | |
US10007464B1 (en) | Method and apparatus for integration of non-volatile memory | |
JP7227907B2 (ja) | バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法及び装置 | |
US9727521B2 (en) | Efficient CPU mailbox read access to GPU memory | |
KR20200051450A (ko) | 스트림 데이터를 처리하는 스토리지 장치, 그것의 포함하는 컴퓨팅 시스템, 그리고 그것의 동작 방법 | |
CN116795736A (zh) | 数据预读取方法、装置、电子设备和存储介质 | |
US10564847B1 (en) | Data movement bulk copy operation | |
CN112703481A (zh) | 混合式存储器系统接口 | |
US10789001B1 (en) | Posted operation data control | |
US11003378B2 (en) | Memory-fabric-based data-mover-enabled memory tiering system | |
US20240168876A1 (en) | Solving submission queue entry overflow using metadata or data pointers | |
US9424227B2 (en) | Providing byte enables for peer-to-peer data transfer within a computing environment | |
US20230126511A1 (en) | Methods and systems for storing data in a distributed system using gpus | |
CN116225315A (zh) | 基于pci-e光纤卡的宽带数据高速录取系统、存储架构和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right |