KR102403653B1 - Fpga 기반 가속화를 위한 새로운 ssd 구조 - Google Patents

Fpga 기반 가속화를 위한 새로운 ssd 구조 Download PDF

Info

Publication number
KR102403653B1
KR102403653B1 KR1020190012293A KR20190012293A KR102403653B1 KR 102403653 B1 KR102403653 B1 KR 102403653B1 KR 1020190012293 A KR1020190012293 A KR 1020190012293A KR 20190012293 A KR20190012293 A KR 20190012293A KR 102403653 B1 KR102403653 B1 KR 102403653B1
Authority
KR
South Korea
Prior art keywords
fpga
statement
storage device
processor
acceleration
Prior art date
Application number
KR1020190012293A
Other languages
English (en)
Other versions
KR20190105496A (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
Priority claimed from US16/122,865 external-priority patent/US10585819B2/en
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20190105496A publication Critical patent/KR20190105496A/ko
Application granted granted Critical
Publication of KR102403653B1 publication Critical patent/KR102403653B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • 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/10Program control for peripheral devices
    • G06F13/102Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • 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
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0024Peripheral component interconnect [PCI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Computer Hardware Design (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Transfer Systems (AREA)
  • Advance Control (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명은 시스템을 제공한다. 시스템은 응용 프로그램을 실행하는 프로세서, 프로세서 상에서 실행되는 응용 프로그램에 의해 사용되는 데이터를 저장하는 메모리, 프로세서와 통신하기 위한 업스트림 엔드 포인트, 저장 장치와 통신하기 위한 제 1 다운스트림 루트 포트, 저장 장치와 통신하기 위한 제 2 다운스트림 루트 포트 및 하드웨어를 사용하여 구현되고 가속 명령을 실행하기 위한 APM-F(Acceleration Platform Manager)를 포함하는 가속 모듈을 포함한다. 저장 장치는 가속 모듈과 통신하기 위한 저장 장치의 제 1 엔드 포인트, 가속 모듈과 통신하기 위한 저장 장치의 제 2 엔드 포인트, 저장 장치의 동작들을 관리하기 위한 컨트롤러, 응용 프로그램에 대한 응용 데이터를 저장하기 위한 저장소 및 가속 명령을 실행하는데 APM-F를 보조하기 위한 APM-S(storage device Acceleration Platform Manager)를 포함한다. 프로세서, 가속 모듈 및 저장 장치는 PCIe(Peripheral Component Interconnect Exchange) 버스를 통해 통신한다. 가속 모듈은 응용 데이터를 메모리로 로딩함이 없이 응용 프로그램을 위한 저장 장치 상의 응용 데이터에 대해 가속 명령을 수행한다.

Description

FPGA 기반 가속화를 위한 새로운 SSD 구조{A NOVEL SSD ARCHITECTURE FOR FPGA BASED ACCELERATION}
본 발명은 저장 장치에 관한 것으로, 좀 더 상세하게는 추가의 하드웨어를 사용하여 솔리드 스테이트 드라이브(SSD) 성능을 가속화시키는 것에 관한 것이다.
종래 방식으로 저장 장치를 사용하는 것이 비효율적인 경우가 있다. 예로서, 데이터베이스에서 쿼리를 실행하는 것이 필요한 경우가 고려된다. 종래의 해결책은 데이터 베이스를 컴퓨터의 메모리에 로드하고, 데이터베이스의 메모리 내 복사본에 대해 쿼리를 수행한 이후, 결과를 처리하는 것이다. 데이터베이스가 상대적으로 작은 경우 이러한 방식이 합리적일 수 있지만, 쿼리의 결과가 데이터베이스의 하나의 기록을 식별하는 수천, 수백만 이상의 기록을 포함하는 데이터베이스를 로딩하는 것은 매우 비효율적이다. 쿼리를 수행하기 위해 방대한 양의 데이터를 메모리로 옮겨야 하고, 이미 메모리에 저장된 다른 데이터를 대체 할 수 있다. 쿼리가 완료된 후에는 대부분의 데이터가 필요 없기 때문에, 쿼리가 수행되면 대부분의 데이터는 삭제된다. 데이터베이스에 대해 반복적으로 쿼리가 수행되어야 될 때 문제가 확대될 수 있다: 각 쿼리는 데이터 베이스가 메모리로 다시 로딩되도록 요구할 수 있다.
저장 장치와 관련된 동작들을 가속화 할 방법이 필요하다.
본 개시의 실시 예들은 FPGA 기반 가속화를 위한 저비용 및 저전력의 SSD 구조를 제공할 수 있다.
일 실시 예는 시스템을 제공하는데, 이 시스템은 응용 프로그램을 실행하는 프로세서, 프로세서 상에서 실행되는 응용 프로그램에 의해 사용되는 데이터를 저장하는 메모리, 프로세서와 통신하기 위한 업스트림 엔드 포인트, 저장 장치와 통신하기 위한 제 1 다운스트림 루트 포트, 저장 장치와 통신하기 위한 제 2 다운스트림 루트 포트 및 하드웨어를 사용하여 구현되고 가속 명령을 실행하기 위한 APM-F(Acceleration Platform Manager)를 포함하는 가속 모듈을 포함할 수 있다. 저장 장치는 가속 모듈과 통신하기 위한 저장 장치의 제 1 엔드 포인트, 가속 모듈과 통신하기 위한 저장 장치의 제 2 엔드 포인트, 저장 장치의 동작들을 관리하기 위한 컨트롤러, 응용 프로그램에 대한 응용 데이터를 저장하기 위한 저장소 및 가속 명령을 실행하는데 APM-F를 보조하기 위한 APM-S(storage device Acceleration Platform Manager)를 포함할 수 있다. 프로세서, 가속 모듈 및 저장 장치는 PCIe(Peripheral Component Interconnect Exchange) 버스를 통해 통신할 수 있다. 가속 모듈은 응용 데이터를 메모리로 로딩함이 없이 응용 프로그램을 위한 저장 장치 상의 응용 데이터에 대해 가속 명령을 수행할 수 있다.
다른 실시 예는 하드웨어를 이용하여 구현된 가속 모듈을 제공하는데, 가속 모듈은 가속 명령을 실행하는 APM-F, 프로세서와 통신하기 위한 업스트림 인터페이스, 가속 명령을 실행하는데 APM-F를 보조하기 위한 APM-S를 포함하는 저장 장치와 통신하기 위한 제 1 다운스트림 인터페이스 및 가속 명령을 실행하는데 APM-F를 보조하기 위한 APM-S를 포함하는 저장 장치와 통신하기 위한 제 2 다운스트림 인터페이스를 포함할 수 있다. 프로세서 상에서 응용 프로그램이 실행될 수 있다. 가속 모듈은 PCIe(Peripheral Component Interconnect Exchange) 버스를 사용하여 프로세서 및 저장 장치와 통신할 수 있다. 가속 모듈은 프로세서와 연관된 메모리로 응용 데이터를 로딩하는 것 없이 응용 프로그램에 대한 저장 장치 상의 응용 데이터에 대해 가속 명령을 수행할 수 있다.
또 다른 실시 예는 방법을 제공하는데, 방법은 가속 모듈에서 저장 장치로부터 제 1 PCIe 트랜잭션을 수신하는 단계, 제 1 PCIe 트랜잭션이 가속 모듈의 제 1 다운스트림 루트 포트에서 수신되는지 가속 모듈의 제 2 다운스트림 루트 포트로 수신되는지를 판단하는 단계, 제 1 PCIe 트랜잭션이 가속 모듈의 제 1 다운스트림 루트 포트에서 수신되는 것으로 판단하는 것에 적어도 부분적으로 기초하여, 가속 모듈의 업스트림 엔드 포인트를 사용하여 제 1 PCIe 트랜잭션을 프로세서로 전송하는 단계 및 제 1 PCIe 트랜잭션이 가속 모듈의 제 2 다운스트림 루트 포트에서 수신되는 것으로 판단하는 것에 적어도 부분적으로 기초하여, 제 1 PCIe 트랜잭션을 가속 모듈의 APM-F에서 처리하는 단계를 포함할 수 있다. 가속 모듈은 프로세서와 연관된 메모리로 응용 데이터를 로딩함이 없이 응용 프로그램에 대한 저장 장치상의 응용 데이터에 대해 가속 명령을 수행하는 것을 지원할 수 있다. 프로세서, 가속 모듈 및 저장 장치는 PCIe 버스를 사용하여 통신할 수 있다.
여기에서 개시되는 시스템은 데이터를 로드할 수 있는 가속 모듈을 포함할 수 있다. 따라서, 본 발명은 SSD에서 데이터를 로드하는데 발생하는 지연을 방지할 수 있다.
도 1은 본 발명의 일 실시 예에 따라 저장 장치상의 가속되는 동작들을 지원하는 기계를 도시한다.
도 2는 도 1의 기계의 추가적인 세부 사항을 도시한다.
도 3은 본 발명의 제 1 실시 예에 따라, 도 1의 가속 모듈의 구성들 및 도 1의 저장 장치를 도시한다.
도 4는 본 발명의 제 1 실시 예에 따라, 도 1의 시스템에서 명령들을 가속화하기 위한 메모리 사용을 도시한다.
도 5는 본 발명의 제 2 실시 예에 따라, 도 1의 가속 모듈의 구성들을 도시한다.
도 6은 본 발명의 제 2 실시 예에 따라, 도 1의 시스템에서 명령들을 가속화하기 위한 메모리 사용을 도시한다.
도 7은 본 발명의 제 3 실시 예에 따라, 도 1의 가속 모듈의 구성 요소들 및 도 1의 저장 장치를 도시한다.
도 8은 본 발명의 제 3 실시 예에 따라 도 1의 시스템에서 명령들을 가속화하기 위한 메모리 사용을 도시한다.
도 9는 본 발명의 제 4 실시 예에 따라 도 1의 가속 모듈의 구성 요소들 및 도 1의 저장 장치를 도시한다.
도 10은 본 발명의 제 4 실시 예에 따라 도 1의 시스템에서 명령들을 가속화하기 위한 메모리 사용을 도시한다.
도 11은 본 발명의 제 5 실시 예에 따라 도 1의 가속 모듈의 구성 요소들 및 도 1의 저장 장치를 도시한다.
도 12는 본 발명의 제 5 실시 예에 따라 도 1의 시스템에서 명령들을 가속화하기 위한 메모리 사용을 도시한다.
도 13은 본 발명의 제 6 실시 예에 따라 도 1의 가속 모듈의 구성 요소들 및 도 1의 저장 장치를 도시한다.
도 14는 본 발명의 제 6 실시 예에 따라 도 1의 시스템에서 명령들을 가속화하기 위한 메모리 사용을 도시한다.
도 15는 본 발명의 제 7 실시 예에 따라 도 1의 가속 모듈의 구성 요소들 및 도 1의 저장 장치를 도시한다.
도 16은 본 발명의 제 7 실시 예에 따라 도 1의 시스템에서 명령들을 가속화하기 위한 메모리 사용을 도시한다.
도 17는 본 발명의 제 8 실시 예에 따라 도 1의 가속 모듈의 구성 요소들 및 도 1의 저장 장치를 도시한다.
도 18은 본 발명의 제 8 실시 예에 따라 도 1의 시스템에서 명령들을 가속화하기 위한 메모리 사용을 도시한다.
도 19는 본 발명의 실시 예에 따라 도 1의 시스템의 구성들 및 도 1의 가속 모듈과의 통신을 관리하는 브리징 구성 요소들을 도시한다.
도 20a 및 도 20b는 본 발명의 실시 예에 따라 도 1의 프로세서, 도 1의 가속 모듈, 도 1의 저장 장치간의 통신을 도시한다.
도 21은 본 발명의 실시 예에 따라 PCIe 트랜잭션을 처리하기 위한 도 1의 가속 모듈에 대한 예시적인 절차의 흐름도이다.
도 22a 내지 도 22c는 본 발명의 실시 예에 따라 PCIe 트랜잭션을 처리하기 위한 도 1의 가속 모듈에 대한 예시적인 절차의 보다 상세한 흐름도이다.
도 23a 내지 23b는 본 발명의 실시 예에 따라 PCIe 트랜잭션이 가속 명령을 포함하는 도 1의 프로세서로부터 오는 것인지 여부를 판단하기 위해 가속 모듈에 대한 예시적인 절차의 흐름도를 도시한다.
도 24는 본 발명의 실시 예에 따라 PCIe 트랜잭션이 가속 명령을 포함하는 도 1의 저장 장치로부터 오는 것인지 여부를 판단하기 위해 가속 모듈에 대한 예시적인 절차의 흐름도를 도시한다.
도 25는 본 발명의 실시 예에 따라 PCIe 트랜잭션이 가속 명령을 포함하는 도 1의 프로세서로부터 오는 것인지 여부를 판단하기 위한 제 1 브리징 구성 요소에 대한 예시적인 절차의 흐름도를 도시한다.
도 26은 본 발명의 실시 예에 따라 PCIe 트랜잭션이 가속 명령을 포함하는 도 1의 저장 장치로부터 오는 것인지 여부를 판단하기 위한 도 19의 제 2 브리징 구성 요소에 대한 예시적인 절차의 흐름도를 도시한다.
도 27a 내지 도 27c는 본 발명의 실시 예에 따라 도 1의 스토리지 장치가 PCIe 트랜잭션을 처리하기 위한 예시적인 절차의 흐름도를 도시한다.
도 28a 내지 도 28b는 본 발명의 실시 예에 따라 도 1의 저장 장치가 도1의가속 모듈로부터 나오는 PCIe 트랜잭션이 가속 명령을 포함하는지 여부를 판단하기 위한 예시적인 절차의 흐름도를 도시한다.
본 발명의 기술적 사상의 실시 예들이 참조되며, 이들의 예들이 첨부된 도면들에 도시된다. 후술되는 상세한 설명에서, 다양한 특정한 상세들이 본 발명의 기술적 사상의 충분한 이해를 돕기 위하여 제공된다. 그러나 이 분야에 통상적인 기술을 가진 자들은 이러한 특정한 상세들 없이도 본 발명의 기술적 사상을 구현할 수 있다. 다른 예들로서, 잘 알려진 방법들, 절차들, 구성들, 회로들, 그리고 네트워크들은 실시 예들의 측면들을 불필요하게 모호하게 하지 않기 위해 상세하게 설명되지 않는다.
여기에서 제1, 제2 등과 같은 용어들이 다양한 원소들을 설명하기 위하여 사용되지만, 이러한 원소들은 이러한 용어들에 의해 한정되지 않는다. 이러한 용어들은 하나의 원소를 다른 하나의 원소와 구별하기 위해서만 사용된다. 예로써, 본 발명의 기술적 사상의 범위로부터 멀어지지 않으면서 제1 모듈은 제2 모듈로 명명될 수 있다. 마찬가지로, 제2 모듈은 제1 모듈로 명명될 수 있다.
본 발명의 기술적 사상의 설명에서 사용되는 용어들은 특정한 실시 예들을 설명하기 위한 목적으로만 사용되며, 본 발명의 기술적 사상을 한정하는 것으로 의도되지 않는다. 본 발명의 기술적 사상의 설명 및 첨부된 청구항들에서 사용되는 바와 같이, 맥락에서 명확하게 명시되지 않으면 단수 표현들은 복수 표현들 또한 포함하는 것으로 의도된다. "그리고/또는"의 용어는 하나 또는 그보다 많은 연관된 항목들의 임의의 그리고 가능한 모든 조합들을 포함하는 것으로 참조된다. "포함한다" 그리고/또는 "포함하는"의 용어들은 상세한 설명에서 사용된 때에 언급된 특성들, 정수들, 단계들, 동작들, 원소들, 그리고/또는 구성들의 존재를 명시하며, 하나 또는 그보다 많은 다른 특성들, 정수들, 단계들, 동작들, 원소들, 구성들, 그리고/또는 그것들의 그룹들의 존재 또는 추가를 배제하지 않는다. 도면들의 구성들 및 특성들은 실제 비율에 필수적으로 비례하지 않는다.
본 발명의 실시 예들은 특정 데이터 처리 기능을 가속하기 위해 FPGA(Field Programmable Gate Array)가 사용되는 SSD(Solid State Drive) 또는 다른 저장 장치 구조를 제안한다. FPGA 장치는 PCIe(Peripheral Component Interconnect Express) 호스트 인터페이스를 제공하는 SSD의 앞 또는 옆에 배치된다. 호스트 트랜잭션(host transactions)이 FPGA PCIe 인터페이스에서 수신되면, PCIe 트랜잭션은 백엔드 SSD 컨트롤러(backend SSD controller)로 전달된다. "SSD"및 "SSD 컨트롤러"라는 용어는 명시된 경우를 제외하고는 일반적으로 동일한 의미로 사용된다. 백엔드 SSD는 PCIe 엔드 포인트 및 비휘발성 메모리 익스프레스(NVMe) 컨트롤러를 구현한다. 따라서, 호스트는 직접 NVMe 프로토콜을 백엔드 SSD로 전달한다. 즉, FPGA를 통해 호스트로부터 백엔드 SSD로 연결되는 PCIe 인터페이스는 통과(pass-through) 특성이다. SSD는 직접 메모리 액세스(DMA)를 통해 호스트 시스템 메모리와 데이터 전송을 수행한다. FPGA 다운스트림 포트(DSP)는 PCIe 트랜잭션 필터로써 사용되는 메모리 필터 주소 범위(FAR)로 프로그래밍된다. DSP는 FAR 윈도우에 속하는 모든 PCIe 트랜잭션을 필터링하고, 그것들을 FPGA의 로직 및 메모리로 전달한다. 프로그래밍된 FAR 창에 속하지 않는 모든 PCIe 트랜잭션은 호스트 시스템 메모리에 속하고 호스트로 직접 전달된다. SSD 컨트롤러는 PCIe VDM(Vendor Defined Message) 메커니즘 또는 I2C / SM버스와 같은 다른 사이드대역 버스를 사용하여 FPGA에서 적절한 FAR 윈도우를 프로그램한다. SSD 컨트롤러는 PCIe BAR(Base Address Register)을 통해 호스트로 주소 범위의 블록을 요청한다. 호스트 BIOS가 요청 된 주소 블록에 SSD 컨트롤러를 할당 한 후, SSD 컨트롤러는 FPGA DSP에서 해당 주소 범위의 하위 집합을 FAR 창으로 프로그램한다. DSP에 프로그래밍된 주소 범위는 SSD 컨트롤러와 FPGA가 서로 통신하기 위해 사용된다. 즉, 호스트가 주소 블록을 할당하면, SSD와 FPGA가 PCIe 계층에서 서로 또는 다른 PCIe 장치들을 간섭하지 않고 호스트 트랜잭션과 PCIe 버스를 공유 할 수 있다. SSD 컨트롤러는 공유 PCIe 버스를 통해 FAR 창을 사용하여 FPGA에 가속 명령과 데이터를 제공할 수 있다. FPGA 또는 호스트가 공유 PCIe 버스 및 위에서 언급된 주소 범위를 사용하여 SSD 컨트롤러로부터 가속을 위한 데이터를 요청할 수도 있다. FPGA는 동일한 메커니즘을 사용하여 가속 결과들을 SSD 컨트롤러로 다시 제공 할 수도 있다. 제안 된 구조 및 메커니즘은 저비용 및 FPGA 디바이스를 사용하는 SSD 기반 애플리케이션 가속을 위한 저전력 해결책을 구현할 수 있다.
제안된 해결책의 세부 사항
기본적인 아이디어는 FPGA와 SSD(및/또는 다른 저장 장치)가 호스트와 통신하면서(별도의 장치들로써 또는 단일 장치로 병합하여) 함께 작동한다는 것이다. 이하, 설명들에서 저장 장치는 SSD를 의미한다. 세 가지 트래픽 스트림이 있다.
1) 호스트에서 저장 장치로. 호스트로부터 저장 장치로의 통신은 FPGA 구현에 따라 FPGA를 통해 저장 장치의 EP로 전송되는 모든 트래픽을 업스트림 포트(USP) 또는 엔드 포인트(EP)로부터 다운스트림 포트(DSP) 또는 루트 포트 또는 루트 복합 포트(RP)로 단순하게 전송함으로써 FPGA에 의해 관리된다. FPGA는 호스트와 저장 장치 간의 NVMe 통신을 지원하기 위해 저장 장치에 의해 호스트로 노출되는 물리 함수를 포함할 수 있다.
2) FPGA에 대한 가속 명령의 통신. 본 발명의 몇몇 실시 예들에서, 가속 명령은 다음 방식으로 처리된다: 가속 서비스 관리자(ASM)가 호스트상에서 실행될 수 있다. ASM은 저장 장치(APM-S로써 식별 됨)와 FPGA(APM-F로써 식별 됨) 모두의 일부로써 구성들을 포함 할 수 있는 APM(Acceleration Platform Manager)과 통신 할 수 있다. 호스트상의 ASM은 가속 명령 및 관련 정보를 SSD로 전송하기 위해 NVMe 프로토콜을 사용할 수 있다. 그 다음에 SSD는 FPGA와 관련된 가속 오케스트레이터(orchestrator)처럼 동작한다. APM-S에 의해 허용되는 모든 가속 명령은 독점적인 인터페이스를 사용하여 APM-F에 적절한 명령을 제공하기 위해 사용된다. 독점적인 인터페이스는 주소 공간 창을 사용하여 가능하게 된다. 이 주소 공간 창은 저장 장치의 요청에 따라 호스트 메모리 주소 맵 내에 할당 될 수 있다(부분적으로는 저장 장치와 호스트 사이의 NVMe 프로토콜을 사용하여 통신을 용이하게 하기 위해). 적절한 주소 공간에서 주소를 사용하는 명령은 호스트나 저장 장치로부터 다른 모듈로 직접 통신하는 대신 APM-F에 의한 처리를 위해 FPGA에 의해 필터링될 수 있다. 필터링은 명령과 관련된 태그를 사용하거나 PCIe 메세지 기반 필터링을 사용하여 수행될수도 있다. 이 필터링은 FPGA를 저장 장치로 연결하는 DSP/RP로 연결된 필터에 의해 수행 될 수 있다.
3) 해당 데이터의 가속 및 처리를 위해 데이터를 가져오기 위한 FPGA와 SSD 사이의 통신. 본 발명의 몇몇 실시 예들에서, 가속화는 다음의 방법으로 수행된다: FPGA가 가속화 처리를 위해 데이터를 가져오기를 원할 때, FPGA는 위에서 논의된 대로 저장 장치-FPGA 통신을 위해 사용되는 호스트 메모리 주소 맵 내에 할당된 주소 공간을 사용하여 요청을 보낼 수 있다.
DSP 필터 구조
이 구조는 가속화된 데이터 처리를 위해 호스트와 SSD 사이의 PCIe 버스가 FPGA와 공유될 수 있는 방법을 제안한다. 논리적으로 말해서. FPGA는 호스트와 SSD 컨트롤러 사이에 동작 가능하게 배치된다. 호스트는 FPGA의 업 스트림 포트(USP)로 연결되고 SSD는 FPGA의 다운스트림 포트(DSP)로 연결돤다. 호스트 및/또는 SSD로 연결하기 위해 사용되는 PCIe 버스는 x4 또는 x8레인(lanes) 또는 기타 원하는 너비일 수 있다. FPGA USP 및 DSP 포트는 두 방향 모두에서 PCIe 트랜잭션(즉, 트랜잭션 계층 패킷들(TLPs))을 전달한다. PCIe TLP의 예들은 구성 읽기, 구성 쓰기, 메모리 읽기 및 메모리 쓰기이다. 따라서, 호스트는 SSD와 직접 통신한다. FPGA 상의 DSP 포트는 프로그램된 필터 주소 범위(FAR)를 기반으로 SSD 컨트롤러로부터 오는 모든 PCIe 트랜잭션을 필터링하는 로직을 갖는다. 차단된 SSD 컨트롤러 PCIe 트랜잭션은 가속 플랫폼 관리자(Acceleration Platform Manager)-FPGA(APM-F) 블록으로 전달된다. APM-F 모듈은 SSD 컨트롤러와 통신한다. APM-F 모듈은 SSD 컨트롤러로부터의 가속 플랫폼 관리자-SSD(APM-S) 펌웨어로부터 데이터 및 가속 명령을 수신한다. 그 이후에 APM-F 모듈은 수신된 가속 명령 및 데이터를 런타임(RT) 스케쥴러로 제공한다. RT 스케쥴러는 데이터 처리를 수행하기 위해 적절한 가속 엔진들을 차례로 프로그램한다.
FPGA의 사용은 하나의 가능한 구현을 나타내지만 FPGA 이외의 구현들이 사용될 수 있다. FPGA는 저장 장치 내에 구현 될 수 있다. FPGA는 호스트 메모리로 데이터를 가져온 다음 호스트에서 데이터를 처리하는 것보다는 저장 장치에 가깝게 수행될 수 있는 가속화된 데이터 처리를 지원한다. 데이터를 가져오는 대신에, 저장 장치/FPGA는 쿼리를 수신하고 처리를 국부적으로 수행 할 수 있다.
SSD 컨트롤러는 PCIe 전송을 사용하여 NVMe 프로토콜 처리 로직을 구현한다. PCIe 구성의 일부로써, SSD 컨트롤러는 그것 자체의 용도로 호스트 시스템 주소 맵의 블록을 요청한다. SSD 컨트롤러는 NVMe 프로토콜을 지원하기 위해 일반적으로 필요한 것보다 큰 블록을 요청한다. 저장 장치와 FPGA 간의 통신을 관리 하기 위해 추가 공간의 일부 또는 전부가 사용될 수 있다. 예로써, NVMe 프로토콜은 64KB 주소 공간이 필요할 수 있다. 제안된 구조에서 SSD 컨트롤러는 10MB 주소 블록을 요청할 수 있다. SSD 컨트롤러는 호스트 투명한 방식으로 FPGA와 통신하기 위해 할당된 주소 맵의 일부를 사용한다. SSD-FPGA 통신을 위해 예약된 시스템 주소 맵의 서브 세트를 필터 주소 범위(FAR)로 지칭한다. 그 이후에 SSD 컨트롤러는 FPGA DSP에서 FAR 창을 프로그램한다. SSD 컨트롤러는 FPGA의 FAR 윈도우를 프로그래밍하기 위해 I2C 버스 또는 SM버스와 같은 사이드대역 버스를 사용할 수 있다. SSD 컨트롤러는 FPGA의 FAR 창을 프로그래밍하기 위해 PCIe VDM(Vendor Defined Messages)을 사용할 수도 있다.
호스트 인터페이스 로직(HIL) 모듈은 NVMe 프로토콜을 구현하고 호스트 상에서 실행중인 NVMe 드라이버와 통신한다. HIL 모듈은 일반적인 호스트 NVMe 명령을 실행하기 위해 FTL(Flash Translation Layer)과 상호 작용한다. 추가로, HIL 모듈은 호스트 측으로부터 수신된 특정 가속 커맨드를 가로채고 그것들을 APM-S 모듈로 전달한다. APM-S는 펌웨어 또는 펌웨어+하드웨어로써 구현 될 수 있다. APM-S 모듈은 특정 가속 커맨드를 처리한 다음 가속 명령과 데이터를 FPGA상의 APM-F 모듈로 보내기 위해 준비 할 수 있다. APM-S 모듈은 가속 정보를 FPGA로 보내기 위해 FAR(Filter Address Range) 주소를 사용한다. APM-S와 APM-F 간의 통신은 메세지 기반일 수 있다. 이러한 APM-S와 APM-F간의 통신을 위해 여러 가지 방법들을 사용하는 것이 가능하다.
제안된 구조 및 메커니즘은 FPGA-기반 가속화를 가능하게 하기 위해 SSD 컨트롤러가 호스트 PCIe 버스를 공유하는 것을 허용 한다. 본 발명의 실시 예들은 SSD에서 FPGA를 사용하는 애플리케이션 가속화를 위한 저비용 및 저전력 해결책을 제공한다.
DSP+USP 필터 구조
이 구조에서, FPGA는 간접적인 방식으로 호스트에 표시된다. FPGA와 SSD 간의 통신은 제안된 솔루션 1과 동일하게 유지된다. SSD 컨트롤러는 호스트로부터 큰 시스템 주소 공간을 요청할 수 있다. SSD 컨트롤러는 할당 된 주소 블록을 세 개의 창으로 나눌 수 있다. 첫 번째 창은 NVMe Controller 레지스터 주소 공간을 위해 사용된다. 두 번째 창은 위에서 설명한대로 FPGA와 SSD 간의 통신을 위해 사용된다. 세 번째 창은 호스트와 FPGA 간의 통신을 위한 것이다. 호스트는 특정 NVMe 레지스터로부터 FPGA 디바이스의 위치를 발견 할 수 있다. SSD 컨트롤러는 FPGA 장치의 위치를 알기 위해 호스트 어플리케이션에 의해 독출되는 특정 레지스터의 세 번째 창을 광고할 수 있다. SSD 컨트롤러는 USP가 이러한 트랜잭션을 필터링 할 수 있도록 동일한 주소 창으로 USP를 프로그래밍 할 수도 있다. USP는 세 번째 창의 주소 공간에 속하는 호스트의 모든 트랜잭션을 필터링하여 FPGA 가속 로직으로 전달할 수 있다. 이 메커니즘은 호스트 상의 가속 서비스 관리자(ASM)가 가속 명령 및 데이터를 FPGA에 전송하기 위해 사용할 수 있다.
따라서, 본 발명의 몇몇 실시 예들에서, 필터링은 또한, 호스트로부터 FPGA에 의해 수신된 트래픽에 기초하여 수행 될 수 있다. 즉, 호스트는 가속 명령/데이터를 FPGA로 보낼 수도 있다. FPGA의 DSP 또는 FPGA의 RP로 연결된 것과 유사한 필터가 FPGA의 USP 또는 FPGA의 EP로도 연결될 수 있다. 호스트는 저장 장치에 의해 요청된 주소 공간의 주소를 사용할 수 있다. 호스트-FPGA 통신을 위해 호스트에 의해 사용된 주소는 호스트(다시 말하지만, 요청 된 주소 공간은 NVMe 통신에 필요한 공간보다 클 수 있다) 또는 호스트 메모리 주소 맵 내의 별도의 주소 공간의 일부(가상 함수 또는 두 번째 물리 함수 중 하나, 둘 중 하나는 저장 장치에 의해 호스트로 노출 됨)와의 NVMe 통신을 위해 저장 장치에 의해 요청된 주소 공간의 일부일 수 있다. USP 또는 EP 및 DSP 또는 RP에서 필터링은 호스트 메모리 주소 맵 내에서 다른 주소 범위를 사용하여 수행될 수 있으므로 (저장 장치가 필요에 따라 FPGA와 통신하도록 허락하는 동안에도) 호스트가 필요에 따라 저장 장치 또는 FPGA로 명령을 보낼 수 있는 것을 유의하라.
주소 공간의 일부가 호스트와 FPGA 간의 통신을 지원하는 본 발명의 몇몇 실시 예들에서, FPGA는 호스트에서 직접 나타나지 않을 수 있다. 이 경우, 호스트 상의 ASM은 호스트 FPGA 통신에 사용되는 주소 범위를 식별하는 NVMe 주소 공간의 특정 레지스터에 기록된 주소에 접근함으로써 FPGA를 "발견"할 수 있다. ASM은 PCIe 장치 테이블을 통해 저장 장치를 발견할 수 있고, 거기에서 NVMe 주소 공간의 어느 레지스터가 호스트-FPGA 통신 주소 공간에 대한 포인터를 저장하는지 알 수 있다.
VF+DSP 필터 구조
이 FPGA+SSD 구조에서, SSD는 하나의 물리 함수(PF)와 하나의 가상 함수(VF)을 호스트로 노출시킨다. SSD 컨트롤러는 PF를 통해 노출된다. VF는 FPGA를 노출시키기 위해 사용된다. PF 클래스 코드는 대용량 저장 장치를 나타낼 수 있는 반면 VF 클래스 코드는 FPGA를 식별하기 위해 설정될 수 있다. SSD 컨트롤러 PF는 대형 시스템 메모리 주소 블록을 요청하여 메모리 주소 블록의 서브 세트가 FPGA DSP를 통해 FPGA와 SSD 사이의 통신에 사용될 수 있고, SSD 컨트롤러 VF는 FPGA USP를 통해 FPGA와 호스트 간의 통신을 위해 그것의 자체의 메모리 주소 블록을 요청할 수 있다.
FPGA USP는 PCIe 트랜잭션 필터로써 사용될 수 있는 다른 메모리 필터 주소 범위 및/또는 VF 태그(FAR-USP)로 프로그래밍 될 수 있다. USP는 FAR 윈도우 속하는 모든 PCIe 트랜잭션 및/또는 VF에 에 속하는 모든 PCIe 트랜잭션을 필터링 할 수 있으며 이를 FPGA의 가속 로직 및 메모리로 전달할 수 있다. 프로그래밍된 FAR-USP 윈도우에 속하지 않는 모든 PCIe 트랜잭션 또는 VF에 속하지 않는 트랜잭션은 SSD에 속하며, SSD로 직접 전달 될 수 있다. SSD 컨트롤러는 이 정보를 전송하기 위해 PCIe VDM 메커니즘 또는 I2C/SM버스와 같은 다른 사이드대역 버스를 사용하는 적절한 FAR-USP 윈도우를 프로그래밍 할 수 있다.
이 FAR 주소 창은 호스트 상에서 실행중인 ASM 소프트웨어가 APM-F와 통신하는 것을 가능하게 한다. 즉, FPGA는 호스트로 직접 나타날 수 있다. ASM 소프트웨어는 가속 오케스트레이션 명령과 데이터를 FPGA로 보내기 위해 이 PCIe 주소 범위를 사용할 수 있다. 그 이후에 APM-F는 수신된 가속 명령 및 데이터를 런타임(RT) 스케쥴러로 제공 할 수 있다. RT 스케쥴러는 데이터 처리를 수행하기 위해 적절한 가속 엔진들을 차례로 프로그래밍한다. 또한, APM-F는 호스트 메모리 또는 SSD 저장소로부터 데이터를 가져올 수 있다.
PF+DSP 필터 구조
이 FPGA+SSD 구조는 VF를 사용하는 것 대신 제 2 PF를 사용하여 FPGA를 호스트로 노출시키는 것을 제외하고 제안된 솔루션 3과 유사하다. SSD 컨트롤러는 두 가지 물리 함수를 호스트로 노출시킨다. 제 1 PF는 SSD 컨트롤러를 위해 사용되고 제 2 PF는 FPGA를 위해 사용될 수 있다. 제 2 PF의 기본 주소는 FPGA의 FAR-USP로 프로그래밍 될 수 있다. 따라서, USP는 제 2 PF에 대해 프로그래밍된 주소 범위(FAR-USP)에 있는 호스트로부터 오는 모든 트랜잭션을 필터링할 수 있고, 그것들을 FPGA로 전달할 수 있다. 이 메커니즘은 FPGA와 통신하기 위해 호스트 상에서 실행중인 ASM에 의해 사용될 수 있다.
가상 함수 또는(제 2)물리 함수를 호스트로 노출시킴으로써, 호스트-FPGA 통신을 위한 주소 공간이 호스트(저장 장치에 의하거나 FPGA에 의해)로부터 요구 될 수 있다. 가상 함수 또는 제 2 물리적 함수가 노출된 경우 USP/EP의 필터는 호스트-FIFI 통신에 할당된 주소 범위를 기반으로 또는 노출된 가상 함수 또는 노출된 제 2 물리적 함수(예로서, 필터 번호 또는 다른 태그에 의해)를 기반으로 필터링 할 수 있다. (가상 함수는 운영 체제 지원을 요구한다; 제 2 실제 함수가 구현되거나 지원되는 경우, 제 2 물리적 함수를 노출하는 것은 가상 함수 사용에 대한 대체 해결책을 제안한다.)
PF + RP 필터 구조
이 FPGA SSD 구조에서, FPGA PCIe 포트들은 USP 및 DSP가 아닌 EP(endpoint) 및 RP(root port)이다. USP/DSP와 EP/RP 포트들의 차이점은 EP/RP 모두는 그것들 자체의 PCIe 구성 공간을 갖는 반면, USP/DSP 포트들은 그렇지 않다는 것이다. 본 발명의 이러한 실시 예들에 따른 구조에서, FPGA는 2개의 PF를 호스트로 노출시킬 수 있다(SSD가 FPGA를 노출시키는 PF/VF를 제공하기 보다 FPGA가 그것 자신의 PF를 호스트로 노출시키는 것에 주목한다). SSD EP는 FPGA 상의 RP로 연결될 수 있다. 제 1 FPGA EP PF는 호스트를 SSD로 직접 연결하기 위해 사용될 수 있는 반면, 제 2 FPGA EP PF는 호스트를 FPGA로 연결하기 위해 사용될 수 있다. 이 메커니즘은 FPGA와 통신하기 위해 호스트에서 실행중인 ASM에 의해 사용될 수 있다. SSD-FPGA 통신은 FPGA RP와 SSD EP 사이에서 주소 공간 맵의 일부를 사용할 수 있다. 본 발명의 몇몇 실시 예들에서, 제 1 FPGA(PF)는 큰 주소 공간을 요구할 수 있고, BIOS-할당 된 주소 윈도우는 SSD 제어기(EP)로 매핑 또는 변환될 수 있다. 이 주소 공간의 일부는 로컬 FPGA-SSD 통신을 위해 사용될 수 있다. 본 발명의 다른 실시 예에서, 제 2 FPGA EP RF를 위해 할당 된 주소 공간의 부분은 FPGA와 SSD 제어기 간의 통신을 위해 사용될 수 있다.
PF+이중 포트 SSD 구조
이 FPGA-SSD 구조에서, 이중 포트 SSD는 FPGA와 함께 사용된다. 이 구조에서, FPGA(다시 말하면, FPGA는 SSD가 FPGA를 노출시키기는 PF/VF를 제공하기 보다는 그것 자신의 PF를 노출시킨다)는 두 개의 PF를 호스트로 노출시킬 수 있다. SSD EP는 FPGA 상의 RP로 연결될 수 있다. 제 1 FPGA EP PF는 호스트를 SSD로 직접 연결하기 위해 사용될 수 있다. 제 2 FPGA EP PF를 위해 오는 모든 호스트 트랜잭션은 FPGA 가속 로직으로 전달될 수 있다. 호스트 상에서 실행중인 ASM 소프트웨어는 FPGA와 통신하기 위해 제 2 FPGA EP PF를 사용할 수 있다.
FPGA-SSD 통신(가속 처리용)을 위해, SSD의 제 2 PCIe EP가 사용될 수 있다. 따라서, FPGA는 SSD로 연결된 두 개의 RP를 갖는다. SSD의 제 1 EP 포트는 일반적인 호스트 저장소 접근을 위해 호스트와 통신하는데 사용될 수 있다. SSD의 제 2 EP는 처리를 위해 FPGA에 필요한 임의의 데이터를 전송하기 위해 사용될 수 있다.
언급한 바와 같이, 저장 장치가 2개의(또는 잠재적으로 더 많은) 포트를 지원할 수 있는 본 발명의 실시 예들에서, FPGA는 저장 장치상의 2 개의 EP와 통신하기 위해 2개의 RP를 지원할 수 있다. 이러한 본 발명의 실시 예들에서, FPGA상의 하나의 RP(및 그것에 대응하는 저장 장치상의 EP)는 저장 장치와 호스트 사이의 통신을 관리하기 위해 사용될 수 있고, FPGA상의 다른 RP(및 그것에 대응하는 저장 장치상의 EP)는 저장 장치와 FPGA 간의 통신을 관리하기 위해 사용될 수 있다(가속 명령 또는 데이터를 위한). 본 발명의 이러한 실시 예들에서, FPGA상의 RP는 2개의 주소 맵(각 RP마다 하나씩)을 지원할 수 있다. 따라서, 호스트와 저장 장치 간의 통신을 지원하는 RP를 위한 주소 맵은 NVMe 명령을 위해 할당 된 공간을 포함 할 수 있고, 다른 주소 맵(가속 명령/데이터의 통신을 관리하는 RP를 위한)은 전적으로 이러한 통신을 위해 만들어질 수 있다. 본 발명의 이러한 실시 예에서, 호스트 메모리 주소 맵은 호스트가 가속 명령을 저장 장치로 전달하도록 의도된 임의의 주소 공간을 생략할 수 있는데, 이는 이러한 모든 명령이 호스트로부터 FPGA로 전달될 수 있기 때문이다(주소 공간을 통해 FPGA 요청이 이러한 통신을 위한 호스트의 메모리 주소 맵 내에 할당된다). 그 이후에 FPGA는 명령을 처리하고 FPGA와 저장 장치 간의 통신 전용으로 지정된 제 2 RP의 메모리 주소 맵을 사용하여 필요에 따라 명령/데이터를 저장 장치로 전달할 수 있다.
EP/RP들이 FPGA에서 USP/DSP 대신에 사용되는 경우, EP/RP는 PCIe 구성 공간을 지원할 수 있고, FPGA는 그것의 물리 함수를 호스트로 직접 노출시킬 수 있다(이러한 기능을 저장 장치에 남겨 두기 보다) . FPGA에 의해 노출된 하나의 물리 기능은 호스트로부터 저장 장치로의 통신을 지시하기 위해 사용될 수 있다; 다른 물리 기능은 호스트와 FPGA 간의 통신에 사용될 수 있다. 본 발명의 이러한 실시 예들에서, 저장 장치가 이러한 요구를 발생시키기 보다 FPGA는 호스트로부터 할당 될 주소 공간을 요구할 수 있다
EP/RP는 그것들 자체 메모리 맵들을 지원할 수도 있다. 따라서, FPGA는 호스트의 메모리 주소 맵을 사용하여 호스트와 통신 할 수 있고, FPGA는 저장 장치와 통신하는 데 사용되는 그것 자체 메모리 주소 맵을 지원할 수 있다. 본 발명의 이러한 실시 예들에서, FPGA는 호스트로부터 저장 디바이스로의 통신을 지원하기 위해 호스트의 메모리 주소 맵에 공간이 할당되도록 요청할 수 있고(FPGA를 통해 발생하는 그러한 통신과 함께), 추가 공간은 호스트에서 FPGA로의 통신을 지원하기 위해 호스트의 메모리 주소 맵에 할당된다. FPGA의 메모리 주소 맵은 호스트로부터 저장 장치로 명령을 전달하고 FPGA와 저장 장치간에 가속 명령/데이터를 전달하기 위한 그것의 자체 공간 할당을 포함할 수 있다. FPGA는 호스트와 저장 장치 간의 통신을 위해 사용되는 주소 공간을 FPGA와 저장 장치(동일한 크기여야 하는) 간의 통신을 위해 사용되는 주소 공간으로 변환 할 수 있다.
FPGA가 EP들/RP들을 포함하는 경우, 호스트는 FPGA를 직접 본다. 이것은 어떤 PCIe 기능들이 FPGA에 의해 노출되는 문제를 제기한다. FPGA는 저장 장치와 동일한 PCIe 기능들을 노출시켜야 한다. 따라서 FPGA는 저장 장치의 SSD 컨트롤러 EP PCIe 구성을 매칭하기 위해 FPGA의 EP PCIe 구성을 설정하는 PCIe 구성 모니터를 포함할 수 있다. 또한, 호스트가 FPGA의 EP의 PCIe 구성을 변경하는 경우, 저장 장치의 EP의 PCIe 구성은 유사하게 수정 될 수 있다.
본 발명의 실시 예들은 전체 기능이 유지된다면 FPGA 내에서 기술 된 바와 같은 구성들/기능을 다수의 개별 요소들로 분할하는 것을 지원할 수 있다. FPGA 구성들은 하드웨어, 소프트웨어/펌웨어 또는 이 둘의 조합을 사용하여 구현 될 수 있다.
도 1에는, 기계(105)가 도시된다. 기계(105)는 프로세서(110)를 포함할 수 있다. 프로세서(110)는 임의의 다양한 프로세서 일 수 있다: 예로써, Intel Xeon, Celeron, Itanium 또는 Atom 프로세서, AMD Opteron 프로세서, ARM 프로세서 등. 도 1은 기계(105) 내의 단일 프로세서(110)를 도시하고, 기계(105)는 각각 단일 코어 또는 멀티 코어 프로세서 일 수 있는 임의의 수의 프로세서들을 포함 할 수 있고, 임의의 원하는 조합으로 혼합 될 수 있다. 프로세서(110)는 저장 장치(120)에 대한 접근을 지원할 수 있는 장치 드라이버(115)를 실행할 수 있고, 상이한 장치 드라이버들은 기계(105)의 다른 구성들에 대한 접근을 지원할 수 있다. 이 문서 전반에 걸쳐, 저장 장치(120)는 SSD(Solid State Drive) (120)로서 설명될 수 있지만, 저장 장치(120)는 이하의 본 발명의 실시 예에서 설명 된 가속화된 명령을 지원하는 임의의 다른 유형의 저장 장치일 수 있다. 프로세서(110)는 또한 가속 명령을 포함하는 임의의 응용 프로그램 일 수 있는 응용 프로그램(125) 및 저장 장치(120) 상에 저장된 데이터에 대해 수행되는 가속 명령을 전송하기 위해 사용될 수 있는 애플리케이션 서비스 관리자(ASM, 130)를 실행할 수 있다.
기계(105)는 또한 메인 메모리(140)에 대한 접근을 관리하기 위해 사용될 수 있는 메모리 제어기(135)를 포함 할 수 있다. 메모리(140)는 플래시 메모리, 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), 영구 랜덤 접근 메모리, 강유전체 랜덤 접근 메모리(FRAM), 또는 자기 랜덤 접근 메모리(MRAM) 등과 같은 불휘발성 랜덤 접근 메모리(NVRAM)와 같은 임의의 다른 유형의 메모리 일 수 있다. 메모리(140)는 또한 다른 메모리 유형의 임의의 원하는 조합일 수 있다.
기계(105)는 또한 가속 모듈(145)을 포함할 수 있다. 가속 모듈(145)은 저장 장치(120)에 저장된 데이터에 대해 프로세서(110)에 의해 요청된 대로 가속 명령을 수행함으로써 프로세서(110)를 보조할 수 있다. 가속 모듈(145)은 펌웨어 단독 또는 하드웨어 및 펌웨어를 결합하여 사용하여 구현될 수 있다. 이 문서 전반에 걸쳐, 가속 모듈(145)은 FPGA(Field Programmable Gate Array, 145)로서 설명 될 것이지만, 가속 모듈(145)은 이하의 본 발명의 실시 예에서 설명되는 것처럼 가속 명령을 지원하는 임의의 다른 유형의 가속 모듈일 수 있다. 예로써, 가속 모듈(145)은 ASIC(Application-Specific Integrated Circuit), GPU(Graphics Processing Unit), SSD의 ISC(In-Storage Computing) 능력 또는 다른 구현들로써 구현되거나 이들을 사용하여 구현될 수 있다.
또한, 도 1은 기계(105)를 서버(독립형 또는 랙 서버 일 수 있는)로서 도시하지만, 본 발명의 실시 예들은 임의의 원하는 유형의 기계(105)를 제한없이 포함할 수 있다. 예로써, 기계(105)는 데스크탑 또는 랩탑 컴퓨터 또는 본 발명의 실시 예들로부터 이익을 얻을 수 있는 임의의 다른 기계로 대체 될 수 있다. 기계(105)는 또한 특수화 된 휴대용 컴퓨팅 기계들, 태블릿 컴퓨터들, 스마트 폰들 및 다른 컴퓨팅 기계들을 포함 할 수 있다. 또한, 도 1은 저장 장치(120), 응용 프로그램(125), 및 ASM(130)을 포함하는 기계(105)를 도시하지만, 본 발명의 실시 예들은 별도의 기계들에서 이들 구성들을 가질 수 있다: 예로써, 저장 장치(120)는 하나 이상의 임의의 유형의 네트워크(유선, 무선, 글로벌 등)를 통과하는 네트워크 연결을 통해 기계(105)(및 응용 프로그램(125) 및 ASM(130))로 연결된 서버에 설치될 수 있다.
도 1에 도시 된 구성들의 특정 배열에 관계없이, "호스트", "호스트 기계" 또는 "호스트 프로세서"라는 용어는 기계(105)를 기술하는데 사용될 수 있다. 이것은 프로세서(110)를 본 발명의 다른 구성들과 구별 할 수 있다.
도 1의 구성들 중, 본 발명의 실시 예들에 대해 특히 관심 있는 3 개의 트래픽 스트림들이 존재한다(본 발명의 실시 예들과 관련이 없는 다른 트래픽 스트림들이 있을 수 있다).
1) 호스트로부터 저장 장치(120)까지. 호스트(프로세서(110))가 저장 장치(120)로 통신을 보낼 수 있다. 본 발명의 실시 예들에서, 이러한 모든 트래픽은 가속 모듈(145)을 통과하고, 가속 모듈(145)에 의해 저장 장치(120)로 도달할수 없어서는 안 된다. 이러한 트래픽의 실시 예들은 저장 장치(120)로부터 데이터를 독출하기 위한 및/또는 저장 장치(120)로 데이터를 기록하기 위한 명령을 포함 할 수 있다: 저장 장치(120)에 의해 제공되는 다른 명령들도 이러한 트래픽에 포함될 수 있다.
2) ASM(130)로부터 가속 모듈(145)까지. ASM(130)은 특정 가속 명령이 수행되도록 요청할 수 있다. 여하튼, 본 발명의 특정 실시 예에 관계없이, 가속 모듈(145)은 ASM(130)으로부터 가속 명령을 수신해야 한다.
3) 가속 모듈(145)로부터 저장 장치(130)까지. 가속 명령을 수행하기 위해, 가속 모듈(145)은 저장 장치(130)로부터 데이터를 가져오거나 수신 할 필요가 있을 수 있다.
도 2는 도 1의 기계의 추가적인 세부 사항을 도시한다. 도 2에서, 전형적으로, 기계(105)는 디바이스(105)의 구성들의 동작을 조정하기 위해 사용될 수 있는 메모리 컨트롤러(135) 및 클럭(205)을 포함 할 수 있는 하나 이상의 프로세서(110)를 포함한다. 또한, 프로세서(110)는 예로써 랜덤 접근 메모리(RAM), 독출 전용 메모리(ROM) 또는 매체를 보존하는 다른 상태를 포함 할 수 있는 메모리(140)로 연결될 수 있다. 프로세서(110)는 또한, 저장 디바이스(120) 및 예로써 이더넷 커넥터 또는 무선 커넥터일 수 있는 네트워크 커넥터(210)로 연결될 수 있다. 프로세서(110)는 또한 버스(215)로 연결 될 수 있으며, 여기에는 다른 구성들 중 사용자 인터페이스(220) 및 입력/출력 엔진들(225)을 사용하여 관리 될 수 있는 입력/출력 인터페이스 포트들이 부착될 수 있다.
제 1 실시 예
도 3은 본 발명의 제 1 실시 예에 따라, 도 1의 SSD(120) 및 도 1의 FPGA(145)의 구성들을 도시한다. 도 3에서, 프로세서(110), FPGA(145) 및 SSD(120)는 통신하는 것으로 도시된다. 도 3에서, 프로세서(110), FPGA(145) 및 SSD(120)는 PCIe(Peripheral Component Interconnect Express) 버스를 통해 통신 할 수 있다. PCIe 버스는 임의의 수의 레인을 사용할 수 있다: 전형적인 예들은 x4 및 x8이지만, 본 발명의 실시 예들은 임의의 다른 원하는 수의 레인을 사용할 수 있다. 이 통신은 비휘발성 메모리 익스프레스(NVMe) 프로토콜을 사용하여 커맨드를 인코딩하는 트랜잭션 계층 패킷(TLP)일 수있는 PCIe 트랜잭션을 포함 할 수 있지만, 본 발명의 실시 예들은 다른 인코딩을 사용하는 통신 또는 다른 프로토콜의 커맨드들을 포함하기 위해 확장될 수 있다.
SSD(120)는 엔드 포인트(305), 호스트 인터페이스 계층(HIL, 310), SSD 가속 플랫폼 관리자(APM-S, 315), 플래시 변환 계층(FTL, 320) 및 플래시 미디어(325)를 포함 할 수 있다. 엔드 포인트(305)는 SSD(120)가 PCIe 통신을 수신하고 전송하는 논리적 또는 물리적 연결 포인트일 수 있다. SSD(120)가 엔드 포인트(305)에서 프로세서(110)로부터 PCIe 트랜잭션을 수신하는 경우(FPGA(145)를 통해), SSD(120)는 PCIe 트랜잭션을 HIL(310)로 전달할 수 있다. 그 이후에 HIL(310)은 PCIe 트랜잭션이 가속 명령을 포함 하는지를 판단할 수 있다. PCIe 트랜잭션이 가속 명령을 포함하는 경우, HIL은 처리를 위해 PCIe 트랜잭션(또는 PCIe 트랜잭션으로부터 압축 해제된 가속 명령 그 자체)을 APM-S(315)로 전송할 수 있다: APM-S(315)는 펌웨어 단독 또는 하드웨어 및 펌웨어의 결합을 사용하여 구현될 수 있다. 그렇지 않으면, HIL(310)은 FTL(320)로 PCIe 트랜잭션(또는 압축 해제된 NVMe 명령)을 전달할 수 있으며, FTL은 도 1의 응용 프로그램(125)에 의해 사용되는 논리 블록 주소(LBA)를 물리 블록 주소(PBA)로 변환하고, 플래시 미디어(325)에 저장된 데이터에 접근할 수 있다.
APM-S(315)가 처리 할 수 있는 기본적으로 두 가지 유형의 가속 명령이 있다. 가속 명령의 제 1 유형은 프로세서(110)로부터의 특정 커맨드일 수 있다. 본 발명의 제 1 실시 예에서, FPGA(145)는 프로세서(110)에 보이지 않을 수 있다: 프로세서(110)는 모든 그것의 통신을 SSD(120)로 전송한다. 프로세서(110)가 응용 데이터에 대해 가속 명령이 수행되기를 원하는 경우, 프로세서(110)는 특정 커맨드를 SSD(120)로 전달할 수 있다. 프로세서(110)는 SSD(120)로 특정 커맨드/가속 명령을 터널링하기 위해 NVMe 명령을 사용할 수 있다. HIL(310)은 APM-S(315)로 전달 될 수 있는 이 특정 명령을 가로챌 수 있다. 그 이후에 APM-S(315)는 가속 명령을 수행하기 위해 FPGA(145)로 다시 전송 될 수 있는 특정 커맨드에 응답하여 가속 명령을 생성 할 수 있다. 이 특정 커맨드는 예로써, 실행될 특정 유형의 가속 명령 및 가속 커맨드 명령이 수행될 데이터를 인코딩할 수 있다.
APM-S(315)가 처리 할 수 있는 가속 명령의 제 2 유형은 데이터를 포함할 것이다. 예로써, FPGA(145)는 플래시 미디어(325)로 직접 접근하지 않을 수 있으며, 따라서 가속 명령이 수행 될 데이터를 수신함 없이 가속 명령을 수행 할 수 없다. 따라서, APM-S(315)는 FPGA(145)로부터 문제의 데이터를 요청하는 가속 명령을 수신 할 수 있다. 그 후, APM-S(315)는 FPGA(145)가 가속 명령을 수행 할 수 있도록 하기 위해, 요구 된 데이터에 접근하고 그것을 FPGA(145)로 되돌려줄 수 있다.
도 3에서, SSD(120)는 SSD에서 사용하기에 적합한 FTL(320) 및 플래시 미디어(325)를 포함하는 것으로 도시된다. SSD(120)가 대체 저장 장치로 대체되면, 이들 구성들은 저장 장치의 유형에 적합한 대체 구성들로 대체될 수 있다. 예로써, SSD(120)가 하드 디스크 드라이브로 대체되면, 플래시 미디어(325)는 하드 디스크 플래터로 대체 될 수 있다. 데이터 접근을 지원하기 위해 추가 구성들이 또한 포함될 수 있다: 하드 디스크 드라이브 저장 장치의 예를 계속하면, 저장 장치는 또한 적절하게 읽기/쓰기 헤드를 포함할 수 있다.
FPGA(145)가 프로세서(110)와 SSD(120) 간의 통신을 가로채기 전에, SSD(120)는 프로세서(110)로부터 호스트 메모리 주소의 블록을 요구할 수 있다. 호스트 메모리 시스템 주소의 블록에 대한 이러한 요구는 PCIe 트랜잭션을 사용할 때 통상적이며, 시작될 때 또는 나중에 수행될 수 있다. 이에 응답하여, 프로세서(110)(또는 도 1의 기계(105)의 기본 입력/출력 시스템(BIOS))는 SSD(120)에 의한 사용을 위해 호스트 메모리 시스템 주소의 블록을 할당 할 수 있다. 그 이후에 호스트 기계는 이 호스트 메모리 시스템 주소의 블록이 도 1의 기계(105)에서 다른 장치들에 의해 이용할 수 없음을 알게 된다.
도 4는 본 발명의 제 1 실시 예에 따라 도 1의 시스템에서 명령들을 가속화하기 위한 메모리 사용을 도시한다. 도 4에서, SSD(120)는 호스트 메모리 시스템 주소의 블록을 요청할 수 있다. 프로세서(110)와 SSD(120) 간의 NVMe 통신을 지원하기 위해 필요한 메모리의 양은 상대적으로 적지만, 예로써, 64KB-SSD(120)는 훨씬 더 큰 블록, 예로써 10MB 이상을 요구할 수 있다. 이에 응답하여, 프로세서(110)는 호스트 메모리 시스템 주소 블록(405)을 되돌려줄 수 있다. 블록(405)의 한쪽 끝은 BAR(Base Address Register)에 저장 될 수 있고, SSD(120)가 BAR(그리고 요청 된 블록의 크기의 SSD(120)의 정보(knowledge)와 함께)에 기초하여 블록(405)을 판단할 수 있도록 할 수 있다.
일단 SSD(120)가 어떤 주소가 블록(405)에 있는지를 알면, SSD(120)는 블록(405)을 그것 자신의 사용을 위해 상이한 영역들로 나눌 수 있다. 블록(405)의 하나의 서브 세트(410)는 NVMe 통신을 위해 사용될 수 있다. 다른 서브 세트(415)는 사용되지 않은 채로 남겨질 수 있다. 다운스트림 FAR(Filter Address Range, 420)(임의의 필터링이 프로세서(110)로부터 다운스트림으로 행해지므로 "다운스트림")라고 불리는 제 3 서브 세트는 SSD(120)와 FPGA(145) 사이의 통신을 위한 전용으로 사용될 수 있다. 다운스트림 FAR(420)는 SSD(120) 및 FPGA(145) 모두에 의해 사용될 수 있음에 주목한다: SSD(120) 및 FPGA(145)중 어느 하나는 문제의 PCIe 트랜잭션이 가속 명령을 포함하는 것을 나타내기 위해 다운스트림 FAR(420)에서 주소를 사용할 수 있다.
도 3으로 되돌아가서, SSD(120)가 다운스트림 FAR(420)에서 주소를 사용하여 통신을 전송하면, FPGA(145)는 다운스트림 포트(335)에서 통신을 수신하고 통신을 가로채고, 그 통신을 프로세서(110)로 전달하기보다는 국부적으로 처리 할 수 있다. 다운스트림 FAR(420)를 포함하지 않는 SSD(120)로부터의 다운스트림 포트(335)에서 FPGA(145)에 의해 수신되는 임의의 통신은 업스트림 포트(330)를 통해 FPGA(145)에 의해 프로세서(110)로 전달될 수 있다(FPGA(145)가 업스트림 포트(330)에서 프로세서(110)로부터 수신하는 임의의 통신은 다운스트림 포트(335)를 통해 자동적으로 SSD(120)로 전달될 수 있다).
FPGA(145)는 프로세서(110)와 SSD(120) 사이에 위치하여 프로세서(110)와 SSD(120) 사이의 통신을 가로챌 수 있다. 이러한 통신을 가로챔으로써, FPGA(145)는 SSD(120)에 의해 요청된 가속 명령을 수행 할 수 있다.
가속 명령을 수행하기 위해, FPGA(145)는 업스트림 포트(330), 다운스트림 포트(335), FPGA 가속 플랫폼 관리자(340, APM-F), 스케쥴러(345) 및 가속 엔진들(350-1 및 350-2)을 포함 할 수 있다. 업스트림 포트(330)는 프로세서(110)와 통신하는데 사용될 수 있다; 다운스트림 포트(335)는 SSD(120)와 통신하기 위해 사용될 수 있다. APM-F(340)는 FPGA(145)가 가로챈 임의의 가속 명령을 수신하는 것에 대한 책임이 있다. 이러한 가속 명령은 메세지 메일 박스(355)를 사용하여 다운스트림 포트(335)로부터 메세지로서 수신 될 수 있지만, 본 발명의 실시 예들은 APM-F가 가속 명령을 수신하기 위한 다른 메커니즘들로 확장 될 수 있다. 일단 가속 명령이 수신되면, APM-F(340)는 가속 명령을 처리 할 수 있다. 예로써, FPGA(145)가 가속 명령을 수행 할 수 있는 충분한 정보를 갖는다면, APM-F(340)는 가속 엔진들(350-1 및 350-2)과 같은 임의의 이용 가능한 가속 엔진으로 가속 명령을 스케줄링 할 수 있는 스케쥴러(345)("런타임 스케쥴러"로 지칭 될 수도 있는)로 가속 명령을 전달할 수 있다. 한편, 도 3은 2 개의 가속 엔진(350-1, 350-2)을 도시하지만, 본 발명의 실시 예들은 임의의 원하는 수의 가속 엔진을 포함 할 수 있다: 도 3에서 도시된 두 개는 단지 예시적인 목적을 위한 것이다. 대안적으로, FPGA(145)가 가속 명령을 수행하기 위한 추가 정보를 필요로 한다면-예로써, FPGA(145)는 가속 명령이 수행 될 데이터를 필요로 한다-APM-F(340)는 PCIe 트랜잭션을 필요한 데이터를 요청하는 SSD(120)로 보내는 것과 같은 다른 동작을 취할 수 있다.
특정 PCIe 트랜잭션이 가속 명령을 포함하는지 여부를 판단하기 위해, FPGA(145)는 다운스트림 포트(335)와 관련된 다운스트림 필터(360)를 포함할 수 있다. 다운스트림 필터(360)는 가속 명령을 포함 할 수 있는 SSD(120)로부터 발행 된 PCIe 트랜잭션을 식별 할 수 있다. 이는 원하는 방식으로 수행될 수 있다. 본 발명의 몇몇 실시 예들에서, SSD(120)는 도 4의 다운스트림 FAR(420)로 다운스트림 필터(360)를 프로그램밍 할 수 있다. 그런 다음, 다운스트림 필터(360)가 도 4의 다운스트림 FAR(420)에서 주소를 사용하는 PCIe 트랜잭션을 식별 할 때, FPGA(145)는 PCIe 트랜잭션을 가속 명령을 포함하는 것으로 식별하고 PCIe 트랜잭션을 가로챌 수 있다. SSD(120)는 임의의 원하는 방식으로 다운스트림 필터(360)를 프로그램밍 할 수 있다. 예로써, SSD(120)는 다운스트림 필터(360)를 프로그래밍하기 위해 내부 집적 회로 버스(I2C 버스) 또는 시스템 관리 버스(SM버스)와 같은 사이드대역 버스(365)를 사용할 수 있다. 또는 SSD(120)는 다운스트림 필터(360)를 프로그래밍하기 위해, PCIe VDM(Vendor Defined Message)을 사용할 수 있다. SSD(120)는 또한 다운스트림 필터(360)를 프로그래밍하기 위해 다른 메커니즘을 사용할 수 있다.
도 3에서, FPGA(145)는 프로세서(110) 및 SSD(120)와의 통신을 가능하게 하는 부분들을 포함하는 것으로 도시된다: 구체적으로는, 업스트림 포트(330), 다운스트림 포트(335) 및 다운스트림 필터(360). FPGA(145)는 프로세서(110) 및 SSD(120)와 통신하는 몇몇 메커니즘을 필요로 하지만, 본 발명의 실시 예들은 통신 요소를 FPGA(145)로부터 분리 할 수 있다. 예로써, 다운스트림 포트(335) 및 다운스트림 필터(360)는 -후자는 프로세서(110)로 전달되는 대신에 가속 명령을 포함하는 (그리고 APM-F(340)로 리디렉션 되어야 하는) SSD(120)로부터 수신된 PCIe 트랜잭션을 식별하는 역할을 한다- FPGA(145)와 SSD(120) 사이의 브리징 구성 요소들(도 3에 도시되지 않음)에 배치될 수 있다. 이러한 브리징 구성 요소들은 FPGA(145) 및 SSD(120)와 통신하기 위해 필요할 것이기 때문에, FPGA(145)는 여전히 다운스트림 포트(335)(또는 브리징 구성 요소들과의 통신을 가능하게 하는 대안적인 구조)를 포함하지만: 그 이후에 다운스트림 필터(360)는 FPGA(145)로부터 제거될 것이다.
전술 한 본 발명의 제 1 실시 예는 프로세서/FPGA/SSD 구현들의 가능한 조합을 나타낸다. 이하에서 본 발명의 다른 실시 예들로서 설명되는 다른 구현들도 또한 가능하다. 특정 구성들의 동작들(예로써, APM-F(340), 스케쥴러(345) 및 가속 엔진들(350-1 및 350-2)의 동작들) 사이에 차이가 없는 경우, 그것들의 동작들의 반복 설명은 후속의 본 발명의 실시 예들에서 생략된다.
제 2 실시 예
도 5는 본 발명의 제 2 실시 예에 따라 도 1의 FPGA(145) 및 도 1의 SSD(120)의 구성들을 도시한다. 본 발명의 제 2 실시 예는 업스트림 포트(330)가 필터:업스트림 필터(505)도 포함한다는 것을 제외하고는 본 발명의 제 1 실시 예와 유사하다: 업스트림 필터(505). 업스트림 필터(505)는 다운스트림 필터(360)와 유사한 방식으로 프로세서(110)(업스트림 포트(330)를 통해 수신된)로부터 오는 PCIe 트랜잭션을 필터링 할 수 있다. 예로써, SSD(120)는 도 4의 다운스트림 FAR(365)와 유사하게 업스트림 FAR를 정의할 수 있고, 사이드대역 버스(365), PCIe, VDM, 또는 임의의 다른 메커니즘을 사용하여 업스트림 FAR로 업스트림 필터(505)를 프로그래밍한다. 그 이후에, FPGA(145)가 업스트림 포트(330)에서 프로세서(110)로부터 PCIe 트랜잭션을 수신 할 때, 업스트림 필터(505)는 업스트림 필터(505)가 업스트림 FAR에 주소를 포함하는지를 보기 위해 PCIe 트랜잭션을 검사 할 수 있다. 그렇다면, PCIe 트랜잭션은 가속 명령이고, FPGA(145)는 PCIe 트랜잭션을 SSD(120)에 전달하기보다 프로세서를 위해 PCIe 트랜잭션을 APM-F(340)로 전송할 수 있다.
본 발명의 제 2 실시 예에 따라, 도 6은 도 1의 시스템에서 명령을 가속화하기 위한 메모리 사용을 도시한다. 본 발명의 제 1 실시 예에서와 같이, SSD(120)는 SSD(120)가 NVMe 커맨드를 지원하기 위해 필요한 주소의 범위보다 큰 호스트 시스템 메모리 주소의 블록을 요청할 수 있고, 그것의 BAR에 응답하여 블록(405)을 수신 할 수 있다. 그 이후에, SSD(120)는 NVMe 통신을 위해 블록(405)의 하나의 서브 세트(410)를 따로 설정할 수 있고, 다른 서브 세트(415)는 미사용 될 수 있고, 제 3 서브 세트는 다운스트림 FAR(420)처럼 따로 설정 될 수 있고, 제 4 서브 세트는 업스트림 FAR(605)처럼 따로 설정될 수 있다.
도 5로 되돌아가면, 본 발명의 제 2 실시 예에서, 프로세서(110)는 FPGA(145)가 발견 가능한 장치가 아니기 때문에 여전히 FPGA(145)를 직접적으로 "보지(see)" 않는다. 그러나 SSD(120)는 업스트림 FAR(605)의 베이스 주소를 NVMe 통신을 위한 서브 세트(410) 내의 특정 레지스터에 프로그래밍함으로써 프로세서(110)에게 업스트림 FAR(605)를 알릴 수 있다. NVMe 통신을 위해 서브 세트(410)로부터 이 특정 레지스터를 독출하면, 프로세서(110)는 업스트림 FAR(605)을 인식하게 될 수 있다. 그 이후에, 프로세서(110)는 SSD(120)의 APM-S(315)로 특정 커맨드를 전송하는 대신 가속 명령을 FPGA(145)로 전송할 수 있다(업스트림 포트(330)를 통해).
도 3에서와 같이 도 5에서, FPGA(145)는 프로세서(110) 및 SSD(120)와의 통신을 가능하게 하는 부분들을 포함하는 것으로 도시된다: 구체적으로, 업스트림 포트(330), 업스트림 필터(505), 다운스트림 포트(335) 및 다운스트림 필터(360). 도 3에 도시 된 본 발명의 실시 예와 마찬가지로, PCIe 트랜잭션의 필터링과 관련된 구성들은 FPGA(145)로부터 제거 될 수 있다. 따라서, 본 발명의 제 2 실시 예에서, 업스트림 포트(330) 및 업스트림 필터(505)는 제 1 브리징 구성 요소들 에 배치 될 수 있고, 다운스트림 포트(335) 및 다운스트림 필터(360)은 제 2 브리징 구성 요소들에 배치 될 수 있고, 각각은 도 5의 상이한 구성들을 갖는 PCIe 트랜잭션의 필터링을 처리한다. 또는, PCIe 트랜잭션의 소스와 상관없이, 이러한 브리징 구성 요소들 중 오직 하나만이 사용될 수 있고(다른 소스(source)로부터의 통신을 위해 그것 자체 필터링을 처리하는 FPGA(145)과 함께), 또는 단일 브리징 구성 요소가 FPGA(145)에 대한 모든 필터링을 처리하기 위해 사용될 수 있다.
제 3 실시 예
도 7은 본 발명의 제 3 실시 예에 따라 도 1의 FPGA(145) 및 도 1의 SSD(120)의 구성들을 도시한다. 본 발명의 제 3 실시 예에서, SSD(120)는 물리 기능(PF, 705) 및 가상 기능(VF, 710)을 포함한다(본 발명의 제 3 실시 예는 본 발명의 다른 실시 예가 PF 및/또는 VF를 포함하지 않는다는 것을 의미하는 것이 아니라 단지 본 발명의 제 3 실시 예와 동일한 방식으로 사용되지 않는다는 것을 의미한다). PF(705)는 SSD(120)에 의해 제공되는 기능과 같은 단일 자원을 나타낸다. VF(710)는 PF와 연관되지만 "가상화"된 기능을 나타낸다: 즉, 주어진 PF에 대해 하나 이상의 VF가 있을 수 있다. 그러나 SSD(120)의 가상 기능을 표현하는 대신, VF(710)는 FPGA(145)를 "노출"할 수 있다: 즉, VF(710)는 FPGA(145)의 기능을 나타낼 수 있다. (VF(710)는 여전히 FPGA(145)의 일부가 아니라 SSD(120)의 일부다; 그러나 FPGA(145)를 노출시키기 위한 전용 VF(710)을 사용하면, VF(710)과 관련된 임의의 메모리 주소는 다른 장치와 충돌하지 않을 것이다.) PCIe 장치가 나열될 때 PF들 및 VF들이 프로세서(110)에 의해 발견될 수 있기 때문에, 프로세서(110)는 그것 스스로 직접 발견 할 수는 없지만 VF(710)를 통해 FPGA(145)를 간접적으로 발견할 수 있다.
본 발명의 제 3 실시 예에 따라, 도 8은 도 1의 시스템에서 명령을 가속화하기 위한 메모리 사용을 도시한다. 본 발명의 제 1 실시 예에서와 같이, SSD(120)는 SSD(120)가 NVMe 커맨드를 지원할 필요가 있는 주소의 범위보다 큰 호스트 시스템 메모리 주소의 블록을 요청할 수 있다. 그러나, SSD(120)는 실제로 호스트 시스템 메모리 주소의 2 개의 상이한 블록들을 요청할 수 있다: PF(705)에 대한 블록(805) 및 VF(710)에 대한 블록(810). 다운스트림 FAR(420)는 PF(705)에 대한 블록(805)의 서브 세트로써 선택 될 수 있다; 업스트림 FAR(605)은 VF(710)에 대한 블록(810)의 전체 일 수 있다. (업스트림 FAR(605)은 블록(810)의 단지 서브 세트로서 선택 될 수 있다; 하지만, 블록(810)은 VF(710)가 전용으로 사용하고 VF(710)는 FPGA(145)를 효과적으로 노출시키는 것 이외의 다른 목적을 가질 수 없기 때문에, 업스트림 FAR(605)의 일부로서 사용되지 않는 블록(810)의 임의의 메모리 주소는 낭비 될 수 있다.) 블록들(805 및 810) 각각은 개별 BAR를 갖게되어 SSD(120)가 각 블록에 대해 할당된 주소의 범위를 알 수 있도록 한다.
도 7로 되돌아가면, 본 발명의 제 2 실시 예와 유사하게, 업스트림 포트(330)는 또한 필터를 포함한다: VF 필터(715). VF 필터(715)는 다운스트림 필터(360)와 유사한 방식으로 프로세서(110)(업스트림 포트(330)를 통해 수신된)로부터 오는 PCIe 트랜잭션을 필터링할 수 있다. 예로써, SSD(120)는 사이드대역 버스(365), PCIe VDM, 또는 임의의 다른 메커니즘을 사용하여 업스트림 FAR(605)로 VF 필터(715)를 프로그래밍 할 수 있다. 그 이후에, FPGA(145)가 업스트림 포트(330)에서 프로세서(110)로부터 PCIe 트랜잭션을 수신 할 때, VF 필터(715)는 PCIe 트랜잭션이 업스트림 FAR(605)에 주소를 포함하는지를 알기 위해 PCIe 트랜잭션을 검사할 수 있다. 그렇다면, PCIe 트랜잭션은 가속 명령이며, FPGA(145)는 PCIe 트랜잭션을 SSD(120)로 전달하기보다는 프로세서를 위해 PCIe 트랜잭션을 APM-F(340)로 전송 할 수 있다.
대안으로, SSD(120)는 VF(710)의 식별자로 VF 필터(715)를 프로그래밍 할 수 있다. PCIe 트랜잭션이 VF(710)의 식별자를 포함하는지를 알 기 위해 VF 필터(715)는 업스트림 포트(330)에서 프로세서(110)로부터 수신된 PCIe 트랜잭션을 검사할 수 있다. PCIe 트랜잭션이 VF(710)의 식별자를 포함하면, FPGA(145)는 PCIe 트랜잭션을 SSD(120)로 전달하기보다는 프로세서를 위해 PCIe 트랜잭션을 APM-F(340)로 전송 할 수 있다.
도 7에서, 본 발명의 앞선 실시 예들에서와 같이, FPGA(145)는 프로세서(110) 및 SSD(120)와의 통신을 가능하게 하는 부품들,구체적으로, 업스트림 포트(330), VF 필터(715), 다운스트림 포트(335) 및 다운스트림 필터(360) 을 포함하는 것으로 도시된다. 앞서 보여진 본 발명의 실시 예들에서와 같이, PCIe 트랜잭션의 필터링과 관련된 구성들은 FPGA(145)로부터 제거될 수 있다. 따라서, 본 발명의 제 3 실시 예에서, 업스트림 포트(330) 및 VF 필터(715)는 제 1 브리징 구성 요소들에 배치 될 수 있고, 다운스트림 포트(335) 및 다운스트림 필터(360)는 각각이 도 7의 상이한 구성들을 갖는 PCIe 트랜잭션의 필터링을 처리하는 제 2 브리징 구성 요소들에 배치 될 수 있다. 선택적으로, PCIe 트랜잭션의 소스와 상관없이, 이러한 브리징 구성 요소들 중 오직 하나만이 사용될 수 있고(다른 소스로부터의 통신을 위해 그것 자체의 필터링을 처리하는 FPGA(145)와 함께), 또는 단일 브리징 구성 요소가 FPGA(145)에 대한 모든 필터링을 처리하기 위해 사용될 수 있다.
제 4 실시 예
FPGA(145)를 노출시키기 위해 VF(710)를 사용하는 한 가지 문제점은 VF들을 사용하는 것이 프로세서(110)의 호스트 동작 시스템으로부터의 지원을 요구할 수 있다는 것이다. 일부 운영 체제는 VF를 지원하지만 모든 운영 체제가 VF를 지원하는 것은 아니며 VF를 지원하는 것은 운영 체제에 대해 그것 자체의 복잡성을 수반한다. 본 발명의 제 4 실시 예는 VF를 사용하는 어려움을 해결한다.
도 9는 본 발명의 제 4 실시 예에 따라 도 1의 FPGA(145) 및 도 1의 SSD(120)의 구성들을 도시한다. 본 발명의 제 3 실시 예와는 대조적으로, 본 발명의 제 4 실시 예에서, SSD(120)는 2 개의 PF(705, 905)를 포함한다. (본 발명의 제 3 실시 예와 같이, 본 발명의 제 4 실시 예는 본 발명의 다른 실시 예가 PF 및/또는 VF를 포함하지 않는다는 것을 의미하지 않는다). PF(705)는 SSD(120)에 의해 제공되는 기능과 같은 단일 자원을 나타내는 것을 계속한다. 한편, PF(905)는 FPGA(145)를 노출시킨다. 다시 말하면, PCIe 장치가 나열될 때 PF들이 프로세서(110)에 의해 발견 될 수 있기 때문에, 프로세서(110)는 그것 자신을 직접 발견 할 수는 없더라도 PF(905)를 통해 FPGA(145)를 간접적으로 발견 할 수 있다.
본 발명의 제 4 실시 예에 따라, 도 10은 도 1의 시스템에서 명령을 가속화하기 위한 메모리 사용을 도시한다. 본 발명의 제 3 실시 예에서와 같이, SSD(120)는 호스트 시스템 메모리 주소의 두 개의 상이한 블록들을 요구할 수 있다: PF(705)에 대한 블록(1005) 및 PF(905)에 대한 블록(1010). 다운스트림 FAR(420)는 PF(705)에 대한 블록(1005)의 서브 세트로서 선택될 수 있다; 업스트림 FAR(605)는 PF(905)에 대한 블록(1010)의 전체일 수 있다. (다시 말하면, 업스트림 FAR(605)는 블록(1010)의 서브 세트로써 선택될 수 있다; 하지만, 블록(1010)은 PF(905)가 전용으로 사용하고 PF(905)는 FPGA(145)를 효과적으로 노출시키는 것 이외의 다른 목적을 가질 수 없기 때문에, 업스트림 FAR(605)의 일부로서 사용되지 않는 블록(1010)의 임의의 메모리 주소는 낭비 될 수 있다.) 블록들(1005 및 1010) 각각은 개별 BAR를 갖게되어 SSD(120)가 각 블록에 대해 할당된 주소의 범위를 알 수 있게 한다.
도 9로 되돌아가면, 본 발명의 제 3 실시 예와 유사하게, 업스트림 포트(330)는 또한 필터를 포함한다: PF 필터(715)(PF 필터(715)는 동작 중의 도 7의 VF 필터(715)와 사실상 동일하며, 이름 변경은 PF 필터(715)가 VF 필터(715)와 다르게 동작하기 때문에 FPGA(145)를 노출시키기 위해 사용되는 함수의 유형과 더 관련이 있다). PF 필터(715)는 다운스트림 필터(360)와 유사한 방식으로 프로세서(110)(업스트림 포트(330)를 통해 수신된)로부터 오는 PCIe 트랜잭션을 필터링할 수 있다. 예로써, SSD(120)는 사이드대역 버스(365), PCIe VDM, 또는 임의의 다른 메커니즘을 사용하여 업스트림 FAR(605)로 VF 필터(715)를 프로그래밍 할 수 있다. 그 이후에, FPGA(145)가 업스트림 포트(330)에서 프로세서(110)로부터 PCIe 트랜잭션을 수신 할 때, PF 필터(715)는 PCIe 트랜잭션이 업스트림 FAR(605)에 주소를 포함하는지를 알기 위해 PCIe 트랜잭션을 검사할 수 있다. 그렇다면, PCIe 트랜잭션은 가속 명령이며, FPGA(145)는 PCIe 트랜잭션을 SSD(120)로 전달하기보다는 프로세서를 위해 PCIe 트랜잭션을 APM-F(340)로 전송 할 수 있다.
대안으로, SSD(120)는 PF(905)의 식별자로 PF 필터(715)를 프로그래밍 할 수 있다. PF 필터(715)는 PCIe 트랜잭션이 PF(905)의 식별자를 포함하는지를 알기 위해 업스트림 포트(330)에서 프로세서(110)로부터 수신된 PCIe 트랜잭션을 검사할 수 있다. PCIe 트랜잭션이 PF(905)의 식별자를 포함하면, FPGA(145)는 PCIe 트랜잭션을 SSD(120)로 전달하기보다는 프로세서를 위해 PCIe 트랜잭션을 APM-F(340)로 전송 할 수 있다.
도 9에서, 본 발명의 앞선 실시 예들에서와 같이, FPGA(145)는 프로세서(110) 및 SSD(120)와의 통신을 가능하게 하는 부품들, 구체적으로, 업스트림 포트(330), PF 필터(715), 다운스트림 포트(335) 및 다운스트림 필터(360)을 포함하는 것으로 도시된다. 앞서 보여진 본 발명의 실시 예들에서와 같이, PCIe 트랜잭션의 필터링과 관련된 구성들은 FPGA(145)로부터 제거될 수 있다. 따라서, 본 발명의 제 4 실시 예에서, 업스트림 포트(330) 및 PF 필터(715)는 제 1 브리징 구성 요소들에 배치 될 수 있고, 다운스트림 포트(335) 및 다운스트림 필터(360)는 각각이 도 9의 상이한 구성들을 갖는 PCIe 트랜잭션의 필터링을 처리하는 제 2 브리징 구성 요소들에 배치 될 수 있다. 선택적으로, PCIe 트랜잭션의 소스와 상관없이, 이러한 브리징 구성 요소들 중 오직 하나만이 사용될 수 있고(다른 소스로부터의 통신을 위해 그것 자체의 필터링을 처리하는 FPGA(145)와 함께), 또는 단일 브리징 구성 요소가 FPGA(145)에 대한 모든 필터링을 처리하기 위해 사용될 수 있다.
제 5 실시 예
본 발명의 제 4 실시 예는 본 발명의 제 3 실시 예에서와 같이 VF를 사용하는 것의 어려움을 해결한다. 그러나, 본 발명의 제 4 실시 예를 사용하기 위해서는, SSD(120)는 FPGA(145)의 사용을 위해 전용 된 PF(905)를 제공 할 필요가 있다. 모든 SSD(또는 더 일반적으로는 저장 장치)가 FPGA(145)의 사용을 위해 전용될 수 있는 이용가능한 PF를 갖지는 않는다. 본 발명의 제 5 실시 예는 SSD(120)가 다수의 PF들을 제공 할 필요가 없는 해결책을 제공한다.
도 11은 본 발명의 제 5 실시 예에 따라 도 1의 FPGA(145) 및 도 1의 SSD(120)의 구성들을 도시한다. 도 11에서, SSD(120)는 PF들 및 VF들을 제공하는 것이 필요없는 도 3 및 도 5에서 도시되는 구조로 되돌아간다. (SSD(120)는 PF들 및/또는 VF들을 제공하지 않을수 있다고 말하는 것이 아니라 단지 SSD(120)는 추가의 PF들 및/또는 VF들을 제공할 필요는 없다.)
본 발명의 제 1 내지 제 4 실시 예와 비교하면, 본 발명의 제 5 실시 예에서FPGA(145)는 다소 상이하다. 도 3, 5, 7 및 9에서와 같은 업스트림 포트(330) 및 다운스트림 포트(335) 대신에, FPGA(145)는 엔드 포인트(1105) 및 루트 포트(1110)(용어 "포트"는 "루트 포트"와 교환 가능하게 사용될 수 있다)를 포함 할 수 있다. 도 3, 5, 7 및 9의 업스트림 포트(330) 및 다운스트림 포트(335)는 스위치들-그것들은 효과적으로 통과 장치들(pass-through devices)이다- 로 간주되는 반면, 엔드 포인트(1105) 및 루트 포트(1110)는 PCIe 열거를 통해 발견 될 수 있는 통신을 위한 종단 점들(termination points)이다. 이 사실은 엔드 포인트(1105) 및 루트 포트(1110)가 도 12를 참조하여 아래에서 논의되는 그것들 자신의 PCIe 구성 공간을 포함한다는 것을 의미한다. 그러나 엔드 포인트(1105) 및 루트 포트(1110)는 통신을 위한 종단 점들이기 때문에, 프로세서(110) 및 SSD(120)는 서로 통신하는 것보다 각각 엔드 포인트(1105) 및 루트 포트(1110)과 통신을 한다.
엔드 포인트(1105)는 2 개의 PF들(1115 및 1120)을 포함 할 수 있다 (또는 선택적으로 하나의 PF 및 하나의 VF: 증요한 것은 엔드 포인트(1105)가 서로 구별 될 수 있는 두 개의 기능을 포함한다는 것이다). 프로세서(110)가 엔드 포인트(1105)로 PCIe 트랜잭션을 전송할 때, 프로세서(110)는 어느 PF가 주소가 지정되는지를 특정할 수 있다. 위에서 언급한 본 발명의 제 3 및 제 4 실시 예들과 유사하게, 엔드 포인트(1105)는 PF를 식별하는 PCIe 트랜잭션에 포함 된 태그, 또는 PCIe 트랜잭션(다시 말하지만, 아래에서 도 12를 참조하여 설명되는)과 연관된 주소에 의해 어느 PF들이 주소 지정되는지를 식별 할 수 있다. PF(1115)를 식별하는 PCIe 트랜잭션은 SSD(120)로 예정된 것으로 간주 될 수 있고, 루트 포트(1110)를 통해 FPGA(145)에 의해 SSD(120)로 전송 될 수 있다. PF(1120)를 식별하는 PCIe 트랜잭션은 가속 명령을 포함하는 것으로 간주 될 수 있고, APM-F(340)로 전송될 수 있다.
루트 포트(1110)는 다운스트림 필터(360)를 포함 할 수 있다. 다운스트림 필터(360)는 도 3, 5, 7, 9 및 11의 다운스트림 필터(360)와 유사하게 동작한다: 유일하게 중요한 차이점은 다운스트림 필터가 호스트 시스템 메모리 주소에 기초하여 필터링하는 것이 아니라 아래에서 도 12를 참조하여 설명되는 바와 같이 FPGA 메모리 주소에 기초하여 필터링한다는 것이다. 다운스트림 필터(360)는 사이드대역 버스(365), PCIe VDM, 또는 임의의 다른 원하는 메커니즘을 사용하여 SSD(120)에 의해 다운스트림 FAR(410)로 프로그램 될 수 있다.
FPGA(145)는 또한 구성 모니터(1125)를 포함할 수 있다. FPGA(145)는 SSD(120)를 대체하는 것이 아니라 단지 추가 기능을 제공하기 때문에, 그리고 FPGA(145)가 프로세서(110)와 SSD(120) 사이에 삽입되기 때문에 프로세서(110)가 SSD(120)에 의해 제공되는 기능을 알 수 있는 것은 중요하다. 보다 구체적으로, FPGA(145)는 SSD(120)의 PCIe 구성 공간과 매치하는 능력을 알려야 한다. 이를 위해, 구성 모니터(1125)는 SSD(120)의 PCIe 구성 공간을 복제 할 수 있고 이에 따라 SSD(120)가 제시하는 것과 동일한 PCIe 구성을 프로세서(110)에 제공할 수 있다.
도 12는 본 발명의 제 5 실시 예에 따라 도 1의 시스템에서 명령들을 가속화가기 위한 메모리 사용을 도시한다. 도 12에서, SSD(120)는 더 이상 프로세서(110)와 직접 통신하지 않기 때문에 SSD(120)는 호스트 시스템 메모리 주소의 블록을 요구하지 않는다. 대신에, SSD(120)는 루트 포트(1110)를 위한 구성 공간을 포함하는 주소 맵(1210)으로부터 FPGA 메모리 주소의 블록(1205)을 요청한다. 블록(1205)은 프로세서(110) 및 다운스트림 FAR(420)와의 NVMe 통신을 위한 서브 세트(410)를 포함할 수 있다. 블록(1205)는 BAR에 의해 식별될 수 있다.
FPGA(145) 없이 예상되는 바와 같이 프로세서(110)가 SSD(120)와 통신 할 수 있는 메커니즘을 제공하기 위해, FPGA(145)는 프로세서(110)로부터 호스트 시스템 메모리 주소를 요청할 수 있다. FPGA(145)의 SSD(120)에 의해 요청 된 바와 같이 블록(1205)을 병행하기 위해, FPGA(145)는 PF(1115)를 위해 적어도 블록(1205)만큼 큰 블록(1215)을 요청할 수 있다(따라서, SSD(120)가 프로세서(110)로부터 블록(1215)을 요청한 것처럼 보임). 블록(1215)에서 주소를 사용하는 PCIe 트랜잭션이 호스트와 SSD(120) 사이의 통신을 위한 것이지만 FPGA(145)를 통과한다는 것을 반영하기 위해 블록(1215)은 도 12에서 "호스트-FPGA-SSD"로 표시된다. FPGA(145)는 가속 명령에 대해 APM-F(340)과 통신하기 위해 프로세서(110)를 위한 메커니즘을 제공하면서, PF(1120)를 위한 블록(1220)을 요청할 수 있다. 블록들(1215 및 1220)은 각각 2 개의 분리된 BAR에 의해 식별될 수 있다. 본 발명의 또 다른 실시 예에서, FPGA(145)와 SSD(120) 간의 통신을 용이하게 하기 위해 다운스트림 FAR(420)처럼 블록(1220)의 일부분을 사용하는 것이 가능하다.
본 발명의 앞선 실시 예들에서와 같이 도 11에서, FPGA(145)는 프로세서(110) 및 SSD(120)와의 통신을 가능하게 하는 부분들을 포함하는 것으로 도시된다: 구체적으로, 엔드 포인트(1105), PF들(1115 및 1120), 루트 포트(1110) 및 다운스트림 필터(360). 앞서 도시된 본 발명의 실시 예들과 마찬가지로, PCIe 트랜잭션의 필터링과 관련된 구성들은 FPGA(145)로부터 제거 될 수 있다. 따라서, 본 발명의 제 5 실시 예에서, 엔드 포인트(1105) 및 PF들(1115 및 1120)은 제 1 브리징 구성 요소들 에 배치 될 수 있고, 루트 포트(1110) 및 다운스트림 필터(360)는 제 2 브리징 구성 요소들에 배치 될 수 있고, 각각이 도 11의 상이한 구성들을 갖는 PCIe 트랜잭션의 필터링을 처리할 수 있다. 선택적으로, PCIe 트랜잭션의 소스와 상관없이, 이러한 브리징 구성 요소들 중 오직 하나만이 사용될 수 있고(다른 소스(source)로부터의 통신을 위해 그것 자체 필터링을 처리하는 FPGA(145)과 함께), 단일 브리징 구성 요소가 FPGA(145)에 대한 모든 필터링을 처리하기 위해 사용될 수 있다.
제 6 실시 예
본 발명의 제 5 실시 예는 종래의 PCIe 트랜잭션(프로세서(110)와 SSD(120) 사이의)으로부터 가속 명령(SSD(120)와 FPGA(145) 사이의)을 분리하기 위해 여전히 다운스트림 필터(360)에 의존한다. 다운스트림 필터(360)는 본 발명의 제 6 실시 예에서와 같이 SSD(120)가 제 2 엔드 포인트를 포함하는 경우에 제거될 수 있다.
도 13은 본 발명의 제 6 실시 예에 따라 도 1의 FPGA(145) 및 도 1의 SSD(120)의 구성들을 도시한다. 도 13에서, FPGA는 도 11의 실시 예에서 도시된 하나의 루트 포트(1110)가 아니라 2 개의 루트 포트(1110 및 1305)를 포함한다. 루트 포트(1110)는 프로세서(110)로부터 발생하는 종래의 PCIe 트랜잭션에 사용될 수 있다; 루트 포트(1305)는 SSD(120)와 FPGA(145) 사이에서 교환되는 가속 명령 및 데이터를 위해 사용될 수 있다.
가속 명령은 상이한 루트 포트(1110 및 1305)를 사용하는 프로세서(110)로부터 발생하는 종래의 PCIe 트랜잭션으로부터 자연적으로 분리되기 때문에, 도 3, 5, 7, 9 및 11의 다운스트림 필터(360)가 필요하지 않다. 이 사실은 SSD(120)가 도 5, 7 및 9의 업스트림 필터들(505 및 715)을 프로그래밍 하기 위한 부담을 덜은 것처럼, SSD(120)가 FPGA(360)에서 다운스트림 필터(360)를 프로그래밍하는 부담을 덜은 것을 의미한다(도 11 및 13에 FPGA(145)는 종래의 PCIe 트랜잭션과 연관된 PF에 기초한 가속 명령을 구별 할 수 있다). 이 이점에 대한 오프셋은 SSD(120)가 각각 FPGA(145)의 루트 포트(1110 및 1305)와 통신하기 위해 두 개의 엔드 포인트들(305 및 1310)을 포함한다는 것이다.
SSD(120)는 본 발명의 제 6 실시 예에서 2 개의 엔드 포인트들(305 및 1310)을 포함하기 때문에, 엔드 포인트들(305 및 1310) 각각은 FPGA(145)로부터 자신의 메모리 주소 블록을 요청할 수 있다. 게다가, 루트 포트들(1110 및 1305) 각각은 그것 자신의 구성 공간을 포함하기 때문에, SSD(120)의 엔드 포인트들(305 및 1310)은 상이한 구성 공간들로부터 메모리 주소의 블록을 요청할 수 있다. 도 14는 이러한 시나리오를 도시한다.
도 14는 도 1의 시스템에서 명령들을 가속화 시키기 위한 메모리 사용을 도시한다. 도 14에서 SSD(120)의 엔드 포인트(305)는 루트 포트(1110)를 위한 구성 공간을 포함하는 주소 맵(1210)으로부터 블록(1405)을 요청할 수 있다. 그러나, 종래의 PCIe 트랜잭션(프로세서(110) 및 SSD(120) 사이)과 가속 명령(FPGA(145)와 SSD(120) 사이)는 SSD(120)상의 상이한 엔드 포인트들의 사용에 의해 자연적으로 분리되지만, SSD(120)는 블록(1405)이 다운스트림 FAR를 포함하기에 충분할 정도로 클 것을 요청할 필요가 없다. 따라서, 블록(1405)은 단지 FPGA(145) 없을 때와 같은 크기일 필요가 있다: 즉, 프로세서(110)와 SSD(120) 간의 NVMe 통신을 지원하기에 충분히 큰 것. 블록(1405)은 BAR에 의해 식별 될 수 있다.
SSD(120)의 엔드 포인트(1310)는 주소 맵(1410)으로부터 자신의 메모리 주소 블록을 요청할 수 있다. 그러나, 루트 포트(1305) 및 엔드 포인트(1310)는 다만 본 발명의 제 6 실시 예에서 가속 명령을 교환하기 위해 사용되기 때문에, 주소 맵(1410)의 전체가 이러한 PCIe 트랜잭션을 위해 사용될 수 있다: 엔드 포인트(1310)가 주소 맵(1410)의 단지 작은 블록을 요청할 필요는 없다.
본 발명의 제 5 실시 예에서와 같이, PF(1115)는 프로세서(110)와 SSD(120)간에 교환되는 PCIe 트랜잭션을 관리하기 위해 호스트 시스템 메모리 주소의 블록(1215)을 요청할 수 있다; 블록(1215)는 적어도 블록(1405)만큼 클 것이다. 유사하게, PF(1120)는 프로세서(110)와 FPGA(145) 사이에서 교환되는 가속 명령을 관리하기 위해 호스트 시스템 메모리 주소의 블록(1220)을 요구할 수 있다. 블록들(1215 및 1220)은 각각 BAR에 의해 식별 될 수 있다.
본 발명의 앞선 실시 예들에서와 같이 도 13에서, FPGA(145)는 프로세서(110) 및 SSD(120)와의 통신을 가능하게 하는 부분들을 포함하는 것으로 도시된다: 구체적으로, 엔드 포인트(1105), PF들(1115 및 1120), 루트 포트들(1110, 1305). 앞서 도시된 본 발명의 실시 예들과 마찬가지로, PCIe 트랜잭션의 필터링과 관련된 구성들은 FPGA(145)로부터 제거 될 수 있다. 따라서, 본 발명의 제 6 실시 예에서, 엔드 포인트(1105) 및 PF들(1115 및 1120)은 제 1 브리징 구성 요소들에 배치 될 수 있고, 루트 포트들(1110, 1305)은 각각이 도 13의 상이한 구성들을 갖는 PCIe 트랜잭션의 필터링을 처리하는 제 2 브리징 구성 요소들에 배치 될 수 있다. 선택적으로, PCIe 트랜잭션의 소스와 상관없이, 이러한 브리징 구성 요소들 중 오직 하나만이 사용될 수 있고(다른 소스(source)로부터의 통신을 위해 그것 자체 필터링을 처리하는 FPGA(145)과 함께), 단일 브리징 구성 요소가 FPGA(145)에 대한 모든 필터링을 처리하기 위해 사용될 수 있다.
제 7 실시 예
본 발명의 처음 제 6 실시 예들에서, FPGA(145)는 단일 업스트림 포트(330)(도 5, 7 및 9에서) 또는 단일 엔드 포인트(1105)(도 11 및 13에서)를 사용하여 도시된다. 그러나, FPGA(145)가 본 발명의 제 6 실시 예에서의 SSD(120)와 같이 다수의 엔드 포인트를 포함하지 않을 이유가 없다. 본 발명의 제 7 및 제 8 실시 예들은 FPGA(145)가 다중 엔드 포인트들을 사용하여 어떻게 동작 할 수 있는지를 도시한다.
도 15는 본 발명의 제 7 실시 예에 따라 도 1의 FPGA(145) 및 도 1의 SSD(120)의 구성들을 도시한다. 본 발명의 제 7 실시 예는 FPGA(145)가 2 개의 엔드 포인트들(1105 및 1505)을 포함한다는 것을 제외하고는 본 발명의 제 6 실시 예와 유사하다.
SSD(120)의 엔드 포인트들(305 및 1310)이 종래의 호스트-SSD PCIe 트랜잭션(host-to-SSD PCIe transactions) 및 FPGA-SSD 가속 명령(FPGA-to-SSD acceleration instructions)을 구별하는데 사용되는 것과 유사하게, FPGA(145)의 엔드 포인트들(1105 및 1505)은 종래의 호스트-SSD PCIe 트랜잭션 및 FPGA-SSD 가속 명령을 구별하는데 사용될 수 있다. 엔드 포인트(1105)에서 수신된 PCIe 트랜잭션은 종래의 PCIe 트랜잭션으로 간주 될 수 있고 SSD(120)로 전송되는 반면(루트 포트(1110)를 통해), 엔드 포인트(1505)에서 수신된 PCIe 트랜잭션은 가속 명령으로 간주될 수 있고, 처리를 위해 APM-F(340)로 전달될 수 있다.
본 발명의 제 7 실시 예에 따라 도 16은 도 1의 시스템에서 명령들을 가속하기 위한 메모리 사용을 도시한다. 모든 의도 및 목적을 위해, 본 발명의 제 7 실시 예에 따른 메모리 사용은 제 6 실시 예에 따른 메모리 사용과 동일하다. FPGA(145)의 루트 포트들(1110 및 1305)은 각각 자신의 구성 공간을 제공하고 SSD(120)의 엔드 포인트(305)는 BAR에 의해 식별되는 주소 맵(1210)으로부터 블록(1405)을 요청할 수 있다(본 발명의 제 6 실시 예에서와 같이, SSD(120)의 엔드 포인트(1310)는 주소 맵으로(1410)부터 블록(1405)을 요청할 수 있거나, SSD(120)의 엔드 포인트(1310)는 SSD-FPGA 통신을 위한 주소 맵(1410)의 전체를 사용할 수 있다). 엔드 포인트들(1105 및 1505)은 프로세서(110)와 SSD(120) 사이에서 교환되는 PCIe 트랜잭션을 관리하기 위해 호스트 시스템 메모리 주소의 블록들(1215 및 1220)을 요청할 수 있다; 블록(1215)은 적어도 블록(1405)만큼 클 수 있다. 블록(1215 및 1220)은 각각 BAR에 의해 식별 될 수 있다.
도 15에서, 본 발명의 앞선 실시 예들에서와 같이, FPGA(145)는 프로세서(110) 및 SSD(120)와의 통신을 가능하게 하는 부분들을 포함하는 것으로 도시된다: 구체적으로, 엔드 포인트들(1105, 1505) 및 루트 포트들(1110 및 1305). 앞서 보여진 본 발명의 실시 예들에서와 같이, PCIe 트랜잭션의 필터링과 관련된 구성들은 FPGA(145)로부터 제거될 수 있다. 따라서, 본 발명의 제 7 실시 예에서, 엔드 포인트들(1105, 1505)은 제 1 브리징 구성 요소들에 배치 될 수 있고, 루트 포트들(1110 및 1305)은 각각이 도 15의 상이한 구성들을 갖는 PCIe 트랜잭션의 필터링을 처리하는 제 2 브리징 구성 요소들에 배치 될 수 있다. 선택적으로, PCIe 트랜잭션의 소스와 상관없이, 이러한 브리징 구성 요소들 중 오직 하나만이 사용될 수 있고(다른 소스로부터의 통신을 위해 그것 자체의 필터링을 처리하는 FPGA(145)와 함께), 또는 단일 브리징 구성 요소가 FPGA(145)에 대한 모든 필터링을 처리하기 위해 사용될 수 있다.
제 8 실시 예
도 17은 본 발명의 제 8 실시 예에 따라 도 1의 FPGA(145) 및 도 1의 SSD(120)의 구성들을 도시한다. 본 발명의 제 8 실시 예는 FPGA(145)가 2 개의 엔드 포인트들(1105 및 1505)을 포함한다는 것을 제외하고는 본 발명의 제 5 실시 예와 유사하다. 다시 말하자면, FPGA(145)의 엔드 포인트들(1105 및 1505)은 종래의 호스트-SSD PCIe 트랜잭션 및 호스트-FPGA 가속 명령을 구별하기 위해 사용될 수 있다. FPGA(145)의 엔드 포인트(1105)에서 수신된 PCIe 트랜잭션은 종래의 PCIe 트랜잭션으로 간주 될 수 있고 SSD(120)로 전송되는 반면(루트 포트(1110)를 통해), FPGA(145)의 엔드 포인트(1505)에서 수신된 PCIe 트랜잭션은 가속 명령으로 간주될 수 있고, 처리를 위해 APM-F(340)로 전달될 수 있다.
본 발명의 제 8 실시 예에 따라 도 18은 도 1의 시스템에서 명령들을 가속하기 위한 메모리 사용을 도시한다. 본 발명의 제 8 실시 예에 따른 메모리 사용은 제 5 실시 예에 따른 메모리 사용과 유사하다. 루트 포트(1110)가 FPGA(145)의 유일한 루트 포트인 경우, SSD(120)의 엔드 포인트(305)는 다운스트림 FAR(420)를 포함 할 수 있는 주소 맵(1210)으로부터 블록(1205)을 요청할 수 있다. 엔드 포인트(1105)가 블록(1215)이 적어도 BAR에 의해 식별되는 블록(1205)만큼 클 것을 요청하는 경우, FPGA(145)의 엔드 포인트들(1105, 1505)는 호스트 시스템 메모리 주소로부터 블록들(1215, 1220)을 요구할 수 있다. 엔드 포인트들(1105 및 1505)은 프로세서(110)와 SSD(120) 사이에서 교환되는 PCIe 트랜잭션을 관리하기 위해 호스트 시스템 메모리 주소의 블록들(1215 및 1220)을 요청할 수 있다; 블록(1215)은 적어도 블록(1405)만큼 클 수 있다. 블록들(1215 및 1220)은 각각 2 개의 분리된 BAR에 의해 식별될 수 있다. 본 발명의 또 다른 실시 예에서, FPGA(145)와 SSD(120) 간의 통신을 용이하게 하기 위해 다운스트림 FAR(420)처럼 블록(1220)의 부분을 사용하는 것이 가능하다.
도 17에서, 본 발명의 앞선 실시 예들에서와 같이, FPGA(145)는 프로세서(110) 및 SSD(120)와의 통신을 가능하게 하는 부분들을 포함하는 것으로 도시된다: 구체적으로, 엔드 포인트들(1105, 1505) 및 루트 포트(1110) 및 다운스트림 필터(360). 앞서 보여진 본 발명의 실시 예들에서와 같이, PCIe 트랜잭션의 필터링과 관련된 구성들은 FPGA(145)로부터 제거될 수 있다. 따라서, 본 발명의 제 7 실시 예에서, 엔드 포인트들(1105, 1505)은 제 1 브리징 구성 요소들에 배치 될 수 있고, 루트 포트(1110) 및 다운스트림 필터(360)는 각각이 도 17의 상이한 구성들을 갖는 PCIe 트랜잭션의 필터링을 처리하는 제 2 브리징 구성 요소들에 배치 될 수 있다. 선택적으로, PCIe 트랜잭션의 소스와 상관없이, 이러한 브리징 구성 요소들 중 오직 하나만이 사용될 수 있고(다른 소스로부터의 통신을 위해 그것 자체의 필터링을 처리하는 FPGA(145)와 함께), 또는 단일 브리징 구성 요소가 FPGA(145)에 대한 모든 필터링을 처리하기 위해 사용될 수 있다.
본 발명의 다양한 실시 예들을 참조하여 위에서 언급한 바와 같이, FPGA(145)의 업스트림 인터페이스 및/또는 다운스트림 인터페이스의 일부인 것으로 기술되는 필터링 기능은 FPGA(145)로부터 분리될 수 있고 다른 구성들에 의해 처리 될 수 있다. 본 발명의 실시 예들에 따라, 도 19는 도 1의 가속 모듈(145)을 대신하여 필터링 기능을 처리 할 수 있는 브리징 구성 요소들을 도시한다.
도 19에서, 2 개의 브리징 구성 요소들(1905 및 1910)이 도시된다. 브리징 구성 요소(1905)는 프로세서(110)로부터 수신된 PCIe 트랜잭션의 필터링을 처리하는 반면, 브리징 구성 요소(1910)는 SSD(120)로부터 수신된 PCIe 트랜잭션의 필터링을 처리 할 수 있다. 브리징 구성 요소(1905)는 PCIe 트랜잭션이 가속 명령을 포함하는지 여부에 따라 PCIe 트랜잭션을 PCI(145) 또는 SSD(120) 중 하나로 전송할 수 있다. 유사하게, 브리징 구성 요소(1910)는 PCIe 트랜잭션이 가속 명령을 포함하는지 여부에 따라 PCIe 트랜잭션을 FPGA(145) 또는 프로세서(110) 중 하나로 전송 할 수 있다. FPGA(145)의 업스트림 및 다운스트림 인터페이스의 일부로서 도시 된 것들과 유사한 구현들과 같이, 브리징 구성 요소들(1905 및 1910)의 특정 구현들은 도 19에 도시되지 않는다.
본 발명의 일부 실시 예들에서, 브리징 구성 요소들(1905 및 1910) 모두가 사용될 수 있다. 본 발명의 다른 실시 예들에서, 하나의 브리징 구성 요소(1905 또는 1910)만이 사용되며, 다른 브리징 구성 요소의 기능은 잠재적으로 FPGA(145)와 함께 남아있을 수 있다. 또 다른 실시 예들에서, 브리징 구성 요소들(1905 및 1910) 모두는 분리된 구성들이 아닌 단일 구성에 포함될 수 있다.
본 발명의 다양한 실시 예가 설명되었으므로, 프로세서(110), FPGA(145) 및 SSD(120) 간의 데이터 흐름이 설명될 수 있다. 본 명세서의 나머지 부분에서, 모든 필터링 기능은 FPGA(145)로부터 기인하지만, 도 19의 브리징 구성 요소들(1905 및/또는 1910)로 필터링이 이동될 수 있는 시기와 방법이 명확히야 한다. 본 발명의 실시 예들에 따라, 도 20a 및 도 20b는 도 1의 프로세서, 도 1의 FPGA(145) 및 도 1의 SSD(120) 간의 통신을 도시한다. 도 20a에서, 본 발명의 제 1 실시 예(그리고, 가능하게는 본 발명의 다른 실시 예들)에 따른 데이터 흐름이 도시된다. 프로세서(110)는 PCIe 트랜잭션(2005)을 SSD(120)로 전송할 수 있다. PCIe 트랜잭션(2005)은 특별 명령(2010)을 포함할 수 있다. PCIe 트랜잭션(2005)은 (FPGA를 통해) SSD(120)로 전달될 수 있다. 그 이후에, APM-S(315)는 SSD(120)가 FPGA(145)로 전송할 수 있는, PCIe 트랜잭션(2020)에 포함될 수 있는 가속 명령(2015)을 생성 할 수 있다. 또한, 도 20a에서 도시되는 것처럼, FPGA(145) 및 SSD(120)는 가속 데이터를 교환할 수 있다.
가속 명령(2015)의 완료 시에, FPGA(145)는 프로세서(110)로 결과(2035)를 전달할 수 있는 SSD(120)로 결과(2030)를 되돌려 보낼 수 있다. 선택적으로, FPGA(145)는 결과(2040)를 프로세서(110)로 직접 전송하여 SSD(120)로부터 오는 결과(2035)를 시뮬레이션 할 수 있다.
대조적으로, 도 20b에서(본 발명의 제 2 내지 제 8 실시 예에 적용 가능한), 프로세서(110)는 가속 명령(2045)을 PCIe 트랜잭션(2005)으로서 FPGA(145)로 직접 전송할 수 있다. FPGA(145) 및 SSD(120)는 도 20b에서 도시 된 바와 같이 가속 데이터를 교환 할 수 있다. 마지막으로, FPGA(145)는 결과(2040)를 다시 프로세서(110)로 보낼 수 있다.
도 21은 본 발명의 실시 예에 따라 FPGA(145)가 PCIe 트랜잭션을 처리하기위한 예시적인 절차의 흐름도를 도시한다. 도 21은 높은 수준의 뷰(view)를 제공한다; 이후의 도면은 FPGA(145)의 동작의 보다 더 상세한 예시적인 흐름도를 제공한다. 도 21에서, 블록(2105)에서, FPGA(145)는 장치로부터 PCIe 트랜잭션을 수신 할 수 있다. 이러한 PCIe 트랜잭션은 도 20a 내지 도 20b의 PCIe 트랜잭션(2015 또는 2045) 중 하나 일 수 있고, 장치는 프로세서(110) 또는 SSD(120) 일 수 있다. 블록(2110)에서, FPGA(145)는 PCIe 트랜잭션이 가속 명령을 포함하는지 여부를 판단할 수 있다. 블록(2115)에서, FPGA(145)는 PCIe 트랜잭션이 가속 명령을 포함하는지를 알기 위해 검사할 수 있다. 그렇다면, 블록(2120)에서 가속 명령은 APM-F(340)에 의해 처리 될 수 있다; 그렇지 않은 경우, 블록(2125)에서, PCIe 트랜잭션은 다른 장치로 전달 될 수 있다(PCIe 트랜잭션이 프로세서(110)로부터 수신된 경우, PCIe 트랜잭션은 SSD(120)로 전달 될 수 있고, 그 반대도 가능하다). APM-F(340)에 의한 가속 명령을 처리하는 것은 가속 명령에 의해 처리 될 응용 데이터를 수신하기 위해 SSD(120)와 통신하는 것을 포함 할 수 있음을 주목한다.
본 발명의 실시 예에 따라, 도 22a 내지 도 22c는 PCIe 트랜잭션을 처리하기 위해 FPGA(145)에 대해 보다 상세한 예시적인 절차의 흐름도를 도시한다. 도 22a에서, 블록(2203)에서, FPGA(145)는 SSD(120)로부터 다운스트림 FAR(420)를 수신할 수 있다. 블록(2206)에서, FPGA(145)는 다운스트림 FAR(420)를 다운스트림 필터(360)와 연관시킬 수 있다. SSD(120)가 사이드대역 버스(365)를 통해 다운스트림 FAR(420)를 다운스트림 필터(360)로 프로그래밍하는 경우 이 관계는 자동적으로 일어날 수 있거나, 이 관계는 FPGA(145)에 의해 활성 단계를 요구할 수 있다(예로써, SSD(120)가 다운스트림 FAR(420)를 포함하는 FPGA(145)로 PCIe VDM을 전송하는 경우). 점선(2209)으로 도시 된 바와 같이, 본 발명의 몇몇 실시 예들에서, 블록들(2203 및 2206)은 스킵될 수 있음을 주목한다. 본 발명의 몇몇 실시 예들에서, 다운스트림 FAR(420)는 FPGA(145) 그것 자체에 의해 제공 될 수 있다.
블록(2212)에서, FPGA(145)는 SSD(120)로부터 업스트림 FAR(605)를 수신할 수 있고, 블록(2215)에서, FPGA(145)는 업스트림 포트(330)와 업스트림 FAR(605)를 연관시킬 수 있다. SSD(120)가 사이드대역 버스(365)를 통해 업스트림 FAR(605)를 업스트림 필터(505)로 프로그래밍하는 경우 이 관계는 자동적으로 일어날 수 있거나, 이 관계는 FPGA(145)에 의해 활성 단계를 요구할 수 있다(예로써, SSD(120)가 업스트림 FAR(605)를 포함하는 FPGA(145)로 PCIe VDM을 전송하는 경우). 본 발명의 몇몇 실시 예들에서, 업스트림 FAR(605)은 FPGA(145) 그것 자체에 의해 제공 될 수 있다.
선택적으로, 블록(2218)에서, FPGA(145)는 FPGA(145)를 노출시키기 위해 사용되는 PF 또는 VF의 식별자를 SSD(120)로부터 수신 할 수 있고, 블록(2221)에서 FPGA(145)는 PF/VF 식별자를 업스트림 필터(330)와 연관시킬 수 있다. 다시 말하자면, SSD(120)가 사이드대역 버스(365)를 통해 PF/VF의 식별자를 업스트림 필터(505)로 프로그래밍하는 경우 이 관계는 자동적으로 일어날 수 있거나, 이 관계는 FPGA(145)에 의해 활성 단계를 요구할 수 있다(예로써, SSD(120)가 PF/VF의 식별자를 포함하는 FPGA(145)로 PCIe VDM을 전송하는 경우).
점선(2224)으로 도시 된 바와 같이, 본 발명의 몇몇 실시 예들에서, 블록들(2212, 2215, 2218 및 2221)은 스킵될 수 있다.
블록(2227)에서, 구성 모니터(1125)는 SSD(120)의 엔드 포인트(305)의 구성을 판단할 수 있고, 블록 2230에서 구성 모듈(1125)은 FPGA(145)의 엔드 포인트(1105)에서 그 구성을 복제할 수 있고, 그렇게 함으로써 SSD(120)와 동일한 기능을 프로세서(110)로 제공할 수 있다. 본 발명의 몇몇 실시 예들에서, 블록들(2212, 2215, 2218 및 2221)은 점선(2233)으로 도시 된 것처럼 스킵(skip)될 수 있다.
일단 FPGA(145)가 적절히 구성되면, 블록(2236)(도 22B)에서 FPGA(145)는 프로세서(110)로부터 도 20b의 PCIe 트랜잭션(2005)을 수신할 수 있다(본 발명의 실시 예에 따라, 업스트림 포트(330) 또는 엔드 포인트(1105)를 통해). 블록(2239)에서, FPGA(145)는 도 20b의 PCIe 트랜잭션(2005)이 도 20b의 가속 명령(2045)을 포함하는지 여부를 판단할 수 있다. 포함한다면, 블록 (2242)에서 APM-F(340)는 도 22B의 가속 명령(2045)을 처리 할 수 있고, 블록 (2245)에서 APM-F(340)는 프로세서(110)로 도 20b의 결과(2040)을 송신할 수 있다. 그렇지 않으면, 도 20b의 PCIe 트랜잭션(2005)이 도 20b의 가속 명령(2045)을 포함하지 않는 경우, 블록(2248)에서, FPGA (145)는 도 20b의 PCIe 트랜잭션(2005)을 SSD(120)로 전송할 수 있다(본 발명의 실시 예에 따라, 다운스트림 포트(335) 또는 루트 포트(1110)를 통해).
블록(2251)(도 22C)에서, FPGA(145)는 도 20a의 PCIe 트랜잭션(2020)을 수신 할 수 있다(본 발명의 실시 예에 따라, 다운스트림 포트(335) 또는 루트 포트(1110)를 통해). 블록(2254)에서, FPGA(145)는 도 20a의 PCIe 트랜잭션(2020)이 도 20a의 가속 명령(2015)을 포함하는지 여부를 판단할 수 있다.
도 20a의 PCIe 트랜잭션(2020)이 도 20a의 가속 명령(2015)을 포함하는 경우, 블록(2257)에서, APM-F(340)는 도 22의 가속 명령(2015)을 처리 할 수 있고, 블록(2260)에서, APM-F(340)는 도 20a의 결과(2040)를 SSD(120)로 전송할 수 있다. 그렇지 않으면, 도 20a의 PCIe 트랜잭션(2020)이 가속 명령(2015)을 포함하지 않는경우, 블록(2263)에서, FPGA(145)는 도 20a의 PCIe 트랜잭션(2020)을 프로세서(110)로 전송할 수 있다(발명의 실시 예에 따라, 업스트림 포트(330) 또는 엔드 포인트(1105)를 통해).
본 발명의 실시 예에 따라, 도 23a-23b는 프로세서(110)로부터 오는 도 20b의 PCIe 트랜잭션(2005)이 도 20b의 가속 명령(2045)을 포함하는지 여부를 판단하기 위해 FPGA(145)에 대한 예시적인 절차의 흐름도를 도시한다. 본 발명의 실시 예에 따라, 도 23A 및 23B는 개별적으로 또는 집합적으로 사용될 수 있는 3 가지 가능한 테스트를 도시한다. 하나 이상의 테스트를 사용하는 본 발명의 실시 예에서, 개개의 테스트가 만족되는 경우, 도 20b의 PCIe 트랜잭션(2005)은 도 20b의 가속 명령(2045)를 포함하는 것으로 판단될 수 있다. 도 23a에서, 블록(2305)에서, FPGA(145)는 도 20b의 PCIe 트랜잭션(2005)과 관련된 주소가 업스트림 FAR(605)에서의 주소를 포함하는지 여부를 판단할 수 있다. 블록(2310)에서, FPGA(145)는 도 20b의 PCIe 트랜잭션(2005)이 업스트림 필터(715)와 연관된 PF 또는 VF의 식별자를 포함하는지를 판단할 수 있다. 블록(2315)에서, FPGA(145)는 엔드 포인트(1505)와 같은 가속 명령 전용의 포트에서 도 20b의 PCIe 트랜잭션(2005)이 수신되는지를 판단할 수 있다. 이들 테스트들의 임의의 결과가 도 20b의 PCIe 트랜잭션(2005)이 도 20b의 가속 명령(2045)을 포함하는 것을 나타내면, 블록(2320)(도 23B)에서, FPGA(145)는 도 20b의 PCIe 트랜잭션(2005)이 도 20b의 가속 명령(2045)을 포함하는 것을 안다; 그렇지 않으면, 블록(2325)에서 FPGA(145)는 도 20b의 PCIe 트랜잭션(2005)이 도 20b의 가속 명령(2045)을 포함하지 않는 것을 안다.
본 발명의 실시 예에 따라, 도 24는 SSD(120)로부터 오는 도 20a의 PCIe 트랜잭션(2020)이 도 20a의 가속 명령(2015)을 포함하는 지 여부를 판단하기 위해 FPGA(145)에 대한 예시적인 절차의 흐름도를 도시한다. 본 발명의 실시 예에 따라, 도 24는 개별적으로 또는 집합적으로 사용될 수 있는 3가지 가능한 테스트를 도시한다. 하나 이상의 테스트를 사용하는 본 발명의 실시 예에서, 어떤 개별 테스트라도 만족되는 경우, 도 20a의 PCIe 트랜잭션(2020)은 도 20a의 가속 명령(2015)를 포함하는 것으로 판단될 수 있다. 도 24에서, 블록(2405)에서, FPGA(145)는 도 20a의 PCIe 트랜잭션(2020)과 관련된 주소가 다운스트림 FAR(420)에서의 주소를 포함하는지 여부를 판단할 수 있다. 블록 (2410)에서, 루프 포트(1305)와 같은 가속 명령 전용의 포트에서 FPGA(145)는 도 20a의 PCIe 트랜잭션(2020)이 수신되는지를 판단할 수 있다. 이들 테스트 결과들의 어느 하나가 도 20a의 PCIe 트랜잭션(2020)이 도 20a의 가속 명령(2015)을 포함하는 것을 나타내면, 블록(2415)에서 FPGA(145)는 도 20a의 PCIe 트랜잭션(2020)이 도 20a의 가속 명령(2015)을 포함하는 것을 안다; 그렇지 않으면, 블록(2420)에서 FPGA(145)는 도 20a의 PCIe 트랜잭션(2020)이 도 20a의 가속 명령(2015)을 포함하지 않는 것을 안다.
본 발명의 실시 예에 따라, 도 25는 도 1의 프로세서(110)로부터 오는 PCIe 트랜잭션(2020)이 가속 명령을 포함하는 지 여부를 판단하기 위한 도 19의 제 1 브리징 구성 요소(1905)에 대한 예시적인 절차의 흐름도를 도시한다. 도 25에서, 블록(2505)에서, 제 1 브리징 구성 요소(1905)는 도 1의 프로세서(110)로부터 PCIe 트랜잭션을 수신 할 수 있다. 블록(2510)에서, 제 1 브리징 구성 요소(1905)는 PCIe 트랜잭션이 가속 명령인지 여부를 판단할 수 있다. 그렇다면, 블록(2515)에서, 제 1 브리징 구성 요소(1905)는 PCIe 트랜잭션/가속 명령을 도 1의 FPGA(145)로 전송할 수 있다; 그렇지 않으면, 블럭(2520)에서, 제 1 브리징 구성 요소(1905)는 PCIe 트랜잭션을 도 1의 SSD(120)로 전달할 수 있다.
본 발명의 실시 예에 따라, 도 26은 도 1의 저장 장치(120)로부터 오는 PCIe 트랜잭션이 가속 명령을 포함하는 지 여부를 판단하기 위한 도 19의 제 2 브리징 구성 요소(1910)에 대한 예시적인 절차의 흐름도를 도시한다. 도 26에서, 블록(2605)에서, 제 2 브리징 구성 요소(1905)는 도 1의 SSD(120)로부터 PCIe 트랜잭션을 수신 할 수 있다. 블록(2610)에서, 제 2 브리징 구성 요소(1905)는 PCIe 트랜잭션이 가속 명령인지 여부를 판단할 수 있다. 그렇다면, 블록(2615)에서, 제 2 브리징 구성 요소(1905)는 PCIe 트랜잭션/가속 명령을 도 1의 FPGA(145)로 전송할 수 있다; 그렇지 않으면, 블럭(2620)에서, 제 2 브리징 구성 요소(1905)는 PCIe 트랜잭션을 도 1의 프로세서(110)로 전달할 수 있다.
본 발명의 실시 예에 따라, 도 27a 내지 도 27c는 SSD(120)가 PCIe 트랜잭션을 처리하기 위한 예시적인 절차의 흐름도를 도시한다. 도 27a에서, 블록 2705에서, SSD(120)는 메모리 주소의 블록을 요청할 수 있다. SSD(120)는 본 발명의 제 1 내지 제 4 실시 예에서와 같이 호스트 시스템 메모리로부터 또는 본 발명의 제 5 내지 제 8 실시 예에서와 같이 FPGA(145)의 루트 포트의 구성 공간으로부터 메모리 주소의 블록을 요청할 수 있다. 사이드대역 버스(365), PCIe VDM 또는 임의의 다른 원하는 매커니즘을 사용하여, 블록(2710)에서 SSD(120)는 다운스트림 FAR(420)처럼 사용하기 위한 메모리 주소의 블록의 서브 세트를 선택할 수 있고, 블록(2715)에서 SSD(120)는 다운스트림 필터(360)를 다운스트림 FAR(420)로 프로그래밍할 수 있다. 본 발명의 몇몇 실시 예들에서, 블록들(2705 내지 2715)은 점선(2720)으로 도시 된 바와 같이 스킵될 수 있음에 주목한다(점선(2720) 또한 도 27B에 도시 된 몇몇 블록을 생략한다).
사이드대역 버스(365), PCIe VDM 또는 임의의 다른 원하는 매커니즘을 사용하여, 블록(2725)(도 27B)에서 SSD(120)는 업스트림 FAR(605)처럼 사용하기 위한 메모리 주소의 블록의 서브 세트를 선택할 수 있고, 블록(2730)에서 SSD(120)는 다운스트림 필터(360)를 다운스트림 FAR(420)로 프로그래밍할 수 있다. 선택적으로, 블록(2735)에서, SSD(120)는 PF(705)를 사용하여 그것 자신의 능력을 노출시킬 수 있다. 그 이후에, 사이드대역 버스(365), PCIe VDM 또는 임의의 다른 원하는 매커니즘을 사용하여, 블록(2740)에서 SSD(120)는 FPGA(145)를 노출시키기 위해 PF(905) 또는 VF(710)를 사용할 수 있고, 블록(2745)에서 SSD(120)는 다운스트림 필터(360)를 PF(905) 또는 VF(710)의 식별자로 프로그래밍할 수 있다. 본 발명의 몇몇 실시 예들에서, 블록들(2725 내지 2745)은 점선(2750)으로 도시 된 바와 같이 스킵될 수 있음에 주목한다.
블록(2755)에서, SSD(120)는 FPGA(145)로부터 PCIe 트랜잭션을 수신 할 수 있다. 이 PCIe 트랜잭션은 도 20a의 PCIe 트랜잭션(2005)이거나(프로세서(110)로부터 FPGA(145)에 의해 전달됨(forwarded)), 도 20a 및 도 20b의 PCIe 트랜잭션(2025) 일 수 있다. PCIe 트랜잭션의 소스에 관계없이, 블록(2760)(도 27C)에서, HIL(310)은 PCIe 트랜잭션이 가속 명령을 포함하는지를 판단할 수 있다. 그렇다면, 블록(2765)에서, HIL(310)은 PCIe 트랜잭션(또는 압축 해제된 가속 명령)을 처리를 위해 APM-S(315)로 전송할 수 있다. APM-S(315)는 가속 명령에 대한 응답을 생성 할 수 있으며, 이는 도 20a의 가속 명령(2025)이거나 (PCIe 트랜잭션이 프로세서(110)로부터 유래 된 경우), 가속 데이터(2025)일 수 있다(PCIe 트랜잭션이 FPGA(145)의 APM-F(340)에서 유래된 경우). 어느 경우든지, 블록(2770)에서, APM-S(315)는 응답을 FPGA(145)로 전송할 수 있다.
반면에, PCIe 트랜잭션이 가속 명령이 아니면, 블록(2775)에서 SSD(120)는 PCIe 트랜잭션이 도 20의 결과(2030)인지를 판단할 수 있다. 그렇다면, 블록(2780)에서, SSD(120)는 도 20a의 결과(2035)를 프로세서(110)로 전송할 수 있다(SSD(120) 및 FPGA(145)의 엔드 포인트(305)를 통해). PCIe 트랜잭션이 도 20a의 결과(2030)가 아니면, 블록(2785)에서 SSD(120)는 정상적인 경우처럼 SSD(120)에 저장된 데이터에 대해 PCIe 트랜잭션을 처리 할 수 있다.
도 28a 내지 도 28b는 본 발명의 실시 예에 따라 SSD(120)가 FPGA(145)로부터 나오는 PCIe 트랜잭션이 가속 명령을 포함하는지 여부를 판단하기 위한 예시적인 절차의 흐름도를 도시한다.
본 발명의 실시 예에 따라, 도 28a 및 28b는 개별적으로 또는 집합적으로 사용될 수 있는 3 가지 가능한 테스트를 도시한다. 하나 이상의 테스트를 사용하는 본 발명의 실시 예에서, 어떤 개별 테스트라도 만족되는 경우, 도 20a의 PCIe 트랜잭션은 가속 명령(2015)을 포함하는 것으로 판단될 수 있다. 도 28a에서, 블록(2805)에서, SSD(120)는 PCIe 트랜잭션(2020)이 프로세서(110)(SSD(120)가 FPGA(145)로 가속 명령을 개시해야 하는 것을 나타내는)로부터의 특정 커맨드를 포함하는지 여부를 판단할 수 있다. 블록(2810)에서, SSD(120)는 PCIe 트랜잭션이 APM-F(340)로부터 유래하는 것인지 판단할 수 있고, 이는 APM-F(340)가 도 20a 및 도 20b의 가속 데이터(2025)를 요청하거나 APM-F(340)가 도 20a의 결과(2030)를 SSD(120)로 전송하는 경우에 발생할 수 있다. 블록(2810)의 테스트는 임의의 원하는 방식으로 수행 될 수 있다: 예로써, PCIe 트랜잭션은 PCIe 트랜잭션이 가속 명령임을 나타내기 위한 태그를 포함 할 수 있거나 PCIe 트랜잭션은 다운스트림의 주소와 연관 될 수 있다. 블록(2815)에서, SSD(120)는 PCIe 트랜잭션이 엔드 포인트(1310)와 같은 가속 명령 전용의 포트에서 수신되는지를 판단할 수 있다. 이들 테스트의 결과 중 임의의 것이 PCIe 트랜잭션이 가속 명령을 포함한다는 것을 나타내면, 블록(2820)(도 28b)에서, SSD(120)는 PCIe 트랜잭션이 가속 명령을 포함한다는 것을 안다; 그렇지 않다면, 블록(2825)에서, SSD(120)는 PCIe 트랜잭션이 가속 명령을 포함하지 않는다는 것을 안다.
도 21 내지 28b에서, 본 발명의 몇몇 실시 예들이 도시된다. 그러나, 당업자는 블록들의 순서를 변경하거나, 블록들을 생략하거나, 또는 도면에 도시되지 않은 연결들을 포함함으로써, 본 발명의 다른 실시 예도 가능하다는 것을 인식 할 수 있을 것이다. 추가로, 특정 동작들이 특정 구성 요소들에 의해 수행되는 것으로 설명되지만, 본 발명의 실시 예들은 설명 된 동작들을 수행하는 다른 구성 요소들을 지원할 수 있다. 흐름도들의 이러한 모든 변형은 명시적으로 기술되었든지 아니든지 본 발명의 실시 예들인 것으로 간주된다.
본 발명의 실시 예는 종래 기술에 비해 기술적인 이점을 제공한다. 도 1의 기계(105)로 도 1의 가속 모듈(145)을 도입함으로써, 도 1의 프로세서(110)는 도 1의 가속 모듈(145)에 의해 수행 될 수 있는 작업을 떠넘길 수 있다. 이러한 커맨드는 전형적으로 폐기 될 수 있는 많은 양의 데이터를 처리하는 것을 포함하기 때문에, 도 1의 메모리(140)의 일부 공간을 자유롭게 할 필요성을 피할 뿐만 아니라, 도 1의 가속 모듈(145)로 작업을 떠넘기는 것은 데이터를 도 1의 저장 장치(120)로부터 도 1의 메모리(140)로 데이터를 로딩하는데 요구되는 지연을 피한다.
또한, 본 발명의 다양한 실시 예는 도 1의 여러 상이한 유형들의 저장 장치(120)를 사용하는 것을 지원한다. 도 1의 가속 모듈(145)을 노출시키기 위해 추가의 PF 및/또는 VF를 지원하는 저장 장치들뿐만 아니라 단일 포트 및 이중 포트 저장 장치들 모두가 사용될 수 있다.
본 발명의 다양한 실시 예들은 상이한 성능을 제공하는 프로세서를 사용하는 것을 추가로 지원한다. 도 1의 기계(105)의 동작 시스템이 VF들을 지원하면, VF가 도 1의 가속 모듈(145)을 노출 시키는데 사용될 수 있다; 그렇지 않으면, PF가 사용될 수 있다. 도 1의 프로세서(110)는 도 1의 가속 모듈(145)과 직접 통신 할 수 있고, 그러한 통신을 지원하는 발명의 실시 예가 사용될 수 있다. 그렇지 않으면, 도 1의 프로세서(110)는 도 1의 저장 장치(120)로 모든 가속 명령을 송신할 수 있고, 도 1의 가속 모듈(145)이 가속 명령을 수행하도록 요청하기 위해 그것을 도 1의 저장 장치(120)에 남겨 둘 수 있다.
아래의 설명은 본 발명의 기술적 사상의 일부 측면들이 구현되는 적절한 기계 또는 기계들의 짧고 일반적인 설명을 제공하고자 한다. 기계 또는 기계들은 다른 기게로부터 수신되는 지시들, 가상현실(VR) 환경과의 상호 작용, 생체 피드백, 또는 다른 입력 신호뿐 아니라 키보드, 마우스 등과 같은 통상적인 입력 장치들로부터의 입력에 의해 적어도 부분적으로 제어될 수 있다. 여기에서 사용되는 바와 같이, "기계"의 용어는 단일 기계, 가상 기계, 또는 함께 동작하는 통신 가능하게 연결된 기계들, 가상 기계들 또는 장치들의 시스템을 넓게 포함하는 것으로 의도된다. 예시적인 기계들은 예로써 자동차, 기차, 택시 등과 같은 개인용 또는 공공 수송과 같은 수송 장치들뿐 아니라 개인용 컴퓨터들, 워크스테이션들, 서버들, 포터블 컴퓨터들, 핸드헬드 장치들, 전화들, 태블릿들 등과 같은 컴퓨팅 장치들을 포함할 수 있다.
기계 또는 기계들은 프로그램 가능한 또는 프로그램 불가능한 논리 장치들 또는 어레이들, ASIC (Application Specific Integrated Circuit), 임베디드 컴퓨터들, 스마트 카드들 등과 같은 임베디드 컨트롤러들을 포함할 수 있다. 기계 또는 기계들은 네트워크 인터페이스, 모뎀, 또는 다른 통신 결합들을 통해서와 같이 하나 또는 그보다 많은 원격 기계들에 대한 하나 또는 그보다 많은 연결들을 활용할 수 있다. 기계들은 인트라넷, 인터넷, LAN (local area networks), WAN (wide area networks) 등과 같은 물리적 그리고/또는 논리적 네트워크의 수단으로 서로 연결될 수 있다. 이 분야에 숙력된 자는 네트워크 통신이 다양한 유선 그리고/또는 무선 근거리 또는 원거리 캐리어들 및 무선 주파수(RF), 위성, 마이크로파, IEEE 802.11, 블루투스, 광학, 적외선, 케이블, 레이저 등을 포함하는 프로토콜을 활용함을 이해할 것이다.
본 발명의 기술적 사상의 실시 예들은, 기계에 의해 액세스되는 때에 기계가 작업들을 수행하거나 또는 추상적인 데이터 타입들 또는 저레벨 하드웨어 콘텍스트들을 정의하는 것을 유발하는 함수들, 절차들, 데이터 구조들, 응용 프로그램들 등을 포함하는 연관된 데이터를 참조하여 또는 협력하여 설명될 수 있다. 연관된 데이터는, 예로써 RAM, ROM 등과 같은 휘발성 그리고/또는 불휘발성 메모리, 또는 다른 저장 장치들, 그리고 하드 드라이브, 플로피 디스크, 광학 스토리지, 테이프들, 플래시 메모리, 메모리 스틱들, 디지털 비디오 디스크들, 생체 스토리지 등을 포함하는 연관된 스토리지 매체에 저장될 수 있다. 연관된 데이터는 물리적 그리고/또는 논리적 네트워크를 포함하는 전송 환경들을 거쳐 패킷들, 직렬 데이터, 병렬 데이터, 전송신호들 등의 형태로 전달되고, 압축된 또는 암호화된 포맷으로 이용될 수 있다. 연관된 데이터는 분산 환경에서 사용될 수 있으며, 기계 액세스에 대해 지역적 그리고/또는 원격으로 저장될 수 있다.
본 발명의 기술적 사상의 실시 예들은 하나 또는 그보다 많은 프로세서들에 의해 실행 가능하며 여기에 설명된 바와 같이 본 발명의 기술적 사상의 원소들을 수행하게 하는 명령들을 포함하는 실재하는 비임시 기계 독출 매체를 포함할 수 있다.
위에서 설명된 방법들의 다양한 동작들은 다양한 하드웨어 및/또는 소프트웨어 구성 요소(들), 회로들, 및/또는 모듈(들)과 같은 동작들을 수행 할 수 있는 임의의 적절한 수단에 의해 수행 될 수 있다. 소프트웨어는 논리적 기능을 구현하기 위한 실행 가능한 명령들의 순서화된 목록을 포함 할 수 있으며, 단일 또는 다중 코어 프로세서 또는 프로세서-포함 시스템과 같은 장치(device), 명령 실행 시스템, 기구(apparatus)와 관련하여 또는 이것들에 의한 사용을 위한 임의의 "프로세서 판독 가능 매체"에서 구현 될 수 있다.
본 명세서에 개시된 실시 예와 관련하여 설명 된 방법 또는 알고리즘 및 기능의 블록들 또는 단계들은 하드웨어, 프로세서에 의해 실행중인 소프트웨어 모듈, 또는 이들의 조합으로 직접 구현 될 수 있다. 소프트웨어로 구현되는 경우, 기능들은 실재하고, 비-일시적 컴퓨터 판독 가능 매체 상에 저장되거나, 하나 이상의 명령 또는 코드로서 전송될 수 있다. 소프트웨어 모듈은 RAM(random access memory), 플래시 메모리, ROM(Read Only Memory), EPROM(Electrically Programmable ROM), EEPROM(Electrically Erasable Programmable ROM), 레지스터, 하드 디스크, 이동식 디스크, CD ROM, 또는 이 기술 분야에 알려진 임의의 다른 형태의 저장 매체 일 수 있다.
도시된 실시 예들을 참조하여 설명된 본 발명의 기술적 사상의 원칙들을 가지면, 도시된 실시 예들이 이러한 원칙들로부터 멀어지지 않으면서 배열 및 상세에서 수정될 수 있고 원하는 임의의 방법으로 조합될 수 있음이 이해될 것이다. 앞선 설명이 특정 실시 예들에 집중하였지만, 다른 구성돌 또한 고려된다. 구체적으로, "본 발명의 기술적 사상의 실시 예에 따른"이나 이와 유사한 것과 같은 표현들이 명세서에 사용되지만 언급하는 것을 말하며, 이러한 문구들은 일반적으로 실시 예의 가능성들을 참조하며, 본 발명의 기술적 사상을 특정 실시 예의 구성들로 한정하는 것을 의도하지 않는다. 여기에 사용되는 바와 같이, 이러한 용어들은 다른 실시 예들로 조합 가능한 동일한 또는 상이한 실시 예들을 참조할 수 있다.
앞서 설명된 실시 예들은 본 발명의 기술적 사상을 그것들로 한정하는 것으로 해석되지 않는다. 적은 실시 예들만이 설명되었지만, 이 분야에 숙련된 자들은 본 기재의 신규한 설명들 및 장점들로부터 실질적으로 멀어지지 않으면서 이러한 실시 예들에 많은 수정들이 가능함을 충분히 이해할 것이다. 따라서, 이러한 모든 수정들은 청구항들에서 정의되는 바와 같이 본 발명의 기술적 사상의 범위 내에 포함되는 것으로 의도된다.
본 발명의 실시 예들은 제한없이 다음의 설명으로 확장 될 수 있다.
설명 1. 본 발명의 실시 예는 시스템을 포함한다. 시스템은:
응용 프로그램을 실행하는 프로세서;
상기 프로세서 상에서 실행중인 상기 응용 프로그램에 의해 사용 되어지는 데이터를 저장하는 메모리;
상기 프로세서와 통신하기 위한 업스트림 인터페이스;
저장 장치와 통신하기 위한 다운스트림 인터페이스; 및
하드웨어를 사용하여 구현되고 가속 명령을 실행하기 위한 가속 플랫폼 관리자(APM-F)를 포함하는 가속 모듈을 포함하되,
상기 저장 장치는,
상기 가속 모듈과 통신하기 위한 상기 저장 장치의 엔드 포인트;
상기 저장 장치의 동작들을 관리하기 위한 컨트롤러;
상기 응용 프로그램에 대한 응용 데이터를 저장하기 위한 저장소; 및
상기 가속 명령을 실행하는데 상기 가속 플랫폼 관리자(APM-F)를 보조하기 위한 저장 장치 가속 플랫폼 관리자(APM-S)를 포함하고,
상기 프로세서, 상기 가속 모듈 및 상기 저장 장치는 PCIe(Peripheral Component Interconnect Exchange) 버스를 통해 통신하고,
상기 가속 모듈은 상기 응용 데이터를 상기 메모리로 로딩하는 것 없이 상기 응용 프로그램을 위한 상기 저장 장치 상의 상기 응용 데이터에 대한 상기 가속 명령을 수행하는 것을 지원한다.
설명 2. 설명 1에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 1에 있어서,
상기 프로세서와 상기 가속 모듈 간의 통신을 연결(bridging)하고, 상기 업스트림 인터페이스를 포함하는 제 1 브리징 구성 요소; 및
상기 가속 모듈과 상기 저장 장치 간의 통신을 연결하고, 상기 다운스트림 인터페이스를 포함하는 제 2 브리징 구성 요소를 더 포함한다.
설명 3. 설명 1에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 1에 있어서,
상기 가속 모듈은 FPGA(Field Programmable Gate Array)를 사용하여 구현되고,
상기 가속 모듈은 상기 업스트림 인터페이스 및 상기 다운스트림 인터페이스를 포함하고,
상기 저장 장치는 SSD(Solid State Drive)를 포함한다.
설명 4. 설명 3에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 3에 있어서, 상기 APM-F 및 상기 APM-S는 상기 가속 명령과 함께 사용될 상기 응용 데이터에 관한 상기 다운스트림 인터페이스 및 상기 SSD의 상기 엔드 포인트를 사용하여 통신한다.
설명 5. 설명 3에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 3에 있어서, 상기 APM-F 및 상기 APM-S는 메세지를 사용하여 통신한다.
설명 6. 설명 3에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 3에 있어서, 상기 프로세서는 비-휘발성 메모리 익스프레스(NVMe) 프로토콜을 사용하여 커맨드를 인코딩하는 트랜잭션 계층 패킷(TLP)을 포함하는 PCIe 트랜잭션을 SSD로 전송한다.
설명 7. 설명 3에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 시스템에 있어서, 상기 FPGA는:
가속 엔진;
상기 가속 엔진으로 상기 가속 명령을 스케쥴링하는 런타임 스케쥴러 (run-time scheduler)를 더 포함한다.
설명 8. 설명 3에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 3에 있어서, 상기 SSD는 FPGA를 포함한다.
설명 9. 설명 3에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 3에 있어서,
상기 업스트림 인터페이스는 업스트림 포트를 포함하고,
상기 다운스트림 인터페이스는 다운스트림 포트를 포함하고,
상기 FPGA는 상기 업스트림 포트에서 상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하도록 동작하고,
상기 FPGA는 상기 다운스트림 포트와 관련된 다운스트림 필터를 포함하고,
상기 다운스트림 필터는 상기 저장 장치로부터 수신된 가속 명령을 가로채도록 동작하고 상기 APM-F로 상기 가속 명령을 전달하도록 동작하고,
상기 가속 명령은 다운스트림 필터 주소 범위(FAR)와 관련되어지고,
상기 FPGA는 다운스트림 포트에서 상기 저장 장치로부터 수신된 상기 다운스트림 FAR와 관련되지 않은 제 2 PCIe 트랜잭션을 상기 프로세서로 전송하도록 동작한다.
설명 10. 설명 9에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 9에 있어서, 상기 가속 명령은 상기 APM-S에 의해 생성된다.
설명 11. 설명 10에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 10에 있어서, 상기 SSD는 상기 프로세서로부터 수신된 상기 가속 명령을 포함하는 특정 커맨드를 가로채고, 상기 가속 명령을 생성하기 위해 상기 APM-S를 트리거하기 위해 상기 특정 커맨드를 상기 APM-S로 전달하는 호스트 인터페이스 로직(HIL)을 더 포함한다.
설명 12. 설명 11에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 10에 있어서, 상기 특정 커맨드는 상기 프로세서 상에서 실행중인 가속 서비스 관리자(ASM)로부터 유래한다.
설명 13. 설명 9에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 9에 있어서,
상기 SSD는 상기 프로세서로부터 상기 호스트 시스템의 블록을 요청하도록 동작하고,
상기 컨트롤러는 상기 다운스트림 FAR로서 상기 호스트 시스템의 블록의 서브 세트를 선택하도록 동작한다.
설명 14. 설명 13에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 13에 있어서, 상기 컨트롤러는 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 15. 설명 14에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 14에 있어서, 상기 컨트롤러는 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하기 위해 사이드대역 버스를 사용하도록 동작한다.
설명 16. 설명 15에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 15에 있어서, 상기 사이드대역 버스는 I2C(Inter-Integrated Circuit) 버스 및 SMBus (System Management Bus)를 포함하는 세트로부터 얻어진다.
설명 17. 설명 14에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 14에 있어서, 상기 컨트롤러는 PCIe VDM(Vendor Defined Message)를 사용하여 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 18. 설명 9에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 9에 있어서, 상기 APM-F는 상기 다운스트림 포트 및 상기 SSD의 엔드 포인트를 통해 상기 APM-S로 결과를 전송하도록 동작하고,
상기 컨트롤러는 상기 결과를 상기 SSD의 상기 엔드 포인트를 통해 상기 프로세서로 전달하도록 동작한다.
설명 19. 설명 9에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 9에 있어서, 상기 APM-F는 상기 업스트림 포트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 20. 설명 9에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 9에 있어서, 상기 FPGA는 상기 업스트림 포트와 연관된 업스트림 필터를 더 포함하고, 상기 업스트림 필터는 상기 프로세서로부터 수신된 제 2 가속 명령을 가로채도록 동작하고, 상기 업스트림 FAR과 관련되어지는 상기 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 FPGA는 업스트림 포트에서 상기 프로세서로부터 수신된 업스트림 FAR과 관련되지 않은 제 3 PCIe 트랜잭션을 상기 SSD로 전달하도록 동작한다.
설명 21. 설명 20에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 20에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 22. 설명 20에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 20에 있어서, 상기 SSD는 상기 프로세서로부터 호스트 시스템 주소의 블록을 요청하도록 동작하고,
상기 컨트롤러는 상기 다운스트림 FAR로써 상기 호스트 시스템 주소의 상기 블록의 제 1 서브 세트 및 업스트림 FAR로써 상기 호스트 시스템 주소의 상기 블록의 제 2 서브 세트를 선택하도록 동작한다.
설명 23. 설명 22에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 22에 있어서, 상기 호스트 시스템 주소의 블록이 상기 프로세서상에서 실행중인 ASM에 의해 접근 가능한 특정 레지스터를 포함하고, 상기 특정 레지스터는 상기 업스트림 FAR를 식별한다.
설명 24. 설명 22에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 22에 있어서, 상기 컨트롤러는 상기 다운스트림 필터를 상기 다운스트림 FAR로, 상기 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하도록 동작한다.
설명 25. 설명 24에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 24에 있어서, 상기 컨트롤러는 상기 다운스트림 필터를 상기 다운스트림 FAR로, 상기 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하기 위해 상기 사이드대역 버스를 사용하도록 동작한다.
설명 26. 설명 25에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 25에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 27. 설명 24에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 24에 있어서, 상기 컨트롤러는 PCIe VDM을 사용하여 상기 다운스트림 필터를 상기 다운스트림 FAR로, 상기 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하도록 동작한다.
설명 28. 설명 20에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 20에 있어서,
상기 APM-F는 상기 다운스트림 포트 및 상기 SSD의 상기 엔드 포인트를 통해 상기 APM-S로 결과를 전송하도록 동작하고,
상기 컨트롤러는 상기 결과를 상기 SSD의 상기 엔드 포인트를 통해 상기 프로세서로 전달하도록 동작한다.
설명 29. 설명 20에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 20에 있어서, 상기 APM-F는 상기 업스트림 포트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 30. 설명 9에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 9에 있어서,
상기 SSD는 물리 함수(PF) 및 가상 함수(VF)을 포함하고, 상기 PF는 상기SSD를 노출시키기 위해 동작하고, 상기 VF는 상기 FPGA를 노출시키기 위해 동작하고,
상기 FPGA는 상기 업스트림 포트와 연관된 상기 업스트림 필터를 더 포함하며, 상기 업스트림 필터는 상기 프로세서로부터 수신된 제 2 가속 명령을 가로채고 상기 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 FPGA는 상기 업스트림 포트에서 상기 프로세서로부터 수신된 상기 업스트림 필터에 의해 가로채지지 않은 제 3 PCIe 트랜잭션을 상기 SSD로 전달하도록 동작한다.
설명 31. 설명 30에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 30에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 32. 설명 30에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 30에 있어서,
상기 PF는 상기 프로세서로부터 호스트 시스템 주소의 제 1 블록을 요청하도록 동작하고,
상기 컨트롤러는 상기 다운스트림 FAR로서 상기 호스트 시스템 주소의 상기 블록의 제 1 서브 세트를 선택하도록 동작한다.
설명 33. 설명 32에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 32에 있어서, 상기 컨트롤러는 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 34. 설명 33에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 33에 있어서, 상기 컨트롤러는 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하기 위해 상기 사이드대역 버스를 사용하도록 동작한다.
설명 35. 설명 34에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 34에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 36. 설명 33에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 33에 있어서, 상기 컨트롤러는 PCIe VDM을 사용하여 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 37. 설명 30에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 30에 있어서,
상기 제 2 가속 명령은 상기 업스트림 FAR와 관련되고,
상기 업스트림 필터는 업스트림 FAR와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 38. 설명 37에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 37에 있어서, 상기 VF는 상기 업스트림 FAR로써 상기 프로세서로부터 호스트 시스템 주소의 제 2 블록을 요청하도록 동작한다.
설명 39. 설명 38에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 38에 있어서, 상기 컨트롤러는 상기 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하도록 동작한다.
설명 40. 설명 39에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 39에 있어서, 상기 컨트롤러는 상기 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하기 위해 상기 사이드대역 버스를 사용하도록 동작한다.
설명 41. 설명 40에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 40에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 42. 설명 39에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 39에 있어서, 상기 컨트롤러는 PCIe VDM을 사용하여 상기 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하도록 동작한다.
설명 43. 설명 30에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 30에 있어서,
상기 제 2 가속 명령은 상기 VF의 식별자를 포함하고,
상기 업스트림 필터는 상기 VF의 상기 식별자와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 44. 설명 43에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 43에 있어서, 상기 컨트롤러는 상기 업스트림 필터를 상기 VF의 상기 식별자로 프로그래밍하도록 동작한다.
설명 45. 설명 44에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 44에 있어서, 상기 컨트롤러는 상기 업스트림 필터를 상기 VF의 상기 식별자로 프로그래밍하기 위해 사이드대역 버스를 사용하도록 동작한다.
설명 46. 설명 45에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 45에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 47. 설명 44에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 44에 있어서, 상기 컨트롤러는 PCIe VDM을 사용하여 상기 업스트림 필터를 상기 VF의 상기 식별자로 프로그래밍하도록 동작한다.
설명 48. 설명 30에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 30에 있어서,
상기 APM-F는 상기 다운스트림 포트 및 상기 SSD의 엔드 포인트를 통해 상기 APM-S로 결과를 전송하도록 동작하고,
상기 컨트롤러는 상기 결과를 상기 SSD의 상기 엔드 포인트를 통해 상기 프로세서로 전달하도록 동작한다.
설명 49. 설명 30에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 30에 있어서, 상기 APM-F는 상기 업스트림 포트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 50. 설명 9에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 9에 있어서,
상기 SSD는 상기 SSD를 노출시키도록 동작하는 제 1 PF 및 상기 FPGA를 노출시키도록 동작하는 제 2 PF를 포함하고,
상기 FPGA는 상기 업스트림 포트와 연관된 업스트림 필터를 더 포함하고, 상기 업스트림 필터는 상기 프로세서로부터 수신된 제 2 가속 명령을 가로채도록 동작하고 상기 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 상기 FPGA는 업스트림 포트에서 상기 프로세서로부터 수신된 상기 업스트림 필터에 의해 가로채지지 않은 제 3 PCIe 트랜잭션을 상기 SSD로 전달한다.
설명 51. 설명 50에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 50에 있어서, 상기 제 2 가속 명령이 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 52. 설명 50에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 50에 있어서,
상기 제 1 PF는 상기 프로세서로부터 호스트 시스템 주소의 제 1 블록을 요청하도록 동작하고,
상기 컨트롤러는 상기 다운스트림 FAR로써 상기 호스트 시스템 주소의 상기 블록의 제 1 서브 세트를 선택하도록 동작한다.
설명 53. 설명 52에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 52에 있어서, 상기 컨트롤러는 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 54. 설명 53에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 53에 있어서, 상기 컨트롤러는 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하기 위해 상기 사이드대역 버스를 이용하도록 동작한다.
설명 55. 설명 54에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 54에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 56. 설명 53에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 53에 있어서, 상기 컨트롤러는 PCIe VDM을 사용하여 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 57. 설명 50에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 50에 있어서,
상기 제 2 가속 명령은 상기 업스트림 FAR와 관련되고,
상기 업스트림 필터는 상기 업스트림 FAR와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 58. 설명 57에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 57에 있어서, 상기 제 2 PF가 상기 업스트림 FAR로써 상기 프로세서로부터 호스트 시스템 주소의 제 2 블록을 요청하도록 동작한다.
설명 59. 설명 58에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 58에 있어서, 상기 컨트롤러는 상기 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하도록 동작한다.
설명 60. 설명 59에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 59에 있어서, 상기 컨트롤러는 상기 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하기 위해 상기 사이드대역 버스를 사용하도록 동작한다.
설명 61. 설명 60에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 60에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 62. 설명 59에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 59에 있어서, 상기 컨트롤러는 PCIe VDM을 사용하여 상기 업스트림 필터를 상기 VF의 상기 식별자로 프로그래밍하도록 동작한다.
설명 63. 설명 50에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 50에 있어서,
상기 제 2 가속 명령은 상기 제 2 PF의 식별자를 포함하고,
상기 업스트림 필터는 상기 제 2 PF의 상기 식별자와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 64. 설명 63에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 63에 있어서, 상기 컨트롤러는 상기 제 2 PF의 상기 식별자로 상기 업스트림 필터를 프로그래밍하도록 동작한다.
설명 65. 설명 64에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 64에 있어서, 상기 컨트롤러는 상기 제 2 PF의 상기 식별자로 상기 업스트림 필터를 프로그래밍하기 위해 상기 사이드대역 버스를 사용하도록 동작한다.
설명 66. 설명 65에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 65에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 67. 설명 64에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 64에 있어서, 상기 컨트롤러는 PCIe VDM을 사용하여 상기 업스트림 필터를 상기 제 2 PF의 상기 식별자로 프로그래밍하도록 동작한다.
설명 68. 설명 50에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 50에 있어서,
상기 APM-F는 상기 다운스트림 포트 및 상기 SSD의 상기 엔드 포인트를 통해 상기 APM-S로 결과를 전송하도록 동작하고,
상기 컨트롤러는 상기 결과를 상기 SSD의 상기 엔드 포인트를 통해 상기 프로세서로 전달하도록 동작한다.
설명 69. 설명 50에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 50에 있어서, 상기 APM-F는 상기 업스트림 포트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 70. 설명 3에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 3에 있어서,
상기 업스트림 인터페이스는 FPGA 엔드 포인트를 포함하고;
상기 다운스트림 인터페이스는 구성 공간을 지원하는 FPGA 루트 포트를 포함하고,
상기 FPGA는 제 1 PF, 제 2 PF, 및 상기 FPGA 루트 포트와 관련된 다운스트림 필터를 포함하고,
상기 다운스트림 필터는 상기 SSD로부터 수신된 제 1 가속 명령을 가로채도록 동작하고 상기 제 1 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 제 1 가속 명령은 다운스트림 필터 주소 범위(FAR)와 연관되어지고,
상기 FPGA는 상기 제 1 PF에 대한 상기 프로세서로부터 호스트 시스템 주소의 제 1 블록을 요청하도록 동작하고, 상기 제 2 PF에 대한 상기 프로세서로부터 호스트 시스템 주소의 제 2 블록을 요청하도록 동작하고,
상기 FPGA는 상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 SSD로 전달하도록 동작하고, 상기 프로세서로부터 수신된 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 제 1 PCIe 트랜잭션은 상기 제 1 PF의 제 1 식별자와 연관되어지고,
상기 제 2 가속 명령은 상기 제 2 PF의 제 2 식별자와 연관되어진다.
설명 71. 설명 70에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 70에 있어서,
상기 SSD는 상기 FPGA로부터 상기 다운스트림 FAR를 포함하는 FPGA 주소의 블록을 요청하도록 동작하고,
상기 호스트 시스템 주소의 상기 제 2 블록은 적어도 상기 FPGA 주소의 상기 블록만큼 크고,
상기 컨트롤러는 상기 다운스트림 FAR로 상기 FPGA 주소의 상기 블록의 서브 세트를 선택하도록 동작한다.
설명 73. 설명 72에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 72에 있어서, 상기 컨트롤러는 사이드대역 버스를 이용하여 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 74. 설명 73에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 73에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 75. 설명 72에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 72에 있어서, 상기 컨트롤러는 PCIe VDM을 사용하여 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 76. 설명 70에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 70에 있어서, 상기 APM-F는 상기 FPGA 엔드 포인트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 77. 설명 70에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 70에 있어서, 상기 FPGA는 상기 SSD의 상기 엔드 포인트의 성능을 상기 FPGA 엔드 포인트로 복사하기 위한 구성 모니터를 더 포함한다.
설명 78. 설명 3에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 3에 있어서,
상기 업스트림 인터페이스는 FPGA 엔드 포인트를 포함하고,
상기 다운스트림 인터페이스는 제 1 구성 공간을 지원하는 제 1 FPGA 루트 포트 및 제 2 구성 공간을 지원하는 제 2 FPGA 루트 포트를 포함하고,
상기 SSD의 상기 엔드 포인트는 상기 제 1 FPGA 루트 포트와 관련되고,
상기 SSD는 상기 제 2 FPGA 루트 포트와 연관된 상기 SSD의 제 2 엔드 포인트를 더 포함하고,
상기 FPGA는 제 1 PF 및 제 2 PF를 포함하고;
상기 FPGA는 상기 제 1 PF에 대한 상기 프로세서로부터 호스트 시스템 주소의 제 1 블록을 요청하도록 동작하고 상기 제 2 PF에 대한 상기 프로세서로부터 호스트 시스템 주소의 제 2 블록을 요청하도록 동작하고,
상기 FPGA는
상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 제 1 FPGA 루트 포트 및 상기 SSD의 상기 엔드 포인트를 통해 상기 SSD로 전송하도록 동작하고,
상기 프로세서로부터 수신된 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 제 1 FPGA 루트 포트에서 상기 SSD로부터 수신된 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하도록 동작하고,
상기 제 2 FPGA 루트 포트에서 상기 SSD로부터 수신된 제 1 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 제 1 PCIe 트랜잭션은 상기 제 1 PF의 제 1 식별자와 관련되어지고,
상기 제 2 가속 명령은 상기 제 2 PF의 제 2 식별자와 관련되어진다.
설명 79. 설명 78에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 78에 있어서, 상기 제 2 가속 명령은 상기 APM-S에 의해 생성된다.
설명 80. 설명 78에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 33에 있어서, 상기 APM-F는 상기 FPGA 엔드 포인트를 통해 상기 프로세서로 결과를 전송한다.
설명 81. 설명 78에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 33에 있어서, 상기 FPGA는 상기 저장 장치의 상기 엔드 포인트의 성능을 상기 FPGA 엔드 포인트로 복사하기 위한 구성 모니터를 더 포함한다.
설명 82. 설명 78에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 78에 있어서,
상기 업스트림 인터페이스는 제 2 FPGA 엔드 포인트를 더 포함하고,
상기 FPGA는 상기 FPGA 엔드 포인트에서 상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 제 1 FPGA 루트 포트 및 상기 SSD의 엔드 포인트를 통해 상기 SSD로 전달하도록 더 동작하고, 상기 제 2 FPGA 엔드 포인트에서 상기 프로세서로부터 수신된 상기 제 2 가속 명령을 상기 APM-F로 전달하도록 더 동작한다.
설명 83. 설명 82에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 82에 있어서, 상기 제 2 가속 명령은 상기 APM-S에 의해 생성된다.
설명 84. 설명 82에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 82에 있어서, 상기 APM-F는 상기 FPGA 엔드 포인트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 85. 설명 82에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 82에 있어서, 상기 FPGA는 상기 SSD의 상기 엔드 포인트의 성능을 상기 FPGA 엔드 포인트로 복사하기 위한 구성 모니터를 더 포함한다.
설명 86. 설명 3에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 3에 있어서,
상기 업스트림 인터페이스는 제 1 FPGA 엔드 포인트 및 제 2 FPGA 엔드 포인트를 포함하고,
상기 다운스트림 인터페이스는 구성 공간을 지원하는 FPGA 루트 포트를 포함하고,
상기 FPGA는 상기 FPGA 루트 포트와 관련된 다운스트림 필터를 포함하고,
상기 다운스트림 필터는 상기 SSD로부터 수신된 제 1 가속 명령을 가로 채도록 동작하고 상기 APM-F로 상기 제 1 가속 명령을 전달하도록 동작하고,
상기 제 1 가속 명령은 다운스트림 FAR와 관련되고,
상기 FPGA는
상기 FPGA 엔드 포인트에서 상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 제 1 FPGA 루트 포트 및 상기 SSD의 상기 엔드 포인트를 통해 상기 SSD로 전달하도록 동작하고,
상기 제 2 FPGA 엔드 포인트에서 상기 프로세서로부터 수신된 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 제 1 FPGA 루트 포트에서 상기 SSD로부터 수신된 상기 다운스트림 FAR와 관련되지 않은 제 2 PCIe 트랜잭션을 상기 FPGA 엔드 포인트를 통해 상기 프로세서로 전달하도록 동작하고,
상기 제 2 FPGA 루트 포트에서 상기 SSD로부터 수신된 제 1 가속 명령을 상기 APM-F로 전달하도록 동작한다.
설명 87. 설명 86에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 86에 있어서, 상기 제 2 가속 명령은 상기 APM-S에 의해 생성된다.
설명 88. 설명 86에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 86에 있어서,
상기 SSD는 상기 다운스트림 FAR를 포함하는 FPGA 주소의 블록을 상기 FPGA로부터 요청하도록 동작하고,
상기 FPGA는 적어도 상기 FPGA 주소의 상기 블록만큼 큰 호스트 시스템 주소의 블록을 상기 제 1 FPGA 엔드 포인트에 대한 상기 프로세서로부터 요청하도록 동작하고,
상기 컨트롤러는 상기 다운스트림 FAR로써 상기 FPGA 주소의 상기 블록의 서브 세트를 선택하도록 동작한다.
설명 89. 설명 88에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 88에 있어서, 상기 컨트롤러는 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 90. 설명 89에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 89에 있어서, 상기 컨트롤러는 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하기 위해 상기 사이드대역 버스를 사용하도록 동작한다.
설명 91. 설명 90에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 90에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 92. 설명 89에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 89에 있어서, 상기 컨트롤러는 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하기 위해 상기 PCIe VDM을 사용하도록 동작한다.
설명 93. 설명 86에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 86에 있어서, 상기 APM-F는 상기 FPGA 엔드 포인트를 통해 상기 프로세서로 결과를 전송한다.
설명 94. 설명 86에 따르면, 본 발명의 실시 예는 시스템을 포함한다. 설명 86에 있어서, 상기 FPGA는 상기 저장 장치의 상기 엔드 포인트의 성능을 상기 FPGA 엔드 포인트로 복사하기 위한 구성 모니터를 더 포함한다.
설명 95. 본 발명의 실시 예는 가속 모듈을 포함한다. 가속 모듈은:
가속 명령을 실행하기 위한 가속 플랫폼 관리자(APM-F);
프로세서와 통신하기 위한 업스트림 인터페이스; 및
상기 가속 명령을 실행하는데 상기 APM-F를 보조하기 위한 저장 장치 가속 플랫폼 관리자(APM-S)를 포함하는 저장 장치와 통신하기 위한 다운스트림 인터페이스를 포함하되,
상기 프로세서 상에서 응용 프로그램이 실행되고,
상기 가속 모듈은 PCIe(Peripheral Component Interconnect Exchange) 버스를 사용하여 상기 프로세서 및 상기 저장 장치와 통신하고,
상기 가속 모듈은 상기 프로세서와 연관된 메모리로 응용 데이터를 로딩하는 것 없이 상기 응용 프로그램에 대한 상기 저장 장치 상의 상기 응용 데이터에 대해 상기 가속 명령을 수행하는 것을 지원한다.
설명 96. 설명 95에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 95에 있어서, 상기 가속 모듈은 FPGA(Field Programmable Gate Array)를 사용하여 구현된다.
설명 97. 설명 96에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 96에 있어서, 상기 APM-F 및 상기 APM-S는 상기 가속 명령과 함께 사용될 상기 응용 데이터에 관한 상기 다운스트림 인터페이스를 사용하여 통신한다.
설명 98. 설명 96에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 96에 있어서, 상기 APM-F 및 상기 APM-S는 메세지를 사용하여 통신한다.
설명 99. 설명 96에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 96에 있어서, 상기 FPGA는:
가속 엔진; 및
상기 가속 엔진으로 상기 가속 명령을 스케쥴링하는 런타임 스케쥴러 (run-time scheduler)를 더 포함한다.
설명 100. 설명 96에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 96에 있어서,
상기 업스트림 인터페이스는 업스트림 포트를 포함하고,
상기 다운스트림 인터페이스는 다운스트림 포트를 포함하고,
상기 FPGA는 상기 업스트림 포트에서 상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하도록 동작하고,
상기 FPGA는 상기 다운스트림 포트와 관련된 다운스트림 필터를 포함하고,
상기 다운스트림 필터는 상기 저장 장치로부터 수신된 가속 명령을 가로채도록 동작하고 상기 APM-F로 상기 가속 명령을 전달하도록 동작하고,
상기 가속 명령은 다운스트림 필터 주소 범위(FAR)와 관련되어지고,
상기 FPGA는 다운스트림 포트에서 상기 저장 장치로부터 수신된 상기 다운스트림 FAR와 관련되지 않은 제 2 PCIe 트랜잭션을 상기 프로세서로 전송하도록 동작한다.
설명 101. 설명 100에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 100에 있어서, 상기 FPGA의 상기 다운스트림 필터 내에 상기 다운스트림 FAR는 상기 컨트롤러에 의해 프로그래밍된다.
설명 102. 설명 101에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 101에 있어서, 상기 FPGA의 상기 다운스트림 필터 내에 상기 다운스트림 FAR는 상기 사이드대역 버스를 통해 상기 컨트롤러에 의해 프로그래밍된다.
설명 103. 설명 102에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 102에 있어서, 상기 사이드대역 버스는 I2C(Inter-Integrated Circuit) 버스 및 SM(System Management Bus)버스를 포함하는 세트로부터 얻어진다.
설명 104. 설명 101에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 101에 있어서, 상기 FPGA의 상기 다운스트림 필터 내에 상기 다운스트림 FAR는 PCIe VDM(Vendor Defined Message)를 사용하여 상기 컨트롤러에 의해 프로그래밍된다.
설명 105. 설명 100에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 100에 있어서, 상기 APM-F는 상기 다운스트림 포트를 통해 상기 저장 장치의 AMP-S로 결과를 전송하도록 동작한다.
설명 106. 설명 100에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 100에 있어서, 상기 APM-F는 상기 업스트림 포트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 107. 설명 100에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 100에 있어서, 상기 APM-F 및 상기 APM-S는 메세지를 사용하여 통신한다.
설명 108. 설명 100에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 100에 있어서,
상기 FPGA는 상기 업스트림 포트와 연관된 업스트림 필터를 더 포함하고,
상기 업스트림 필터는 상기 프로세서로부터 수신된 제 2 가속 명령을 가로채도록 동작하고, 업스트림 FAR과 관련되어지는 상기 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 FPGA는 업스트림 포트에서 상기 프로세서로부터 수신된 상기 업스트림 FAR과 관련되지 않은 제 3 PCIe 트랜잭션을 상기 저장 장치로 전송하도록 동작한다.
설명 109. 설명 108에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 108에 있어서, 상기 FPGA의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 저장 장치에 의해 프로그래밍된다.
설명 110. 설명 109에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 109에 있어서, 상기 FPGA의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 사이드대역 버스를 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 111. 설명 110에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 110에 있어서, 상기 사이드대역 버스는 I2C(Inter-Integrated Circuit) 버스 및 SMBus (System Management Bus)를 포함하는 세트로부터 얻어진다.
설명 112. 설명 109에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 109에 있어서, 상기 FPGA의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 PCIe VDM을 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 113. 설명 108에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 108에 있어서, 상기 APM-F는 상기 다운스트림 포트를 통해 상기 저장 장치의 AMP-S로 결과를 전송하도록 동작한다.
설명 114. 설명 108에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 108에 있어서, 상기 APM-F는 상기 업스트림 포트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 115. 설명 108에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 108에 있어서, 상기 APM-F 및 상기 APM-S는 메세지를 사용하여 통신한다.
설명 116. 설명 108에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 108에 있어서, 상기 FPGA는 상기 저장 장치로 할당 된 비-휘발성 메모리 익스프레스(NVMe) 레지스터를 통해 상기 프로세서로 간접적으로 노출된다.
설명 117. 설명 100에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 100에 있어서,
상기 FPGA는 상기 저장 장치의 가상 기능(VF)에 의해 노출되고,
상기 FPGA는 상기 업스트림 포트와 연관된 업스트림 필터를 더 포함하고,
상기 업스트림 필터는 상기 프로세서로부터 수신된 제 2 가속 명령을 가로채도록 동작하고, 상기 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고, 그리고
상기 FPGA는 상기 업스트림 포트에서 상기 프로세서로부터 수신된 상기 업스트림 필터에 의해 가로채지지 않은 제 3 PCIe 트랜잭션을 상기 저장 장치로 전송하도록 동작한다.
설명 118. 설명 117에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 117에 있어서,
상기 제 2 가속 명령은 상기 업스트림 FAR와 관련되고,
상기 업스트림 필터는 업스트림 FAR와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 119. 설명 118에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 118에 있어서, 상기 FPGA의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 저장 장치에 의해 프로그래밍된다.
설명 120. 설명 119에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 119에 있어서, 상기 FPGA의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 사이드대역 버스를 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 121. 설명 120에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 120에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 122. 설명 119에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 119에 있어서, 상기 FPGA의 상기 업스트림 필터 내에 상기 업스트림 FAR는 PCIe VDM을 사용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 123. 설명 117에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 117에 있어서,
상기 제 2 가속 명령은 상기 VF의 식별자를 포함하고,
상기 업스트림 필터는 상기 VF의 상기 식별자와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 124. 설명 123에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 123에 있어서, 상기 FPGA의 상기 업스트림 필터는 상기 저장 장치에 의해 상기 VF의 상기 식별자로 프로그래밍된다.
설명 125. 설명 124에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 124에 있어서, 상기 FPGA의 상기 업스트림 필터는 사이드대역 버스를 이용하여 상기 저장 장치에 의해 상기 VF의 상기 식별자로 프로그래밍된다.
설명 126. 설명 125에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 125에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 127. 설명 124에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 124에 있어서, 상기 FPGA의 상기 업스트림 필터는 PCIe VDM을 이용하여 상기 저장 장치에 의해 상기 VF의 상기 식별자로 프로그래밍된다.
설명 128. 설명 117에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 117에 있어서, 상기 APM-F는 상기 다운스트림 포트를 통해 상기 저장 장치의 상기 AMP-S로 결과를 전송하도록 동작한다.
설명 129. 설명 117에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 117에 있어서, 상기 APM-F는 상기 업스트림 포트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 130. 설명 117에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 117에 있어서, 상기 APM-F 및 상기 APM-S는 메세지를 사용하여 통신한다.
설명 131. 설명 100에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 100에 있어서,
상기 FPGA는 상기 저장 장치의 물리 함수(PF)에 의해 노출되고,
상기 FPGA는 상기 업스트림 포트와 연관된 업스트림 필터를 더 포함하고,
상기 업스트림 필터는 상기 프로세서로부터 수신된 제 2 가속 명령을 가로채도록 동작하고, 상기 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 FPGA는 상기 업스트림 포트에서 상기 프로세서로부터 수신된 상기 업스트림 필터에 의해 가로채지지 않은 제 3 PCIe 트랜잭션을 상기 저장 장치로 전송하도록 동작한다.
설명 132. 설명 131에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 131에 있어서,
상기 제 2 가속 명령은 상기 업스트림 FAR와 관련되고,
상기 업스트림 필터는 업스트림 FAR와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 133. 설명 132에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 132에 있어서, 상기 FPGA의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 저장 장치에 의해 프로그래밍된다.
설명 134. 설명 133에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 133에 있어서, 상기 FPGA의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 사이드대역 버스를 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 135. 설명 134에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 134에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 136. 설명 133에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 133에 있어서, 상기 FPGA의 상기 업스트림 필터 내에 상기 업스트림 FAR는PCIe VDM을 사용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 137. 설명 131에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 131에 있어서,
상기 제 2 가속 명령은 상기 PF의 식별자를 포함하고,
상기 업스트림 필터는 상기 PF의 상기 식별자와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 138. 설명 137에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 137에 있어서, 상기 FPGA의 상기 업스트림 필터는 상기 저장 장치에 의해 상기 PF의 상기 식별자로 프로그래밍된다.
설명 139. 설명 138에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 138에 있어서, 상기 FPGA의 상기 업스트림 필터는 사이드대역 버스를 사용하여 상기 저장 장치에 의해 상기 PF의 상기 식별자로 프로그래밍된다.
설명 140. 설명 139에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 139에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 141. 설명 138에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 138에 있어서, 상기 FPGA의 상기 업스트림 필터는 PCIe VDM을 사용하여 상기 저장 장치에 의해 상기 PF의 상기 식별자로 프로그래밍된다.
설명 142. 설명 131에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 131에 있어서, 상기 APM-F는 상기 다운스트림 포트를 통해 상기 APM-S로 결과를 전송하도록 동작한다.
설명 143. 설명 131에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 131에 있어서, 상기 APM-F는 상기 업스트림 포트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 144. 설명 131에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 131에 있어서, 상기 APM-F 및 상기 APM-S는 메세지를 사용하여 통신한다.
설명 145. 설명 96에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 96에 있어서,
상기 업스트림 인터페이스는 FPGA 엔드 포인트를 포함하고;
상기 다운스트림 인터페이스는 구성 공간을 지원하는 FPGA 루트 포트를 포함하고,
상기 FPGA는 제 1 PF, 제 2 PF, 및 상기 FPGA 루트 포트와 관련된 다운스트림 필터를 포함하고,
상기 다운스트림 필터는 상기 저장 장치로부터 수신된 제 1 가속 명령을 가로채도록 동작하고 상기 제 1 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 제 1 가속 명령은 다운스트림 필터 주소 범위(FAR)와 연관되어지고,
상기 FPGA는 상기 제 1 PF에 대한 상기 프로세서로부터 호스트 시스템 주소의 제 1 블록을 요청하도록 동작하고, 상기 제 2 PF에 대한 상기 프로세서로부터 호스트 시스템 주소의 제 2 블록을 요청하도록 동작하고,
상기 FPGA는 상기 프로세서로부터 수신된 PCIe 트랜잭션을 상기 저장 장치로 전달하도록 동작하고, 상기 프로세서로부터 수신된 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 PCIe 트랜잭션은 상기 제 1 PF의 제 1 식별자와 연관되어지고,
상기 제 2 가속 명령은 상기 제 2 PF의 제 2 식별자와 연관되어진다.
설명 146. 설명 145에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 145에 있어서,
상기 FPGA는 상기 FPGA로부터 상기 다운스트림 FAR를 포함하는 FPGA 주소의 블록에 대한 요청을 상기 저장 장치로부터 수신하도록 동작하고,
상기 FPGA는 상기 구성 공간으로부터 상기 FPGA 주소의 상기 블록을 할당하도록 동작하고,
상기 호스트 시스템 주소의 상기 제 1 블록은 적어도 상기 FPGA 주소의 상기 블록만큼 크다.
설명 147. 설명 146에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 146에 있어서, 상기 FPGA의 상기 다운스트림 필터 내에 상기 다운스트림 FAR는 상기 저장 장치에 의해 프로그래밍된다.
설명 148. 설명 147에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 147에 있어서, 상기 FPGA의 상기 다운스트림 필터 내에 상기 다운스트림 FAR는 상기 사이드대역 버스를 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 149. 설명 148에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 148에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 150. 설명 147에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 147에 있어서, 상기 FPGA의 상기 다운스트림 필터 내에 상기 다운스트림 FAR는 상기 PCIe VDM을 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 151. 설명 145에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 145에 있어서, 상기 APM-F는 상기 FPGA 엔드 포인트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 152. 설명 145에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 145에 있어서, 상기 APM-F 및 상기 APM-S는 메세지를 사용하여 통신한다.
설명 153. 설명 145에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 145에 있어서, 상기 FPGA는 상기 저장 장치의 상기 엔드 포인트의 성능을 상기 FPGA 엔드 포인트로 복사하기 위한 구성 모니터를 더 포함한다.
설명 154. 설명 96에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 96에 있어서,
상기 업스트림 인터페이스는 FPGA 엔드 포인트를 포함하고,
상기 다운스트림 인터페이스는 제 1 구성 공간을 지원하는 제 1 FPGA 루트 포트 및 제 2 구성 공간을 지원하는 제 2 FPGA 루트 포트를 포함하고,
상기 SSD의 상기 엔드 포인트는 상기 제 1 FPGA 루트 포트와 관련되고,
상기 SSD는 상기 제 2 FPGA 루트 포트와 연관된 상기 SSD의 제 2 엔드 포인트를 더 포함하고,
상기 FPGA는 제 1 PF 및 제 2 PF를 포함하고,
상기 FPGA는 상기 제 1 PF에 대한 상기 프로세서로부터 호스트 시스템 주소의 제 1 블록을 요청하도록 동작하고 상기 제 2 PF에 대한 상기 프로세서로부터 호스트 시스템 주소의 제 2 블록을 요청하도록 동작하고,
상기 FPGA는
상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 제 1 FPGA 루트 포트를 통해 상기 저장 장치로 전송하도록 동작하고,
상기 프로세서로부터 수신된 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 제 1 FPGA 루트 포트에서 상기 저장 장치로부터 수신된 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하도록 동작하고,
상기 제 2 FPGA 루트 포트에서 상기 저장 장치로부터 수신된 제 1 가속 명령을 상기 APM-F로 전달하도록 동작한다.
설명 155. 설명 154에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 154에 있어서, 상기 APM-F는 상기 FPGA 엔드 포인트를 통해 상기 프로세서로 결과를 전송한다.
설명 156. 설명 154에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 154에 있어서, 상기 APM-F 및 상기 APM-S는 메세지를 사용하여 통신한다.
설명 157. 설명 154에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 154에 있어서, 상기 FPGA는 상기 저장 장치의 상기 엔드 포인트의 성능을 상기 FPGA 엔드 포인트로 복사하기 위한 구성 모니터를 더 포함한다.
설명 158. 설명 154에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 154에 있어서,
상기 업스트림 인터페이스는 제 2 FPGA 엔드 포인트를 더 포함하고,
상기 FPGA는 상기 FPGA 엔드 포인트에서 상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 제 1 FPGA 루트 포트 및 상기 SSD의 엔드 포인트를 통해 상기 SSD로 전달하도록 더 동작하고, 상기 제 2 FPGA 엔드 포인트에서 상기 프로세서로부터 수신된 상기 제 2 가속 명령을 상기 APM-F로 전달하도록 더 동작한다.
설명 159. 설명 158에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 158에 있어서, 상기 APM-F는 상기 FPGA 엔드 포인트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 160. 설명 158에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 158에 있어서, 상기 APM-F 및 상기 APM-S는 메세지를 사용하여 통신한다.
설명 161. 설명 158에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 158에 있어서, 상기 FPGA는 상기 저장 장치의 상기 엔드 포인트의 성능을 상기 FPGA 엔드 포인트로 복사하기 위한 구성 모니터를 더 포함한다.
설명 162. 설명 96에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 96에 있어서,
상기 업스트림 인터페이스는 제 1 FPGA 엔드 포인트 및 제 2 FPGA 엔드 포인트를 포함하고,
상기 다운스트림 인터페이스는 구성 공간을 지원하는 FPGA 루트 포트를 포함하고,
상기 FPGA는 상기 FPGA 루트 포트와 관련된 다운스트림 필터를 포함하고,
상기 다운스트림 필터는 상기 SSD로부터 수신된 제 1 가속 명령을 가로 채도록 동작하고 상기 APM-F로 상기 제 1 가속 명령을 전달하도록 동작하고,
상기 제 1 가속 명령은 다운스트림 FAR와 관련되고,
상기 FPGA는
상기 FPGA 엔드 포인트에서 상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 제 1 FPGA 루트 포트 및 상기 SSD의 상기 엔드 포인트를 통해 상기 SSD로 전달하도록 동작하고,
상기 제 2 FPGA 엔드 포인트에서 상기 프로세서로부터 수신된 제 2 가속 명령을 상기 APM-F로 전달하도록 동작하고,
상기 제 1 FPGA 루트 포트에서 상기 SSD로부터 수신된 상기 다운스트림 FAR와 관련되지 않은 제 2 PCIe 트랜잭션을 상기 FPGA 엔드 포인트를 통해 상기 프로세서로 전달하도록 동작하고,
상기 제 2 FPGA 루트 포트에서 상기 SSD로부터 수신된 제 1 가속 명령을 상기 APM-F로 전달하도록 동작한다.
설명 163. 설명 162에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 162에 있어서,
상기 FPGA는 상기 FPGA로부터 상기 다운스트림 FAR를 포함하는 FPGA 주소의 블록에 대한 요청을 상기 저장 장치로부터 수신하도록 동작하고,
상기 FPGA는 상기 구성 공간으로부터 상기 FPGA 주소의 상기 블록을 할당하도록 동작하고,
상기 FPGA는 상기 제 1 FPGA에 대한 프로세서로부터 적어도 상기 FPGA 주소의 상기 블록만큼 큰 호스트 시스템 주소의 블록을 요청하도록 동작한다.
설명 164. 설명 163에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 163에 있어서, 상기 FPGA의 상기 다운스트림 필터 내의 상기 다운스트림 FAR는 상기 저장 장치에 의해 프로그래밍된다.
설명 165. 설명 164에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 164에 있어서, 상기 FPGA의 상기 다운스트림 필터 내의 상기 다운스트림 FAR는 사이드대역 버스를 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 166. 설명 165에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 165에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 167. 설명 164에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 164에 있어서, 상기 FPGA의 상기 다운스트림 필터 내의 상기 다운스트림 FAR는 PCIe VDM을 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 168. 설명 162에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 162에 있어서, 상기 APM-F는 상기 FPGA 엔드 포인트를 통해 상기 프로세서로 결과를 전송하도록 동작한다.
설명 169. 설명 162에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 162에 있어서, 상기 APM-F 및 상기 APM-S는 메세지를 사용하여 통신한다.
설명 170. 설명 162에 따르면, 본 발명의 실시 예는 가속 모듈을 포함한다. 설명 162에 있어서, 상기 FPGA는 상기 저장 장치의 상기 엔드 포인트의 성능을 상기 FPGA 엔드 포인트로 복사하기 위한 구성 모니터를 더 포함한다.
설명 171. 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 제 1 브리징 구성 요소는:
프로세서와 통신하기 위한 업스트림 인터페이스; 및
가속 모듈 및 저장 장치와 통신하기 위한 다운스트림 인터페이스를 포함하되,
상기 프로세서 상에서 응용프로그램이 실행되고,
상기 제 1 브리징 구성 요소는 PCIe(Peripheral Component Interconnect Exchange) 버스를 사용하여 상기 프로세서, 상기 가속 모듈 및 상기 저장 장치와 통신하고,
상기 다운스트림 인터페이스는 상기 PCIe 트랜잭션이 가속 명령을 포함하는지 여부에 따라 상기 프로세서로부터 상기 가속 모듈 또는 상기 저장 장치로 PCIe 트랜잭션을 전달하도록 동작한다.
설명 172. 설명 171에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다.
설명 171에 있어서,
상기 가속 모듈은 FPGA(Field Programmable Gate Array)를 사용하여 구현되고,
상기 저장 장치는 SSD(Solid State Drive)를 포함한다.
설명 173. 설명 171에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 171에 있어서, 제 2 브리징 구성 요소를 더 포함하고, 상기 제 2 브리징 구성 요소는:
상기 프로세서 및 상기 가속 모듈과 통신하기 위한 제 2 업스트림 인터페이스; 및
상기 저장 장치와 통신하기 위한 제 2 다운스트림 인터페이스를 포함하고,
상기 제 2 브리징 구성 요소는 PCIe(Peripheral Component Interconnect Exchange) 버스를 사용하여 상기 프로세서, 상기 가속 모듈 및 상기 저장 장치와 통신하고,
상기 제 2 업스트림 인터페이스는 상기 제 2 PCIe 트랜잭션이 제 2 가속 명령을 포함하는지 여부에 따라 상기 저장 장치로부터 상기 프로세서 또는 상기 가속 모듈로 제 2 PCIe 트랜잭션을 전달하도록 동작한다.
설명 174. 설명 171에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 171에 있어서, 상기 업스트림 인터페이스는:
업스트림 포트; 및
상기 업스트림 포트와 관련된 업스트림 필터를 포함하되,
상기 업스트림 필터는 상기 프로세서로부터 수신된 업스트림 FAR과 관련된 제 2 가속 명령을 식별하도록 동작하고,
상기 다운스트림 인터페이스는 상기 제 2 가속 명령을 상기 가속 모듈로 전달하도록 동작하고 상기 업스트림 포트에서 상기 프로세서로부터 수신된 업스트림 FAR과 관련되지 않은 제 3 PCIe 트랜잭션을 상기 저장 장치로 전송하도록 동작한다.
설명 175. 설명 174에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 174에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 저장 장치에 의해 프로그래밍된다.
설명 176. 설명 175에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 175에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 사이드대역 버스를 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 177. 설명 176에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 176에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 178. 설명 175에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 175에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터 내에 상기 PCIe VDM은 상기 사이드대역 버스를 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 179. 설명 174에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 174에 있어서, 상기 FPGA는 상기 저장 장치로 할당 된 비-휘발성 메모리 익스프레스(NVMe) 레지스터를 통해 상기 프로세서로 간접적으로 노출된다.
설명 180. 설명 171에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 171에 있어서,
상기 업스트림 인터페이스는 상기 저장 장치의 가상 함수(VF)에 의해 노출되고,
상기 업스트림 인터페이스는:
업스트림 포트;
상기 업스트림 포트와 연관된 업스트림 필터를 포함하되,
상기 업스트림 필터는 상기 가속 모듈에 대한 제 2 가속 명령을 식별하도록 동작 하고,
상기 다운스트림 인터페이스는 상기 제 2 가속 명령을 상기 가속 모듈로 전달하도록 동작하고, 상기 업스트림 포트에서 상기 프로세서로부터 수신된 상기 업스트림 필터에 의해 가로채지지 않은 제 3 PCIe 트랜잭션을 상기 저장 장치로 전송하도록 동작한다.
설명 181. 설명 180에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 180에 있어서,
상기 제 2 가속 명령은 상기 업스트림 FAR와 관련되고,
상기 업스트림 필터는 업스트림 FAR와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 182. 설명 181에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 181에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 저장 장치에 의해 프로그래밍된다.
설명 183. 설명 182에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 182에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 사이드대역 버스를 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 184. 설명 183에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 183에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 185. 설명 182에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 182에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터 내에 상기 업스트림 FAR는 상기 PCIe VDM을 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 186. 설명 180에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 180에 있어서,
상기 제 2 가속 명령은 상기 VF의 식별자를 포함하고,
상기 업스트림 필터는 상기 VF의 상기 식별자와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 187. 설명 186에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 186에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터는 상기 저장 장치에 의해 상기 VF의 상기 식별자로 프로그래밍된다.
설명 188. 설명 187에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 187에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터는 사이드대역 버스를 이용하여 상기 저장 장치에 의해 상기 VF의 상기 식별자로 프로그래밍된다.
설명 189. 설명 188에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 188에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 190. 설명 187에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 187에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터는 PCIe VDM을 이용하여 상기 저장 장치에 의해 상기 VF의 상기 식별자로 프로그래밍된다.
설명 191. 설명 171에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 171에 있어서,
상기 업스트림 인터페이스는 상기 저장 장치의 물리 함수(PF)에 의해 노출되고,
상기 업스트림 인터페이스는:
업스트림 포트; 및
상기 업스트림 포트와 연관된 업스트림 필터를 포함하되,
상기 업스트림 필터는 상기 가속 모듈에 대한 제 2 가속 명령을 식별하도록 동작하고,
상기 다운스트림 인터페이스는 상기 제 2 가속 명령을 상기 가속 모듈로 전송하도록 동작하고, 상기 업스트림 포트에서 상기 프로세서로부터 수신된 상기 업스트림 필터에 의해 가로채지지 않은 제 3 PCIe 트랜잭션을 상기 저장 장치로 전송하도록 동작한다.
설명 192. 설명 191에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 191에 있어서,
상기 제 2 가속 명령은 상기 업스트림 FAR와 관련되고,
상기 업스트림 필터는 상기 업스트림 FAR와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 193. 설명 192에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 192에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터는 상기 저장 장치에 의해 프로그래밍된다.
설명 194. 설명 193에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 193에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터는 사이드대역 버스를 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 195. 설명 194에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 194에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 196. 설명 193에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 193에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터는 PCIe VDM을 이용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 197. 설명 191에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 191에 있어서,
상기 제 2 가속 명령은 상기 PF의 식별자를 포함하고,
상기 업스트림 필터는 상기 PF의 상기 식별자와 관련된 상기 제 2 가속 명령을 가로채도록 동작한다.
설명 198. 설명 197에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 197에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터는 상기 저장 장치에 의해 상기 PF의 상기 식별자로 프로그래밍된다.
설명 199. 설명 198에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 198에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터는 사이드대역 버스를 이용하여 상기 저장 장치에 의해 상기 PF의 상기 식별자로 프로그래밍된다.
설명 200. 설명 199에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 199에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 201. 설명 198에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 198에 있어서, 상기 제 1 브리징 구성 요소의 상기 업스트림 필터는 PCIe VDM을 사용하여 상기 저장 장치에 의해 상기 PF의 상기 식별자로 프로그래밍된다.
설명 202. 설명 171에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 171에 있어서,
상기 업스트림 인터페이스는:
엔드 포인트;
제 1 PF; 및
제 2 PF를 포함하되,
상기 다운스트림 인터페이스는 상기 프로세서로부터 수신된 PCIe 트랜잭션을 상기 저장 장치로 전송하도록 동작하고 상기 프로세서로부터 수신된 제 2 가속 명령을 상기 가속 모듈로 전송하도록 동작하고,
상기 PCIe 트랜잭션은 상기 제 1 PF의 제 1 식별자와 관련되고,
상기 제 2 가속 명령은 상기 제 2 PF의 제 2 식별자와 관련된다.
설명 203. 설명 202에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 202에 있어서, 상기 제 1 브리징 구성 요소는 상기 저장 장치의 상기 엔드 포인트의 성능을 상기 엔드 포인트로 복사하기 위한 구성 모니터를 더 포함한다.
설명 204. 설명 171에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 171에 있어서,
상기 업스트림 인터페이스는:
제 1 엔드 포인트; 및
제 2 엔드 포인트를 포함하되,
상기 다운스트림 인터페이스는 상기 프로세서로부터 수신된 상기 제 1 엔드포인트와 관련된 PCIe 트랜잭션을 상기 저장 장치로 전달하도록 동작하고 상기 프로세서로부터 수신된 제 2 가속 명령을 상기 가속 모듈로 전달하도록 동작하고,
상기 제 2 가속 명령은 상기 제 2 엔드 포인트와 관련된다.
설명 205. 설명 204에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 1 브리징 구성 요소를 포함한다. 설명 204에 있어서, 상기 제 1 브리징 구성 요소는 상기 저장 장치의 상기 엔드 포인트의 성능을 상기 제 1 엔드 포인트로 복사하기 위한 구성 모니터를 더 포함한다.
설명 206. 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 제 2 브리징 구성 요소는,
프로세서 및 가속 모듈과 통신하기 위한 업스트림 인터페이스; 및
저장 디바이스와 통신하기 위한 다운스트림 인터페이스를 포함하되,
상기 제 1 브리징 구성 요소는 PCIe(Peripheral Component Interconnect Exchange) 버스를 사용하여 상기 프로세서, 상기 가속 모듈 및 상기 저장 장치와 통신하고,
상기 업스트림 인터페이스는 상기 PCIe 트랜잭션이 가속 명령을 포함하는지 여부에 따라 상기 저장 장치로부터 상기 프로세서 또는 상기 가속 모듈로 PCIe 트랜잭션을 전달하도록 동작한다.
설명 207. 설명 206에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 206에 있어서,
상기 가속 모듈은 FPGA(Field Programmable Gate Array)를 사용하여 구현되고,
상기 저장 장치는 SSD(Solid State Drive)를 포함한다.
설명 208. 설명 206에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 206에 있어서,
다운스트림 인터페이스는:
다운스트림 포트; 및
상기 저장 장치로부터 수신된 다운스트림 필터 주소 범위(FAR)와 관련된 가속 명령을 식별하도록 동작하는 다운스트림 필터를 포함하되,
상기 다운스트림 인터페이스는 상기 가속 명령을 상기 가속 모듈로 전송하도록 동작하고 상기 다운스트림 포트에서 상기 저장 장치로부터 수신된 상기 다운스트림 FAR과 관련되지 않은 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하도록 동작한다.
설명 209. 설명 208에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 208에 있어서, 상기 제 2 브리징 구성 요소의 상기 다운스트림 필터 내의 상기 다운스트림 FAR는 상기 저장 장치에 의해 프로그래밍된다.
설명 210. 설명 209에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 209에 있어서, 상기 제 2 브리징 구성 요소의 상기 다운스트림 필터 내의 상기 다운스트림 FAR는 사이드대역 버스를 통해 상기 저장 장치에 의해 프로그래밍된다.
설명 211. 설명 210에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 210에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 212. 설명 209에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 209에 있어서, 상기 제 2 브리징 구성 요소의 상기 다운스트림 필터 내의 상기 다운스트림 FAR는 PCIe VDM을 사용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 213. 설명 206에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 206에 있어서,
다운스트림 인터페이스는:
루트 포트; 및
상기 루트 포트와 관련된 다운스트림 필터를 포함하되,
상기 다운스트림 필터는 상기 저장 장치로부터 수신된 다운스트림 필터 주소 범위(FAR)와 관련된 가속 명령을 식별하도록 동작하고,
상기 다운스트림 인터페이스는 상기 가속 명령을 상기 가속 모듈로 전달하도록 동작하고 상기 다운스트림 포트에서 상기 저장 장치로부터 수신된 상기 다운스트림 FAR과 관련되지 않은 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하도록 동작한다.
설명 214. 설명 213에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 213에 있어서, 상기 제 2 브리징 구성 요소의 상기 다운스트림 필터 내의 상기 다운스트림 FAR는 상기 저장 장치에 의해 프로그래밍된다.
설명 215. 설명 214에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 214에 있어서, 상기 제 2 브리징 구성 요소의 상기 다운스트림 필터 내의 상기 다운스트림 FAR는 사이드대역 버스를 사용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 216. 설명 215에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 215에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 217. 설명 214에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 214에 있어서, 상기 제 2 브리징 구성 요소의 상기 다운스트림 필터 내의 상기 다운스트림 FAR는 PCIe VDM을 사용하여 상기 저장 장치에 의해 프로그래밍된다.
설명 218. 설명 206에 따르면, 본 발명의 실시 예는 하드웨어를 사용하여 구현되는 제 2 브리징 구성 요소를 포함한다. 설명 206에 있어서,
다운스트림 인터페이스는:
제 1 루트 포트; 및
제 2 루트 포트를 포함하되,
상기 다운스트림 인터페이스는 상기 제 1 루트 포트에서 상기 저장 장치로부터 수신된 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하도록 동작하고 상기 제 2 루트 포트에서 상기 저장 장치로부터 수신된 가속 명령을 상기 가속 모듈로 전송하도록 동작한다.
설명 219. 본 발명의 실시 예는 저장 장치를 포함한다. 저장 장치는:
가속 플랫폼 관리자(APM-F)를 포함하는 가속 모듈과 통신하기 위한 상기 저장 장치의 엔드 포인트;
상기 저장 장치의 동작을 관리하기 위한 컨트롤러;
응용 프로그램에 대한 응용 프로그램 데이터를 저장하는 저장소; 및
상기 가속 명령을 실행하는데 상기 APM-F를 보조하기 위한 저장 장치 가속 플랫폼 관리자(APM-S)를 포함하되,
상기 저장 장치 및 상기 가속 모듈은 PCIe (Peripheral Component Interconnect Exchange)버스를 사용하여 통신하고,
상기 가속 모듈은 프로세서와 연관된 메모리에 상기 응용 데이터를 로딩함이 없이 상기 응용 프로그램에 대한 저장 장치상의 상기 응용 데이터에 대한 상기 가속 명령 수행하는 것을 지원한다
설명 220. 설명 219에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 219에 있어서, 상기 저장 장치는 SSD를 포함한다.
설명 221. 설명 220에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 220에 있어서, 상기 APM-F 및 상기 APM-S는 상기 가속 명령과 함께 사용될 상기 응용 데이터에 관한 상기 SSD의 상기 엔드 포인트를 사용하여 통신한다.
설명 222. 설명 220에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 220에 있어서, 상기 APM-F 및 상기 APM-S는 메세지를 사용하여 통신한다.
설명 223. 설명 220에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 220에 있어서, 상기 저장 장치는 상기 프로세서로부터 수신된 비-휘발성 메모리 익스프레스(NVMe) 프로토콜을 사용하여 커맨드를 인코딩하는 트랜잭션 계층 패킷(TLP)을 포함하는 PCIe 트랜잭션을 SSD로 전송한다.
설명 224. 설명 220에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 220에 있어서, 상기 SSD는 상기 가속화 모듈을 포함한다.
설명 225. 설명 220에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 220에 있어서,
상기 SSD는 다운스트림 FAR와 관련된 가속 명령을 상기 가속 모듈로 전송하도록 동작하고,
상기 제 1 PCIe 트랜잭션은 상기 APM-F를 위해 구현되고,
상기 SSD는 상기 다운스트림 FAR와 관련되지 않은 제 1 PCIe 트랜잭션을 상기 가속 모듈로 전송하도록 동작하고,
상기 제 1 PCIe 트랜잭션은 상기 프로세서를 위해 구현된다.
설명 226. 설명 225에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 225에 있어서, 상기 가속 모듈은 APM-S에 의해 생성된다.
설명 227. 설명 226에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 226에 있어서, 상기 SSD는 상기 가속 명령을 포함하는 특정 커맨드를 가로채고, 상기 가속 명령을 생성하기 위해 상기 APM-S를 트리거하기 위해 상기 특정 커맨드를 상기 APM-S로 전달하는 호스트 인터페이스 로직(HIL)을 더 포함한다.
설명 228. 설명 227에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 227에 있어서, 상기 특정 커맨드는 상기 프로세서 상에서 실행중인 가속 서비스 관리자(ASM)로부터 유래한다.
설명 229. 설명 225에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 225에 있어서,
상기 SSD는 상기 프로세서로부터 상기 호스트 시스템의 블록을 요청하도록 동작하고,
상기 컨트롤러는 상기 다운스트림 FAR처럼 상기 호스트 시스템의 블록의 서브 세트를 선택하도록 동작한다.
설명 230. 설명 229에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 229에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 231. 설명 230에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 230에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하기 위해 사이드대역 버스를 사용하도록 동작한다.
설명 232. 설명 231에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 231에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 233. 설명 230에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 230에 있어서, 상기 컨트롤러는 PCIe VDM(Vendor Defined Message)을 사용하여 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 234. 설명 229에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 229에 있어서, 상기 컨트롤러는 상기 업스트림 FAR처럼 상기 호스트 시스템 메모리의 상기 블록의 제 2 서브 세트를 선택하도록 동작한다.
설명 235. 설명 234에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 234에 있어서, 상기 컨트롤러는 상기 프로세서상에서 실행중인 ASM에 의해 접근 가능한 특정 레지스터 내에 상기 업스트림 FAR에 대한 정보를 저장하도록 동작한다.
설명 236. 설명 235에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 235에 있어서, 상기 특정 레지스터는 상기 호스트 시스템 주소의 상기 블록 내에 있다.
설명 237. 설명 229 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 229 있어서, 상기 컨트롤러는 상기 가속 모듈의 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하도록 동작한다.
설명 238. 설명 237에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 237에 있어서, 상기 컨트롤러는 사이드대역 버스를 사용하여 상기 가속 모듈의 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하도록 동작한다.
설명 239. 설명 238에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 238에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 240. 설명 237에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 237에 있어서, 상기 컨트롤러는 PCIe VDM을 사용하여 상기 가속 모듈의 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하도록 동작한다.
설명 241. 설명 225에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 225에 있어서, 상기 SSD는 상기 SSD의 상기 엔드 포인트를 통해 상기 APM-F로부터 결과를 수신하도록 동작하고 상기 결과를 상기 SSD의 상기 엔드 포인트를 통해 상기 프로세서로 전송하도록 동작한다.
설명 242. 설명 225에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 225에 있어서, 상기 SSD는 물리 함수(PF) 및 가상 함수(VF)를 포함하고, 상기 PF는 상기 SSD를 노출시키도록 동작하고, 상기 VF는 상기 가속 모듈을 노출시키도록 동작한다.
설명 243. 설명 242에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 242에 있어서,
상기 PF는 상기 프로세서로부터 호스트 시스템 주소의 제 1 블록을 요청하도록 동작하고,
상기 컨트롤러는 상기 다운스트림 FAR로써 상기 호스트 시스템 주소의 상기 블록의 제 1 서브 세트를 선택하도록 동작한다.
설명 244. 설명 243에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 243에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 245. 설명 244에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 244에 있어서, 상기 컨트롤러는 사이드대역 버스를 이용하여 상기 가속 모듈의 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 246. 설명 245에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 245에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 247. 설명 244에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 244에 있어서, 상기 컨트롤러는 PCIe VDM을 이용하여 상기 가속 모듈의 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 248. 설명 242에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 242에 있어서, 상기 VF는 상기 업스트림 FAR처럼 상기 프로세서로부터 호스트 시스템 주소의 제 2 블록을 요청하도록 동작한다.
설명 249. 설명 248에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 248에 있어서, 상기 컨트롤러는 상기 가속 모듈의 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하도록 동작한다.
설명 250. 설명 249에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 249에 있어서, 상기 컨트롤러는 상기 가속 모듈의 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하기 위해 사이드대역 버스를 사용하도록 동작한다.
설명 251. 설명 250에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 250에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 252. 설명 249에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 249에 있어서, 상기 컨트롤러는 상기 가속 모듈의 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하기 위해 PCIe VDM을 사용하도록 동작한다.
설명 253. 설명 242에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 242에 있어서, 상기 컨트롤러는 상기 가속 모듈의 업스트림 필터를 상기 VF로 프로그래밍하도록 동작한다.
설명 254. 설명 253에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 253에 있어서, 상기 컨트롤러는 상기 가속 모듈의 업스트림 필터를 상기 VF로 프로그래밍하기 위해 사이드대역 버스를 사용하도록 동작한다.
설명 255. 설명 254에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 254에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 256. 설명 253에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 253에 있어서, 상기 컨트롤러는 상기 가속 모듈의 업스트림 필터를 상기 VF로 프로그래밍하기 위해 PCIe VDM을 사용하도록 동작한다.
설명 257. 설명 242에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 242에 있어서, 상기 컨트롤러는 상기 SSD의 상기 엔드 포인트를 통해 상기 APM-F로부터 결과를 수신하도록 동작하고 상기 결과를 상기 SSD의 상기 엔드 포인트를 통해 상기 프로세서로 전송하도록 동작한다.
설명 258. 설명 225에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 225에 있어서, 상기 SSD는 상기 SSD를 노출시키도록 동작하는 제 1 PF 및 상기 FPGA를 노출시키도록 동작하는 제 2 PF를 포함한다.
설명 259. 설명 258에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 258에 있어서,
상기 제 1 PF는 상기 프로세서로부터 호스트 시스템 주소의 제 1 블록을 요청하도록 동작하고,
상기 컨트롤러는 상기 다운스트림 FAR처럼 상기 호스트 시스템 주소의 상기 블록의 제 1 서브 세트를 선택하도록 동작한다.
설명 260. 설명 259에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 259에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 261. 설명 260에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 260에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하기 위해 사이드대역 버스를 이용하도록 동작한다.
설명 262. 설명 261에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 261에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 263. 설명 260에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 260에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하기 위해 상기 PCIe VDM을 이용하도록 동작한다.
설명 264. 설명 258에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 258에 있어서, 상기 제 2 PF가 상기 업스트림 FAR처럼 상기 프로세서로부터 호스트 시스템 주소의 제 2 블록을 요청하도록 동작한다.
설명 265. 설명 264에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 264에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하도록 동작한다.
설명 266. 설명 265에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 265에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하기 위해 사이드대역 버스를 사용하도록 동작한다.
설명 267. 설명 266에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 266에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 268. 설명 265에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 265에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 업스트림 필터를 상기 업스트림 FAR로 프로그래밍하기 위해 PCIe VDM을 사용하도록 동작한다.
설명 269. 설명 258에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 258에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 업스트림 필터를 상기 제 2 PF의 식별자로 프로그래밍하도록 동작한다.
설명 270. 설명 269에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 269에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 업스트림 필터를 상기 제 2 PF의 식별자로 프로그래밍하기 위해 사이드대역 버스를 사용하도록 동작한다.
설명 271. 설명 270에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 270에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 272. 설명 269에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 269에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 업스트림 필터를 상기 제 2 PF의 식별자로 프로그래밍하기 위해 PCIe VDM을 사용하도록 동작한다.
설명 273. 설명 258에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 258에 있어서, 상기 컨트롤러는 상기 SSD의 상기 엔드 포인트를 통해 상기 APM-F로부터 결과를 수신하도록 동작하고 상기 결과를 상기 SSD의 상기 엔드 포인트를 통해 상기 프로세서로 전송하도록 동작한다.
설명 274. 설명 225에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 225에 있어서,
상기 SSD는 상기 프로세서로부터 가속 모듈의 블록을 요청하도록 동작하고,
상기 컨트롤러는 상기 다운스트림 FAR처럼 상기 가속 모듈의 상기 블록의 서브 세트를 선택하도록 동작한다.
설명 275. 설명 274에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 274에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하도록 동작한다.
설명 276. 설명 275에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 275에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하기 위해 사이드대역 버스를 사용하도록 동작한다.
설명 277. 설명 276에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 276에 있어서, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 278. 설명 275에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 275에 있어서, 상기 컨트롤러는 상기 가속 모듈의 상기 다운스트림 필터를 상기 다운스트림 FAR로 프로그래밍하기 위해 PCIe VDM을 사용하도록 동작한다.
설명 279. 설명 220에 따르면, 본 발명의 실시 예는 저장 장치를 포함한다. 설명 220에 있어서, 상기 가속 모듈과 통신하기 위한 상기 SSD의 제 2 엔드 포인트를 더 포함하고,
상기 SSD의 상기 엔드 포인트는 상기 프로세서와 통신하기 위해 사용되고,
상기 SSD의 상기 제 2 엔드 포인트는 상기 APM-F와 통신하기 위해 사용된다.
설명 280. 본 발명의 실시 예는 방법을 포함한다. 방법은:
가속 모듈에서 제 1 장치로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계;
상기 가속 모듈에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계;
상기 PCIe 트랜잭션이 상기 가속 명령임을 판단하는 것에 대해 적어도 부분적으로 기초하여, 상기 가속 모듈의 가속 플랫폼 관리자(APM-F)에서 상기 PCIe 트랜잭션을 처리하는 단계; 및
상기 PCIe 트랜잭션이 상기 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 PCIe 트랜잭션을 제 2 장치로 전달하는 단계를 포함하되,
상기 가속 모듈은 프로세서와 연관된 메모리로 응용 데이터를 로딩함이 없이 응용 프로그램에 대한 저장 장치상의 상기 응용 데이터에 대한 상기 가속 명령을 수행하는 것을 지원하고,
상기 프로세서, 상기 가속 모듈 및 상기 저장 장치는 PCIe 버스를 사용하여 통신한다.
설명 281. 설명 280에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 280에 있어서, 상기 가속 모듈은 FPGA(Field Programmable Gate Array)를 이용하여 구현된다.
설명 282. 설명 281에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 281에 있어서,
상기 가속 모듈에서 상기 제 1 장치로부터 상기 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계는 상기 FPGA의 엔드 포인트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 가속 모듈에서 상기 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 FPGA의 제 1 PF의 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함하고,
상기 PCIe 트랜잭션을 상기 제 2 장치로 전달하는 단계는 상기 FPGA의 루트 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하는 단계를 포함한다.
설명 283. 설명 282에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 282에 있어서,
상기 FPGA의 상기 루트 포트에서 상기 저장 장치로부터 제 1 PCIe 트랜잭션을 수신하는 단계; 및
상기 FPGA의 다운스트림을 사용하여 상기 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하는 단계를 더 포함한다.
설명 284. 설명 282에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 282에 있어서,
상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계; 및
상기 다운스트림 FAR를 상기 FPGA의 상기 루트 포트와 연결하는 단계를 더 포함한다.
설명 285. 설명 284에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 284에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 다운스트림 FAR를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 286. 설명 284에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 284에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 다운스트림 FAR를 포함한다.
설명 287. 설명 282에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 282에 있어서, 상기 FPGA의 상기 다운스트림을 사용하여 상기 제 2 PCIe 트랜잭션의 결과를 상기 저장 장치로 전송하는 단계를 더 포함한다.
설명 288. 설명 282에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 282에 있어서, 상기 FPGA의 상기 업스트림 포트를 사용하여 상기 제 2 PCIe 트랜잭션의 결과를 상기 프로세서로 전송하는 단계를 더 포함한다.
설명 289. 설명 282에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 282에 있어서,
상기 FPGA의 상기 업스트림 포트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 FPGA의 상기 업스트림 포트와 연관된 업스트림 필터 주소 범위(FAR) 내의 주소와 관련되는지 여부를 판단함으로써 상기 제 1 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령임을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 APM-F에서 상기 제 1 PCIe 트랜잭션을 처리하는 단계; 및
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 다운스트림 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하는 단계를 더 포함한다.
설명 290. 설명 289에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 289에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 291. 설명 289에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명289에 있어서,
상기 FPGA에서 상기 저장 장치로부터 상기 업스트림 FAR를 수신하는 단계; 및
상기 업스트림 FAR를 상기 FPGA의 상기 업스트림 포트와 연결하는 단계를 더 포함한다.
설명 292. 설명 291에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명291에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 업스트림 FAR를 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 업스트림 FAR를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 293. 설명 292에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 292에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 업스트림 FAR를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 업스트림 FAR를 포함한다.
설명 294. 설명 289에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명289에 있어서, 상기 FPGA의 상기 업스트림을 사용하여 상기 제 1 PCIe 트랜잭션의 결과를 상기 저장 장치로 전송하는 단계를 더 포함한다.
설명 295. 설명 289에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 289에 있어서, 상기 FPGA의 상기 업스트림 포트를 사용하여 상기 제 1 PCIe 트랜잭션의 결과를 상기 프로세서로 전송하는 단계를 더 포함하는 방법.
설명 296. 설명 282에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 282에 있어서,
상기 FPGA의 상기 업스트림 포트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 가상 함수(VF)와 관련되는 여부를 판단함으로써 상기 제 1 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령임을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 APM-F에서 상기 제 1 PCIe 트랜잭션을 처리하는 단계; 및
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 다운스트림 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하는 단계를 더 포함한다.
설명 297. 설명 296에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 296에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 298. 설명 296에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 280에 있어서, 상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 VF의 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함한다.
설명 299. 설명 298에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 280에 있어서,
상기 FPGA에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계; 및
상기 VF의 상기 식별자를 상기 FPGA의 상기 업스트림 포트와 연결하는 단계를 더 포함한다.
설명 300. 설명 299에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 299에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 VF의 상기 식별자를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 301. 설명 299에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 299에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 VF의 상기 식별자를 포함한다.
설명 302. 설명 296에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 296에 있어서, 상기 FPGA의 상기 업스트림을 사용하여 상기 제 1 PCIe 트랜잭션의 결과를 상기 저장 장치로 전송하는 단계를 더 포함한다.
설명 303. 설명 282 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 280에 있어서,
상기 FPGA의 상기 업스트림 포트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 물리 함수(PF)와 관련되는 여부를 판단함으로써 상기 제 1 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령임을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 APM-F에서 상기 제 1 PCIe 트랜잭션을 처리하는 단계; 및
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 다운스트림 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하는 단계를 더 포함한다.
설명 304. 설명 303에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 303에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 305. 설명 303에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 303에 있어서, 상기 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 PF의 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함한다.
설명 306. 설명 305에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 305에 있어서,
상기 저장 장치로부서 상기 FPGA에서 상기 PF의 상기 식별자를 수신하는 단계; 및
상기 PF의 상기 식별자를 상기 FPGA의 상기 업스트림 포트와 연결하는 단계를 더 포함한다.
설명 307. 설명 306에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 306에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 PF의 상기 식별자를 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 PF의 상기 식별자를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 308. 설명 306에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 306에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 PF의 상기 식별자를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 PF의 상기 식별자를 포함한다.
설명 309. 설명 303에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 303에 있어서, 상기 FPGA의 상기 업스트림을 사용하여 상기 제 1 PCIe 트랜잭션의 결과를 상기 저장 장치로 전송하는 단계를 더 포함한다.
설명 310. 설명 303에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 303에 있어서, 상기 FPGA의 상기 업스트림을 사용하여 상기 제 1 PCIe 트랜잭션의 결과를 상기 프로세서로 전송하는 단계를 더 포함한다.
설명 311. 설명 281에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 281에 있어서,
FPGA에서 제 1 장치로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계는 상기 FPGA의 엔드 포인트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 가속 모듈에서 상기 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 FPGA의 제 1 PF의 제 1 식별자를 갖는 태그를 포함하는지 아니면 상기 FPGA의 제 2 PF의 제 2 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함하고,
상기 PCIe 트랜잭션을 상기 제 2 장치로 전달하는 단계는 상기 FPGA의 루트 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하는 단계를 포함한다.
설명 312. 설명 311에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 311에 있어서,
상기 FPGA의 상기 루트 포트에서 상기 저장 장치로부터 제 2 PCIe 트랜잭션을 수신하는 단계;
상기 FPGA에서 상기 제 2 PCIe 트랜잭션이 상기 FPGA의 상기 루트 포트와 관련된 다운스트림 FAR 내의 주소와 관련되는지 여부를 판단함으로써 상기 제 2 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 제 2 가속 명령임을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 APM-F에서 상기 제 1 PCIe 트랜잭션을 처리하는 단계; 및
상기 제 2 PCIe 트랜잭션이 상기 제 2 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 엔드 포인트를 사용하여 상기 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하는 단계를 더 포함한다.
설명 313. 설명 312에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 312에 있어서,
상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계; 및
상기 다운스트림 FAR를 상기 FPGA의 상기 루트 포트와 연결하는 단계를 더 포함한다.
설명 314. 설명 313에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 313에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 다운스트림 FAR를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 315. 설명 313에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 313에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 다운스트림 FAR를 포함한다.
설명 316. 설명 311에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명311에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 317. 설명 311에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 311에 있어서, 상기 FPGA의 엔드 포인트를 사용하여 상기 프로세서로 상기 제 1 PCIe의 트랜잭션의 결과를 전송하는 단계를 더 포함한다.
설명 318. 설명 311에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 311에 있어서,
상기 FPGA의 구성 모니터를 사용하여 상기 FPGA의 상기 루트 포트와 통신하는 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 FPGA의 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 319. 설명 281에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 281에 있어서,
FPGA에서 제 1 장치로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계는 상기 FPGA의 엔드 포인트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 가속 모듈에서 상기 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 FPGA의 제 1 PF의 제 1 식별자를 갖는 태그를 포함하는지 또는 상기 FPGA의 제 2 PF의 제 2 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함하고,
상기 PCIe 트랜잭션을 상기 제 2 장치로 전달하는 단계는 상기 FPGA의 루트 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 제 2 저장 장치로 전달하는 단계를 포함한다.
설명 320. 설명 319에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 319에 있어서,
상기 FPGA에서 상기 저장 장치로부터 제 2 PCIe 트랜잭션을 수신하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 제 1 루트 포트에서 수신되는지 또는 상기 FPGA의 제 2 루트 포트에서 수신되는지 여부를 판단하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 상기 제 1 루트 포트에서 수신되는지를 판단하는 것에 적어도 부분적으로 기초하여, 상기 엔드 포인트를 사용하여 상기 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하는 단계; 및
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 상기 제 2 루트 포트에서 수신되는지를 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 AMP-F에서 상기 제 2 PCIe 트랜잭션을 처리하는 단계를 더 포함한다.
설명 321. 설명 319에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 319에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 322. 설명 319에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 319에 있어서, 상기 FPGA의 엔드 포인트를 사용하여 상기 프로세서로 상기 제 1 PCIe의 트랜잭션의 결과를 전송하는 단계를 더 포함한다.
설명 323. 설명 319에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 319에 있어서,
상기 FPGA의 구성 모니터를 사용하여 상기 FPGA의 상기 제 1 루트 포트와 통신하는 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 FPGA의 상기 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 324. 설명 281에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 281에 있어서,
FPGA에서 제 1 장치로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계는 상기 FPGA에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 FPGA에서 상기 제 1 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 제 1 엔드 포인트 및 제 2 엔드 포인트를 포함하는 상기 FPGA의 제 1 엔드 포인트에서 상기 프로세서로부터 수신되는지 여부를 판단함으로써 상기 제 1 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계를 포함하고,
상기 PCIe 트랜잭션을 상기 제 2 장치로 전달하는 단계는 제 1 루트 포트 및 제 2 루트 포트를 포함하는 상기 FPGA의 제 1 루트 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 저장 장치로 전달하는 단계를 포함한다.
설명 325. 설명 324에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 324에 있어서,
상기 FPGA에서 상기 저장 장치로부터 제 2 PCIe 트랜잭션을 수신하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 제 1 루트 포트에서 수신되는지 또는 상기 FPGA의 제 2 루트 포트에서 수신되는지 여부를 판단함으로써 상기 제 2 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 상기 제 1 루트 포트에서 수신되는지를 판단하는 것에 적어도 부분적으로 기초하여, 상기 제 1 엔드 포인트를 사용하여 상기 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하는 단계; 및
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 상기 제 2 루트 포트에서 수신되는지를 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 AMP-F에서 상기 제 2 PCIe 트랜잭션을 처리하는 단계를 더 포함한다.
설명 326. 설명 324에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 324에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 327. 설명 324에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명324에 있어서, 상기 FPGA의 제 2 엔드 포인트를 사용하여 상기 프로세서로 상기 제 1 PCIe의 트랜잭션의 결과를 전송하는 단계를 더 포함한다.
설명 328. 설명 324에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 324에 있어서,
상기 FPGA의 구성 모니터를 사용하여 상기 FPGA의 상기 제 1 루트 포트와 통신하는 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 FPGA의 상기 제 1 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 329. 설명 281에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 281에 있어서,
FPGA에서 제 1 장치로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계는 상기 FPGA에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 가속 모듈에서 상기 제 1 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 제 1 엔드 포인트 및 제 2 엔드 포인트를 포함하는 상기 FPGA의 제 1 엔드 포인트에서 상기 프로세서로부터 수신되는지 여부를 판단함으로써 상기 제 1 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계를 포함하고,
상기 PCIe 트랜잭션을 상기 제 2 장치로 전달하는 단계는 상기 FPGA의 루트 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 저장 장치로 전달하는 단계를 포함한다.
설명 330. 설명 329에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 329에 있어서,
상기 FPGA의 상기 루트 포트에서 상기 저장 장치로부터 제 2 PCIe 트랜잭션을 수신하는 단계;
상기 FPGA에서 상기 제 2 PCIe 트랜잭션이 상기 FPGA의 루트 포트와 연관된 다운스트림 FAR 내의 주소와 연관되는지 여부를 판단함으로써 상기 제 2 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 가속 명령인지를 판단하는 것에 적어도 부분적으로 기초하여, 상기 제 2 PCIe 트랜잭션을 상기 FPGA의 상기 APM-F에서 처리하는 단계; 및
상기 제 2 PCIe 트랜잭션이 상기 가속 명령이 아닌지 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 제 1 엔드 포인트를 사용하여 상기 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하는 단계를 더 포함한다.
설명 331. 설명 330에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 330에 있어서,
상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계; 및
상기 다운스트림 FAR를 상기 FPGA의 상기 루트 포트와 연결하는 단계를 더 포함한다.
설명 332. 설명 331에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 331에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 다운스트림 FAR를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 333. 설명 331에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 331에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 다운스트림 FAR를 포함한다.
설명 334. 설명 329에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 329에 있어서, 상기 제 1 PCIe 트랜잭션은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 335. 설명 329에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 329에 있어서, 상기 FPGA의 제 2 엔드 포인트를 사용하여 상기 프로세서로 상기 제 1 PCIe의 트랜잭션의 결과를 전송하는 단계를 더 포함한다.
설명 336. 설명 329에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 329에 있어서,
상기 FPGA의 구성 모니터를 사용하여 상기 FPGA의 상기 루트 포트와 통신하는 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 FPGA의 상기 제 1 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 337. 본 발명의 실시 예는 방법을 포함한다. 방법은:
제 1 브리징 구성 요소에서 프로세서로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계;
상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계;
상기 PCIe 트랜잭션이 상기 가속 명령임을 판단하는 것에 대해 적어도 부분적으로 기초하여, 상기 PCIe 트랜잭션을 가속 모듈로 전달하는 단계; 및
상기 PCIe 트랜잭션이 상기 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 PCIe 트랜잭션을 저장 장치로 전달하는 단계를 포함하되,
상기 프로세서, 상기 가속 모듈 및 상기 저장 장치는 PCIe 버스를 사용하여 통신한다.
설명 338. 설명 337에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 337에 있어서,
상기 가속 모듈은 FPGA를 사용하여 구현되고,
상기 저장 장치는 SSD를 포함한다.
설명 339. 설명 337에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 337에 있어서,
상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 제 1 브리징 구성 요소의 업스트림 포트와 관련된 업스트림 FAR 내의 주소와 연관되는지 여부를 판단하는 단계를 더 포함한다.
설명 340. 설명 339에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 339에 있어서,
상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 업스트림 FAR를 수신하는 단계; 및
상기 업스트림 FAR를 상기 제 1 브리징 구성 요소의 상기 업스트림 포트와 연결하는 단계를 더 포함한다.
설명 341. 설명 340에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 340에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 업스트림 FAR를 수신하는 단계는 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 업스트림 FAR를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 342. 설명 340에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 340에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 업스트림 FAR를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 업스트림 FAR를 포함한다.
설명 343. 설명 337에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 337에 있어서,
상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 가상 함수(VF)와 관련되는 여부를 판단하는 단계를 포함한다.
설명 344. 설명 343에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 343에 있어서, 상기 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 가상 함수(VF)와 관련되는 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 상기 VF의 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함한다.
설명 345. 설명 344에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 344에 있어서,
상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계; 및
상기 VF의 상기 식별자를 상기 제 1 브리징 구성 요소의 상기 업스트림 포트와 연결하는 단계를 더 포함한다.
설명 346. 설명 345에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 345에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계는 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 VF의 상기 식별자를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 347. 설명 345에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 345에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 VF의 상기 식별자를 포함한다.
설명 348. 설명 337에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 337에 있어서, 상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 물리 함수(PF)와 관련되는 여부를 판단하는 단계를 포함한다.
설명 349. 설명 348에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 348에 있어서, 상기 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 물리 함수(PF)와 관련되는 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 상기 PF의 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함한다.
설명 350. 설명 349에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 349에 있어서,
상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 PF의 상기 식별자를 수신하는 단계; 및
상기 PF의 상기 식별자를 상기 제 1 브리징 구성 요소의 상기 업스트림 포트와 연결하는 단계를 더 포함한다.
설명 351. 설명 350에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 350에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 PF의 상기 식별자를 수신하는 단계는 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 PF의 상기 식별자를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 352. 설명 350에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 350에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 PF의 상기 식별자를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 PF의 상기 식별자를 포함한다.
설명 353. 설명 337에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 337에 있어서, 상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 상기 제 1 브리징 구성 요소의 제 1 PF의 식별자를 갖는 태그를 포함하는지 또는 상기 제 1 브리징 구성 요소의 제 2 PF의 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함한다.
설명 354. 설명 353에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 353에 있어서,
상기 제 1 브리징 구성 요소의 구성 모니터를 사용하여 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 제 1 구성 요소의 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 355. 설명 337에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 337에 있어서, 상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 제 1 엔드 포인트 및 제 2 엔드 포인트를 포함하는 상기 제 1 구성 요소의 제 1 엔드 포인트에서 상기 프로세서로부터 수신되는지 여부를 판단하는 단계를 포함한다.
설명 356. 설명 355에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 355에 있어서,
상기 제 1 브리징 구성 요소의 구성 모니터를 사용하여 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 제 1 구성 요소의 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 357. 본 발명의 실시 예는 방법을 포함한다. 방법은:
제 2 브리징 구성 요소에서 저장 장치로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계;
상기 제 2 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계;
상기 PCIe 트랜잭션이 상기 가속 명령임을 판단하는 것에 대해 적어도 부분적으로 기초하여, 상기 PCIe 트랜잭션을 가속 모듈로 전달하는 단계; 및
상기 PCIe 트랜잭션이 상기 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 PCIe 트랜잭션을 저장 장치로 전달하는 단계를 포함하되,
상기 프로세서, 상기 가속 모듈 및 상기 저장 장치는 PCIe 버스를 사용하여 통신한다.
설명 358. 설명 357에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 357에 있어서,
상기 가속 모듈은 FPGA(Field Programmable Gate Array)를 사용하여 구현되고,
상기 저장 장치는 SSD(Solid State Drive)를 포함한다.
설명 359. 설명 357에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 357에 있어서,
상기 제 2 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 제 2 브리징 구성 요소에서 상기 제 2 PCIe 트랜잭션이 상기 제 2 브리징 구성 요소의 다운스트림 포트와 관련된 다운스트림 FAR 내의 주소와 연관되는지 여부를 판단하는 단계를 더 포함한다.
설명 360. 설명 359에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 359에 있어서,
상기 제 2 브리징 구성 요소에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계; 및
상기 다운스트림 FAR를 상기 제 2 브리징 구성 요소의 상기 다운스트림 포트와 연결하는 단계를 더 포함한다.
설명 361. 설명 360에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 360에 있어서, 상기 제 2 브리징 구성 요소에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 제 2 브리징 구성 요소에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 다운스트림 FAR를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 362. 설명 360에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 360에 있어서, 상기 제 2 브리징 구성 요소에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 다운스트림 FAR를 포함한다.
설명 363. 설명 357에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 357에 있어서, 상기 제 2 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 제 1 루트 포인트 및 제 2 루트 포인트를 포함하는 상기 제 2 브리징 구성 요소의 상기 제 2 루트 포트에서 수신되는지 여부를 판단하는 단계를 포함한다.
설명 364. 본 발명의 실시 예는 방법을 포함한다. 방법은:
저장 장치에서 가속 모듈로부터 제 1 PCIe 트랜잭션을 수신하는 단계;
상기 제 1 PCIe 트랜잭션이 가상 명령인지 여부를 판단하는 단계; 및
상기 제 1 PCIe 트랜잭션이 상기 가상 명령인지를 판단하는 것에 적어도 부분적으로 기초하여:
상기 저장 장치의 APM-S를 사용하여 제 2 PCIe 트랜잭션을 생성하는 단계; 및
상기 제 2 PCIe 트랜잭션을 상기 저장 장치로부터 상기 가속 모듈로 전송하는 단계를 포함하되,
프로세서, 상기 가속 모듈 및 상기 저장 장치는 PCIe 버스를 사용하여 통신하고,
상기 가속 모듈은 상기 프로세서와 연관된 메모리에 상기 응용 데이터를 로딩함이 없이 상기 프로세서 상에서 실행 중인 상기 응용 프로그램에 대한 저장 장치상의 상기 응용 데이터에 대한 상기 가속 명령 수행하는 것을 지원한다.
설명 365. 설명 364에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 364에 있어서, 상기 저장 장치는 SSD이다.
설명 366. 설명 365에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 365에 있어서,
저장 장치의 가속 모듈로부터 제 1 PCIe 트랜잭션을 수신하는 단계는 상기 SSD의 엔드 포인트에서 상기 가속 모듈로부터 상기 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 제 1 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 프로세서로부터의 특정 커맨드를 포함하는지 또는 상기 제 1 PCIe 트랜잭션이 상기 가속 모듈의 상기 APM-F로부터 유래하는지 여부를 판단하는 단계를 포함하고,
상기 저장 장치의 APM-S를 사용하여 제 2 PCIe 트랜잭션을 생성하는 단계는 상기 제 1 PCIe 트랜잭션에 응답하여 상기 SSD의 APM-S에 의해 상기 제 2 PCIe 트랜잭션을 생성하는 단계를 포함하고,
상기 제 2 PCIe 트랜잭션을 상기 저장 장치로부터 상기 가속 모듈로 전송하는 단계는 상기 제 2 PCIe 트랜잭션을 상기 저장 장치의 상기 엔드 포인트로부터 상기 가속 모듈로 전송하는 단계를 포함한다.
설명 367. 설명 366에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 366에 있어서, 상기 제 1 PCIe 트랜잭션은 상기 프로세서로부터 유래되고, 특정 커맨드를 포함한다.
설명 368. 설명 366에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 366에 있어서, 상기 제 1 PCIe 트랜잭션이 상기 프로세서로부터 특정 커맨드를 포함하는지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 SSD의 HIL에 의해 상기 프로세서로부터 특정 커맨드를 포함하는지 여부를 판단하는 단계를 더 포함한다.
설명 369. 설명 368에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 368에 있어서, 상기 특정 커맨드는 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 370. 설명 366에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 366에 있어서,
상기 프로세서로부터 호스트 시스템 주소의 블록을 요청하는 단계;
다운스트림 FAR처럼 상기 호스트 시스템 주소의 상기 블록의 서브 세트를 선택하는 단계;
상기 가속 모듈의 다운스트림 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계를 더 포함한다.
설명 371. 설명 370에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 370에 있어서, 상기 가속 모듈의 다운스트림 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계는 사이드 대역 버스를 통해 상기 가속 모듈의 다운스트림 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 372. 설명 370에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 370에 있어서, 상기 가속 모듈의 다운스트림 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계는 PCIe VDM을 사용하여 상기 가속 모듈의 다운스트림 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계를 포함하고, 상기 PCIe VDM은 다운스트림 FAR를 포함한다.
설명 373. 설명 370에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 370에 있어서,
업스트림 FAR처럼 상기 호스트 시스템 주소의 상기 블록의 제 2 서브 세트를 선택하는 단계; 및
상기 가속 모듈의 업스트림 포트를 상기 업스트림 FAR로 프로그래밍하는 단계를 더 포함한다.
설명 374. 설명 373에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 373에 있어서, 상기 가속 모듈의 업스트림 포트를 상기 업스트림 FAR로 프로그래밍하는 단계는 사이드 대역 버스를 통해 상기 가속 모듈의 업스트림 포트를 상기 업스트림 FAR로 프로그래밍하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 375. 설명 373에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 373에 있어서, 상기 가속 모듈의 업스트림 포트를 상기 업스트림 FAR로 프로그래밍하는 단계는 PCIe VDM을 사용하여 상기 가속 모듈의 업스트림 포트를 상기 업스트림 FAR로 프로그래밍하는 단계를 포함하고, 상기 PCIe VDM은 업스트림 FAR를 포함한다.
설명 376. 설명 366에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 366에 있어서,
상기 프로세서로부터 호스트 시스템 주소의 블록을 요청하는 단계;
다운스트림 FAR처럼 상기 호스트 시스템 주소의 상기 블록의 상기 서브 세트를 선택하는 단계; 및
상기 가속 모듈의 루트 포트를 상기 가속 모듈로 프로그래밍하는 단계를 더 포함한다.
설명 377. 설명 376에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 376에 있어서, 상기 가속 모듈의 루트 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계는 사이드대역 버스를 통해 상기 가속 모듈의 상기 루트 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계를 포함하고, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 378. 설명 376에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 376에 있어서, 상기 가속 모듈의 루트 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계는 PCIe VDM을 사용하여 상기 가속 모듈의 상기 루트 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계를 포함하고, 상기 PCIe VDM은 다운스트림 FAR를 포함한다.
설명 379. 설명 366에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 366에 있어서,
상기 SSD의 상기 엔드 포인트에서 상기 가속 모듈로부터 상기 제 1 PCIe 트랜잭션의 결과를 수신하는 단계; 및
상기 SSD의 상기 엔드 포인트를 사용하여 상기 제 1 PCIe 트랜잭션의 상기 결과를 상기 프로세서로 전달하는 단계를 더 포함한다.
설명 380. 설명 376에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 376에 있어서,
상기 SSD를 노출시키는 물리 함수(PF)를 제공하는 단계; 및
상기 가속 모듈을 노출시키는 가상 함수(VF)를 제공하는 단계를 더 포함한다.
설명 381. 설명 380에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 380에 있어서, 상기 가속 모듈의 업스트림 포트를 상기 VF의 식별자로 프로그래밍하는 단계를 더 포함한다.
설명 382. 설명 366에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 366에 있어서,
상기 SSD를 노출시키는 제 1 PF를 제공하는 단계; 및
상기 가속 모듈을 노출시키는 제 2 PF를 제공하는 단계를 더 포함한다.
설명 383. 설명 382에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 382에 있어서, 상기 가속 모듈의 업스트림 포트를 상기 제 2 PF의 식별자로 프로그래밍하는 단계를 더 포함한다.
설명 384. 설명 365에 따르면, 본 발명의 실시 예는 방법을 포함한다. 설명 365에 있어서,
저장 장치의 가속 모듈로부터 제 1 PCIe 트랜잭션을 수신하는 단계는 상기 SSD의 엔드 포인트에서 상기 가속 모듈로부터 상기 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 제 1 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 제 1 PCIe 트랜잭션이 제 2 엔드 포인트에서 제 1 엔드 포인트 및 상기 제 2 엔드 포인트를 포함하는 SSD에 의해 수신되는지 여부를 판단하는 단계를 포함하고,
상기 저장 장치의 APM-S를 사용하여 제 2 PCIe 트랜잭션을 생성하는 단계는 상기 제 1 PCIe 트랜잭션에 응답하여 상기 SSD의 APM-S에 의해 상기 제 2 PCIe 트랜잭션을 생성하는 단계를 포함하고,
상기 제 2 PCIe 트랜잭션을 상기 저장 장치로부터 상기 가속 모듈로 전송하는 단계는 상기 제 2 PCIe 트랜잭션을 상기 저장 장치의 상기 엔드 포인트로부터 상기 가속 모듈로 전송하는 단계를 포함한다.
설명 385. 본 발명의 일 실시 예는 기계에 의해 실행되는 명령이 저장된 비-휘발성 저장 매체를 포함하는 물품(article)을 포함한다. 그 결과는:
가속 모듈에서 제 1 장치로부터 PCIe 트랜잭션을 수신하는 단계;
상기 PCIe 트랜잭션이 가상 명령인지 여부를 판단하는 단계;
상기 PCIe 트랜잭션이 상기 가상 명령인지를 판단하는 것에 적어도 부분적으로 기초하여 상기 가속 모듈의 APM-F에서 상기 PCIe 트랜잭션을 처리하는 단계; 및
상기 PCIe 트랜잭션이 상기 가상 명령이 아닌지를 판단하는 것에 적어도 부분적으로 기초하여 상기 PCIe 트랜잭션을 제 2 장치로 전송하는 단계를 포함하되,
상기 가속 모듈은 상기 프로세서와 연관된 메모리로 상기 응용 데이터를 로딩함이 없이 상기 응용 프로그램에 대한 저장 장치상의 상기 응용 데이터에 대한 상기 가속 명령 수행하는 것을 지원하고,
상기 프로세서, 상기 가속 모듈 및 상기 저장 장치는 PCIe 버스를 사용하여 통신한다.
설명 386. 설명 385에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 385에 있어서, 상기 가속 모듈은 FPGA를 사용하여 구현된다.
설명 387. 설명 386에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 386에 있어서,
상기 FPGA에서 상기 제 1 장치로부터 상기 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계는 상기 FPGA의 엔드 포인트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 가속 모듈에서 상기 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 FPGA의 제 1 PF의 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함하고,
상기 PCIe 트랜잭션을 상기 제 2 장치로 전달하는 단계는 상기 FPGA의 루트 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하는 단계를 포함한다.
설명 388. 설명 387에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 387에 있어서,
상기 FPGA의 상기 업스트림 포트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계; 및
상기 FPGA의 상기 다운스트림 프로세서를 사용하여 상기 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하는 단계를 더 포함한다.
설명 389. 설명 387에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 387에 있어서,
상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계; 및
상기 다운스트림 FAR를 상기 FPGA의 상기 다운스트림 포트와 연결하는 단계를 더 포함하는 방법.
설명 390. 설명 389에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 389에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 다운스트림 FAR를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 391. 설명 389에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 389에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 다운스트림 FAR를 포함한다.
설명 392. 설명 387에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 387에 있어서, 상기 FPGA의 상기 다운스트림 포트를 사용하여 상기 저장 장치로 상기 제 2 PCIe의 트랜잭션의 결과를 전송하는 단계를 더 포함한다.
설명 393. 설명 387에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 387에 있어서, 상기 FPGA의 상기 업스트림 포트를 사용하여 상기 프로세서로 상기 제 2 PCIe의 트랜잭션의 결과를 전송하는 단계를 더 포함한다.
설명 394. 설명 387에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 387에 있어서,
상기 FPGA의 상기 업스트림 포트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 FPGA의 상기 업스트림 포트와 연관된 업스트림 FAR 내의 제 2 주소와 연관되는지 여부를 판단함으로써 상기 제 1 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령임을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 APM-F에서 상기 제 1 PCIe 트랜잭션을 처리하는 단계; 및
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 다운스트림 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하는 단계를 더 포함한다.
설명 395. 설명 394에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 394에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 396. 설명 394에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 394에 있어서,
상기 FPGA에서 상기 저장 장치로부터 상기 업스트림 FAR를 수신하는 단계; 및
상기 업스트림 FAR를 상기 FPGA의 상기 업스트림 포트와 연결하는 단계를 더 포함한다.
설명 397. 설명 396에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 396에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 업스트림 FAR을 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 업스트림 FAR을 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 398. 설명 396에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 396에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 업스트림 FAR을 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 업스트림 FAR를 포함한다.
설명 399. 설명 394에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 394에 있어서, 상기 FPGA의 상기 업스트림을 사용하여 상기 제 1 PCIe 트랜잭션의 결과를 상기 저장 장치로 전송하는 단계를 더 포함한다.
설명 400. 설명 394에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 394에 있어서, 상기 FPGA의 상기 업스트림을 사용하여 상기 제 1 PCIe 트랜잭션의 결과를 상기 프로세서로 전송하는 단계를 더 포함한다.
설명 401. 설명 387에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 387에 있어서,
상기 FPGA의 상기 업스트림 포트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 가상 함수(VF)와 연관되는지 여부를 판단함으로써 상기 제 1 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령임을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 APM-F에서 상기 제 1 PCIe 트랜잭션을 처리하는 단계; 및
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 다운스트림 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하는 단계를 더 포함한다.
설명 402. 설명 401에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 401에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 403. 설명 401에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 401에 있어서, 상기 제 1 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 VF의 상기 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함한다.
설명 404. 설명 403에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 403에 있어서,
상기 FPGA에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계; 및
상기 다운스트림 FAR를 상기 FPGA의 상기 업스트림 포트와 연결하는 단계를 더 포함하는 방법.
설명 405. 설명 404에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 404에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 VF의 상기 식별자를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 406. 설명 404에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 404에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 VF의 상기 식별자를 포함한다.
설명 407. 설명 401에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 401에 있어서, 상기 FPGA의 업스트림 포트를 사용하여 상기 프로세서로 상기 제 1 PCIe의 트랜잭션의 결과를 전송하는 단계를 포함한다.
설명 408. 설명 387에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 387에 있어서,
상기 FPGA의 상기 업스트림 포트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 가상 함수(VF)와 연관되는지 여부를 판단함으로써 상기 제 1 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령임을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 APM-F에서 상기 제 1 PCIe 트랜잭션을 처리하는 단계; 및
상기 제 1 PCIe 트랜잭션이 상기 제 2 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 다운스트림 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 상기 저장 장치로 전달하는 단계를 더 포함한다.
설명 409. 설명 408에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 408에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 410. 설명 408에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 408에 있어서, 상기 제 1 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 PF의 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함한다.
설명 411. 설명 410에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 410에 있어서,
상기 저장 장치로부서 상기 FPGA에서 상기 PF의 상기 식별자를 수신하는 단계; 및
상기 PF의 상기 식별자를 상기 FPGA의 상기 업스트림 포트와 연결하는 단계를 더 포함한다.
설명 412. 설명 411에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 411에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 PF의 상기 식별자를 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 PF의 상기 식별자를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 413. 설명 411에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 411에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 PF의 상기 식별자를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 PF의 상기 식별자를 포함한다.
설명 414. 설명 408에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 408에 있어서, 상기 FPGA의 상기 업스트림을 사용하여 상기 제 1 PCIe 트랜잭션의 결과를 상기 프로세서로 전송하는 단계를 더 포함한다.
설명 415. 설명 386에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 386에 있어서,
FPGA에서 제 1 장치로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계는 상기 FPGA의 엔드 포인트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 가속 모듈에서 상기 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 FPGA의 제 1 PF의 식별자를 갖는 태그를 포함하는지 또는 상기 FPGA의 제 2 PF의 제 2 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함하고,
상기 PCIe 트랜잭션을 상기 제 2 장치로 전달하는 단계는 상기 FPGA의 루트 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 제 2 저장 장치로 전달하는 단계를 포함한다.
설명 416. 설명 415에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 415에 있어서,
상기 FPGA의 상기 루트 포트에서 상기 저장 장치로부터 제 2 PCIe 트랜잭션을 수신하는 단계;
상기 FPGA에서 상기 제 2 PCIe 트랜잭션이 상기 FPGA의 상기 루트 포트와 관련된 다운스트림 FAR 내의 주소와 관련되는지 여부를 판단함으로써 상기 제 2 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 제 2 가속 명령임을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 APM-F에서 상기 제 1 PCIe 트랜잭션을 처리하는 단계; 및
상기 제 2 PCIe 트랜잭션이 상기 제 2 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 엔드 포인트를 사용하여 상기 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하는 단계를 포함한다.
설명 417. 설명 416에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 416에 있어서,
상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR을 수신하는 단계; 및
상기 다운스트림 FAR를 상기 FPGA의 상기 루트 포트와 연결하는 단계를 포함한다.
설명 418. 설명 417에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 417에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR을 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 다운스트림 FAR을 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 419. 설명 417에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 417에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR을 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 다운스트림 FAR를 포함한다.
설명 420. 설명 415에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 415에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 421. 설명 415에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 415에 있어서, 상기 FPGA의 엔드 포인트를 사용하여 상기 프로세서로 상기 제 1 PCIe의 트랜잭션의 결과를 전송하는 단계를 더 포함한다.
설명 422. 설명 415에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 415에 있어서,
상기 FPGA의 구성 모니터를 사용하여 상기 FPGA의 상기 루트 포트와 통신하는 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 FPGA의 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 423. 설명 386에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 386에 있어서,
FPGA에서 제 1 장치로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계는 상기 FPGA의 엔드 포인트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 가속 모듈에서 상기 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 FPGA의 제 1 PF의 제 1 식별자를 갖는 태그를 포함하는지 또는 상기 FPGA의 제 2 PF의 제 2 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함하고,
상기 PCIe 트랜잭션을 상기 제 2 장치로 전달하는 단계는 상기 FPGA의 루트 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 제 2 저장 장치로 전달하는 단계를 포함한다.
설명 424. 설명 423에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 423에 있어서,
상기 FPGA에서 상기 저장 장치로부터 제 2 PCIe 트랜잭션을 수신하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 제 1 루트 포트에서 수신되는지 또는 상기 FPGA의 제 2 루트 포트에서 수신되는지 여부를 판단하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 상기 제 1 루트 포트에서 수신되는지를 판단하는 것에 적어도 부분적으로 기초하여, 상기 엔드 포인트를 사용하여 상기 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하는 단계; 및
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 상기 제 2 루트 포트에서 수신되는지를 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 AMP-F에서 상기 제 2 PCIe 트랜잭션을 처리하는 단계를 더 포함한다.
설명 425. 설명 423에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 423에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 426. 설명 423에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 423에 있어서, 상기 FPGA의 엔드 포인트를 사용하여 상기 프로세서로 상기 제 1 PCIe의 트랜잭션의 결과를 전송하는 단계를 더 포함한다.
설명 427. 설명 423에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 423에 있어서,
상기 FPGA의 구성 모니터를 사용하여 상기 FPGA의 상기 제 1 루트 포트와 통신하는 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 FPGA의 상기 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 428. 설명 386에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 386에 있어서,
FPGA에서 제 1 장치로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계는 상기 FPGA에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 FPGA에서 상기 제 1 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 제 1 엔드 포인트 및 제 2 엔드 포인트를 포함하는 상기 FPGA의 제 1 엔드 포인트에서 상기 프로세서로부터 수신되는지 여부를 판단함으로써 상기 제 1 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계를 포함하고,
상기 PCIe 트랜잭션을 상기 제 2 장치로 전달하는 단계는 제 1 루트 포트 및 제 2 루트 포트를 포함하는 상기 FPGA의 제 1 루트 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 저장 장치로 전달하는 단계를 포함한다.
설명 429. 설명 428에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 428에 있어서,
상기 FPGA에서 상기 저장 장치로부터 제 2 PCIe 트랜잭션을 수신하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 제 1 루트 포트에서 수신되는지 또는 상기 FPGA의 제 2 루트 포트에서 수신되는지 여부를 판단함으로써 상기 제 2 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 상기 제 1 루트 포트에서 수신되는지를 판단하는 것에 적어도 부분적으로 기초하여, 상기 제 1 엔드 포인트를 사용하여 상기 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하는 단계; 및
상기 제 2 PCIe 트랜잭션이 상기 FPGA의 상기 제 2 루트 포트에서 수신되는지를 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 AMP-F에서 상기 제 2 PCIe 트랜잭션을 처리하는 단계를 더 포함한다.
설명 430. 설명 428에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 428에 있어서, 상기 제 2 가속 명령은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 431. 설명 428에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 428에 있어서, 상기 FPGA의 제 2 엔드 포인트를 사용하여 상기 프로세서로 상기 제 1 PCIe의 트랜잭션의 결과를 전송하는 단계를 더 포함한다.
설명 432. 설명 428에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 428에 있어서,
상기 FPGA의 구성 모니터를 사용하여 상기 FPGA의 상기 제 1 루트 포트와 통신하는 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 FPGA의 상기 제 1 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 433. 설명 386에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 386에 있어서,
FPGA에서 제 1 장치로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계는 상기 FPGA에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 가속 모듈에서 상기 제 1 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 제 1 엔드 포인트 및 제 2 엔드 포인트를 포함하는 상기 FPGA의 제 1 엔드 포인트에서 상기 프로세서로부터 수신되는지 여부를 판단함으로써 상기 제 1 PCIe 트랜잭션이 제 2 가속 명령인지 여부를 판단하는 단계를 포함하고,
상기 PCIe 트랜잭션을 상기 제 2 장치로 전달하는 단계는 상기 FPGA의 루트 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 저장 장치로 전달하는 단계를 포함한다.
설명 434. 설명 433에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 433에 있어서,
상기 FPGA의 상기 루트 포트에서 상기 저장 장치로부터 제 2 PCIe 트랜잭션을 수신하는 단계;
상기 FPGA에서 상기 제 2 PCIe 트랜잭션이 상기 FPGA의 루트 포트와 연관된 다운스트림 FAR 내의 주소와 연관되는지 여부를 판단함으로써 상기 제 2 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계;
상기 제 2 PCIe 트랜잭션이 상기 가속 명령인지를 판단하는 것에 적어도 부분적으로 기초하여, 상기 제 2 PCIe 트랜잭션을 상기 FPGA의 상기 APM-F에서 처리하는 단계; 및
상기 제 2 PCIe 트랜잭션이 상기 가속 명령이 아닌지 판단하는 것에 적어도 부분적으로 기초하여, 상기 FPGA의 상기 제 1 엔드 포인트를 사용하여 상기 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하는 단계를 더 포함한다.
설명 435. 설명 434에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 434에 있어서,
상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR을 수신하는 단계; 및
상기 다운스트림 FAR를 상기 FPGA의 상기 루트 포트와 연결하는 단계를 더 포함한다.
설명 436. 설명 435에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 435에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR을 수신하는 단계는 상기 FPGA에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 다운스트림 FAR을 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 437. 설명 435에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 435에 있어서, 상기 FPGA에서 상기 저장 장치로부터 상기 다운스트림 FAR을 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 다운스트림 FAR를 포함한다.
설명 438. 설명 433에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 433에 있어서, 상기 제 1 PCIe 트랜잭션은 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 439. 설명 433에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 433에 있어서, 상기 FPGA의 제 2 엔드 포인트를 사용하여 상기 프로세서로 상기 제 1 PCIe의 트랜잭션의 결과를 전송하는 단계를 더 포함한다.
설명 440. 설명 433에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 433에 있어서,
상기 FPGA의 구성 모니터를 사용하여 상기 FPGA의 상기 루트 포트와 통신하는 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 FPGA의 상기 제 1 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 441. 본 발명의 일 실시 예는 기계에 의해 실행되는 명령이 저장된 비-휘발성 저장 매체를 포함하는 물품(article)을 포함한다. 그 결과는:
저장 장치에서 가속 모듈로부터 PCIe 트랜잭션을 수신하는 단계;
상기 제 1 PCIe 트랜잭션이 가상 명령인지 여부를 판단하는 단계;
상기 제 1 PCIe 트랜잭션이 상기 가상 명령인지를 판단하는 것에 적어도 부분적으로 기초하여:
상기 저장 장치의 APM-S를 사용하여 제 2 PCIe 트랜잭션을 생성하는 단계; 및
상기 제 2 PCIe 트랜잭션을 상기 저장 장치로부터 상기 가속 모듈로 전송하는 단계; 및
상기 제 1 PCIe 트랜잭션이 상기 가상 명령이 아닌지를 판단하는 것에 적어도 부분적으로 기초하여 상기 저장 장치에 저장된 데이터에 대해 상기 제 1 PCIe 트랜잭션을 실행하는 단계를 포함하되,
프로세서, 상기 가속 모듈 및 상기 저장 장치는 PCIe 버스를 사용하여 통신하고,
상기 가속 모듈은 상기 프로세서와 연관된 메모리에 상기 응용 데이터를 로딩함이 없이 상기 프로세서 상에서 실행 중인 상기 응용 프로그램에 대한 저장 장치상의 상기 응용 데이터에 대한 상기 가속 명령 수행하는 것을 지원한다.
설명 442. 설명 441에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 441에 있어서, 상기 저장 장치는 SSD이다.
설명 443. 설명 442에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 442에 있어서,
저장 장치의 가속 모듈로부터 제 1 PCIe 트랜잭션을 수신하는 단계는 상기 SSD의 엔드 포인트에서 상기 가속 모듈로부터 상기 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 제 1 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 프로세서로부터의 특정 커맨드를 포함하는지 또는 상기 제 1 PCIe 트랜잭션이 상기 가속 모듈의 상기 APM-F로부터 유래하는지 여부를 판단하는 단계를 포함하고,
상기 저장 장치의 APM-S를 사용하여 제 2 PCIe 트랜잭션을 생성하는 단계는 상기 제 1 PCIe 트랜잭션에 응답하여 상기 SSD의 APM-S에 의해 상기 제 2 PCIe 트랜잭션을 생성하는 단계를 포함하고,
상기 제 2 PCIe 트랜잭션을 상기 저장 장치로부터 상기 가속 모듈로 전송하는 단계는 상기 제 2 PCIe 트랜잭션을 상기 저장 장치의 상기 엔드 포인트로부터 상기 가속 모듈로 전송하는 단계를 포함한다.
설명 444. 설명 443에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 443에 있어서, 상기 제 1 PCIe 트랜잭션은 상기 프로세서로부터 유래하고, 특정 커맨드를 포함한다.
설명 445. 설명 443에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 443에 있어서, 상기 제 1 PCIe 트랜잭션이 상기 프로세서로부터 특정 커맨드를 포함하는지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 상기 SSD의 HIL에 의해 상기 프로세서로부터 특정 커맨드를 포함하는지 여부를 판단하는 단계를 더 포함한다.
설명 446. 설명 445에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 445에 있어서, 상기 특정 커맨드는 상기 프로세서 상에서 실행중인 ASM으로부터 유래한다.
설명 447. 설명 443에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 443에 있어서,
상기 프로세서로부터 호스트 시스템 주소의 블록을 요청하는 단계;
다운스트림 FAR처럼 상기 호스트 시스템 주소의 상기 블록의 서브 세트를 선택하는 단계;
상기 가속 모듈의 다운스트림 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계를 더 포함한다.
설명 448. 설명 447에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 447에 있어서, 상기 가속 모듈의 다운스트림 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계는 사이드 대역 버스를 통해 상기 가속 모듈의 다운스트림 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 449. 설명 447에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 447에 있어서, 상기 가속 모듈의 다운스트림 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계는 PCIe VDM을 사용하여 상기 가속 모듈의 다운스트림 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계를 포함하고, 상기 PCIe VDM은 다운스트림 FAR를 포함한다.
설명 450. 설명 447에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 447에 있어서,
업스트림 FAR처럼 상기 호스트 시스템 주소의 상기 블록의 제 2 서브 세트를 선택하는 단계; 및
상기 가속 모듈의 업스트림 포트를 상기 업스트림 FAR로 프로그래밍하는 단계를 더 포함한다.
설명 451. 설명 450에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 450에 있어서, 상기 가속 모듈의 업스트림 포트를 상기 업스트림 FAR로 프로그래밍하는 단계는 사이드 대역 버스를 통해 상기 가속 모듈의 업스트림 포트를 상기 업스트림 FAR로 프로그래밍하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 452. 설명 450에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 450에 있어서, 상기 가속 모듈의 업스트림 포트를 상기 업스트림 FAR로 프로그래밍하는 단계는 PCIe VDM을 사용하여 상기 가속 모듈의 업스트림 포트를 상기 업스트림 FAR로 프로그래밍하는 단계를 포함하고, 상기 PCIe VDM은 업스트림 FAR를 포함한다.
설명 453. 설명 443에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 443에 있어서,
상기 프로세서로부터 호스트 시스템 주소의 블록을 요청하는 단계;
다운스트림 FAR처럼 상기 호스트 시스템 주소의 상기 블록의 상기 서브 세트를 선택하는 단계; 및
상기 가속 모듈의 루트 포트를 상기 가속 모듈로 프로그래밍하는 단계를 더 포함한다.
설명 454. 설명 453에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 453에 있어서, 상기 가속 모듈의 루트 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계는 사이드대역 버스를 통해 상기 가속 모듈의 상기 루트 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계를 포함하고, 상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 455. 설명 453에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 453에 있어서, 상기 가속 모듈의 루트 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계는 PCIe VDM을 사용하여 상기 가속 모듈의 상기 루트 포트를 상기 다운스트림 FAR로 프로그래밍하는 단계를 포함하고, 상기 PCIe VDM은 다운스트림 FAR를 포함한다.
설명 456. 설명 443에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 443에 있어서, 상기 SSD의 상기 엔드 포인트에서 상기 가속 모듈로부터 상기 제 1 PCIe 트랜잭션의 결과를 수신하는 단계; 및
상기 SSD의 상기 엔드 포인트를 사용하여 상기 제 1 PCIe 트랜잭션의 상기 결과를 상기 프로세서로 전달하는 단계를 더 포함한다.
설명 457. 설명 443에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 443에 있어서,
상기 SSD를 노출시키는 물리 함수(PF)를 제공하는 단계; 및
상기 가속 모듈을 노출시키는 가상 함수(VF)를 제공하는 단계를 더 포함한다.
설명 458. 설명 457에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 457에 있어서, 상기 가속 모듈의 업스트림 포트를 상기 VF의 식별자로 프로그래밍하는 단계를 더 포함한다.
설명 459. 설명 443에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 443에 있어서,
상기 SSD를 노출시키는 제 1 PF를 제공하는 단계; 및
상기 가속 모듈을 노출시키는 제 2 PF를 제공하는 단계를 더 포함한다.
설명 460. 설명 459에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 459에 있어서, 상기 가속 모듈의 업스트림 포트를 상기 제 2 PF의 식별자로 프로그래밍하는 단계를 더 포함한다.
설명 461. 설명 442에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 442에 있어서,
저장 장치의 가속 모듈로부터 제 1 PCIe 트랜잭션을 수신하는 단계는 상기 SSD의 엔드 포인트에서 상기 가속 모듈로부터 상기 제 1 PCIe 트랜잭션을 수신하는 단계를 포함하고,
상기 제 1 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 제 1 PCIe 트랜잭션이 제 2 엔드 포인트에서 제 1 엔드 포인트 및 상기 제 2 엔드 포인트를 포함하는 SSD에 의해 수신되는지 여부를 판단하는 단계를 포함하고,
상기 저장 장치의 APM-S를 사용하여 제 2 PCIe 트랜잭션을 생성하는 단계는 상기 제 1 PCIe 트랜잭션에 응답하여 상기 SSD의 APM-S에 의해 상기 제 2 PCIe 트랜잭션을 생성하는 단계를 포함하고,
상기 제 2 PCIe 트랜잭션을 상기 저장 장치로부터 상기 가속 모듈로 전송하는 단계는 상기 제 2 PCIe 트랜잭션을 상기 저장 장치의 상기 엔드 포인트로부터 상기 가속 모듈로 전송하는 단계를 포함한다.
설명 441. 본 발명의 일 실시 예는 기계에 의해 실행되는 명령이 저장된 비-휘발성 저장 매체를 포함하는 물품(article)을 포함한다. 그 결과는:
제 1 브리징 구성 요소에서 제 1 장치로부터 PCIe 트랜잭션을 수신하는 단계;
상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가상 명령인지 여부를 판단하는 단계;
상기 PCIe 트랜잭션이 상기 가상 명령인지를 판단하는 것에 적어도 부분적으로 기초하여 상기 PCIe 트랜잭션을 가속 모듈로 전달하는 단계;
상기 PCIe 트랜잭션이 상기 가상 명령이 아닌지를 판단하는 것에 적어도 부분적으로 기초하여 상기 PCIe 트랜잭션을 저장 장치로 전달하는 단계를 포함하되,
상기 프로세서, 상기 제 1 브리징 구성 요소, 상기 가속 모듈 및 상기 저장 장치는 PCIe 버스를 사용하여 통신한다.
설명 463. 설명 462에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 462에 있어서,
상기 가속 모듈은 FPGA를 사용하여 구현되고,
상기 저장 장치는 SSD를 포함한다.
설명 464. 설명 462에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 462에 있어서, 상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 제 1 브리징 구성 요소의 업스트림 포트와 관련된 업스트림 FAR 내의 주소와 연관되는지 여부를 판단하는 단계를 더 포함한다.
설명 465. 설명 464에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 464에 있어서,
상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 업스트림 FAR를 수신하는 단계; 및
상기 업스트림 FAR를 상기 제 1 브리징 구성 요소의 상기 업스트림 포트와 연결하는 단계를 더 포함한다.
설명 466. 설명 465에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 465에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 업스트림 FAR를 수신하는 단계는 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 업스트림 FAR를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 467. 설명 465에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 465에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 업스트림 FAR를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 업스트림 FAR를 포함한다.
설명 468. 설명 462에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 462에 있어서, 상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 가상 함수(VF)와 관련되는 여부를 판단하는 단계를 포함한다.
설명 469. 설명 468에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 468에 있어서, 상기 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 가상 함수(VF)와 관련되는 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 상기 VF의 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함한다.
설명 470. 설명 469에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 469에 있어서,
상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계; 및
상기 VF의 상기 식별자를 상기 제 1 브리징 구성 요소의 상기 업스트림 포트와 연결하는 단계를 더 포함하는 방법.
설명 471. 설명 470에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 470에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계는 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 VF의 상기 식별자를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 472. 설명 470에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 470에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 VF의 상기 식별자를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 VF의 상기 식별자를 포함한다.
설명 473. 설명 462에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 462에 있어서, 상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 물리 함수(PF)와 관련되는 여부를 판단하는 단계를 포함한다.
설명 474. 설명 473에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 473에 있어서, 상기 PCIe 트랜잭션이 상기 저장 장치에 의해 노출되는 물리 함수(PF)와 관련되는 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 상기 PF의 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함한다.
설명 475. 설명 474에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 474에 있어서,
상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 PF의 상기 식별자를 수신하는 단계; 및
상기 PF의 상기 식별자를 상기 제 1 브리징 구성 요소의 상기 업스트림 포트와 연결하는 단계를 더 포함하는 방법.
설명 476. 설명 475에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 475에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 PF의 상기 식별자를 수신하는 단계는 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 PF의 상기 식별자를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 477. 설명 475에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 475에 있어서, 상기 제 1 브리징 구성 요소에서 상기 저장 장치로부터 상기 PF의 상기 식별자를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 PF의 상기 식별자를 포함한다.
설명 478. 설명 462에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 462에 있어서, 상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 상기 제 1 브리징 구성 요소의 제 1 PF의 식별자를 갖는 태그를 포함하는지 또는 상기 제 1 브리징 구성 요소의 제 2 PF의 식별자를 갖는 태그를 포함하는지 여부를 판단하는 단계를 포함한다.
설명 479. 설명 478에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 478에 있어서,
상기 제 1 브리징 구성 요소의 구성 모니터를 사용하여 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 제 1 구성 요소의 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 480. 설명 462에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 462에 있어서, 상기 제 1 브리징 구성 요소에서 상기 PCIe 트랜잭션이 상기 가속 명령인지 여부를 판단하는 단계는 상기 제 1 PCIe 트랜잭션이 제 1 엔드 포인트 및 제 2 엔드 포인트를 포함하는 상기 제 1 구성 요소의 제 1 엔드 포인트에서 상기 프로세서로부터 수신되는지 여부를 판단하는 단계를 포함한다.
설명 481. 설명 480에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 480에 있어서,
상기 제 1 브리징 구성 요소의 구성 모니터를 사용하여 상기 저장 장치의 상기 엔드 포인트의 구성을 판단하는 단계; 및
상기 제 1 구성 요소의 엔드 포인트를 사용하여 상기 저장 장치 상의 상기 엔드 포인트의 상기 구성을 복사하는 단계를 더 포함한다.
설명 482. 본 발명의 일 실시 예는 기계에 의해 실행되는 명령이 저장된 비-휘발성 저장 매체를 포함하는 물품(article)을 포함한다. 그 결과는:
제 2 브리징 구성 요소에서 저장 장치로부터 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계;
상기 제 2 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계;
상기 PCIe 트랜잭션이 상기 가속 명령임을 판단하는 것에 대해 적어도 부분적으로 기초하여, 상기 PCIe 트랜잭션을 가속 모듈로 전달하는 단계; 및
상기 PCIe 트랜잭션이 상기 가속 명령이 아님을 판단하는 것에 적어도 부분적으로 기초하여, 상기 PCIe 트랜잭션을 프로세서로 전달하는 단계를 포함하되,
상기 프로세서, 상기 제 2 브리징 구성 요소, 상기 가속 모듈 및 상기 저장 장치는 PCIe 버스를 사용하여 통신한다.
설명 483. 설명 482에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 482에 있어서,
상기 가속 모듈은 FPGA(Field Programmable Gate Array)를 사용하여 구현되고,
상기 저장 장치는 SSD(Solid State Drive)를 포함한다.
설명 484. 설명 482에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 482에 있어서, 상기 제 2 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 제 2 브리징 구성 요소에서 상기 제 2 PCIe 트랜잭션이 상기 제 2 브리징 구성 요소의 다운스트림 포트와 관련된 다운스트림 FAR 내의 주소와 연관되는지 여부를 판단하는 단계를 더 포함한다.
설명 485. 설명 484에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 484에 있어서,
상기 제 2 브리징 구성 요소에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계; 및
상기 다운스트림 FAR를 상기 제 2 브리징 구성 요소의 상기 다운스트림 포트와 연결하는 단계를 더 포함한다.
설명 486. 설명 485에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 485에 있어서, 상기 제 2 브리징 구성 요소에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 제 2 브리징 구성 요소에서 상기 저장 장치로부터 사이드대역 버스를 통해 상기 다운스트림 FAR를 수신하는 단계를 포함하고,
상기 사이드대역 버스는 I2C 버스 및 SM버스를 포함하는 세트로부터 얻어진다.
설명 487. 설명 485에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 485에 있어서, 상기 제 2 브리징 구성 요소에서 상기 저장 장치로부터 상기 다운스트림 FAR를 수신하는 단계는 상기 저장 장치로부터 PCIe VDM을 수신하는 단계를 포함하고,
상기 PCIe VDM은 상기 다운스트림 FAR를 포함한다.
설명 488. 설명 482에 따르면, 본 발명의 실시 예는 물품을 포함한다. 설명 482에 있어서, 상기 제 2 브리징 구성 요소에서 상기 PCIe 트랜잭션이 가속 명령인지 여부를 판단하는 단계는 상기 PCIe 트랜잭션이 제 1 루트 포인트 및 제 2 루트 포인트를 포함하는 상기 제 2 브리징 구성 요소의 상기 제 2 루트 포트에서 수신되는지 여부를 판단하는 단계를 포함한다.
결론적으로, 본 명세서에 기술된 실시 예에 대한 다양한 변경의 관점에서, 이 상세한 설명 및 첨부 된 자료는 단지 예시적인 것으로 의도되며, 본 발명의 범위를 제한하는 것으로 간주되어서는 안 된다. 그러므로, 본 발명으로써 청구되는 것은 후술하는 청구범위 및 그 균등물의 범위 및 사상 내에 있을 수 있는 모든 변형이다.

