KR102593583B1 - Ssd들 상에서의 가속된 데이터 처리를 위한 시스템 및 방법 - Google Patents

Ssd들 상에서의 가속된 데이터 처리를 위한 시스템 및 방법 Download PDF

Info

Publication number
KR102593583B1
KR102593583B1 KR1020190126445A KR20190126445A KR102593583B1 KR 102593583 B1 KR102593583 B1 KR 102593583B1 KR 1020190126445 A KR1020190126445 A KR 1020190126445A KR 20190126445 A KR20190126445 A KR 20190126445A KR 102593583 B1 KR102593583 B1 KR 102593583B1
Authority
KR
South Korea
Prior art keywords
spe
spa
data
spes
apm
Prior art date
Application number
KR1020190126445A
Other languages
English (en)
Other versions
KR20200068564A (ko
Inventor
람다스 피. 카차르
비제이 발라크리쉬난
스테판 쥐 피스쳐
프레드 울리
아나히타 셔예스테
즈비 구즈
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20200068564A publication Critical patent/KR20200068564A/ko
Application granted granted Critical
Publication of KR102593583B1 publication Critical patent/KR102593583B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • G06F13/1615Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement using a concurrent pipeline structrure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Abstract

SSD들 상에서의 가속된 데이터 처리를 위한 방법은, 애플리케이션 서비스 관리자(application service manager; ASM)로부터 가속 플랫폼 관리자(acceleration platform manager; APM)에 애플리케이션 기능 처리 정보를 수신하는 단계, APM에 의하여, 복수의 스토리지 처리 가속기(storage processing accelerator; SPA)들로부터 제 1 SPA를 할당하되, 복수의 SPA들 중 적어도 하나의 SPA는 복수의 프로그램 가능한 프로세서들 또는 스토리지 처리 엔진(storage processing engine; SPE)들을 포함하고, 복수의 SPE들은 n 개의 SPE들(n은 0보다 큰 자연수)을 포함하는 단계, 제 1 SPA 내의 복수의 SPE들을 인에이블 하되, 한번 인에이블 되는 경우, 적어도 하나의 SPE는 애플리케이션 기능 처리 정보에 기초하여 데이터를 처리하도록 구성되는 단계, APM에 의하여, 제 1 SPA 내의 복수의 SPE들 중에서 적어도 하나의 SPE에 의하여 데이터 처리가 완료되었는지를 결정하는 단계, 및 제 1 SPA의 복수의 SPE들에 의한 데이터 처리의 결과를 ASM에 전송하는 단계를 포함할 수 있다.

Description

SSD들 상에서의 가속된 데이터 처리를 위한 시스템 및 방법{SYSTEM AND METHOD FOR ACCELERATED DATA PROCESSING IN SSDs}
본 발명에 따른 실시 예들의 하나 혹은 그 이상의 관점들은 SSDs(Solid State Drives) 상에서의 가속된 데이터 처리를 위한 시스템 및 방법에 관한 것이다.
처리 및 분석을 위해 중앙 처리 장치(central processing unit; CPU)에 로우 데이터(raw data)를 이동시키는 것은 소비된 에너지의 양적인 면에서 비용이 많이 든다. 그것은 또한 네트워크 대역폭, CPU 사이클들, 및 CPU 메모리와 같은 자원들에 대한 부담을 증가시킨다. 이렇게 추가된 자원 요구사항은 높은 자본 비용(capital expense; CAPEX) 및 운용 비용(operational expense; OPEX) 지출을 초래한다. 따라서, 스토리지 장치(예컨대, SSD) 내에서 로우 데이터를 처리하는 것은 로우 데이터의 증가하는 양의 수익을 창출하는 데 필요한 데이터 분석 사용 사례들을 위한 비용 효율적인 해결책이다.
배경기술 목차에서의 상기 정보는 기술의 배경에 대한 이해를 높이기 위한 것일 뿐이므로, 종래 기술의 존재 또는 관련성의 인정으로 해석되어서는 안된다.
본 발명의 실시 예들은 SSD 상에서의 가속된 데이터 처리를 위한 시스템 및 방법을 제공할 수 있다.
본 단락들은 이하의 상세한 설명에서 더 설명되는 본 발명의 실시 예들의 특징들 및 개념들의 선택을 소개하기 위해 제공된다. 본 단락들은 청구된 발명들의 핵심 또는 필수적인 특징들을 식별하기 위한 것이 아니며 청구된 발명들의 범위를 제한하는 데 사용되지도 않는다. 설명된 특징들 중 하나 또는 그 이상은 작동 가능한 장치를 제공하기 위해 하나 또는 그 이상의 다른 설명된 특징들과 결합될 수 있다.
본 발명의 예시적인 실시 예들의 관점들은 SSD들 상에서의 가속된 데이터 처리를 위한 시스템 및 방법에 관련된 것이다.
일부 실시 예들에서, 호스트 장치로부터 스토리지 장치로의 애플리케이션 기능들의 오프로딩 및 가속화를 위한 방법은, 애플리케이션 서비스 관리자(application service manager; ASM)로부터 가속 플랫폼 관리자(acceleration platform manager; APM)에 애플리케이션 기능 처리 정보를 수신하는 단계, APM에 의하여, 복수의 스토리지 처리 가속기(storage processing accelerator; SPA)들로부터 제 1 SPA를 할당하되, 복수의 SPA들 중 적어도 하나의 SPA는 복수의 프로그램 가능한 프로세서들 또는 스토리지 처리 엔진(storage processing engine; SPE)들을 포함하고, 복수의 SPE들은 n 개의 SPE들(n은 0보다 큰 자연수)을 포함하는 단계, APM에 의하여, 제 1 SPA 내의 복수의 SPE들 중 적어도 하나의 SPE에 마이크로-코드를 다운로드하고 그리고 제 1 SPA 내의 복수의 SPE들을 인에이블 하되, 한번 인에이블 되는 경우, 적어도 하나의 SPE는 애플리케이션 기능 처리 정보에 기초하여 데이터를 처리하도록 구성되는 단계, APM에 의하여, 제 1 SPA 내의 복수의 SPE들 중에서 적어도 하나의 SPE에 의하여 데이터 처리가 완료되었는지를 결정하는 단계, 및 APM에 의하여, 제 1 SPA 내의 복수의 SPE들 중에서 적어도 하나의 SPE에 의하여 데이터 처리가 완료되었는지를 결정하는 단계에 기초하여 상기 제 1 SPA의 복수의 SPE들에 의한 데이터 처리의 결과를 ASM에 전송하는 단계를 포함할 수 있다.
일부 실시 예들에서, 상기 방법은, APM에 의하여, 애플리케이션 기능 처리 정보에 기초하여 데이터를 추출하는 단계, APM에 의하여, 제 1 SPA 내의 복수의 SPE들 중 적어도 하나의 SPE에서 ASM으로부터 수신된 하나 이상의 인수들을 프로그래밍 하는 단계, 및 APM에 의하여, 하나 이상의 데이터 이동 기술자들을 생성하고 프로그래밍 하는 단계를 더 포함할 수 있다. 상기 방법은 또한 호스트 프로세서에서, 적어도 하나의 애플리케이션 기능 호출을 인터셉트 하는 단계, 호스트 프로세서에서, 애플리케이션 기능 호출을 처리하기 위한 데이터의 소스, 애플리케이션 기능 호출의 처리의 유형, 애플리케이션 기능 호출을 위한 인수들, 및 데이터가 처리된 후의 결과들의 목적지 중 하나 이상을 포함하는 애플리케이션 기능 처리 정보를 수집하는 단계, 및 호스트 장치 소프트웨어 스택 내의 상기 ASM에서, 애플리케이션 기능 처리 정보를 수신하는 단계를 더 포함하되, 애플리케이션 기능 처리 정보를 수신하는 단계에 기초하여, ASM은: 애플리케이션 기능 처리를 위한 APM을 포함하는 프로세서를 선택하고, 프로세서에서의 데이터 처리를 스케쥴링 하고, 프로세서의 하나 이상의 버퍼들에 적절한 데이터를 로드 하기 위해 데이터 전송 DMA(direct memory access)를 초기화하고, 그리고 프로세서에 호출 트리거 및 상기 애플리케이션 기능 처리 정보를 전송하도록 구성될 수 있다.
일부 실시 예들에서, 복수의 SPA들 중 적어도 하나의 SPA는 입력 버퍼 또는 입력 스테이징 랜덤 액세스 메모리(input staging random-access memory; ISRAM) 및 출력 버퍼 또는 출력 스테이징 RAM(output staging RAM; OSRAM)을 포함할 수 있다. 일부 실시 예들에서, 적어도 하나의 SPE는 입력 데이터 버퍼(input data buffer; IDB)를 포함하되, 적어도 하나의 SPE는 적어도 하나의 SPE의 출력을 파이프 라인 내의 복수의 SPE들 중 다음 SPE의 IDB에 기입하도록 구성될 수 있다. 일부 실시 예들에서, IDB는 복수의 SPE들 중 두 개의 이웃하는 SPE들 사이에서 공유될 수 있다. 일부 실시 예들에서, n 개의 SPE들 중 적어도 하나의 SPE 상에서 실행되는 마이크로-코드는, 배치 지향 파이프 라인 된 데이터 처리에서 프로그래밍 방식으로 파이프 라인 내의 n 개의 SPE들 중 다음 SPE에 대한 배치 시작 및 배치 종료의 표시들을 생성하도록 구성될 수 있다. 일부 실시 예들에서, 데이터는 APM을 포함하는 프로세서에 연결된 하나 이상의 SSD(solid state drives)로부터 추출될 수 있다.
일부 실시 예들에서, n 개의 SPE들 중 제 1 내지 (n-1) SPE들은 SPE의 출력을 파이프 라인 내의 n 개의 SPE들 중 다음 SPE에 제공하여 다음 SPE의 입력으로서 이용되도록 구성될 수 있다. 일부 실시 예들에서, 일부 실시 예들에서, APM은 복수의 SPE 중 적어도 하나의 SPE를 통하여 하나 이상의 명령 RAM(instruction RAM; IRAM) 및 데이터 RAM(data RAM; DRAM)에 액세스하도록 구성될 수 있다. 일부 실시 예들에서, 적어도 하나의 SPE는 IRAM을 위한 제 1 버스와 DRAM을 위한 제 2 버스를 포함할 수 있다. 일부 실시 예들에서, DRAM은 스크래치 패드, 입력 데이터 버퍼(input data buffer; IDB), 출력 데이터 버퍼(output data buffer; ODB), 인수 RAM(argument RAM; RAM), 및 기타 RAM(miscellaneous RAM; MRAM)을 포함하되, 하나 이상의 프로그램 가능한 SPE 기능들은 MRAM에 기초하여 구성되고 그리고 적어도 하나의 SPE 상에서 포인터들로서 동작하는 마이크로-코드에 의해 프로그래밍 방식으로 액세스되도록 구성될 수 있다. 일부 실시 예들에서, 파이프 라인의 n 개의 SPE들 중 제 1 SPE의 IDB 판독 포인터, 및 파이프 라인의 n 개의 SPE들 중 제 1 SPE 이전의 제 2 SPE의 출력 데이터 버퍼(ODB) 기입 포인터를 이용하여 입력 데이터 버퍼 (IDB) 데이터 이용 가능 및 공간 이용 가능 상태가 생성되어 오버 플로우 또는 언더 플로우 없이 임의의 입도로 IDB를 공유할 수 있다. 일부 실시 예들에서, 복수의 SPA들은 ASM으로부터 수신된 데이터의 상이한 슬라이스들 상에서 병렬로 실행되도록 구성될 수 있다.
일부 실시 예들에서, 프로세서에 의해 애플리케이션 기능 처리 정보를 수신하는 단계, 프로세서에 의하여, 프로세서 내의 복수의 스토리지 처리 가속기들로부터 제 1 SPA를 할당하되, 복수의 SPA들 중 적어도 하나의 SPA는 복수의 프로그램 가능한 프로세서들 또는 스토리지 처리 엔진들을 포함하고, 상기 복수의 SPE들은 n 개의 SPE들(n은 0보다 큰 자연수)을 포함하는 단계, 프로세서에 의하여, 애플리케이션 기능 처리 정보에 기초하여 데이터 처리 동작을 실행하기 위해 제 1 SPA 내의 복수의 SPE들을 인에이블 하는 단계, 및 프로세서에 의하여, 데이터 처리 동작이 제 1 SPA 내의 복수의 SPE들 중 적어도 하나의 SPE에 의해 완료되었는지를 결정하는 단계를 포함할 수 있다.
일부 실시 예들에서, n 개의 SPE들 중 제 1 내지 (n-1) SPE들은 SPE의 출력을 파이프 라인 내의 n 개의 SPE들 중 다음 SPE에 제공하여 다음 SPE의 입력으로서 이용되도록 구성되고, 그리고 애플리케이션 기능 처리 정보 및 호출 트리거는 애플리케이션 서비스 관리자(application service manager; ASM)로부터 프로세서 내의 가속 플랫폼 관리자(acceleration platform manager; APM)에서 수신될 수 있다.
일부 실시 예들에서, 상기 방법은, 프로세서에 의하여, 제 1 SPA 내의 복수의 SPE들 중 적어도 하나의 SPE에 마이크로-코드를 다운로드 하는 단계, 프로세서에 의하여, 제 1 SPA 내의 복수의 SPE들 중 적어도 하나의 SPE 내의 하나 이상의 인수들을 프로그래밍 하는 단계, 프로세서에 의하여, 하나 이상의 데이터 이동 기술자들을 생성하고 프로그래밍 하는 단계, 프로세서에 의하여, 애플리케이션 기능 처리 정보에 기초한 데이터를 추출하되, 데이터는 프로세서에 연결된 하나 이상의 SSD(solid state drives)로부터 추출되는 단계, 프로세서에 의하여, 데이터 처리 동작이 제 1 SPA 내의 복수의 SPE들 중 적어도 하나의 SPE에 의해 완료되었는지를 결정하는 단계에 기초하여, 제 1 SPA의 복수의 SPE들에 의한 데이터 처리의 결과를 ASM에 전송하는 단계, 및 프로세서에 의하여, 제 1 SPA를 리셋 또는 디스에이블 하는 단계를 더 포함할 수 있다.
일부 실시 예들에서, 상기 방법은 호스트 프로세서에서, 적어도 하나의 애플리케이션 기능 호출을 인터셉트 하는 단계, 호스트 프로세서에서, 애플리케이션 기능을 처리하기 위한 데이터 소스, 처리 유형, 애플리케이션 기능 호출에 대한 인수들, 및 결과들의 목적지 중 하나 이상을 포함하는 애플리케이션 기능 처리 정보를 수집하는 단계, 및 호스트 장치 소프트웨어 스택 내의 ASM에서, 애플리케이션 기능 처리 정보를 수신하는 단계를 더 포함하되, 애플리케이션 기능 처리 정보를 수신하는 단계에 기초하여, ASM은: 애플리케이션 기능 처리를 위한 프로세서를 선택하고, 프로세서에서의 데이터 처리를 스케줄링 하고; 하나 이상의 프로세서 버퍼들에 적절한 데이터를 로드 하기 위해 데이터 전송 DMA(direct memory access)를 초기화하고, 그리고 프로세서에 호출 트리거 및 애플리케이션 기능 처리 정보를 전송하도록 구성될 수 있다.
일부 실시 예들에서, 복수의 SPA들 중 적어도 하나의 SPA는 입력 버퍼 또는 입력 스테이징 랜덤-액세스 메모리(input staging random-access memory; ISRAM) 및 출력 버퍼 또는 출력 스테이징 RAM(output staging RAM; OSRAM)을 포함하고, 적어도 하나의 SPE는 입력 데이터 버퍼(input data buffer; IDB)를 포함하고, 그리고 적어도 하나의 SPE는 적어도 하나의 SPE의 출력을 파이프 라인 내의 상기 복수의 SPE들 중 다음 SPE의 IDB에 기입하도록 구성될 수 있다.
일부 실시 예들에서, 호스트 장치로부터 스토리지 장치에 애플리케이션 기능들의 오프로딩 및 가속화를 위한 방법은, 프로세서에서, 제어기로부터, 애플리케이션 기능 처리 정보를 수신하는 단계, 프로세서에 의하여, 복수의 스토리지 처리 가속기들로부터 제 1 SPA를 선택하되, 복수의 SPA들 중 적어도 하나의 SPA가 복수의 프로그램 가능한 프로세서들 또는 스토리지 처리 엔진(storage processing engine; SPE)들을 포함하고, 그리고 복수의 SPE들은 n 개의 SPE들(n은 0보다 큰 자연수)을 포함하는 단계, 애플리케이션 기능 처리 정보에 따라 데이터 처리 동작을 실행하기 위해 제 1 SPA의 복수의 SPE들 중 적어도 하나의 SPE에 신호를 전송하는 단계, 프로세서에 의하여, 데이터 처리 동작이 제 1 SPA의 복수의 SPE들 중 적어도 하나의 SPE에 의해 완료되었는지를 결정하는 단계, 및 프로세서에 의하여, 데이터 처리 동작의 결과를 제어기에 전송하는 단계를 포함할 수 있다.
일부 실시 예들에서, n 개의 SPE들 중 제 1 내지 (n-1) SPE들은 SPE의 출력을 파이프 라인 내의 n 개의 SPE들 중 다음 SPE에 제공하여 다음 SPE의 입력으로서 이용되도록 구성되고, 그리고 애플리케이션 기능 처리 정보는 애플리케이션 기능 호출을 처리하기 위한 데이터의 소스, 애플리케이션 기능 호출의 처리의 유형, 애플리케이션 기능 호출을 위한 인수들, 및 데이터가 처리된 후의 결과들의 목적지 중 하나 이상을 포함할 수 있다.
본 발명에 따른 시스템 및 방법은 SSD 상에 유연성 및 개발의 용이성과 같은 CPU의 이점들과 성능 및 파워와 같은 하드웨어의 이점들을 결합할 수 있다.
본 발명의 몇몇 예시적인 실시 예들의 이들 및 다른 특징들은 명세서, 청구 범위, 및 첨부 도면들을 참조하여 인식되고 이해될 것이다:
도 1은 스토리지 가속 시스템의 다양한 구성요소들의 블록 다이어그램 대표도를 도시한다;
도 2a-2b는 스토리지 가속 하드웨어 플랫폼 장치의 세부적인 구성들을 도시한다;
도 3은 스토리지 처리 가속기(storage processing accelerator; SPA)의 세부족언 아키텍쳐를 도시한다.
도 4a는 브릿지 장치의 NVMe(non-volatile memory express) 또는 NVMe-oF(NVMe over fabric) 하드웨어 데이터 경로를 이용하는 SPA를 도시한다;
도 4b는 연결된 패브릭의 하이 레벨 아키텍쳐를 도시한다;
도 5a는 SPA 아키텍쳐의 블록도를 도시한다;
도 5b는 프로세서 엑세스 모듈(processor access module; PAM)의 블록도를 도시한다;
도 5c는 시스템 메모리 엑세스 모듈(system memory access module; SAM)의 블록도를 도시한다;
도 5d는 스토리지 처리 엔진(storage processing engine; SPE) 슬라이스의 세부적인 구성을 도시하는 블록도이다;
도 5e-5f는 두 개의 SPE 단계들을 위한 메모리 계층 및 두 개의 SPE 단계들 간의 데이터 공유를 도시한다;
도 6은 가속 플래폼 관리자(acceleration platform manager; APM)의 하이 레벨 동작을 도시하는 블록도이다;
도 7은 SPA 초기화의 방법을 도시하는 순서도이다;
도 8은 SPA 런타임 동작의 방법을 도시하는 순서도이다; 그리고
도 9는 그래프를 도시한다.
첨부된 도면과 관련되어 이하 제시되는 상세한 설명은 본 발명에 따라 제공되는 SSD들에서의 가속화된 데이터 처리를 위한 시스템 및 방법의 일부 예시적인 실시 예들을 설명할 의도이고 단지 본 발명이 구성될 수 있거나 이용될 수 있는 형태들을 나타내기 위한 의도는 아니다. 설명은 예시된 실시 예들과 관련하여 본 발명의 특징들을 제시한다. 그러나, 또한 본 발명의 사상 및 범위 내에 포함되도록 의도된 다른 실시 예들에 의해 동일하거나 동등한 기능들 및 구조들이 달성될 수 있음은 이해된다. 본 명세서의 다른 곳에서 나타낸 바와 같이, 동일한 참조 번호들은 동일한 구성요소들 또는 특징들을 나타내기 위한 것이다.
처리 및 분석을 위해 로우 데이터(raw data)를 중앙처리장치(central processing unit; PU)로 이동시키는 데는 소비되는 에너지의 양이 많다. 또한, 네트워크 대역폭, CPU 사이클들, 및 CPU 메모리와 같은 자원들의 부담을 증가시킨다. 이러한 추가적인 자원 요구 사항들은 높은 자본 비용(capital expense; CAPEX) 및 운용 비용(operational expense; OPEX) 지출을 초래한다. 따라서, 스토리지 장치(예컨대, SSD) 내에서 로우 데이터를 처리하는 것은 로우 데이터 증가량의 수익 창출화를 위해 필요한 데이터 분석 사용 사례들에 대한 비용 효율적인 해결책이다. 또한, 데이터 분석 작업들은 대용량 데이터를 읽고, 처리하고, 그리고 필터링 및 기타 축소 작업들을 통해 데이터를 감소시킨다. 이러한 작업들은 (1) 장치 내에서 사용 가능한 더 높은 대역폭을 활용하고, 그리고 (2) 오직 감소된 결과들만을 이동시킴으로써 SSD와 CPU 사이의 제한된 대역폭을 유지시키므로(즉, PCIe(Peripheral Component Interconnect Express) 인터페이스) in-SSD 가속에 가장 적합하다.
본 발명의 예시적인 실시 예들은 콤플렉스 애플리케이션 가속 사용 사례들을 위한 FPGA(Field Programmable Gate Array) 기반 하드웨어 플랫폼을 기술한다. 그러나, SPA는 SSD 제어기(예컨대, 도 1의 108) 장치, 또는 NVMe/NVMe-oF 브릿지 장치 또는 SSD 제어기 코-프로세서(co-processor) 장치 내부에서 구현될 수 있다. SSD 제어기 또는 NVMe/NVMe-oF 디바이스는 FPGA 또는 ASIC(Application Specific Integrated Circuit)을 사용하여 구현될 수 있다. SSD 제어기 코-프로세서 장치는 FPGA 또는 ASIC을 사용하여 구현될 수 있다.
단일 또는 특정 애플리케이션-특정 가속 하드웨어를 설계하는 대신, 본 발명의 예시적인 실시 예들은 더 큰 애플리케이션 집합을 충족할 수 있는 보다 범용적인 FPGA 아키텍쳐를 제공한다. FPGA 아키텍쳐는, 모든 클러스터들(예컨대, SPA)가 함께 결합되고 파이프 라인 된 프로세서 그룹을 포함하는 소수의 클러스터들(예컨대, 스토리지 처리 가속기들(storage processing accelerators; SPAs))에 정렬된 SPEs(Simple Programmable Processors)를 포함한다. 프로그래머블 프로세서를 FPGA 아키텍쳐에 통합하는 것은 아키텍쳐의 유연성을 증가시키고, 프로그래밍 작업을 크게 줄이고, 그리고 동일한 설계가 더 큰 애플리케이션 세트를 수용하게 한다. 예를 들어, 동일한 FPGA 아키텍쳐는 in-FPGA 프로그래머블 프로세서에서 실행되는 마이크로 코드만 다른 설계들로 서로 다른 파일 포맷들(예컨대, 파케이(parquet), 오크(orc) 등)의 처리를 가속하는 데 사용될 수 있다. 더욱이, 작은 가속기들은 특정 작업들(예컨대, 파케이를 위한 스내피(snappy) 압축 해제)을 위해 추가될 수 있고 그리고 클러스터 된 설계에 통합될 수 있다.
SPA 아키텍쳐 설계는 특정 목적들 및 목표들을 따른다. 첫 번째 목표는 스토리지에서 또는 그 근처에서 데이터 처리를 오프로드 하여 CPU 사이클들을 비우고 성능을 향상시키는 것이다. 두 번째 목적은 데이터 스토리지에 더 가까운 대형 데이터 세트들에서 필터, 제한, 결합, 집계 등과 같은 감소 연산을 수행함으로써 데이터 이동을 줄이는 것이다. CPU 상에 완화를 제공하는 것에 더하여 이러한 작업들을 오프로드 하는 것은호스트에 의해 판독되는 데이터의 사이즈를 크게 줄여 감소된 시스템 파워뿐만 아니라 스토리지, 메모리, 및 네트워크 대역폭의 감소된 요구 사항들을 가져온다. 마지막으로, SPA 아키텍쳐는 개발 및 출시 시간을 단축할 수 있도록 유연성과 프로그래밍 용이성을 제공해야 한다.
SPA 아키텍쳐는 파케이 SSD, 데이터베이스 애플리케이션 등과 같은 다양한 복잡하고 높은 수준의 사용 사례들을 위해 사용되도록 계획된다. 이러한 사용 사례들은 아래 유형들의 데이터 처리가 포함할 수 있다.
1) 필터, 제한, 결합, 및 집계를 포함하는 쿼리(query) 처리;
2) 포맷 변환, 파싱, 필터링, 분류, 및 해석들을 포함하는 텍스트 처리;
3) 산술 계산들, 계산들 공식화; 및
4) 데이터 변환들 및 패턴 검색과 같은 정규 표현들.
SPA 아키텍쳐가 애플리케이션 가속 사용 사례들을 인에이블 하기 위해서는, 다양한 데이터 포맷들(예컨대, 관계형 데이터베이스, 파케이, 오크 등) 또는 심지어 미지의 데이터 포맷들의 복잡한 데이터 처리를 다룰 수 있는 충분한 컴퓨팅 파워가 있어야 한다. 이러한 처리는 하드웨어 속도들에 가까운 속도들로 이루어져야 하므로 시스템의 성능 병목화가 되지 않고 그리고 설정된 파워 제약들 내에서 유지되어야 한다. 데이터 및 분석 생태계가 급속하게 증가함에 따라, 데이터 스토리지 애플리케이션들에 대한 새로운 사용 사례들이 빈번하게 제기되고 있다. SPA는 새로운 미래 사용 사례들 또는 기존 사용 사례들의 향상을 쉽고 효율적으로 지원하기에 충분히 유연해야 한다. 마지막으로, SPA 아키텍쳐는 비용 면에서 효과적이고 그리고 낮은 비용으로 더 높은 가속 성능을 제공하는 것이 중요하다.
도 1은 스토리지 가속 시스템(100)의 다양한 구성요소들을 나타내는 블록도이다.
스토리지 가속 시스템(100)에서, 애플리케이션 서비스 관리자(application service manager; SVM; 102) (예컨대, 제어기, 중앙처리장치, 호스트 프로세서 등)는 호스트 소프트웨어 스택(예컨대, 애플리케이션 스택, 스토리지 스택, flavorNVMe 드라이버)으로부터 가속 오케스트레이션(orchestration) 지원을 제공한다. 임베디드 프로세서 상에서 실행되는 가속 플랫폼 관리자(acceleration platform manager; APM; 104) 펌웨어는 장치 측으로부터 가속 오케스트레이션 지원을 제공한다. ASM 및 APM은 함께 다양한 가속 기능들, 가속 커널들, 및 런타임 동작을 SPA들 상에 오프로드 하는 것을 용이하게 한다. 하드웨어 플랫폼(예컨대, FPGA)은 SPA의 여러 사례들을 포함할 수 있다. 특정 하드웨어 플랫폼에서 사용될 수 있는 다양한 종류들과 유형들의 SPA가 있다.
도 2a 및 도 2b는 스토리지 가속 하드웨어 플랫폼 장치의 세부 사항들을 도시한다. 도 2a 및 도 2b의 장치에서, 다중 SPA들은 시스템 버스(예컨대, 도 3의 308)를 경유하여 서로 병렬로 연결되고 그리고 각 SPA 내의 다중 SPE들은 함께 연결되어 파이프라인 데이터 처리 및 변환을 가능하게 할 수 있으므로, SPA(예컨대, 도 2a에 도시된 SPA(202(1))) 내의 파이프라인 처리 및 다중 SPA들(예컨대, 도 2b에 도시된 202(1), 202(2), …, 202(n))을 경유하는 병렬 및 파이프라인 처리를 통해서 높은 데이터 처리 성능이 달성된다. SPA들(예컨대, 202(1), 202(2), …, 202(n))은 높은 정도로 사용자화(또는 사용자 정의)되어 매개 변수가 있는 하드웨어 자원들을 지원하고 그리고 서로 다른 기능을 제공하기 위해 프로그램 될 수 있다. 대부분의 데이터 집약적인 애플리케이션들의 경우와 같이 높은 수준의 데이터 병렬 처리 기능을 통해, SPA들은 서로 다른 데이터 스트림들에서 동일한 기능을 병렬로 수행할 수 있다. 더 많은 컴퓨팅 파워가 필요한 경우, 서로 다른 종류를 가진 SPA들을 연결하여 더 많은 파이프라인 처리를 제공할 수 있다. 도 2a 및 도 2b의 가속 스토리지 장치는, 작업 흐름(work flow)이 임베디드 오케스트레이터(embedded orchestrator) CPU(201)에 의해 효율적으로 관리된다.
도 3은 SPA(302)의 세부적인 아키텍쳐를 도시한다. SPA(302)는 도 2b에 도시된 SPA들(202(1), 202(2), …, 202(n)) 중 하나일 수 있다. SPA(302)는 매우 큰 데이터세트들의 효과적인 처리를 가능하게 하는 파이프라인 데이터 처리 아키텍쳐이다. 각 SPA(예컨대, SPA(302))는 함께 연결되어 그리고 파이프라인 데이터 처리 및 변환을 가능하게 하는 하나 이상의 스토리지 처리 엔진들(SPE들; 예컨대, 304(1), 304(2), …, 304(n))을 포함할 수 있다.
다양한 종류의 SPE들이 있다. 따라서 SPE 인터페이스들과 프로그래밍 모델은 템플릿으로 설계된다. 상이한 마이크로-코드 엔진들(micro-code engines) 뿐만 아니라 경량 코어들이 SPE를 생성하기 위해 사용될 수 있다. 또한 여러 SPA에서 뿐만 아니라 단일 SPA에서도 공존할 수 있는 서로 다른 SPA종류를 가질 수 있다. 다음 종류들의 SPE들이 현재 고려된다: 1) 마이크로블레이즈(MicroBlaze) 기반, 2) RISC(reduced instruction set computer)-V 기반과 같은 경량 CPU 코어, 3) 사용자 정의 명령어 집합 구조(instruction set architecture; ISA) 기반의 마이크로 코드 엔진(micro code engines; MCE) 또는 마이크로 시퀀셔(Micro Sequencer).
각 SPE(예컨대, 304(1), 304(2), …, 304(n))는 전용 입력 버퍼(예컨대, 312(1), 312(2), …, 312(n)), 및 출력 인터페이스를 포함한다. SPE(예컨대, 304(1), 304(2), …, 304(n))는 다음 SPE(예컨대, 304(1), 304(2), …, 304(n))의 입력 버퍼(예컨대, 312(1), 312(2), …, 312(n))에 출력들 또는 중간 결과들을 기입할 수 있다. SPA(예컨대, 302)의 서로 다른 구성들은 상이한 양의 하드웨어 자원들을 포함할 수 있다. 즉, 상이한 수의 SPE들(예컨대, 304(1), 304(2), …, 304(n)) 이 SPA(예컨대, 302) 대상들의 특정 기능에 따라 상이한 SPA(예컨대, 302) 구성들에 공급될 수 있다. SPE들(예컨대, 304(1), 304(2), …, 304(n)) 출력들은 시스템 버스(308) 상에 존재하는 출력 버퍼에 다중화된다(예컨대, 멀티플렉서(306)에서). 각 SPA(예컨대, 302)는 또한 시스템 버스(308)에 접근 가능한 입력 버퍼(316; 예컨대, 입력 스테이징 랜덤 엑세스 메모리(input staging random-access memory; ISRAM))를 포함한다. 각 SPA(예컨대, 302)로부터 출력되는 또는 각 SPA(예컨대, 302)에 입력되는 기본 데이터 흐름은 외부 다이렉트 메모리 엑세스(external direct memory access; DMA) 엔진(예컨대, 도 2b의 206)이 데이터를 SPA 입력 버퍼(316, 예컨대, ISRAM)에 전송하는 것이다. 그런 다음, SPA(예컨대, 302)내의 SPE들(예컨대, 304(1), 304(2), …, 304(n))은 일련의 데이터 처리 및 변환 단계들을 수행하고, 그리고 최종적으로 그 결과들은 출력 버퍼(318; 예컨대, 출력 스테이징 RAM(output staging RAM; OSRAM))에 저장된다. 그 시점에서, DMA 엔진(예컨대, 도 2b의 206)은 SPA 외부의 메모리 버퍼(310)에 그 결과들을 전송할 수 있다. DMA 엔진(예컨대, 도 2b의 206)이 SPA(예컨대, 202(1))의 출력 버퍼(318; 예컨대, OSRAM)로부터 또 다른 SPA(예컨대, 202(2))의 입력 버퍼(316; ISRAM)에 데이터를 이동시키는 것이 가능할 수 있다. 따라서, SPA 아키텍쳐는, 특정 애플리케이션들에 대해 필요하다면, 다중 SPA들(예컨대, 도 2b에 도시된 202(1), 202(2), …, 202(n))의 파이프라이닝(pipelining) 을 가능하게 할 수 있다. 통상적으로, SPA들(예컨대, 도 2b에 도시된 202(1), 202(2), …, 202(n))은 데이터의 상이한 슬라이스 상에서 병렬로 실행되도록 구성된다. SPA(에컨대, 302) 내의 모든 SPE들(예컨대, 304(1), 304(2), …, 304(n))은 임베디드 프로세서에 접근 가능한 구성 모듈(314)을 통해 구성된다. 임베디드 프로세서상에서 실행되는 APM 펌웨어는 SPA 및 SPE 관리를 수행한다. 펌웨어는 필요에 따라 SPE들(예컨대, 304(1), 304(2), …, 304(n))에 적절한 마이크로-코드를 로드 한다. 각 SPA(예컨대, 302)는 또한, 원할 경우, SPE(예컨대, 304(1), 304(2), …, 304(n))에 DDR(double data rate) 메모리 엑세스를 제공하는 시스템 메모리 엑세스 모듈(system access memory module; SAM)을 포함한다.
스토리지 장치(예컨대, FPGA + SSD) 가까이서 또는 스토리지 장치 내부에서의 처리 데이터는 애플리케이션들에 더 낮은 응답 레이턴시를 제공한다. 이는 또한 프로세서(예컨대, 호스트 프로세서)에 대용량 데이터 세트들을 이동시키는 데 필요한 에너지의 양을 크게 아낄 수 있다. 이와 더불어, 이는 분배형 컴퓨팅 또는 달리 말하자면 특정 애플리케이션 기능들의 오프로딩 및 가속을 가능하게 한다. 스토리지 시스템(예컨대, FPGA + SSD)으로부터 호스트 프로세서로의 많은 수의 데이터 이동에 의존하는 애플리케이션 기능들이 가장 큰 이점을 가진다. 스토리지 장치(예컨대, FPGA + SSD)에 이러한 애플리케이션 기능들을 오프 로딩하면 필요한 컴퓨팅 자원들이 최소화되므로 컴퓨팅 사이클, 메모리, 네트워크 대역폭 및, 소비되는 에너지를 포함하는 정보 기술(information technology; IT) 인프라의 비용을 절감시킨다.
스토리지 오프로드 및 가속을 위해 선택된 애플리케이션 기능들이 먼저 호스트 상에 인터셉트 된다. 그러한 인터셉트가 될 수 있는 여러 방식들과 포인트들이 있다. 일단 애플리케이션 기능 호출이 인터셉트 되면, 해당 호출을 처리하는 데 필요한 관련 정보가 수집된다. 일반적으로 이러한 정보는 데이터의 소스, 처리의 타입, 및 결과들의 목적지를 포함한다.
일단 이러한 애플리케이션 기능 호출 처리 정보가 수집되면, 오프로딩과 가속 처리를 관리하는 호스트 측 소프트웨어 계층(예컨대, 도 1에 도시된 애플리케이션 스택, 스토리지 스택, NVMe 드라이버)으로 전달된다. 이 호스트 소프트웨어 계층은 존재하고 이용 가능한 가속 능력들, 가속 플랫폼과 상호 작용하는 방법뿐만 아니라 오프 로드 된 기능들의 런-타임 상태를 추적하는 방법들을 인식한다. ASM(예컨대, 도 1의 ASM(102))이 애플리케이션 오프로드 처리 정보를 수신하면, 사용되는 가속 플랫폼을 선택하고 프로세싱을 스케줄링 한다. 이는 적절한 데이터를 가속 플랫폼 버퍼들에 로드 하는데 필요한 데이터 전송 DMA들(예컨대, 도 2b의 206)을 개시한다 이는 그런 다음 가속 호출 트리거와 정보를 가속 플랫폼에 전송한다. APM(예컨대, 도 1의 APM(104))는 가속 플랫폼 상에 존재하는 ASM의 피어(peer)이고 그리고 ASM 통신에 응답한다. ASM(예컨대, 도 1의 ASM(102))과 APM(예컨대, 도 1의 APM(104)) 간의 통신은 수많은 다른 방식들에 의해 구현될 수 있다.
가속 플랫폼 상에서 실행되는 APM(예컨대, 도 1의 104) 펌웨어는 스토리지 장치(예컨대, SSD) 측 애플리케이션 기능에 의해 사용되는 일련의 서비스들을 제공한다. 스토리지 장치(예컨대, SSD) 또는 플랫폼 측 애플리케이션 펌웨어는 주로 2개의 동작 영역들을 가진다; a) 가속 엔진(예를 들어, SPA들(예컨대, 도 2b에 도시된 202(1), 202(2), …, 202(n)))의 초기화, b) 실행시간(또는 런타임(run-time)) 구성 및 SPA들(예컨대, 도 2b에 도시된 202(1), 202(2), …, 202(n))의 모니터링. 애플리케이션 펌웨어는 플랫폼 상에서 그것의 가속화 기능을 구현하고 관리하기 위해 APM(예컨대, 도 1의 104) 서비스들을 사용한다.
초기화 단계 동안, 애플리케이션 펌웨어는 그 사용을 위해 할당된 적절한 SPA들(예컨대, 도 2b에 도시된 202(1), 202(2), …, 202(n))을 얻는다. 일단 SPA(예컨대, 도 3에 도시된 302)의 핸들(들)을 얻으면, SPA(예컨대, 도 3에 도시된 302)의 SPE들(예컨대, 304(1), 304(2), …, 304(n))에 적절한 마이크로-코드를 로드 한다. 또한 필요에 따라 SPA(예컨대, 도 3에 도시된 302)의 다른 기능들을 구성한다.
런타임 동안, 오프로드 된 애플리케이션이 호스트 소프트웨어에 의해 호출되는 경우, 그것은 기능 호출에 관련된 관련 변수들을 수신한다. 좀 더 구체적으로, 장치 측 애플리케이션은 처리될 데이터의 소스, 호출을 위한 인수들, 및 결과들의 목적지에 관련되는 정보를 수신한다. 애플리케이션 펌웨어(예컨대, APM(예를 들어, 도 1의 APM(104))을 이용하여)는 SPA(예컨대, 도 3의 302)의 SPE들(예컨대, 304(1), 304(2), …, 304(n))에 임의의 필요한 인수들을 프로그램 한다. 그것은 APM(예컨대, 도 1의 APM(104))에 입력 데이터 및 결과 DMA(예컨대, 도 2b의 206) 명령어들을 전송한다. 앞서 언급한대로, ASM(예컨대, 도 1의 ASM(102))은 스토리지 장치 버퍼들에 입력 데이터를 전달한다. 이들 버퍼들은 입력 스테이징 랜덤 엑세스 메모리(input staging random-access memory; ISRAM; 예컨대, 도 5a에 도시된 508)로 지칭된다. 애플리케이션 펌웨어는 버퍼 관리자(예컨대, 도 4a에 도시된 406) 내의 적절한 DMA 채널들에 DMA 디스크립터들을 기입한다. DMA 디스크립터는 ISRAM(예컨대, 도 3의 316)으로 지칭되는 적절한 SPA 입력 버퍼들에 SSD 제어기로부터 수신된 데이터를 이동시키는 것과 관련된 정보를 제공한다. 애플리케이션 펌웨어는 또한 OSRAM(예컨대, 도 3의 318) 메모리로부터 스토리지 장치 버퍼들로 SPA 처리 결과들을 이동시키기 위해 또 다른 DMA 채널을 프로그램 한다. 일단 DMA들(예컨대, 도 2b의 206)이 프로그램 되면, 애플리케이션 펌웨어는 SPE들(예컨대, 304(1), 304(2), …, 304(n))을 리셋에서 제거한다. 그 시점에 SPE들(예컨대, 304(1), 304(2), …, 304(n))은 요청된 데이터를 처리하기 시작하고 그리고 의도된 결과들을 생산한다. 일단 프로세싱이 끝나면, 애플리케이션 펌웨어(예컨대, APM(예를 들어, 도 1의 APM(104))을 이용하여)는 호스트 측 애플리케이션 구성 요소로 결과들을 되돌려 전송한다.
프로세싱을 위해 선택된 SPA(예컨대, SPA(302)) 내의 제 1 SPE(예컨대, SPE(304(1))는 입력 데이터의 도착을 계속 모니터링 한다. 일단 충분한 입력 데이터가 입력 데이터 버퍼(input data buffer; IDB; 예컨대, 312(1))에서 감지되면, 제 1 SPE(예컨대, SPE(304(1))는 프로세싱을 시작한다. 그것은 IDB(예컨대, 312(1))로부터 데이터를 판독하고, 그것을 처리하고, 그런 다음 스테이지(예컨대, 304(2))의 IDB(예컨대, 312(2))에 적절한 중간 결과들을 기입한다. 일단 데이터의 배치(batch)가 제 1 SPE(예컨대, SPE(304(1)))에 의해 완전히 처리되면, 그것은 트리거를 제 2 SPE(예컨대, 304(2))에 전송한다. 그 시점에 제 2 SPE(예컨대, 304(2))는 그것의 IBD(예컨대, 312(2)) 내의 데이터를 처리하기 시작한다. 그리고 프로세스는 연속된 SPE들(예컨대, 304(3), …, 304(n))을 따라 진행된다.
모든 요청된 데이터가 SPE(예컨대, 304(1))에 의해 처리되면, “완료(done)” 상태를 설정한다. 애플리케이션 펌웨어는 프로세싱의 완료를 위해 모든 SPE들(예컨대, 304(1), 304(2), …, 304(n))을 모니터링 할 수 있다. 일단 결과들이 이용 가능하고 SPA(예컨대, 302)의 밖으로 이동되면, 애플리케이션 펌웨어는 SPA(예컨대, 302)를 불활성화시킬 수 있다.
도 4a는 브릿지 장치의 NVMe(non-volatile memory express) 또는 NVMe-oF(NVMe over fabric) 하드웨어 데이터 경로를 이용하는 SPA를 도시한다. 몇몇 실시 예들에서, NVMe/ NVMe-oF 하드웨어 데이터 경로가 세 개의 포트 스위치 또는 브릿지 로직을 이용하는 것이 가능할 수 있다. 다른 가능한 SPA 구현들은 1) SSD 제어기에 집적되거나, 2) FPGA 또는 ASIC을 이용하는 SSD 제어기 코-프로세서 장치들이거나, 또는 3) NVMe-to-NVMe 또는 NVMe-oF-to- NVMe 브릿지일 수 있다.
도 4a의 SPA 구현에서, SPA 서브-시스템(402)은 SPA들(404(1), …, 404(n))을 포함할 수 있다. SPA들(404(1), …, 404(n))은 도 2b에 도시된 SPA들(202(1), …, 202(n))과 실질적으로 동일할 수 있다.
SPA 서브-시스템(402)의 버퍼 관리자(buffer manager; BM) 모듈(406)은 SSD 제어기(예컨대, 도 2a 및 도 2b의 204)로부터 데이터를 수신하기 위해 온-칩 버퍼들의 세트를 구현한다. 버퍼 관리자 모듈(406)은 외부 DRAM(dynamic random-access memory; 414) 내 버퍼들의 더 큰 세트로 지원되는 온-칩 버퍼들의 세트를 유지한다. 버퍼 관리자 모듈(406)은 SSD 제어기(예컨대, 도 2a 및 도 2b의 204)로부터 데이터를 수신하고 그리고 프리 온-칩 버퍼(free on-chip buffer)에 저장하고, 온-칩 버퍼 오버플로우들의 경우에 인터페이스(412; 예컨대, AXI(advanced extensible interface) 마스터 인터페이스)를 통하여 외부 DRAM(414)에 엑세스 하고, SPA 서브-시스템(402)에 또는 SPA 서브-시스템(402)로부터 ISRAM 또는 OSRAM에 데이터를 이동시키기 위해 DMA 채널들을 이용하고, DMA 디스크립터들(descriptors) 및 다른 구성들을 수신하기 위해 PAM(processor access modul) 인터페이스를 이용한다. 버퍼 관리자 모듈(406)은 또한 NVMe/NVMe-oF 하드웨어 데이터 경로(408)로부터 데이터를 수신하고 그리고 온-칩 또는 오프-칩 버퍼에 그 데이터를 저장한다. 일부 실시 예들에서, 버퍼 관리자 모듈(406)은 캐시로서 온-칩 버퍼들을 이용할 수 있고 그리고 버퍼 관리, 할당, 할당 해제 또는 할당 취소 등을 제공할 수 있다. 버퍼 관리자 모듈(406)은, 직접적으로 또는 온-칩 스위치를 경유하여, 오버플로우 버퍼들을 위한 DRAM에 인터페이스를 제공하고 그리고 구성을 위한 PAM(예컨대, 도 5a의 512)에 인터페이스, 및 데이터 전송을 위한 SSD 제어기(예컨대, 도 2a 및 도 2b의 204)에 인터페이스를 제공한다.
아래 다이어그램(표 1)은 DMA 디스크립터 포맷의 일 예를 도시한다. 임의의 주어진 시간에, 액티브이거나 아웃스탠딩 인 여러 디스크립터들이 있을 수 있다.
아래 표(표 2)는 디스크립터 필드들의 설명을 제공한다.
필드 사이즈 (비트) 설명
DSCPTR-ID 16 DMA 디스크립터 식별자. 최대 64K 아웃스탠딩 디스크립터들
타입 8 0: 예약됨1: DRAM to SPA
2: SPA to DRAM
3: SPA to SPA
4: DRAM to DRAM
길이 32 바이트로 표현된 전송 길이, 최대 길이 4 GB-1.
소스어드레스 64 소스 어드레스. 타입에 기초하여, DRAM 어드레스이거나 or SPA-ID일 수 있음.
목적지어드레스 64 목적지 어드레스. 타입에 기초하여, DRAM 어드레스이거나 or SPA-ID일 수 있음.
버퍼 관리자(406)은 각각의 DMA 디스크립터에 대한 완료 상태를 제공한다. 완료 상태는 APM(예컨대, 도 1의 APM(104)) 펌웨어가 그것을 디스크립터 요청에 다시 묶을 수 있도록 대응하는 디스크립터 ID(DSCPTR-ID)를 포함한다.아래의 포맷들(표 3 및 표 4)은 DMA 디스크립터 완료 상태에 사용되는 일 예이다.
필드 사이즈(비트) 설명
DSCPTR-ID 16 DMA 디스크립터 식별자. 최대 64K 아웃스탠딩 디스크립터들
상태 8 0: 성공적인 실행1: 실행 동안의 에러
도 4는 도 4a의 연결된 패브릭(410)의 고 레벨 아키텍쳐(high level architecture)를 도시한다. 연결된 패브릭 모듈(410)은 SPA들의 세트, 스내피 디컴프레셔(decompressor)와 같은 특별한 SPA들의 세트, 및 버퍼 관리자(406) 또는 DMA 엔진 사이의 데이터 이동 또는 연결성을 구현한다. 연결된 패브릭 모듈(410)이 원활한 데이터 이동들을 할 수 있게 수행하는 세가지 기능들이 있다: 1) 버퍼 관리자(406) 또는 DMA 엔진에 이용 가능한 데이터 또는 이용 가능한 공간 상태를 제공하고, 2), SPA들(404(1), …, 404(n))에 데이터를 기입하기 위해 버퍼 관리자(406) 또는 DMA 엔진을 위한 인터페이스를 제공하거나 데이터-입력 인터페이스를 제공하고, 그리고 3) SPA들(404(1), …, 404(n))로부터 데이터를 판독하기 위해 버퍼 관리자(406) 또는 DMA 엔진을 위한 인터페이스를 제공하거나 데이터-출력 인터페이스를 제공한다.아래 표(표 5)는 전술된 인터페이스들의 신호들을 나열한다.
신호 극성 설명
1. 이용 가능한 데이터/공간
data_ave 32 SPA ID 당, OSRAM에서 이용 가능한 바이트들의 수
space_ave 32 SPA ID 당, ISRAM에서 이용 가능한 공간의 워드들의 수
2. 데이터-입력
data_in 64 BM/DE로부터 SPA로 데이터를 기입
data_in_valid# 액티브 하이 SPA ID 당
data_in_last 액티브 하이
3. 데이터-출력
data_out_req# 액티브 하이 BM/DE에서 SPA까지, SPA ID 당
data_out_size 32 바이트들의 수
data_out 64 어드레스된 SPA에서 BM/DE까지
data_out_valid 액티브 하이
data_out_last 액티브 하이
NVMe/NVMe-oF 하드웨어 데이터 경로 모듈(408)은 호스트가 SSD 제어기(예컨대, 도 2a 및 도 2b의 204)와 상호 작용할 NVMe 패스-스루(pass-through) 경로를 구현한다. 호스트는 NVMe/NVMe-oF 하드웨어 데이터 경로 모듈(408)을 통해 데이터 기록 및 판독 동작을 수행한다. NVMe/NVMe-oF 하드웨어 데이터 경로 모듈(408)은 또한 SPA(예컨대, 도 2a의 202(1) 또는 도 4a의 404(1), …, 404(n))를 사용하여 더 처리하기 위해 SSD 제어기(예컨대, 도 2a 및 도 2b의 204)로부터 피어-투-피어(peer-to-peer) 데이터를 캡쳐링 하기 위한 인터페이스를 지원한다. NVMe/NVMe-oF 하드웨어 데이터 경로 모듈(408)은 어드레스 범위 필터 기능을 구현한다. 프로그램된 어드레스 범위는 SPA(예컨대, 도 2a의 202(1) 또는 도 4a의 404(1), …, 404(n))에 의한 처리를 위해 SSD 제어기(예컨대, 도 2a 및 도 2b의 204)로부터 데이터를 패치(fetch)하도록 호스트에 의해 사용된다. 호스트는 또한 SSD 제어기(예컨대, 도 2a 및 도 2b의 204)에 SPA(예컨대, 도 2a의 202(1), 202(2), …, 202(n) 또는 도 4a의 404(1), …, 404(n)) 결과들을 다시 저장할 수 있다. 그러한 기능을 위해, 호스트는 NVMe/NVMe-oF 하드웨어 데이터 경로 모듈(408)에 프로그램된 필터 어드레스 범위에 속하는 소스 어드레스를 갖는 NVMe 기록 명령들을 전송할 것이다.
SPA들(도 4a 및 도 4b에 도시된 404(1), …, 404(n))의 각 SPA는 그것의 자체 어드레스 맵을 가지고 있다. 기본적으로 2 개의 개별적인 레지스터의 세트들이 있다: a) SPA에 대한 전역적(global), b) SPE 특정적(specific). SPA에 있는 SPE들의 수에 따라 SPE 레지스터들에는 많은 카피들(copies)이 있다. 전역적 구성 외에도, 상태 레지스터들, SPA 어드레스 맵은 또한 데이터 스테이징 RAMS, ISRAMS, 및 OSRAM을 포함한다. 아래 표(표 6)은 각 SPA의 일 예시적인 어드레스 맵 및 내용들을 도시한다.
offset-32-bit Reg # R/W 이름 내용
0x0000_0000 0 RO Version
0x0000_0008 1 RO DBG 디버그
0x0000_0018 3 RO Status
0x0000_0020 4 RW Control
0x0000_0028 5 RW RESET_SPE 액티브 로우, 비트 마스크, SPE 당
0x0000_0030 6 RO BUSY_SPE 액티브 하이, 비트 마스크, SPE 당
0x0000_0038 7 RO DONE_SPE 액티브 하이, 비트 마스크, SPE 당
0x0000_0040 8 RO TB_AVE_SPE 이용 가능한트레이스 버퍼, 비트 마스크, SPE 당
0x0000_0048 9 RO SPA_ISRAM_SPACE_AVE 워드들의 개수, 디버그 목적
0x0000_0050 10 RO SPA_OSRAM_DATA_AVE 워드들의 개수, 디버그 목적
0x0000_0058 11 RO DMEM_ERROR 데이터 메모리 어드레싱 에러, 감지된 범위 밖의 어드레스
0x0010_0000 RW SPE0_IRAM 명령어 메모리
0x0020_0000 RW SPE0_SP 데이터 메모리
0x0030_0000 RW SPE0_ARAM 인수 메모리
0x0040_0000 RO SPE0_TB 트레이스 버퍼
0x0040_0008 RO SPE0_IDB_DATA_AVE 워드들의 개수
0x0040_0010 RO SPE0_ODB_SPACE_AVE 다음 IDB, 워드들의 개수
0x0110_0000 RW SPE1_IRAM 인수 메모리
0x0120_0000 RW SPE1_SP 데이터 메모리
0x0130_0000 RW SPE1_ARAM 인수 메모리
0x0140_0000 RO SPE1_TB 트레이스 버퍼
0x0140_0008 RO SPE1_IDB_DATA_AVE 워드들의 개수
0x0140_0010 RO SPE1_ODB_SPACE_AVE 다음 IDB, 워드들의 개수
0x0210_0000 RW SPE2_IRAM 명령어 메모리
0x0220_0000 RW SPE2_SP 데이터 메모리
0x0230_0000 RW SPE2_ARAM 인수 메모리
0x0240_0000 RO SPE2_TB 트레이스 메모리
0x0240_0008 RO SPE2_IDB_DATA_AVE 워드들의 개수
0x0240_0010 RO SPE2_ODB_SPACE_AVE 다음 IDB, 워드들의 개수
도 5a는 SPA 아키텍쳐(500)의 블록도를 도시한다. SPA(500)는 SPE 슬라이스들(504(0), 504(1))의 세트, ISRAM(508), OSRAM(510), PAM(512), 및 SAM(514)를 포함한다.
도 5a에 도시된 바와 같이, SPE들 또는 SPE 슬라이스들(504(0), 504(1))은 파이프라인 데이터 처리 및 변환을 가능하게 하기 위해 함께 연결된다. 주어진 SPA 설계에는 N 개의 SPE 슬라이스들이 있을 수 있다. 애플리케이션에 따라, 모든 SPE 슬라이스들이 사용되지 않을 수 있다. SPE(예컨대, SPE 슬라이스들(504(0), 504(1)) 출력들은 시스템 버스 상에 존재하는 출력 버퍼 또는 OSRAM(510)에 다중화된다(예컨대, 멀티플렉서(506)에서). 멀티플렉서(506)는 데이터 처리를 위해 SPE 슬라이스들을 선택할 수 있다. 멀티플렉서(506)는, APM이 SPE 관리를 수행하는 바와 같이, 임베디드 프로세서 상에서 실행되는 펌웨어(예컨대, APM)으로부터 수신된 명령어들에 기초하여 마지막 SPE 슬라이스(예컨대, SPE 슬라이스들(504(0), 504(1)))로부터의 출력을 선택할 수 있다. 예를 들어, 멀티플렉서(506)는 파이프라인의 마지막 슬라이스를 선택한다. SPA의 모든 슬라이스들은 주어진 애플리케이션에서 사용되지 않을 수 있으며, 따라서 출력을 위한 마지막 슬라이스를 선택한다.
ISRAM(508)은 SPA(500)에 의한 처리를 위해 데이터를 저장하도록 버퍼 관리자(예컨대, 버퍼 관리자(406))에 의해 사용된다. 데이터는 SSD 제어기로부터 패치되고 그리고 버퍼 관리자(예컨대, 버퍼 관리자(460))에 의해 특정 SPA(500 또는 404(1))에 전달된다. ISRAM(508)에 이용 가능한 자유 공간의 양은 SPA(500) 레지스터에 표시된다. 자유 공간 정보는 흐름 제어 목적들을 위해 버퍼 관리자(예컨대, 버퍼 관리자(406))에 의해 사용된다.
OSRAM(510)은 온-칩 버퍼 또는 외부 DRAM(예컨대, 410) 내의 그것의 목적지에 SPA(500) 처리 결과들을 이동시키기 위해 버퍼 관리자(예컨대, 버퍼 관리자(406))에 의해 사용된다. 밖으로 이동시키기 위해 이용 가능한 데이터의 양은 SPA 레지스터에 표시된다.
PAM(512)은 임베디드 프로세서 상에서 실행되는 펌웨어에 SPA 구성 엑세스를 제공한다. 임베디드 프로세서 상에서 실행되는 펌웨어 APM은 SPA 및 SPE 관리를 수행한다. PAM(512)는 SPA의 어드레스 맵을 구현한다. 그것은 임베디드 프로세서에 의해 SPA 또는 이와 같은 모듈을 구성, 제어, 및 모니터링 하기 위해 사용되는 AXI 슬레이브 인터페이스를 본질적으로 구현한다. 도 5b는 PAM(512)의 블록도를 도시한다. 도 5b에서, PAM(512) 모듈은 APM으로부터 판독/기입 트랜잭션들을 수신하기 위해 판독 및 기입 상태 기계(state machine)를 구현한다. 그것은 그런 다음 트랜잭션 어드레스를 디코드 하고 그리고 SPA 전역 레지스터들 또는 특정 SPE에 요청된 판독 또는 기입 작업을 수행한다.
SAM(514)은 외부 DRAM(예커대, 410)에 엑세스하기 위해 SPA(예컨대, 500)의 모든 SPE들(예컨대, 504(0), 504(1))를 위한 AXI 마스터 인터페이스를 제공한다. SPA(예컨대, 500)의 모든 SPE들(예컨대, 504(0), 504(1))은 긴밀하게 연결된 고성능 데이터 및 명령어 메모리들을 가진다. 드문 경우들이지만, 특정 사용 사례에서 온-칩 메모리들보다 더 큰 명령어 및/또는 데이터 메모리들이 필요한 경우, SPE들(예컨대, 504(0), 504(1))이 이 인터페이스를 사용할 수 있다. SAM(514)은 DRAM(예컨대, 410) 액세스를 제공하기 위해 SPA(예컨대, 500) 내부의 SPE(예컨대, 504(0), 504(1))의 중재를 수행한다. 도 5c는 SAM(514)의 블록도를 도시한다. 도 5c에서, SAM(514) 모듈은 DRAM 메모리에 대한 판독 또는 기입 동작을 수행하기 위해 판독 및 기입 상태 기계를 구현한다. 그것은 기입 데이터 FIFO를 통해 SPE들로부터 기입 데이터를 수신하고 그런 다음 특정 어드레스의 DRAM 메모리에 그 데이터를 저장한다. 읽기 요청의 경우, 그것은 특정 어드레스의 DRAM으로부터 데이터를 패치하고 그리고 SPE들이 판독할 수 있도록 판독 데이터 FIFO에 데이터를 저장한다.
도 5d는 SPE 슬라이스(504(0) 또는 504(1))의 세부 정보를 도시하는 블록도이다. 도 5e 및 도 5f는 두 개의 SPE 스테이지들(SPE(n) 및 SPE(n+1))에 대한 메모리 계층도와 체인 방식으로 연결된 두 개의 SPE 스테이지들(SPE(n) 및 SPE(n+1)) 간의 데이터 공유를 도시한다.
각 SPE는 명령어 메모리 또는 명령어 RAM(Instruction RAM; IRAM), 및 데이터 메모리 또는 DRAM을 위해 개별적인 버스들을 가진다. 데이터 메모리 또는 DRAM은 표 7에 표시된 바와 같이 아래 다섯 개의 주된 그룹들로 분할된다.
영역 설명
스크래치 패드(Scratch Pad) 작은 변수들
입력 데이터 버퍼(Input Data Buffer; IDB) 처리될 데이터
출력 데이터 버퍼(Output Data Buffer; ODB) 중간 또는 최종 결과들
인수 메모리 또는 ARAM(Arguments Memory or Arguments RAM (ARAM)) 펌웨어로부터의 인수들
기타 메모리 또는 MRAM(Miscellaneous Memory or Miscellaneous RAM (MRAM)) 다양한 버퍼 상태, 디버그, 트레이스 등
APM을 통합한 오케스트레이터 또는 임베디드 프로세서(530)는 필요한 경우 모든 상기 메모리들(예컨대, IRAM, IDB, ODB, ARAM, MRAM)에 접근할 수 있다. 몇몇 실시 예들에 있어서, IRAM 및/또는 스크래치 패드 크기 또는 위치는 컴파일 시점에서 마이크로-코드(SPE들 내의)로 알려져 있다. ARAM, MRAM, IDB, ODB, 또는 오프-칩(Off-chip) DDR 메모리는 어드레스 포인터들로 잘 알려진 SPE들에 의해 엑세스된다.
도 5d 및 도 5e에서, SPE PAM_IF 인터페이스(512)는 IRAM(518)에 SPE 마이크로-코드를 다운로드 하기 위해 애플리케이션 펌웨어에 의해 사용된다. 그것은 또한 인수들 공간 또는 ARAM(524), 디버그 레지스터들, 및 펌웨어에 엑세스 가능한 SPE의 상태와 같은 다른 데이터 메모리 또는 DRAM 영역에 엑세스 하기 위해 사용된다. SPE IDB_WRITE(입력) 기능은 제 1 SPE 슬라이스(예컨대, 504(0))의 IDB(예컨대, 520)에 입력 데이터를 로드하기 위해 ISRAM 모듈(508)에 의해 사용된다. SPE 스테이지 “n+1”의 IDB(522)가 체인을 생성하기 위해 SPE 스테이지 “n”에 연결되는 것과 같이(예컨대, 도 3에 도시된 것처럼, 체인을 생성하기 전에 312(2), …, 312(n)이 스테이지에 연결되는 것과 같이), 모든 SPE 슬라이스들(제 1 SPE를 제외하고) 상의 이 인터페이스는 도 5e에서 도시된 것처럼 체인을 생성하기 전에 스테이지에 연결된다. SPE IDB_Space_Ave(출력) 기능은 IDB(예컨대, 520, 522) 내의 자유 공간의 워드들의 개수를 나타낸다. 이 정보는 제 1 SPE 슬라이스(예컨대, 504(0))의 IDB(예컨대, 520) 내에 데이터를 저장하기 위해 버퍼 관리자(예컨대, 버퍼 관리자(406))에 의해 사용된다. 그것은 또한 다음 SPE 스테이지(예컨대, SPE 스테이지 “n+1” 또는 SPE(504(1)))에 ODB_Write를 사용하여 중간 결과들을 기입하기 위해 SPE들(예컨대, SPE 스테이지 “n” 또는 SPE(504(0)))에 의해 사용된다. SPE ODB_Space_Ave(입력) 기능은 다음 스테이지(예컨대, SPE 스테이지 “n+1” 또는 SPE(504(1)))의 IDB(예컨대, 524) 내의 이용 가능한 자유 공간의 워드들의 개수를 나타낸다. 그것은 또한 다음 SPE 스테이지(예컨대, SPE 스테이지 “n+1” 또는 SPE(504(1)))에 ODB_Write를 사용하여 중간 결과들을 기입하기 위해 SPE들(예컨대, SPE 스테이지 “n” 또는 SPE(504(0)))에 의해 사용된다. SPE TRIGGER_IN(입력) 기능은 하나의 클록 와이드 트리거 펄스이다. 그것은 TRIGGER_IN_CNT 카운터를 증가시키는 데 사용된다. SPE TRIGGER_OUT(출력) 기능은 하나의 클록 와이드 트리거 펄스이다. 그것은 TRIGGER_OUT_CNT 카운터를 증가시키는 데 사용된다. SPE_TB(오직 기입) 기능은 마이크로-코드의 디버그를 위해 사용되는 트레이스 버퍼를 가리킨다.
일부 실시 예들에서, 디버그 목적들을 위한 SPE 마이크로-코드는 트레이스 버퍼에 디버그 정보 메시지들을 기입한다. 이들 메시지들은 본질적으로 일련의 알바벳-숫자 기호들로 나타내어진다. 이들 알파벳들 및 숫자들은 APM에 의해 디버그 모니터에 표시된다.
SPE_BUSY 기능은 오케스트레이터 또는 임베디드 프로세서에 SPE가 데이터 또는 데이터의 배치(batch)를 처리하느라 바쁘다는 것을 표시할 수 있다. SPE_SOB_OUT 기능은 SPE가 데이터의 배치(batch)를 처리하기 시작했음을 나타내는 배치 펄스(batch pulse)의 시작을 파이프라인 내의 다음 SPE에 생성한다. SPE_EOB_OUT 기능은 SPE가 데이터의 배치(batch)를 처리하는 것을 종료했음을 나타내는 배치 펄스(batch pulse)의 시작을 파이프라인 내의 다음 SPE에 생성한다. 위에서 언급된 모든 프로그램적인 기능들은 MRAM 기반이고 그리고 SPE(예컨대, SPE(504(0)) 또는 SPE(504(1)))에서 포인터들로서 실행되는 마이크로-코드에 의해 프로그래밍 방식으로 엑세스된다. 아래 표(표 8)는 SPE 기능들과 함께 SPE 어드레스 맵을 나타낸다.
offset-32-bit Reg # R/W 이름 (SPE 기능) 설명
0x00_0000 RO SPE_IRAM 명령어 메모리
0x00_0000 RW SPE_SP 스크래치 패드
0x10_0000 RW SPE_IDB 입력 데이터 버퍼
0x20_0000 RW SPE_ODB 출력 데이터 버퍼
0x30_0000 RW SPE_ARAM 인수 메모리
0x40_0000 WO SPE_TB 트레이스 버퍼
0x40_0008 RO SPE_IDB_DATA_AVE
0x40_0010 RO SPE_ODB_SPACE_AVE 다음 IDB
0x40_0018 RW SPE_ODB_WP SPE 마이크로코드에 의해 업데이트된, 기입 포인터. RP가 유효할 때까지, WP 아래의 모든 데이터. WP가 기입되는 경우에 데이터 블록 시작.
0x40_0020 RW SPE_IDB_RP SPE-마이크로코드에 의해 업데이트된, 판독 포인터. WP가 빌 때까지, RP 아래의 모든 데이터. RP가 판독되는 경우에 데이터 블록 시작.Read pointer, updated by SPE- microcode. All the space below RP, upto WP is free. Data block starting at RP is being read.
0x40_0028 RO TRIGGER_IN_CNT 수신된 외부 트리커들의 개수
0x40_0030 RW TRIGGER_OUT_CNT 생성된 외부 트리커들의 개수
0x40_0038 RW SPE_DONE SPE 완료(done) 상태
0x40_0040 RW SPE_BUSY SPE 비지(busy) 상태
0x40_0048 RW SPE_BIP_IN 프로그레스(progress) 상태에 수신된 배치(batch)
0x40_0050 RW SPE_SOB_OUT 다음 SPE에 SOB 펄스를 생성
0x40_0058 RW SPE_EOB_OUT 다음 SPE에 EOB 펄스를 생성
도 5e에 도시된 바와 같이, SPE(예컨대, SPE 스테이지 “n+1”)의 IDB(예컨대, 522)는 이전 SPE(예컨대, SPE 스테이지 “n”)의 ODB이고 그리고 이웃하는 SPE들(예컨대, SPE 스테이지 “n” 및 SPE 스테이지 “n+1”) 사이에는 공유된 버퍼(예컨대, IDB(522))가 있다. 이웃하는 SPE들(예컨대, SPE 스테이지 “n” 및 SPE 스테이지 “n+1”) 사이의 데이터 공유 동안, 프로그램적인 상태 IDB_Data_Ave 및 ODB_Space_Ave(ODB)는 MRAM(예컨대, 526, 528)을 통하여 엑세스 되고, ODB 기입 커밋(ODB write commit)은 MRAM(예컨대, 526, 528)을 통한 ODB_Write_Pointer를 통하여 제공되고, IDB 판독 커밋(IDB read commit)은 MRAM(예컨대, 526, 528)을 통한 IDB_Read_Pointer를 통하여 제공된다. 이웃하는 SPE들(예컨대, SPE 스테이지 “n” 및 SPE 스테이지 “n+1”) 사이의 데이터 공유 에서, 공유된 버퍼(예컨대, IDB(522))는 기존의 핑퐁(ping-pong) 버퍼들 대신 최적으로 사용된다.
도 5f는 또한 현재 스테이지의 SPE(예컨대, SPE 스테이지 “n+1”)의 IDB(예컨대, 522)가 이전 스테이지의 SPE(예컨대, SPE 스테이지 “n”)의 ODB이고 그리고 이웃하는 SPE들(예컨대, SPE 스테이지 “n” 및 SPE 스테이지 “n+1”) 사이에는 공유된 버퍼(예컨대, IDB(522))가 있는 것을 도시한다. 이 공유된 버퍼 또는 IDB(예컨대, 522)는 ODB R/W 인터페이스를 사용하는 SPE 스테이지 “n”에 의해 기입되고 그리고 IDB R/W 인터페이스를 사용하는 SPE 스테이지 “n+1”에 의해 판독된다. 일부 실시 예들에서, 공유된 버퍼 또는 IDB(예컨대, 522)는 두 개의 영역들로 분할된다: 1) SPE 스테이지 “n”에 의해 액티브하게 기입되는 기입 영역, 2) SPE 스테이지 “n+1”에 의해 액티브하게 판독되는 판독 영역. 기입 및 판독 처리들은 서로 충돌하지 않도록 이들 두 개의 영역들의 경계들은 분명하게 표시된다. 기입 영역은 ODB_Write_Ptr 및 IDB_Read_Ptr 사이의 공유된 버퍼의 영역이다. 판독 영역은 IDB_Read_Ptr 및 ODB_Write_Ptr 사이의 공유된 버퍼의 영역이다. 새로운 데이터가 기입되는 경우, SPE 스테이지 “n”은 ODB_Write_Ptr를 새로운 값으로 발전시켜, 판독 처리에 새로운 데이터가 판독을 위해 이용 가능하다고 표시한다. 마찬가지로, 기존의 데이터가 판독되고 처리되는 경우, SPE 스테이지 “n+1”는 IDB_Read_Ptr를 새로운 값으로 발전시켜, 기입 처리에 새로운 공간이 기입을 위해 이용 가능하다고 표시한다. 이와 같은 판독 및 기입 포인터 교환들은 판독 및 기입 처리들 간의 원활한 흐름 제어를 용이하게 하고 그리고 임의의 크기의 데이터 교환들을 가능하게 한다. 이 메커니즘은 오버플로우 및 언더플로우 조건들을 회피하고 그리고 동시에 공유 버퍼 메모리 자원의 어떤 낭비 또는 과소 활용 없이 공유 버퍼 자원들의 가장 최적의 사용을 달성한다. 달리 말하자면, 이 메커니즘은 파이프라인 데이터 처리 시스템의 두 스테이지들 사이에서의 고성능, 낮은 자원 비용 비동기화 데이터 교환을 가능하게 한다.
도 6은 APM의 높은 수준의 동작을 도시하는 블록도이다. APM(예컨대, APM(602))은 가속 스토리지 장치에 존재하는 SPA 가속 엔진들(예컨대, SPE들)의 관리 및 동작을 위한 서비스들의 세트를 제공하는 펌웨어 계층이다. 애플리케이션 제어 플레인(604) 펌웨어는 필요한 SPA들을 설정하기 위해 이들 호출들을 사용한다. 이들 서비스들은 또한 애플리케이션 작업 흐름에 필요한 다양한 DMA 동작을 수행하기 위해서뿐만 아니라 또한 액티브 SPA들을 구성하고 모니터링 하기 위해 런 타임 동안 사용된다.
가속을 목적으로 하는 애플리케이션은 주로 두 개의 구성 성분들을 가진다: a) 제어 플레인, b) 데이터 플레인. 제어 플레인은 임베디드 프로세서(606) 상에서 실행된다. 데이터 플레인은 하나 이상의 SPA들(608)에 거쳐 분포된 하나 이상의 SPE들 상에서 실행된다. 애플리케이션 제어 플레인(604)를 위한 동작에는 주로 두 개의 단계들이 있다. 첫 번째로, 애플리케이션이 임베디드 프로세서(606) 상에서 실행된 후에, 가속 처리를 위해 필요한 자원들을 획득하고 이들 자원들을 초기화할 필요가 있다. 가속 자원들은 APM(602; 임베디드 프로세서(606) 상에서 실행되는 펌웨어)에 의해 제공되고 관리되므로, 따라서 애플리케이션은 필요한 유형 및 SPA들의 수를 조달하고, 초기화하기 위해 APM 서비스들을 필요로 한다.
도 7은 SPA 초기화의 방법을 도시하는 순서도이다. 초기화 동안, 702에서, APM 펌웨어(예컨대, APM(602))는 적절한 자원들과 함께 자유 SPA(예컨대, 도 3에 도시된 302 또는 도 5a에 도시된 502)를 할당한다. 704에서, APM은 ASM으로부터 그러한 요청을 수신하면 SPA을 할당 해제한다. 706에서, SPA의 할당 해제가 APM에 수신되지 않는 경우, APM은 할당된 SPA(예컨대, 302 또는 502)의 모든 SPE들(예컨대, 304(1), 304(2), …, 304(n) 또는 504(0), 504(1))에 적절한 마이크로-코드를 다운로드한다. 708에서, APM은 할당된 SPA(예컨대, 302 또는 502) 내의 마지막 SPE(예컨대, 304(n), 또는 504(1))를 선택하고 그리고 OSRAM 멀티플렉서(506)를 구성한다. 710에서, APM은 필요한 경우 할당된 SPA(예컨대, 302 또는 502)를 “리셋”에서 제거할 수 있다.
도 8은 SPA 런타임 동작의 방법을 도시하는 순서도이다. 애플리케이션 제어 플레인(예컨대, 604)의 제 2 부분은 런-타임 동작들을 다룬다. 임베디드 프로세서에서 실행되는 애플리케이션이 ASM과 같은 호스트 측 런-타임 소프트웨어에 의해 호출되는 경우, APM은 데이터 처리를 위한 SPA들을 구성해야하고, 그리고 그런 다음 SPA들을 트리거하여 가속 작업을 완료한다.
런타임 동안, 오프로드된 애플리케이션이 호스트 소프트웨어에 의해 호출되는 경우, APM은 함수 호출에 관련된 관련 변수들을 수신한다. 좀 더 구체적으로, 장치 측 애플리케이션은 처리될 데이터의 소스, 호출을 위한 인수들, 및 결과들의 목적지에 관련된 정보를 수신한다. 런타임 동작의 시작 단계에서 APM은 ASM으로부터 수신된 데이터의 소스와 관련된 정보에 기초하여 (임베디드 프로세서 또는 FPGA에 연결된 SSD로부터) 데이터 처리를 위한 관련 정보를 추출할 수 있다.
802에서, APM 펌웨어는 적절한 SPA(예컨대, SPA(502)) SPE들(예컨대, 504(0), 504(1))에 필요한 임의의 인수들을 프로그램한다.
804에서, APM은 데이터 이동 디스크립터들을 생성하고 그리고 프로그램한다. 예를 들어, APM은 버퍼 관리자(예컨대, 도 4a에 도시된 406) 내의 적절한 DMA 채널들에 DMA 디스크립터들을 기입한다. DMA 디스크립터는 SSD 제어기로부터 수신된 데이터를 ISRAM(예컨대, 508)로 지칭되는 적절한 SPA 입력 버퍼들로 이동시키는 것과 관련된 정보를 제공한다. APM은 또한 OSRAM(예컨대, 도 3의 318) 메모리로부터 외부의 버퍼들에 SPA 처리 결과들 이동시키기 위해 또다른 DMA 채널을 프로그램한다.
806에서, APM은 SPA(예컨대, 502) 내의 SPE들(예컨대, 504(0), 504(1))을 활성화시킨다. 예를 들어, 일단 DMA들(예컨대, 도 2b의 206)이 프로그램되면, APM은 SPE들(예컨대, 304(1), 304(2), …, 304(n))을 리셋으로부터 제거한다. 그 시점에 SPE들(예컨대, 304(1), 304(2), … 304(n))은 요청된 데이터를 처리하기 시작하고 그리고 의도된 결과들을 생성한다. 예를 들어, 처리를 위해 선택된 SPA(예컨대, 302) 내의 제 1 SPE(예컨대, 304(1))는, 입력 데이터의 도착을 계속 모니터링 한다. 일단 충분한 입력 데이터가 입력 데이터 버퍼(input data buffer; IDB; 예컨대, 312(1))에서 검출되면, 제 1 SPE(예컨대, 304(1))는 처리를 시작한다. 그것은 IDB(예컨대, 312(1))로부터 데이터를 판독하고, 그것을 처리한 다음에 다음 스테이지(예컨대, 304(2))의 IDB(예컨대, 312(2))에 적절한 중간 결과들을 기입한다. 일단 데이터의 배치(batch)가 제 1 SPE(예컨대, SPE(304(1)))에 의해 완전히 처리되면, 그것은 제 2 SPE(예컨대, 304(2))에 트리거를 전송한다. 그 시점에 제 2 SPE(예컨대, 304(2))는 그것의 IDB(예컨대, 312(2)) 내의 데이터를 처리하기 시작한다. 그리고 그 과정은 후속 SPE들(예컨대, 304(3), …, 304(n))에 뒤따른다.
808에서, APM은 SPE에 의해 모든 요??된 데이터가 처리되었는지를 판단한다. SPE(예컨대, 304(1))에 의해 모든 요??된 데이터가 처리된 경우, 마이크로-코드는 “완료”상태를 설정한다. APM은 처리의 완료를 위해 모든 SPE들(예컨대, 304(1), 304(2), …, 304(n))을 모니터링한다.
810에서,일단 모든 SPE들(예컨대, 304(1), 304(2), …, 304(n))에 의해 처리가 완료된 경우, APM은 애플리케이션 제어 플레인에 완료 상태를 리턴하고, 애플리케이션 제어 플레인은 그 결과들을 호스트 측 애플리케이션 구성 성분에 다시 전송한다.
812에서, 일단 그 결과들이 이용가능 하고 SPA(예컨대, 302)로부터 밖으로 이동되면, APM은 SPA(예컨대, 302)를 리셋하거나 비활성화시킨다.
아래 표(표 9)는 현재 식별된 APM API들(application programming interface; APIs)을 도시한다.
출력 값 API 이름 ARG 유형 ARG 이름
apm_status_t apm_init void
apm_status_t apm_spa_alloc u32 spe_count_needed
u32 *spa_id
apm_status_t apm_spa_dealloc u32 spa_id
apm_status_t apm_spa_spe_opcode_download u32 spa_id
u32 spe_id
char *file_name
apm_status_t apm_spa_spe_last u32 spa_id
u32 spe_id
apm_status_t apm_spa_spe_aram_write u32 spa_id
u32 spe_id
u32 Offset
u8 *buff
u32 buff_size
apm_status_t apm_spa_spe_aram_read u32 spa_id
u32 spe_id
u32 Offset
u8 *buff
u32 buff_size
apm_status_t apm_spa_set_reset_mask u32 spa_id
u64 spe_reset_mask
apm_status_t apm_spa_check_done u32 spa_id
u64 done_bit_mask
apm_status_t apm_spa_load_input_data u32 spa_id
u32 data_buff_addr
u32 Length
apm_status_t apm_spa_get_output_data u32 spa_id
u8 *buffer
u32 Len
apm_status_t apm_spa_get_tb_bit_mask u32 spa_id
u64 *tb_bit_mask
apm_status_t apm_spa_reg_dump void
apm_status_t apm_spa_spe_opcode_dump u32 spa_id
u32 spe_id
apm_status_t apm_spa_spe_data_dump u32 spa_id
u32 spe_id
apm_status_t apm_spa_spe_read_tb u32 spa_id
u32 spe_id
apm_status_t apm_spa_config_read u32 spa_id
u32 Offset
U64 *value
u32 size
apm_status_t apm_spa_config_write u32 spa_id
u32 Offset
void *buf
u32 size
apm_move_data
apm_sd_start
apm_sd_done
API "apm_init"은 APM을 초기화하고, API "apm_spa_alloc"은 이용 가능한 SPA를 할당하고, API "apm_spa_dealloc"은 SPA를 할당 해제하고, API "apm_spa_spe_opcode_download"는 애플리케이션 마이크로-코드 옵코드(opcode) 파일을 SPE IRAM에 다운로드하고, API “apm_spa_spe_last”는 SPA의 마지막 SPE를 설정하고, API "apm_spa_spe_aram_write"는 SPE ARAM에 애플리케이션 인수들을 기입하고, API "apm_spa_spe_aram_read"는 SPE ARAM으로부터 데이터를 판독하고, API "apm_spa_set_reset_mask"는 SPA의 하나 또는 그 이상의 SPE(들)을 턴-온 하고, SPA, API "apm_spa_check_done"은 SPA의 모든 SPE들이 완료되었는지 확인하고, API "apm_spa_load_input_data"는 버퍼 관리자 DMA를 프로그래밍함으로써 외부 메모리로부터 SPA ISRAM 데이터 버퍼에 데이터의 입력 블록을 로드하고, API "apm_spa_get_output_data"는 SPA 출력 데이터 버퍼 (OSRAM)로부터 특정된 외부 메모리 위치에 출력 데이터를 가져오고, API "apm_spa_get_tb_bit_mask"는 SPA의 트레이스 버퍼 비트 마스크(trace buffer bit mask)를 가져오고, API "apm_spa_reg_dump"는 SPA 레지스터들을 프린트 하고, API "apm_spa_spe_opcode_dump"는 SPE 옵코드를 덤프하고, API "apm_spa_spe_data_dump"는 SPE 데이터를 덤프하고, API "apm_spa_spe_read_tb"는 SPE 트레이스 버퍼를 판독하고, API "apm_spa_config_read"는 SPA 구성 레지스터로부터 값을 판독하고, 그리고 API "apm_spa_config_write"는 SPA 구성 레지스터에 값을 기입한다.
애플리케이션 데이터 플레인에서, 각 SPE 슬라이스(예를 들어, 504(0), 504(1))는 그 애플리케이션에 필요한 하나 또는 그 이상의 특정 데이터 처리 또는 조작 기능들을 수행하는 애플리케이션 특정 마이크로-코드로 프로그램된다. SPE상의 마이크로-코드(예컨대, SPE 스테이지 "n+1")는 이전 프로세싱 스테이지(예컨대, SPE 스테이지 "n")로부터의 입력 데이터 또는 중간 결과들의 도착을 기다린다. 이전 스테이지(예컨대, SPE 스테이지 "n")의 입력 데이터 또는 결과들을 처리하기 전에, 마이크로-코드는 단지 후속 스테이지의 입력 데이터 버퍼인 출력 데이터 버퍼에 충분한 공간이 있는지를 확인한다. 일단 이 두 조건들이 충족되면, 주된 처리 기능이 시작된다. 마이크로-코드는 SPE 어드레스 맵의 범위들 내에서 동작한다. SPE 마이크로-코드 기본 구조에 의해 사용되는 어드레스들 및 데이터 구조들은 아래에 설명된다. 아래의 데이터 구조 포인터들은 SPE 어드레스 맵에서 잘 알려진 것들이다.
예를 들어, "IDB_ptr"은 처리될 데이터 버퍼에 대한 포인터이고, "ODB_ptr"은 결과들이 저장될 데이터 버퍼에 대한 포인터이고, "ARG_ptr"은 필요한 경우 인수들 블록에 대한 포인터이고, “IDB_Data_Ave_ptr "은 이용 가능한 데이터의 워드들의 수를 포함하는 레지스터이고, "ODB_Space_Ave_ptr "은 결과들을 위해 이용 가능한 공간의 워드들의 수를 포함하는 레지스터이다.
SPE(예컨대, SPE 스테이지 "n") 마이크로-코드는 IDB(예컨대, 520) 및 ODB(예컨대, 522) 버퍼들로부터 데이터를 액세스한다. 모든 SPA(예컨대, 502)는 SPA(502)의 내부 및 외부로 데이터를 이동시키는 두 개의 스테이징 메모리(예컨대, ISRAM(508) 및 OSRAM(510))를 가진다. 버퍼 관리자(예컨대, 406)는 SPA들(예컨대, 404(1), ..., 404(n)) 및 DRAM(예컨대, 410) 간의 데이터 이동을 담당한다. 버퍼 관리자(예컨대, 406)는 DMA 디스크립터들의 세트를 이용함으로써 데이터 이동들을 수행한다. 각 DMA 디스크립터는 본질적으로 소스 어드레스, 목적지 어드레스, 길이, 및 특정 플래그들로 구성되는 튜플(tuple)을 제공한다. APM(예컨대, 602) 펌웨어(임베디드 프로세서 상에서 실행됨)는 필요한 DMA 디스크립터들을 필요에 따라 버퍼 관리자(예컨대, 406)에 프로그램한다. APM(예컨대, 602)은 데이터 이동들을 위해 애플리케이션들로부터 수신된 인수들에 기초하여 적절한 DMA 디스크립터들을 구성한다. APM은 SPA(예컨대, 404(1), ..., 404(n)) 및 DRAM(예컨대, 410)에/로부터 데이터 이동들의 목적을 위해 두 개의 API를 애플리케이션들에 제공한다.
도 9는 호스트 CPU에서 또는 하드웨어 레벨에서 데이터를 처리하는 것과 관련하여 SPE 아키텍처(예컨대, 도 5a)를 이용함으로써 데이터를 처리하는 경우 성능, 파워, 면적, 비용 등이 어떻게 되는지를 나타내는 그래프를 도시한다. 비록 성능, 파워, 및 면적이 가장 좋지 않을 수도 있지만, 일반적인 CPU를 이용함으로써 수행되는 데이터 처리는 더 나은 유연성과 디버그 및 개발의 용이성을 제공한다. 반면, 스펙트럼의 다른 끝에서 하드웨어 기반의 데이터 처리는 더 나은 성능, 파워, 및 면적을 제공할 수 있지만, 유연성, 및 디버그 및 개발의 용이성이 부족하다. 따라서 제안된 SPE 아키텍처는 이 두 극단들 사이의 균형을 제공하고 두 영역들 모두에서 최고의 성과를 달성하려고 시도한다. 즉, SPE 아키텍처는 유연성 및 개발의 용이성과 같은 CPU의 이점들과 성능 및 파워와 같은 하드웨어의 이점들을 결합한다.
본 명세서에서 다양한 구성 요소(element)들, 구성 성분(component)들, 영역(region)들, 층(layer)들 및/또는 섹션(section)들을 설명하기 위해 "제 1", "제 2", 제 3" 등의 용어들이 사용되더라도, 이러한 구성요소들, 부품들, 영역들, 층들 및/또는 섹션들은 이러한 용어들에 의해 제한되지 않는 것으로 이해되어야 할 것이다. 이러한 용어들은 단지 다른 구성요소, 부품, 영역, 층 또는 섹션으로부터 하나의 구성요소, 부품, 영역, 층 또는 섹션을 구별하기 위해 사용된다. 따라서, 본 명세서에서 개시된 제 1 구성요소, 부품, 영역, 층 또는 섹션은, 본 발명의 사상 및 범위로부터 벗어나지 않으면, 제 2 구성요소, 부품, 영역, 층 또는 섹션으로 칭해질 수 있다.
본 명세서에서 설명의 편의를 위해, "아래", "아래쪽", "밑", "위", "위쪽" 등과 같이, 상대적 공간 용어들은 도면들에 도시된 바와 같이 하나의 소자 또는 특징들의 다른 소자(들) 또는 특징(들)에 대한 관계를 설명하기 위해 이용될 수 있다. 이러한 상대적 공간 용어들은 도면들에서 묘사된 방향뿐만 아니라 사용 또는 동작에 있어서 장치의 다른 방향들을 포함하는 것으로 의도된다. 예를 들어, 도면들의 장치가 뒤집어지면, 다른 소자들 또는 특징들의 "아래" 또는 "밑" 또는 "아래쪽"으로써 설명되는 소자들은 다른 소자들 또는 특징들의 "위쪽"을 향할 수 있다. 따라서, "아래" 또는 "아래쪽"의 예시 용어들은 위 및 아래의 방향을 모두 포함할 수 있다. 장치가 다른 방향(예를 들어, 90도 또는 다른 방향들로 회전됨)일 수 있고 본 명세서에서 사용되는 상대적 공간 기술어들은 이에 따라 해석되어야 한다. 또한, 층이 2 개의 층들 "사이에" 있는 것으로서 지칭되는 경우, 층은 2 개의 층들 사이의 유일한 층일 수 있거나 하나 또는 그 이상의 사이에 오는 층들이 또한 존재할 수 있다.
본 발명의 기술적 사상의 설명에서 사용되는 용어들은 특정한 실시 예들을 설명하기 위한 목적으로만 사용되며, 본 발명의 기술적 사상을 한정하는 것으로 의도되지 않는다. 본 명세서에서 사용된 바와 같이, “대체로”, “약” 용어 그리고 이와 유사한 용어들은 근사치의 용어들로서 사용되고, 정도의 용어들로서 사용되지 않고, 본 발명의 당업자에 의해 식별되는 측정된 또는 계산된 값들의 고유한 변동을 고려하기 위한 것이다.
본 명세서에서 사용된 바와 같이, 문맥상 명백하게 다르게 뜻하지 않는 한, 단수 형태 “하나”는 복수의 형태도 포함하는 것으로 의도된다. “포함하는” 및/또는 “포함하고 있는” 용어들이 본 명세서에서 사용될 때, 이러한 용어들은 정해진 특징들, 정수들, 단계들, 동작들, 요소들, 및/또는 성분들의 존재를 명시하나, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들, 성분들, 및/또는 그것들의 그룹들의 추가 또는 존재를 불가능하게 하지 않는 것이 더 이해될 것이다. 본 명세서에서 사용된 바와 같이, “및/또는” 용어는 나열된 항목들과 연관된 하나 이상의 임의의 그리고 모든 조합들 포함한다. “적어도 하나”와 같은 표현들은, 구성 요소들의 리스트보다 앞설 때, 요소들 전체 리스트를 수정하고 그리고 리스트의 개별 요소들을 수정하지 않는다. 또한, 본 발명의 실시 예들을 기술할 때 "할 수 있다"의 사용은 "본 발명의 하나 이상의 실시 예들"을 의미한다. 또한, "예시" 용어는 예 또는 그림을 의미한다. 본 명세서에서 사용된 바와 같이, “사용”, “사용되는”, 그리고 “사용된” 용어들은 “이용”, “이용되는”, 그리고 “이용된” 용어들의 동의어로 각각 간주될 수 있다.
요소 또는 층이 다른 요소 또는 층의 "위에", "연결된", "결합된" 또는 "인접한"으로 언급될 때, 그것은 다른 요소 또는 층에 직접적으로 위에, 연결된, 결합된, 또는 인접할 수 있고, 또는 하나 이상의 중간 요소들 또는 층들이 존재할 수 있다. 대조적으로, 하나의 요소 또는 층이 다른 요소 또는 층에 "직접적으로 위에", "직접적으로 연결된", "직접적으로 결합된" 또는 "바로 인접한"으로 지칭되는 경우, 중간 요소들 또는 층들이 존재하지 않는다.
본 명세서에 인용된 임의의 수치 범위는 인용된 범위 내에 포함되는 동일한 수치 정밀도의 모든 서브-범위들을 포함하도록 의도된다. 예를 들어, “1.0에서 10.0”의 범위에는 인용된 최소값 1.0과 인용된 최대값 10.0 사이의 (그리 포함하는), 즉, 예를 들면, 2.4에서 7.6까지와 같이, 1.0과 같거나 큰 최소값 및 10.0과 같거나 작은 최대값을 갖는, 모든 부분 범위가 포함된다. 본 명세서에 인용된 최대 수치 제한은 본 명세서에 포함된 더 낮은 모든 수치 제한들을 포함하도록 의도되며, 본 명세서에 인용된 임의의 최소 수치 제한은 본 명세서에 포함된 더 높은 모든 수치 제한들을 포함하도록 의도된다.
본 명세서에 기재된 본 발명의 실시 예들에 따른 전자 또는 전기 장치 및/또는 임의의 다른 관련 장치들 또는 구성 성분들은 임의의 적합한 하드웨어, 펌웨어(예컨대, 주문형 집적 회로), 소프트웨어, 또는 이들의 조합을 이용하여 구현될 수 있다. 예를 들어, 이들 장치들의 다양한 구성 성분들은 하나의 집적 회로(IC) 칩 상에 또는 개별 IC 칩 상에 형성 될 수 있다. 또한, 이들 장치들의 다양한 구성 성분들은 플렉서블 인쇄 회로 필름, 테이프 캐리어 패키지(tape carrier package; TCP), 인쇄 회로 기판(PCB) 또는 하나의 기판 상에 구현될 수 있다. 또한, 이들 장치들의 다양한 구성 성분들은 하나 또는 그 이상의 프로세서들, 하나 또는 그 이상의 컴퓨팅 장치들에서 실행되고, 컴퓨터 프로그램 명령어들을 실행하고 그리고 여기에 설명된 다양한 기능들을 수행하기 위해 다른 시스템 구성 성분들과 상호 작용하는 프로세스 또는 스레드(thread)일 수 있다. 컴퓨터 프로그램 명령어들은, 예를 들어 랜덤 액세스 메모리(RAM)와 같은, 표준 메모리 장치를 이용하는 컴퓨팅 장치에 구현 될 수 있는 메모리에 저장된다. 컴퓨터 프로그램 명령어들은 또한, 예를 들어 CD-ROM, 플래시 드라이브 등과 같은, 다른 비일시적인 컴퓨터 판독 가능 매체에 저장될 수 있다. 또한, 당업자는 본 발명의 예시적인 실시 예들의 사상 및 범위로부터 벗어나지 않으면서 다양한 컴퓨팅 장치들의 기능이 단일 컴퓨팅 장치에 결합되거나 집적될 수 있고, 또는 특정 컴퓨팅 장치의 기능이 하나 또는 그 이상의 다른 컴퓨팅 장치들에 걸쳐 분산된다고 인지할 것이다.
비록 SSD들 상에서의 가속된 데이터 처리를 위한 시스템 및 방법의 예시적인 실시 예들이 본 명세서에 구체적으로 설명되고 예시되었지만, 많은 수정들 및 변형들이 당업자에게는 명백할 것이다. 따라서, 본 발명의 원리들에 따라 구성된 SSD 상에서의 가속된 데이터 처리를 위한 시스템 및 방법은 여기에 구체적으로 설명 된 것 이외의 것으로 구현될 수 있다는 것이 이해되어야 한다. 본 발명은 또한 아래의 특허 청구 범위들, 및 그것들의 균등물로 정의된다.
100: 스토리지 가속 시스템
500: SPA 아키텍쳐
302, 502: SPA

Claims (10)

  1. 하나 이상의 스토리지 처리 가속기(storage processing accelerator; SPA)들; 및
    가속 플랫폼 관리자(acceleration platform manager; APM)를 포함하되,
    상기 하나 이상의 SPA들에 포함되는 제1 SPA는 파이프라인에서 함께 연결된 프로그래머블 프로세서(programmable processor)들을 포함하고,
    상기 APM은 상기 하나 이상의 SPA들 및 상기 프로그래머블 프로세서들에 연결되고, 상기 하나 이상의 SPA들 및 상기 프로그래머블 프로세서들에서 데이터 처리를 제어하도록 구성된 시스템.
  2. 제 1 항에 있어서,
    상기 프로그래머블 프로세서들은 하나 이상의 스토리지 처리 엔진(storage processing engine; SPE)들을 포함하고, 상기 하나 이상의 SPE들 중 하나의 SPE는 상기 하나의 SPE의 출력을 상기 파이프라인의 다음 SPE에 제공하여 상기 다음 SPE의 입력으로서 이용되도록 구성되고,
    상기 APM은:
    애플리케이션 기능 처리 정보를 애플리케이션 서비스 관리자(application service manager; ASM)로부터 수신하고, 상기 하나 이상의 SPA들로부터 상기 제1 SPA를 할당하고,
    상기 제1 SPA 내의 상기 하나 이상의 SPE들 중 상기 하나의 SPE에 마이크로-코드를 다운로드 하고,
    상기 애플리케이션 기능 처리 정보에 기초하여 데이터를 추출하고,
    상기 제1 SPA 내의 상기 하나 이상의 SPE들 중 상기 하나의 SPE에서 상기 ASM으로부터 수신된 하나 이상의 인수들을 프로그래밍 하고,
    하나 이상의 이동 기술자들을 생성하고 프로그래밍 하고,
    상기 제1 SPA 내의 상기 하나 이상의 SPE들을 인에이블 하되, 일단 인에이블 되는 경우, 상기 제1 SPA 내의 상기 하나 이상의 SPE들 중 상기 하나의 SPE는 상기 애플리케이션 기능 처리 정보에 기초하여 데이터를 처리하도록 구성되고,
    상기 제1 SPA 내의 상기 하나 이상의 SPE들 중에서 상기 하나의 SPE에 의하여 데이터 처리가 완료되었는지를 판단하고,
    상기 제1 SPA 내의 상기 하나 이상의 SPE들 중에서 상기 하나의 SPE에 의해서 상기 데이터 처리가 완료되었다고 판단하였는지에 기초하여, 상기 제1 SPA의 상기 하나 이상의 SPE들에 의한 상기 데이터 처리의 결과를 상기 ASM에 전송하도록 구성된 시스템.
  3. 제 2 항에 있어서,
    호스트 프로세서를 더 포함하고,
    상기 호스트 프로세서는 애플리케이션 기능 호출을 인터셉트하고,
    상기 애플리케이션 기능 호출을 처리하기 위한 데이터의 소스, 상기 애플리케이션 기능 호출의 처리의 유형, 상기 애플리케이션 기능 호출을 위한 인수들 및 상기 데이터가 처리된 후의 결과들의 목적지 중 하나 이상을 포함하는 상기 애플리케이션 기능 처리 정보를 수집하고,
    호스트 장치 소프트웨어 스택 내의 상기 ASM에서, 상기 애플리케이션 기능 처리 정보를 수신하되,
    수신한 상기 애플리케이션 기능 처리 정보에 기초하여, 상기 ASM은:
    애플리케이션 기능 처리를 위한 상기 APM을 포함하는 프로세서를 선택하고,
    상기 APM과 연결된 상기 제1 SPA의 상기 하나 이상의 SPE들에 의한 상기 데이터 처리를 스케줄링하고,
    상기 APM을 포함하는 상기 프로세서의 하나 이상의 버퍼들에 적절한 데이터를 로드 하기 위해 데이터 전송 DMA(direct memory access)엔진을 초기화하고, 그리고
    상기 APM을 포함하는 상기 프로세서에 호출 트리거 및 상기 애플리케이션 기능 처리 정보를 전송하도록 구성되는 시스템.
  4. 제 2 항에 있어서,
    상기 하나의 SPE는 입력 데이터 버퍼(input data buffer ; IDB)를 포함하되,
    상기 하나의 SPE는 상기 하나의 SPE의 출력을 상기 파이프 라인 내의 상기 하나 이상의 SPE들 중 상기 다음 SPE의 상기 IDB에 기입하도록 구성되는 시스템
  5. 제 4 항에 있어서,
    상기 IDB는 상기 하나 이상의 SPE들 중 2개의 인접한 SPE들 사이에서 공유되는 시스템.
  6. 제 4 항에 있어서,
    상기 하나 이상의 SPE들 중 상기 하나의 SPE에서 실행되는 마이크로-코드는 배치(batch) 지향 파이프라인 데이터 처리를 위해,
    상기 파이프라인 내에 있는 상기 하나 이상의 SPE들 중 상기 다음 SPE에 대한 배치 시작 및 배치 종료 표시들을 프로그램 방식으로 생성하도록 구성되는 시스템.
  7. 제 4 항에 있어서,
    상기 시스템은 상기 APM에 포함되는 프로세서에 연결되는 하나 이상의 SSD들을 더 포함하되,
    상기 APM은 상기 하나 이상의 SPE들에 의해서 처리될 데이터를 상기 하나 이상의 SSD들로부터 추출하도록 구성되는 시스템.
  8. 제 2 항에 있어서,
    상기 APM은 상기 하나 이상의 SPE들 중 상기 하나의 SPE를 통해 IRAM(instruction RAM) 및 DRAM(data RAM) 중 하나 이상에 엑세스 하도록 더 구성되는 시스템.
  9. 하나 이상의 SPA(storage processing accelerator)들; 및
    프로세서를 포함하되,
    상기 하나 이상의 SPA들에 포함되는 제1 SPA는 파이프라인에서 함께 결합된 프로그래머블 프로세서(programmable processor)들을 포함하고,
    상기 프로세서는 상기 하나 이상의 SPA들 및 상기 프로그래머블 프로세서들에 연결되고, 상기 하나 이상의 SPA들 및 상기 프로그래머블 프로세서들에서 데이터 처리를 제어하도록 구성된 시스템.
  10. 클러스터들; 및
    프로세서를 포함하되,
    상기 클러스터들에 포함되는 제1 클러스터는 파이프라인에서 함께 결합된 둘 이상의 프로그래머블 프로세서(programmable processor)들을 포함하고,
    상기 제1 클러스터는 SPA(storage processing accelerator)이고,
    상기 둘 이상의 프로그래머블 프로세서에 포함되는 제 1 프로그래머블 프로세서는 상기 제 1 프로그래머블 프로세서의 출력을 상기 파이프라인 내의 다음 프로그래머블 프로세서에 제공하여 상기 다음 프로그래머블 프로세서의 입력으로서 사용되도록 구성되고, 그리고
    상기 프로세서는 상기 클러스터들 및 상기 둘 이상의 프로그래머블 프로세서들에 연결되고, 상기 클러스터들 및 상기 둘 이상의 프로그래머블 프로세서들에서 데이터 처리를 제어하도록 구성된 장치.