Claims (20)

  1. 응용 프로그램을 실행하는 프로세서;
    상기 프로세서 상에서 실행되는 상기 응용 프로그램에 의해 사용되는 데이터를 저장하는 메모리;
    상기 프로세서와 통신하기 위한 업스트림 엔드 포인트;
    저장 장치와 통신하기 위한 제 1 다운스트림 루트 포트 및 제 2 다운스트림 루트 포트; 및
    하드웨어를 사용하여 구현되고 가속 명령을 실행하기 위한 APM-F(Acceleration Platform Manager)를 포함하는 가속 모듈을 포함하되,
    상기 저장 장치는:
    상기 가속 모듈과 통신하기 위한 상기 저장 장치의 제 1 엔드 포인트;
    상기 가속 모듈과 통신하기 위한 상기 저장 장치의 제 2 엔드 포인트;
    상기 저장 장치의 동작들을 관리하기 위한 컨트롤러;
    상기 응용 프로그램에 대한 응용 데이터를 저장하기 위한 저장소; 및
    상기 APM-F가 상기 가속 명령을 실행하는 것을 보조하는 APM-S(storage device Acceleration Platform Manager)를 포함하고,
    상기 프로세서, 상기 가속 모듈, 및 상기 저장 장치는 PCIe(Peripheral Component Interconnect Exchange) 버스를 통해 통신하고,
    상기 가속 모듈은 상기 응용 데이터를 상기 메모리로 로딩함이 없이 상기 응용 프로그램을 위한 상기 저장 장치 상의 상기 응용 데이터에 대해 상기 가속 명령을 수행하는 것을 지원하고, 그리고
    상기 가속 모듈은 상기 제 1 다운스트림 루트 포트에서 상기 저장 장치로부터 수신된 제 3 PCIe 트랜잭션을 상기 업스트림 엔드 포인트를 통해 상기 프로세서로 전달하고, 상기 제 2 다운스트림 루트 포트에서 상기 저장 장치로부터 수신된 제 4 PCIe 트랜잭션을 상기 APM-F로 전달하도록 동작하는 시스템.
  2. 제 1 항에 있어서,
    상기 프로세서와 상기 가속 모듈 간의 통신들을 연결(bridging)하고, 상기 업스트림 엔드 포인트를 포함하는 제 1 브리징 구성 요소; 및
    상기 가속 모듈과 상기 저장 장치 간의 통신들을 연결하고, 상기 제 1 다운스트림 루트 포트 및 상기 제 2 다운스트림 루트 포트를 포함하는 제 2 브리징 구성 요소를 더 포함하는 시스템.
  3. 제 1 항에 있어서,
    상기 가속 모듈은 FPGA(Field Programmable Gate Array)를 사용하여 구현되고;
    상기 FPGA는 상기 업스트림 엔드 포인트, 상기 제 1 다운스트림 루트 포트 및 상기 제 2 다운스트림 루트 포트를 포함하고;
    상기 저장 장치는 SSD(Solid State Drive)를 포함하고;
    상기 SSD의 상기 제 1 엔드 포인트는 상기 제 1 다운스트림 루트 포트와 연관되고; 그리고
    상기 SSD의 상기 제 2 엔드 포인트는 상기 제 2 다운스트림 루트 포트와 연관되는 시스템.
  4. 제 3 항에 있어서,
    상기 APM-F는 상기 업스트림 엔드 포인트를 통해 상기 프로세서로 결과를 전송하도록 동작하는 시스템.
  5. 제 3 항에 있어서,
    상기 FPGA는 상기 SSD의 상기 제 1 엔드 포인트의 기능을 상기 업스트림 엔드 포인트로 복사하는 구성 모니터를 포함하는 시스템.
  6. 제 3 항에 있어서,
    상기 FPGA는 제 1 PF(Physical Function), 및 제 2 PF를 포함하고; 그리고
    상기 FPGA는:
    상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 제 1 다운스트림 루트 포트 및 상기 SSD의 상기 제 1 엔드 포인트를 통해 상기 SSD로 전달하고;
    상기 프로세서로부터 수신된 제 2 가속 명령을 상기 APM-F로 전달하고;
    상기 제 1 다운스트림 루트 포트에서 상기 SSD로부터 수신된 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하고; 그리고
    상기 제 2 다운스트림 루트 포트에서 상기 SSD로부터 수신된 제 1 가속 명령을 상기 APM-F로 전달하도록 동작하되,
    상기 제 1 PCIe 트랜잭션은 상기 제 1 PF의 제 1 식별자와 연관되고,
    상기 제 2 가속 명령은 상기 제 2 PF의 제 2 식별자와 연관되는 시스템.
  7. 제 3 항에 있어서,
    상기 FPGA는 제 2 업스트림 엔드 포인트를 더 포함하고; 그리고
    상기 FPGA는:
    상기 업스트림 엔드 포인트에서 상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 제 1 다운스트림 루트 포트 및 상기 SSD의 상기 제 1 엔드 포인트를 통해 상기 SSD로 전달하고;
    상기 제 2 업스트림 엔드 포인트에서 상기 프로세서로부터 수신된 제 2 가속 명령을 상기 APM-F로 전달하고;
    상기 제 1 다운스트림 루트 포트에서 상기 SSD로부터 수신된 제 2 PCIe 트랜잭션을 상기 업스트림 엔드 포인트를 통해 상기 프로세서로 전달하고; 그리고
    상기 제 2 다운스트림 루트 포트에서 상기 SSD로부터 수신된 제 1 가속 명령을 상기 APM-F로 전달하도록 동작하는 시스템.
  8. 하드웨어를 사용하여 구현된 가속 모듈에 있어서,
    가속 명령을 실행하는 APM-F;
    프로세서와 통신하기 위한 업스트림 엔드 포인트; 및
    상기 APM-F가 상기 가속 명령을 실행하는 것을 보조하는 APM-S(storage device Acceleration Platform Manager)를 포함하는 저장 장치와 통신하기 위한 제 1 다운스트림 루트 포트 및 제 2 다운스트림 루트 포트를 포함하되
    상기 프로세서 상에서 응용 프로그램이 실행되고,
    상기 가속 모듈은 PCIe(Peripheral Component Interconnect Exchange) 버스를 사용하여 상기 프로세서 및 상기 저장 장치와 통신하고,
    상기 가속 모듈은 상기 프로세서와 연관된 메모리로 응용 데이터를 로딩하는 것 없이 상기 응용 프로그램에 대한 상기 저장 장치 상의 상기 응용 데이터에 대해 상기 가속 명령을 수행하는 것을 지원하고, 그리고
    상기 가속 모듈은 상기 제 1 다운스트림 루트 포트에서 상기 저장 장치로부터 수신된 제 3 PCIe 트랜잭션을 상기 업스트림 엔드 포인트를 통해 상기 프로세서로 전달하고, 상기 제 2 다운스트림 루트 포트에서 상기 저장 장치로부터 수신된 제 4 PCIe 트랜잭션을 상기 APM-F로 전달하도록 동작하는 가속 모듈.
  9. 제 8 항에 있어서,
    상기 가속 모듈은 FPGA(Field Programmable Gate Array)를 사용하여 구현되는 가속 모듈.
  10. 제 8 항에 있어서,
    상기 APM-F는 상기 업스트림 엔드 포인트를 통해 상기 프로세서로 결과를 전송하도록 동작하는 가속 모듈.
  11. 제 9 항에 있어서,
    상기 FPGA는 제 1 PF 및 제 2 PF를 포함하고;
    상기 FPGA는:
    상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 제 1 다운스트림 루트 포트를 통해 상기 저장 장치로 전달하고;
    상기 프로세서로부터 수신된 제 2 가속 명령을 상기 APM-F로 전달하고;
    상기 제 1 다운스트림 루트 포트에서 상기 저장 장치로부터 수신된 제 2 PCIe 트랜잭션을 상기 프로세서로 전달하고; 그리고
    상기 제 2 다운스트림 루트 포트에서 상기 저장 장치로부터 수신된 제 1 가속 명령을 상기 APM-F로 전달하도록 동작하고,
    상기 제 1 PCIe 트랜잭션은 상기 제 1 PF의 제 1 식별자와 연관되고,
    상기 제 2 가속 명령은 상기 제 2 PF의 제 2 식별자와 연관되는 가속 모듈.
  12. 제 11 항에 있어서,
    상기 FPGA는 상기 저장 장치의 엔드 포인트의 기능을 상기 업스트림 엔드 포인트로 복사하는 구성 모니터를 더 포함하는 가속 모듈.
  13. 제 9 항에 있어서,
    상기 FPGA는 제 2 업스트림 엔드 포인트를 포함하고;
    상기 FPGA는:
    상기 업스트림 엔드 포인트에서 상기 프로세서로부터 수신된 제 1 PCIe 트랜잭션을 상기 제 1 다운스트림 루트 포트를 통해 상기 저장 장치로 전달하고;
    상기 제 2 업스트림 엔드 포인트에서 상기 프로세서로부터 수신된 제 2 가속 명령을 상기 APM-F로 전달하고;
    상기 제 1 다운스트림 루트 포트에서 상기 저장 장치로부터 수신된 제 2 PCIe 트랜잭션을 상기 업스트림 엔드 포인트를 통해 상기 프로세서로 전달하고; 그리고
    상기 제 2 다운스트림 루트 포트에서 상기 저장 장치로부터 수신된 제 1 가속 명령을 상기 APM-F로 전달하도록 동작하는 가속 모듈.
  14. 제 13 항에 있어서,
    상기 FPGA는 상기 저장 장치의 엔드 포인트의 기능을 상기 업스트림 엔드 포인트로 복사하는 구성 모니터를 더 포함하는 가속 모듈.
  15. 가속 모듈에서 저장 장치로부터 제 2 PCIe(Peripheral Component Interconnect Exchange) 트랜잭션을 수신하는 단계;
    상기 제 2 PCIe 트랜잭션이 상기 가속 모듈의 제 1 다운스트림 루트 포트 또는 상기 가속 모듈의 제 2 다운스트림 루트 포트에서 수신되었는지 여부를 결정하는 단계;
    상기 제 2 PCIe 트랜잭션이 상기 가속 모듈의 상기 제 1 다운스트림 루트 포트에서 수신되었다는 결정에 적어도 부분적으로 기초하여, 상기 가속 모듈의 업스트림 엔드 포인트를 사용하여 상기 제 2 PCIe 트랜잭션을 프로세서로 전송하는 단계; 및
    상기 제 2 PCIe 트랜잭션이 상기 가속 모듈의 상기 제 2 다운스트림 루트 포트에서 수신되었다는 결정에 적어도 부분적으로 기초하여, 상기 가속 모듈의 가속 플랫폼 관리자(APM-F)에서 상기 제 2 PCIe 트랜잭션을 처리하는 단계를 포함하되,
    상기 가속 모듈은 상기 프로세서와 연관된 메모리로 응용 데이터를 로딩함이 없이 응용 프로그램에 대한 상기 저장 장치 상의 상기 응용 데이터에 대해 가속 명령을 수행하는 것을 지원하고, 그리고
    상기 프로세서, 상기 가속 모듈, 및 상기 저장 장치는 PCIe 버스를 사용하여 통신하는 방법.
  16. 제 15 항에 있어서,
    상기 가속 모듈은 FPGA(Field Programmable Gate Array)를 사용하여 구현되는 방법.
  17. 제 16 항에 있어서,
    상기 FPGA의 상기 업스트림 엔드 포인트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계;
    상기 제 1 PCIe 트랜잭션이 상기 FPGA의 제 1 PF의 제 1 식별자 또는 상기 FPGA의 제 2 PF의 제 2 식별자를 갖는 태그를 포함하는지 여부를 결정함에 따라 상기 제 1 PCIe 트랜잭션이 가속 명령인지 여부를 상기 FPGA에서 결정하는 단계;
    상기 제 1 PCIe 트랜잭션이 상기 제 1 PF의 상기 제 1 식별자를 갖는 상기 태그를 포함한다고 결정한 것에 적어도 부분적으로 기초하여, 상기 가속 모듈의 상기 제 1 다운스트림 루트 포트를 사용하여 상기 제 1 PCIe 트랜잭션을 저장 장치로 전송하는 단계; 및
    상기 제 1 PCIe 트랜잭션이 상기 제 2 PF의 상기 제 2 식별자를 갖는 상기 태그를 포함한다고 결정한 것에 적어도 부분적으로 기초하여, 상기 제 1 PCIe 트랜잭션을 상기 가속 모듈의 상기 APM-F에서 처리하는 단계를 더 포함하는 방법.
  18. 제 17 항에 있어서,
    상기 FPGA의 상기 업스트림 엔드 포인트를 사용하여 상기 제 1 PCIe 트랜잭션의 결과를 상기 프로세서로 전송하는 단계를 더 포함하는 방법.
  19. 제 17 항에 있어서,
    상기 FPGA의 구성 모니터를 사용하여, 상기 FPGA의 상기 제 1 다운스트림 루트 포트와 통신하는 상기 저장 장치의 엔드 포인트의 구성을 결정하는 단계; 및
    상기 FPGA의 상기 업스트림 엔드 포인트를 사용하여 상기 저장 장치의 상기 엔드 포인트의 상기 구성을 복제하는 단계를 더 포함하는 방법.
  20. 제 16 항에 있어서,
    상기 FPGA의 제 2 업스트림 엔드 포인트에서 상기 프로세서로부터 제 1 PCIe 트랜잭션을 수신하는 단계;
    상기 FPGA의 상기 APM-F에서 상기 제 1 PCIe 트랜잭션을 처리하는 단계;
    상기 FPGA의 제 1 업스트림 엔드 포인트에서 상기 프로세서로부터 제 3 PCIe 트랜잭션을 수신하는 단계; 및
    상기 가속 모듈의 상기 제 1 다운스트림 루트 포트를 사용하여 저장 장치로 상기 제 3 PCIe 트랜잭션을 전송하는 단계를 더 포함하는 방법.
KR1020190012293A 2018-03-05 2019-01-30 Fpga 기반 가속화를 위한 새로운 ssd 구조 KR102403653B1 (ko)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
US201862638904P 2018-03-05 2018-03-05
US62/638,904 2018-03-05
US201862641267P 2018-03-09 2018-03-09
US62/641,267 2018-03-09
US201862642568P 2018-03-13 2018-03-13
US62/642,568 2018-03-13
US16/122,865 2018-09-05
US16/122,865 US10585819B2 (en) 2018-03-05 2018-09-05 SSD architecture for FPGA based acceleration

Publications (2)

Publication Number Publication Date
KR20190105496A KR20190105496A (ko) 2019-09-17
KR102403653B1 true KR102403653B1 (ko) 2022-05-30

Family

ID=67622641

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190012293A KR102403653B1 (ko) 2018-03-05 2019-01-30 Fpga 기반 가속화를 위한 새로운 ssd 구조

Country Status (3)

Country Link
US (3) US10592463B2 (ko)
KR (1) KR102403653B1 (ko)
DE (1) DE102019102643A1 (ko)

Families Citing this family (5)

* 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
CN112346665B (zh) * 2020-11-30 2023-05-19 杭州华澜微电子股份有限公司 基于pcie的通信方法、装置、设备、系统及存储介质
KR20220098947A (ko) 2021-01-05 2022-07-12 삼성전자주식회사 반도체 장치 및 이를 포함하는 전자 장치
US11755251B2 (en) * 2021-06-02 2023-09-12 Samsung Electronics Co., Ltd. Virtual computational storage devices
US11880568B2 (en) 2021-11-17 2024-01-23 Seagate Technology Llc On demand configuration of FPGA interfaces

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180052766A1 (en) 2016-08-16 2018-02-22 Western Digital Technologies, Inc. Non-volatile storage system with compute engine to accelerate big data applications

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070277036A1 (en) 2003-05-23 2007-11-29 Washington University, A Corporation Of The State Of Missouri Intelligent data storage and processing using fpga devices
US20130343181A1 (en) 2012-06-21 2013-12-26 Jonathan Stroud Systems and methods of data processing using an fpga-implemented hash function
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
US10216448B2 (en) 2014-09-11 2019-02-26 Hitachi, Ltd. Storage system with read request accelerator having dynamic internal data memory allocation
US20160094619A1 (en) 2014-09-26 2016-03-31 Jawad B. Khan Technologies for accelerating compute intensive operations using solid state drives
WO2016116599A1 (en) * 2015-01-22 2016-07-28 Greydog Ventures Ltd. User controlled profiles
CA2975603A1 (en) * 2015-02-02 2016-08-11 Northwestern University Systems, methods, and apparatus for esophageal panometry
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180052766A1 (en) 2016-08-16 2018-02-22 Western Digital Technologies, Inc. Non-volatile storage system with compute engine to accelerate big data applications