KR1020190126445A 2018-12-05 2019-10-11 Ssd들 상에서의 가속된 데이터 처리를 위한 시스템 및 방법 KR102593583B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201862775745P 2018-12-05 2018-12-05
US62/775,745 2018-12-05
US16/269,508 US11112972B2 (en) 2018-12-05 2019-02-06 System and method for accelerated data processing in SSDs
US16/269,508 2019-02-06

Publications (2)

Publication Number Publication Date
KR20200068564A KR20200068564A (ko) 2020-06-15
KR102593583B1 true KR102593583B1 (ko) 2023-10-25

Family

ID=70971835

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190126445A KR102593583B1 (ko) 2018-12-05 2019-10-11 Ssd들 상에서의 가속된 데이터 처리를 위한 시스템 및 방법

Country Status (3)

Country Link
US (4) US11112972B2 (ko)
KR (1) KR102593583B1 (ko)
CN (1) CN111274025B (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11112972B2 (en) 2018-12-05 2021-09-07 Samsung Electronics Co., Ltd. System and method for accelerated data processing in SSDs
KR102659832B1 (ko) * 2019-03-05 2024-04-22 삼성전자주식회사 데이터 저장 장치 및 시스템
FR3118528B1 (fr) * 2020-12-28 2023-12-01 Commissariat Energie Atomique Module mémoire adapté à mettre en oeuvre des fonctions de calcul
US11698870B2 (en) 2020-12-31 2023-07-11 Micron Technology, Inc. Memory module data buffer
EP4036725A1 (en) * 2021-01-27 2022-08-03 Samsung Electronics Co., Ltd. Systems and methods for data transfer for computational storage devices
US20230099831A1 (en) * 2021-09-24 2023-03-30 Samsung Electronics Co., Ltd. Systems and methods for near-storage processing in solid state drives
US20240054065A1 (en) * 2022-08-15 2024-02-15 Arm Limited Behavioral sensor for creating consumable events

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105046109A (zh) * 2015-06-26 2015-11-11 四川云合创智科技有限公司 一种用于生物信息序列分析的加速平台
US20150347338A1 (en) * 2014-05-29 2015-12-03 Altera Corporation Accelerator architecture on a programmable platform

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101504337B1 (ko) * 2008-06-26 2015-03-25 삼성전자주식회사 메모리 시스템 및 그 구동방법
US5664219A (en) * 1995-06-12 1997-09-02 International Business Machines Corporation Method and system for controlling servicability of adapters connected by an I/O channel interface to a computer system
US6650656B2 (en) * 2001-02-28 2003-11-18 Crossroads Systems, Inc. Method and system for reconciling extended copy command target descriptor lengths
AU2004290281A1 (en) 2003-05-23 2005-05-26 Washington University Intelligent data storage and processing using FPGA devices
US8688926B2 (en) 2010-10-10 2014-04-01 Liqid Inc. Systems and methods for optimizing data storage among a plurality of solid state memory subsystems
JP5717864B2 (ja) * 2010-11-16 2015-05-13 インテル・コーポレーション データ記憶システムに用いるエンドポイントキャッシュ
CN104204990B (zh) 2012-03-30 2018-04-10 英特尔公司 在使用共享虚拟存储器的处理器中加速操作的装置和方法
US20130318280A1 (en) 2012-05-22 2013-11-28 Xockets IP, LLC Offloading of computation for rack level servers and corresponding methods and systems
US20130343181A1 (en) 2012-06-21 2013-12-26 Jonathan Stroud Systems and methods of data processing using an fpga-implemented hash function
US9286225B2 (en) 2013-03-15 2016-03-15 Saratoga Speed, Inc. Flash-based storage system including reconfigurable circuitry
US9619167B2 (en) 2013-11-27 2017-04-11 Intel Corporation System and method for computing message digests
US9887008B2 (en) 2014-03-10 2018-02-06 Futurewei Technologies, Inc. DDR4-SSD dual-port DIMM device
WO2015166540A1 (ja) 2014-04-28 2015-11-05 株式会社日立製作所 ストレージ装置とそのデータ処理方法及びストレージシステム
WO2016038710A1 (ja) 2014-09-11 2016-03-17 株式会社日立製作所 ストレージシステム
US20160094619A1 (en) 2014-09-26 2016-03-31 Jawad B. Khan Technologies for accelerating compute intensive operations using solid state drives
US9569243B2 (en) 2014-12-05 2017-02-14 International Business Machines Corporation Offloading and parallelizing translation table operations
US10055142B1 (en) 2015-10-13 2018-08-21 Maxlinear Asia Singapore Pte Ltd. Apparatus and method for command processing for a fast block input/output device
US10095445B2 (en) 2016-03-29 2018-10-09 Western Digital Technologies, Inc. Systems and methods for offloading processing from a host to storage processing units using an interconnect network
US10034407B2 (en) 2016-07-22 2018-07-24 Intel Corporation Storage sled for a data center
US10387303B2 (en) 2016-08-16 2019-08-20 Western Digital Technologies, Inc. Non-volatile storage system with compute engine to accelerate big data applications
US10503635B2 (en) 2016-09-22 2019-12-10 Dell Products, Lp System and method for adaptive optimization for performance in solid state drives based on segment access frequency
US10592463B2 (en) 2018-03-05 2020-03-17 Samsung Electronics Co., Ltd. SSD architecture for FPGA based acceleration
US11112972B2 (en) 2018-12-05 2021-09-07 Samsung Electronics Co., Ltd. System and method for accelerated data processing in SSDs

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150347338A1 (en) * 2014-05-29 2015-12-03 Altera Corporation Accelerator architecture on a programmable platform
CN105046109A (zh) * 2015-06-26 2015-11-11 四川云合创智科技有限公司 一种用于生物信息序列分析的加速平台

Also Published As

Publication number Publication date
KR20200068564A (ko) 2020-06-15
US11768601B2 (en) 2023-09-26
US20210294494A1 (en) 2021-09-23
US11061574B2 (en) 2021-07-13
US11112972B2 (en) 2021-09-07
CN111274025A (zh) 2020-06-12
US20200183582A1 (en) 2020-06-11
CN111274025B (zh) 2022-09-27
US20240020009A1 (en) 2024-01-18
US20200183583A1 (en) 2020-06-11

Similar Documents

Publication Publication Date Title
KR102593583B1 (ko) Ssd들 상에서의 가속된 데이터 처리를 위한 시스템 및 방법
US11693691B2 (en) Systems, methods, and apparatuses for heterogeneous computing
US11204819B2 (en) System and method for offloading application functions to a device
US11797464B2 (en) Delivering interrupts to user-level applications
US20170220499A1 (en) Massively parallel computer, accelerated computing clusters, and two-dimensional router and interconnection network for field programmable gate arrays, and applications
US9588771B2 (en) Instruction set architecture-based inter-sequencer communications with a heterogeneous resource
US20080244222A1 (en) Many-core processing using virtual processors
KR20200139525A (ko) Fpga를 포함하는 전자 시스템 및 이의 동작 방법
US9032099B1 (en) Writeback mechanisms for improving far memory utilization in multi-level memory architectures
EP4152167A1 (en) Scalable address decoding scheme for cxl type-2 devices with programmable interleave granularity
Vatsolakis et al. RACOS: Transparent access and virtualization of reconfigurable hardware accelerators
US8447912B2 (en) Paging memory from random access memory to backing storage in a parallel computer
US11500802B1 (en) Data replication for accelerator
CN115686638A (zh) 无阻挡外部装置调用
US11119787B1 (en) Non-intrusive hardware profiling
Moorthy et al. IO and data management for infrastructure as a service FPGA accelerators
US20230297527A1 (en) Direct Access to Reconfigurable Processor Memory
US20240111528A1 (en) Programmable compute engine having transpose operations
Schor et al. Reliable and Efficient Execution of Multiple Streaming Applications on Intel’s SCC Processor
US11875247B1 (en) Input batching with serial dynamic memory access
US20230333879A1 (en) System for the Remote Execution of Applications
US11620120B1 (en) Configuration of secondary processors
US20240103861A1 (en) Multi-stage computationally intensive process with compute-in-memory and/or memory data streaming
US20240070107A1 (en) Memory device with embedded deep learning accelerator in multi-client environment
US20230388373A1 (en) Load Balancing System for the Execution of Applications on Reconfigurable Processors

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right