Also Published As

Publication number Publication date
KR20190105496A (ko) 2019-09-17
US10592463B2 (en) 2020-03-17
US20190272250A1 (en) 2019-09-05
US20240119014A1 (en) 2024-04-11
US10585843B2 (en) 2020-03-10
DE102019102643A1 (de) 2019-09-05
US20190272241A1 (en) 2019-09-05

Similar Documents

Publication Publication Date Title
KR102428317B1 (ko) Fpga 기반 가속화를 위한 새로운 ssd 구조
KR102403653B1 (ko) Fpga 기반 가속화를 위한 새로운 ssd 구조
EP3647932B1 (en) Storage device processing stream data, system including the same, and operation method thereof
JP2015537310A (ja) データ処理システム及びデータ処理方法
US9558232B1 (en) Data movement bulk copy operation
JP2021515318A (ja) NVMeベースのデータ読み取り方法、装置及びシステム
US9619336B2 (en) Managing production data
US10169062B2 (en) Parallel mapping of client partition memory to multiple physical adapters
US10564847B1 (en) Data movement bulk copy operation
US9158735B1 (en) Techniques for generating unique identifiers
CN115858434A (zh) 一种计算设备及请求处理方法
KR20230110213A (ko) 연산 장치들 내부의 툴들과 통신하는 상호작용 메커니즘

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant