KR20190035988A - 입출력 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법 - Google Patents

입출력 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법 Download PDF

Info

Publication number
KR20190035988A
KR20190035988A KR1020170123717A KR20170123717A KR20190035988A KR 20190035988 A KR20190035988 A KR 20190035988A KR 1020170123717 A KR1020170123717 A KR 1020170123717A KR 20170123717 A KR20170123717 A KR 20170123717A KR 20190035988 A KR20190035988 A KR 20190035988A
Authority
KR
South Korea
Prior art keywords
command
data
address
memory address
information
Prior art date
Application number
KR1020170123717A
Other languages
English (en)
Other versions
KR101980190B1 (ko
Inventor
김장우
안재형
권동업
Original Assignee
서울대학교산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 서울대학교산학협력단 filed Critical 서울대학교산학협력단
Priority to KR1020170123717A priority Critical patent/KR101980190B1/ko
Priority to US16/127,362 priority patent/US10664418B2/en
Publication of KR20190035988A publication Critical patent/KR20190035988A/ko
Application granted granted Critical
Publication of KR101980190B1 publication Critical patent/KR101980190B1/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/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • G06F13/124Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
    • G06F13/128Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine for dedicated transfers to a network
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • G06F13/124Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
    • G06F13/126Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine and has means for transferring I/O instructions and statuses between control unit and main processor
    • 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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17331Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Computer And Data Communications (AREA)

Abstract

본 발명의 실시 예에 따른 I/O 디바이스 제어 장치는 제1 I/O(Input/Output) 디바이스 및 제2 I/O 디바이스 사이의 데이터 통신에 대한 적어도 하나의 D2D(Device to Device) 커맨드를 저장하는 커맨드 큐, 상기 적어도 하나의 D2D 커맨드로부터 상기 데이터 통신과 관련된 정보를 획득하는 커맨드 파서, 및 상기 획득된 정보에 기초하여 상기 제1 I/O 디바이스로부터 상기 제2 I/O 디바이스로 데이터가 전송되도록 상기 제1 I/O 디바이스 및 상기 제2 I/O 디바이스 중 적어도 하나를 제어하는 오케스트레이터를 포함한다.

Description

입출력 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법{APPARATUS FOR CONTROLLING INPUT/OUTPUT DEVICE, OPERATING METHOD THEREOF AND OPERATING METHOD OF DEVICE DRIVER FOR CONTROLLING INPUT/OUTPUT DEVICE}
본 발명은 입출력(I/O; Input/Output) 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법에 관한 것으로써, 좀 더 상세하게는 I/O 디바이스들 사이의 직접 데이터 통신을 지원하기 위한 I/O 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법에 관한 것이다.
하나의 서버 시스템은 다양한 종류의 I/O 디바이스들을 포함하고, I/O 디바이스들을 통해 데이터 저장, 데이터 통신, 데이터 처리 등을 수행할 수 있다. 예를 들어, 서버 시스템은 솔리드 스테이트 드라이브(SSD; Solid State Drive)를 통해 데이터를 저장하고, 네트워크 인터페이스 카드(NIC; Network Interface Card)를 통해 데이터를 송수신할 수 있다. 서버 시스템은 그래픽 처리 장치(GPU; Graphics Processing Unit)를 통해 데이터 처리를 가속화할 수 있다.
I/O 디바이스는 표준 네트워크 인터페이스(예를 들어, PCIe(Peripheral Component Interconnect Express))를 기반으로 다른 I/O 디바이스로 데이터를 전송할 수 있다. I/O 디바이스들 사이의 데이터 전송을 위해, 호스트의 CPU 또는 메모리 자원이 사용될 수 있다. 호스트의 자원을 사용하여 데이터 통신이 수행되는 경우, I/O 디바이스들 사이의 데이터 통신을 위한 시간이 증가하고, CPU 또는 메모리 자원의 사용이 증가할 수 있다.
본 발명은 상술된 기술적 과제를 해결하기 위한 것으로써, 본 발명의 목적은 I/O 디바이스들 사이의 데이터 통신을 위한 시간을 단축시키고, 호스트의 CPU 또는 메모리 자원의 사용을 최소화할 수 있는 I/O 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법을 제공하는 데 있다.
본 발명의 실시 예에 따른 I/O 디바이스 제어 장치는 제1 I/O(Input/Output) 디바이스 및 제2 I/O 디바이스 사이의 데이터 통신에 대한 적어도 하나의 D2D(Device to Device) 커맨드를 저장하는 커맨드 큐, 상기 적어도 하나의 D2D 커맨드로부터 상기 데이터 통신과 관련된 정보를 획득하는 커맨드 파서, 및 상기 획득된 정보에 기초하여 상기 제1 I/O 디바이스로부터 상기 제2 I/O 디바이스로 데이터가 전송되도록 상기 제1 I/O 디바이스 및 상기 제2 I/O 디바이스 중 적어도 하나를 제어하는 오케스트레이터를 포함한다.
상기 적어도 하나의 D2D 커맨드는 상기 데이터 통신과 관련된 주체 디바이스, 소스 주소, 및 타겟 주소에 대한 정보를 포함하고, 상기 주체 디바이스는 상기 제1 I/O 디바이스 또는 상기 제2 I/O 디바이스를 가리키고, 상기 소스 주소는 상기 제1 I/O 디바이스의 메모리 주소를 가리키고, 상기 타겟 주소는 상기 제2 I/O 디바이스의 메모리 주소를 가리킬 수 있다.
상기 오케스트레이터는 상기 적어도 하나의 D2D 커맨드에 기초하여 상기 주체 디바이스가 상기 소스 주소에 저장된 데이터를 인출하여 상기 타겟 주소에 상기 인출된 데이터를 저장하도록 상기 주체 디바이스를 제어할 수 있다.
상기 적어도 하나의 D2D 커맨드는 상기 데이터 통신과 관련된 통신 방향 및 데이터 길이에 대한 정보를 더 포함하고, 상기 통신 방향은 상기 주체 디바이스를 기준으로 상기 데이터의 이동 방향을 가리키고, 상기 데이터 길이는 상기 소스 주소에 저장된 데이터의 길이를 가리킬 수 있다.
상기 적어도 하나의 D2D 커맨드는 상기 데이터 통신과 관련된 의존성에 대한 정보를 더 포함하고, 상기 의존성은 상기 적어도 하나의 D2D 커맨드가 수행된 이후에, 추가적으로 수행될 의존성 있는 D2D 커맨드가 존재하는지 여부를 가리키고, 상기 오케스트레이터는 상기 의존성에 기초하여 상기 의존성 있는 D2D 커맨드가 존재하지 않음을 판별할 수 있다.
상기 오케스트레이터는 상기 적어도 하나의 D2D 커맨드에 대응하는 I/O 디바이스 커맨드를 생성하고, 상기 I/O 디바이스 커맨드를 상기 주체 디바이스로 전송할 수 있다.
상기 오케스트레이터는 상기 주체 디바이스가 요구하는 표준 디바이스 프로토콜에 따라 상기 I/O 디바이스 커맨드를 생성할 수 있다.
본 발명의 실시 예에 따른 I/O 디바이스 제어 장치는 상기 제1 I/O 디바이스 또는 상기 제2 I/O 디바이스에 저장된 데이터가 인출되는 경우, 상기 인출된 데이터를 저장하는 중간 버퍼를 더 포함할 수 있다.
상기 적어도 하나의 D2D 커맨드는 제1 D2D 커맨드 및 제2 D2D 커맨드를 포함하고, 상기 제1 D2D 커맨드 및 상기 제2 D2D 커맨드는 각각 상기 데이터 통신과 관련된 주체 디바이스, 소스 주소, 타겟 주소, 및 의존성에 대한 정보들을 포함하고, 상기 제1 D2D 커맨드의 상기 주체 디바이스는 상기 제1 I/O 디바이스를 가리키고, 상기 제1 D2D 커맨드의 상기 소스 주소는 상기 제1 I/O 디바이스의 메모리 주소를 가리키고, 상기 제1 D2D 커맨드의 상기 타겟 주소는 상기 중간 버퍼의 메모리 주소를 가리키고, 상기 제1 D2D 커맨드의 상기 의존성은 의존성 있는 상기 제2 D2D 커맨드가 존재함을 가리키고, 상기 제2 D2D 커맨드의 상기 주체 디바이스는 상기 제2 I/O 디바이스를 가리키고, 상기 제2 D2D 커맨드의 상기 소스 주소는 상기 중간 버퍼의 상기 메모리 주소를 가리키고, 상기 제2 D2D 커맨드의 상기 타겟 주소는 상기 제2 I/O 디바이스의 메모리 주소를 가리키고, 상기 제2 D2D 커맨드의 상기 의존성은 의존성 있는 D2D 커맨드가 존재하지 않음을 가리킬 수 있다.
상기 오케스트레이터는 상기 제1 D2D 커맨드에 기초하여 상기 제1 I/O 디바이스가 상기 제1 I/O 디바이스의 상기 메모리 주소에 저장된 데이터를 인출하여 상기 중간 버퍼의 상기 메모리 주소에 인출된 데이터를 저장하도록 상기 제1 I/O 디바이스를 제어하고, 상기 제2 D2D 커맨드에 기초하여 상기 제2 I/O 디바이스가 상기 중간 버퍼의 상기 메모리 주소에 저장된 데이터를 인출하여 상기 제2 I/O 디바이스의 상기 메모리 주소에 인출된 데이터를 저장하도록 상기 제2 I/O 디바이스를 제어할 수 있다.
상기 오케스트레이터는 상기 제1 D2D 커맨드의 의존성 및 상기 제2 D2D 커맨드의 의존성에 기초하여 상기 제1 D2D 커맨드를 수행한 후 상기 제2 D2D 커맨드를 수행할 수 있다.
상기 제2 D2D 커맨드는 TCP/IP(Transmission Control Protocol/Internet Protocol)의 정보를 더 포함하고, 상기 오케스트레이터는 상기 제2 D2D 커맨드에 기초하여 상기 제2 I/O 디바이스가 상기 중간 버퍼의 상기 메모리 주소에 저장된 데이터를 인출하고, 상기 인출된 데이터 및 상기 TCP/IP의 정보가 포함된 패킷을 생성하여 외부로 전송하도록 상기 제2 I/O 디바이스를 제어할 수 있다.
본 발명의 실시 예에 따른 I/O 디바이스 제어 장치는 상기 중간 버퍼에 저장된 데이터를 처리하고, 상기 처리로부터 생성된 결과 데이터를 상기 중간 버퍼에 저장하는 데이터 처리기를 더 포함할 수 있다.
상기 적어도 하나 이상의 D2D 커맨드는 제1 D2D 커맨드, 제2 D2D 커맨드 및 제3 D2D 커맨드를 포함하고, 상기 제1 D2D 커맨드 및 제3 D2D 커맨드는 각각 상기 데이터 통신과 관련된 주체 디바이스, 소스 주소, 타겟 주소, 및 의존성에 대한 정보들을 포함하고, 상기 제2 D2D 커맨드는 상기 처리와 관련된 데이터 처리 종류, 소스 주소, 타겟 주소, 및 의존성에 대한 정보들을 포함하고, 상기 제1 D2D 커맨드의 상기 주체 디바이스는 상기 제1 I/O 디바이스를 가리키고, 상기 제1 D2D 커맨드의 상기 소스 주소는 상기 제1 I/O 디바이스의 메모리 주소를 가리키고, 상기 제1 D2D 커맨드의 상기 타겟 주소는 상기 중간 버퍼의 제1 메모리 주소를 가리키고, 상기 제1 D2D 커맨드의 상기 의존성은 의존성 있는 제2 D2D 커맨드가 존재함을 가리키고, 상기 제2 D2D 커맨드의 상기 데이터 처리 종류는 상기 처리에 대응하는 연산의 종류를 가리키고, 상기 제2 D2D 커맨드의 상기 소스 주소는 상기 중간 버퍼의 상기 제1 메모리 주소를 가리키고, 상기 제2 D2D 커맨드의 상기 타겟 주소는 상기 중간 버퍼의 제2 메모리 주소를 가리키고, 상기 제2 D2D 커맨드의 상기 의존성은 의존성 있는 제3 D2D 커맨드가 존재함을 가리키고, 상기 제3 D2D 커맨드의 상기 주체 디바이스는 상기 제2 I/O 디바이스를 가리키고, 상기 제3 D2D 커맨드의 상기 소스 주소는 상기 중간 버퍼의 상기 제2 메모리 주소를 가리키고, 상기 제3 D2D 커맨드의 상기 타겟 주소는 상기 제2 I/O 디바이스의 메모리 주소를 가리키고, 상기 제3 D2D 커맨드의 상기 의존성은 의존성 있는 D2D 커맨드가 존재하지 않음을 가리킬 수 있다.
상기 오케스트레이터는 상기 제1 D2D 커맨드에 기초하여 상기 제1 I/O 디바이스가 상기 제1 I/O 디바이스의 상기 메모리 주소에 저장된 데이터를 인출하여 상기 중간 버퍼의 상기 제1 메모리 주소에 인출된 데이터를 저장하도록 상기 제1 I/O 디바이스를 제어하고, 상기 제2 D2D 커맨드에 기초하여 상기 데이터 처리기가 상기 데이터 처리 종류에 따라 상기 중간 버퍼의 상기 제1 메모리 주소에 저장된 데이터를 처리한 후, 상기 결과 데이터를 상기 중간 버퍼의 상기 제2 메모리 주소에 저장하도록 상기 데이터 처리기를 제어하고, 상기 제3 D2D 커맨드에 기초하여 상기 제2 I/O 디바이스가 상기 중간 버퍼의 상기 제2 메모리 주소에 저장된 데이터를 인출하여 상기 제2 I/O 디바이스의 상기 메모리 주소에 인출된 데이터를 저장하도록 상기 제2 I/O 디바이스를 제어할 수 있다.
상기 제1 I/O 디바이스, 상기 제2 I/O 디바이스 및 상기 I/O 디바이스 제어 장치 각각은 PCIe(Peripheral Component Interconnect Express) 슬롯에 장착될 수 있다.
본 발명의 실시 예에 따른 제1 I/O(Input/Output) 디바이스 및 제2 I/O 디바이스 중 적어도 하나를 제어하는 I/O 디바이스 제어 장치의 동작 방법은 상기 제1 I/O 디바이스 및 상기 제2 I/O 디바이스 사이의 데이터의 전송에 대한 적어도 하나의 D2D 커맨드를 수신하는 단계, 상기 적어도 하나의 D2D 커맨드로부터 상기 데이터의 상기 전송과 관련된 정보를 획득하는 단계, 상기 획득된 정보에 기초하여 적어도 하나 이상의 I/O 디바이스 커맨드를 생성하는 단계, 및 상기 적어도 하나 이상의 I/O 디바이스 커맨드를 상기 제1 I/O 디바이스 및 상기 제2 I/O 디바이스 중 적어도 하나로 전송하는 단계를 포함한다.
본 발명의 실시 예에 따른 I/O 디바이스 제어 장치의 동작 방법은 상기 획득된 정보에 기초하여 상기 적어도 하나 이상의 D2D 커맨드가 데이터 처리 커맨드를 포함하는지 여부를 판별하는 단계, 및 상기 데이터 처리 커맨드가 존재하는 경우, 상기 데이터를 처리하는 단계를 더 포함할 수 있다.
본 발명의 실시 예에 따른 호스트로부터 제1 I/O(Input/Output) 디바이스 및 제2 I/O 디바이스 사이의 데이터 통신에 대한 명령을 I/O 디바이스 제어 장치로 전달하는 I/O 디바이스 제어 장치 드라이버의 동작 방법은 상기 호스트로부터 상기 제1 I/O 디바이스로부터 상기 제2 I/O 디바이스로 데이터를 전송하는 상기 명령을 수신하는 단계, 상기 호스트로부터 상기 제1 I/O 디바이스 및 상기 제2 I/O 디바이스의 구동 정보를 확인하는 단계, 상기 구동 정보에 기초하여 상기 명령에 대한 적어도 하나 이상의 D2D 커맨드를 생성하는 단계, 및 상기 적어도 하나 이상의 D2D 커맨드를 상기 I/O 디바이스 제어 장치로 전달하는 단계를 포함한다.
상기 D2D 커맨드는 상기 데이터 통신과 관련된 주체 디바이스, 소스 주소 및 타겟 주소에 대한 정보들을 포함하고, 상기 주체 디바이스는 상기 제1 I/O 디바이스 또는 상기 제2 I/O 디바이스를 가리키고, 상기 소스 주소는 상기 제1 I/O 디바이스의 메모리 주소를 가리키고, 상기 타겟 주소는 상기 제2 I/O 디바이스의 메모리 주소를 가리킬 수 있다.
본 발명의 실시 예에 따르면, I/O 디바이스들 사이의 직접 데이터 통신을 지원하여 데이터 통신 시간을 단축시키고, 호스트의 CPU 또는 메모리 자원의 사용을 최소화할 수 있는 I/O 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법을 제공할 수 있다.
도 1은 본 발명의 실시 예에 따른 서버 시스템을 나타내는 블록도이다.
도 2는 도 1의 서버 시스템의 소프트웨어 동작을 포함하는 소프트웨어 계층을 예시적으로 보여주는 블록도이다.
도 3은 도 2의 I/O 디바이스 제어 장치 드라이버의 블록도이다.
도 4는 본 발명의 실시 예에 따른 D2D 커맨드의 예시를 나타낸다.
도 5는 도 3의 I/O 디바이스 제어 장치 드라이버의 동작을 보여주는 순서도이다.
도 6은 도 1의 I/O 디바이스 제어 장치의 하나의 실시 예를 나타내는 블록도이다.
도 7은 도 6의 I/O 디바이스 제어 장치의 동작에 대한 하나의 예시를 보여주는 순서도이다.
도 8은 도 6의 I/O 디바이스 제어 장치의 동작을 보여주는 순서도이다.
도 9는 도 1의 I/O 디바이스 제어 장치의 하나의 실시 예를 나타내는 블록도이다.
도 10은 도 9의 I/O 디바이스 제어 장치의 동작에 대한 하나의 예시를 보여주는 순서도이다.
도 11은 도 1의 I/O 디바이스 제어 장치의 하나의 실시 예를 나타내는 블록도이다.
도 12는 도 11의 I/O 디바이스 제어 장치의 동작에 따른 하나의 예시를 보여주는 순서도이다.
도 13은 도 11의 I/O 디바이스 제어 장치의 동작을 보여주는 순서도이다.
이하에서, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
도 1은 본 발명의 실시 예에 따른 서버 시스템을 나타내는 블록도이다. 도 1을 참조하면, 서버 시스템(100)은 입출력(I/O; Input/Output) 디바이스 제어 장치(110), CPU(Central Processing Unit)(11), 메모리(12), 네트워크 인터페이스(13), 제1 I/O 디바이스(101) 및 제2 I/O 디바이스(102)를 포함할 수 있다.
I/O 디바이스 제어 장치(110)는 제1 I/O 디바이스(101) 및/또는 제2 I/O 디바이스(102)를 제어하여 제1 및 제2 I/O 디바이스들(101, 102) 사이의 직접 데이터 통신(D2D; Device to Device)을 가능하게 할 수 있다.
본 발명에서 직접 데이터 통신이라 함은 제1 및 제2 I/O 디바이스들(101, 102) 사이의 데이터 통신이 수행되는 경우, 제1 및 제2 I/O 디바이스들(101, 102)이 CPU(11) 또는 메모리(12) 자원을 사용하지 않고 데이터를 송수신하는 것을 의미한다. 이에 따라, 제1 및 제2 I/O 디바이스들(101, 102)은 호스트(예를 들어, CPU, 메모리 등)를 통하지 않고 직접적으로 데이터 통신을 수행할 수 있다.
I/O 디바이스 제어 장치(110)는 중간 데이터 처리를 수행할 수 있다. 본 발명에서 중간 데이터 처리라 함은 제1 및 제2 I/O 디바이스들(101, 102)에 저장된 데이터에 대해 연산 동작을 수행하는 것을 의미한다. 예시적으로, I/O 디바이스 제어 장치(110)는 제1 및 제2 I/O 디바이스들(101, 102) 사이의 데이터 통신에 있어서 데이터 처리가 필요한 경우, 중간 데이터 처리를 수행할 수 있다. 이에 따라, 제1 I/O 디바이스(101) 또는 제2 I/O 디바이스(102) 중 어느 하나에 저장된 데이터는 중간 데이터 처리에 의해 다른 데이터로 변경될 수 있다. 변경된 데이터는 제1 I/O 디바이스(101) 또는 제2 I/O 디바이스(102) 중 어느 하나로 전달될 수 있다.
예를 들어, 제1 I/O 디바이스(101) 및 제2 I/O 디바이스(102) 사이의 직접 데이터 통신 및 중간 데이터 처리가 필요한 경우, I/O 디바이스 제어 장치(110)는 제1 I/O 디바이스(101)를 제어하여 제1 I/O 디바이스(101)로부터 저장된 데이터를 수신할 수 있다. I/O 디바이스 제어 장치(110)는 수신된 데이터를 처리할 수 있다. I/O 디바이스 제어 장치(110)는 제2 I/O 디바이스(102)를 제어하여 처리된 결과 데이터를 제2 I/O 디바이스(102)로 전달할 수 있다.
CPU(11)는 서버 시스템(100)의 동작을 전체적으로 제어한다. 예시적으로, CPU(11)는 I/O 디바이스 제어 장치(110)를 제어하여 제1 I/O 디바이스(101) 및 제2 I/O 디바이스(102) 사이의 직접 데이터 통신이 수행되도록 할 수 있다. 예를 들어, CPU(11)는 I/O 디바이스 제어 장치(110)에 대한 소프트웨어(예를 들어, 장치 드라이버)를 통해 I/O 디바이스 제어 장치(110)로 D2D 커맨드를 전송하여 I/O 디바이스 제어 장치(110)를 제어할 수 있다. I/O 디바이스 제어 장치(110)는 D2D 커맨드에 응답하여 제1 및 제2 I/O 디바이스들(101, 102) 사이의 직접 데이터 통신을 제어할 수 있다.
메모리(12)는 CPU(11)에서 수행되는 동작과 관련된 데이터를 저장할 수 있다. 예를 들어, 메모리(12)는 램(RAM; random access memory) 또는 롬(ROM; read only memory)을 포함할 수 있다. CPU(11)는 메모리(12)를 이용하여 애플리케이션을 동작시킬 수 있다. 애플리케이션이 동작됨에 따라, 제1 I/O 디바이스(101) 및 제2 I/O 디바이스(102) 사이의 직접 데이터 통신 또는 중간 데이터 처리가 요구될 수 있다.
네트워크 인터페이스(13)는 I/O 디바이스 제어 장치(110), CPU(11), 메모리(12), 제1 및 제2 I/O 디바이스들(101, 102) 사이의 데이터 통신을 지원할 수 있다. 예를 들어, I/O 디바이스 제어 장치(110)는 네트워크 인터페이스(13)를 통해 제1 I/O 디바이스(101)로 I/O 디바이스 커맨드를 송신할 수 있다. I/O 디바이스 커맨드를 수신한 제1 I/O 디바이스(101)는 네트워크 인터페이스(13)를 통해 저장된 데이터를 제2 I/O 디바이스(102)로 전송할 수 있다.
네트워크 인터페이스(13)는 표준 네트워크 인터페이스(예를 들어, PCIe)일 수 있다. 제1 I/O 디바이스(101), 제2 I/O 디바이스(102) 및 I/O 디바이스 제어 장치(110)는 네트워크 인터페이스(13)의 입출력 포트 또는 슬롯을 통해 네트워크 인터페이스(13)에 연결될 수 있다.
제1 및 제2 I/O 디바이스들(101, 102)은 네트워크 인터페이스(13)를 통해 데이터를 송수신할 수 있다. 제1 및 제2 I/O 디바이스들(101, 102)은 송수신된 데이터를 이용하여 다양한 동작들을 수행할 수 있다. 예시적으로, 제1 및 제2 I/O 디바이스들(101, 102) 각각은 스토리지 디바이스(예를 들어, SSD), 네트워크 디바이스(예를 들어, NIC) 또는 가속화 디바이스(예를 들어, GPU) 중 어느 하나일 수 있다. 스토리지 디바이스는 데이터를 수신하여 수신된 데이터를 저장할 수 있다. 네트워크 디바이스는 데이터를 수신하여 수신된 데이터를 서버 시스템(100) 외부로 송신할 수 있다. 가속화 디바이스는 데이터를 수신하여 수신된 데이터에 대한 연산을 수행할 수 있다.
본 발명의 실시 예에 따른 제1 I/O 디바이스(101) 또는 제2 I/O 디바이스(102)는 상술된 예시들에 한정되지 않으며, 네트워크 인터페이스(13)를 통해 데이터를 송수신하는 다양한 형태의 I/O 디바이스들을 포함할 수 있다. 도 1에서는 제1 및 제2 I/O 디바이스들(101, 102)만 도시되었으나, 본 발명이 이에 한정되는 것은 아니며, 서버 시스템(100)은 다른 I/O 디바이스들을 더 포함할 수 있다.
도 1의 서버 시스템(100)에 따르면, 제1 I/O 디바이스(101) 및 제2 I/O 디바이스(102) 사이의 직접 데이터 통신이 가능해 질 수 있다. 이에 따라, CPU(11) 또는 메모리(12) 자원이 사용되지 않으므로, 데이터 통신 시간이 단축될 수 있고, CPU(11) 또는 메모리(12) 자원의 사용이 최소화 될 수 있다.
도 2는 도 1의 서버 시스템의 소프트웨어 동작을 포함하는 소프트웨어 계층을 예시적으로 보여주는 블록도이다. 도 1 및 도 2를 참조하면, 서버 시스템(100)의 소프트웨어 계층은 애플리케이션(14), 운영체제(15) 및 I/O 디바이스 제어 장치 드라이버(120)를 포함할 수 있다.
애플리케이션(14)은 서버 시스템(100) 상에서 구동되는 다양한 응용 프로그램들을 포함할 수 있다. 애플리케이션(14)의 실행에 따라, I/O 디바이스들(101, 102) 사이의 직접 데이터 통신 및 중간 데이터 처리가 요구될 수 있다.
운영체제(15)는 서버 시스템(100)을 구성하는 CPU(11), 메모리(12) 및 I/O 디바이스들(101, 102)의 자원을 관리할 수 있다. 예를 들어, 운영체제(15)는 스토리지 디바이스 내의 데이터 위치(예를 들어, LBA(logical block address))를 관리할 수 있다. 운영체제(15)는 네트워크 연결 정보(예를 들어, TCP/IP(Transmission Control Protocol/Internet Protocol) 주소 등의 소켓의 정보)를 저장할 수 있다.
I/O 디바이스 제어 장치 드라이버(120)는 I/O 디바이스 제어 장치(110)를 제어하기 위해 사용되는 소프트웨어일 수 있다. 직접 데이터 통신 또는 중간 데이터 처리가 요구되는 경우, I/O 디바이스 제어 장치 드라이버(120)는 D2D 커맨드를 생성하고, 생성된 D2D 커맨드를 I/O 디바이스 제어 장치(110)로 전달할 수 있다. 예시적으로, I/O 디바이스 제어 장치 드라이버(120)는 I/O 디바이스 제어 장치(110)가 요구하는 디바이스 프로토콜에 따라 D2D 커맨드를 생성하고 전달할 수 있다. I/O 디바이스 제어 장치(110)는 전달된 D2D 커맨드에 기초하여 직접 데이터 통신 또는 중간 데이터 처리를 수행할 수 있다.
예시적으로, I/O 디바이스 제어 장치 드라이버(120)는 직접 데이터 통신 및 중간 데이터 처리에 대한 함수를 제공할 수 있다. 예를 들어, I/O 디바이스 제어 장치 드라이버(120)는 스토리지 디바이스에서 네트워크 디바이스로 통신을 수행하는 함수, 네트워크 디바이스에서 스토리지 디바이스로 통신을 수행하는 함수, 스토리지 디바이스에서 네트워크 디바이스로 통신을 수행하면서 데이터 처리를 수행하는 함수 등을 제공할 수 있다.
제1 및 제2 I/O 디바이스들(101, 102) 사이의 직접 데이터 통신 및 중간 데이터 처리가 필요한 경우, 애플리케이션(14)은 I/O 디바이스 제어 장치 드라이버(120)로부터 제공되는 함수를 호출할 수 있다. 애플리케이션(14)은 함수를 호출한 후, 제1 및 제2 I/O 디바이스들(101, 102)의 파일 디스크립터(file descriptor)를 I/O 디바이스 제어 장치 드라이버(120)로 전달할 수 있다.
I/O 디바이스 제어 장치 드라이버(120)는 애플리케이션(14)으로부터 전달 받은 파일 디스크립터에 기초하여 운영체제(15)를 통해 제1 및 제2 I/O 디바이스들(101, 102) 사이의 직접 데이터 통신 및 중간 데이터 처리 명령에 필요한 정보를 확인할 수 있다. 예시적으로, I/O 디바이스 제어 장치 드라이버(120)는 운영체제(15)의 구조체로부터 필요한 정보를 확인할 수 있다.
I/O 디바이스 제어 장치 드라이버(120)는 운영체제(15)로부터 필요한 정보를 수집하여 D2D 커맨드를 생성하고, 생성된 D2D 커맨드를 I/O 디바이스 제어 장치(110)로 전달할 수 있다. D2D 커맨드는 직접 데이터 통신 및 중간 데이터 처리를 수행하기 위해 필요한 정보를 포함할 수 있다. 예시적으로, I/O 디바이스 제어 장치 드라이버(120)는 제1 및 제2 I/O 디바이스들(101, 102) 사이의 직접 데이터 통신을 위해 적어도 하나 이상의 D2D 커맨드를 생성할 수 있다. I/O 디바이스 제어 장치 드라이버(120)는 적어도 하나 이상의 D2D 커맨드를 I/O 디바이스 제어 장치(110)로 전달하여, I/O 디바이스 제어 장치(110)가 각각의 D2D 커맨드와 대응하는 동작을 수행하도록 할 수 있다.
I/O 디바이스 제어 장치(110)는 전달된 D2D 커맨드를 확인하여 제1 및 제2 I/O 디바이스들(101, 102)을 제어할 수 있다. I/O 디바이스 제어 장치(110)는 D2D 커맨드에 포함된 정보로부터 제1 및 제2 I/O 디바이스들(101, 102)을 제어하기 위한 I/O 디바이스 커맨드를 생성할 수 있다. 제1 및 제2 I/O 디바이스들(101, 102)은 I/O 디바이스 커맨드에 응답하여 직접 데이터 통신을 수행할 수 있다.
I/O 디바이스 제어 장치(110)는 전달된 D2D 커맨드를 확인하여 중간 데이터 처리를 수행할 수 있다. I/O 디바이스 제어 장치(110)는 제1 및 제2 I/O 디바이스들(101, 102) 중 하나에 저장된 데이터를 처리한 후, 처리된 결과 데이터를 제1 및 제2 I/O 디바이스들(101, 102) 중 다른 하나로 전달할 수 있다. 예를 들어, I/O 디바이스 제어 장치(110)는 제1 I/O 디바이스(101)로부터 제2 I/O 디바이스(102)로 데이터가 전달되기 전에, 전달할 데이터에 대한 연산을 수행할 수 있다. I/O 디바이스 제어 장치(110)는 연산이 수행된 결과 데이터를 제2 I/O 디바이스(102)로 전달할 수 있다.
도 3은 도 2의 I/O 디바이스 제어 장치 드라이버의 블록도이다. 도 1 내지 도 3을 참조하면, I/O 디바이스 제어 장치 드라이버(120)는 커널 커뮤니케이터(121)(kernel communicator), D2D 커맨드 생성기(122) 및 완료 큐(123)(completion queue)를 포함할 수 있다.
커널 커뮤니케이터(121)는 직접 데이터 통신 및 중간 데이터 처리 명령에 필요한 I/O 디바이스 구동 정보를 확인할 수 있다. 예시적으로, 애플리케이션(14)에 의해 직접 데이터 통신 및 중간 데이터 처리에 대한 함수가 호출되는 경우, 커널 커뮤니케이터(121)는 운영체제(15)로부터 I/O 디바이스 구동 정보를 확인할 수 있다. I/O 디바이스 구동 정보는 I/O 디바이스 제어 장치(110)가 제1 및 제2 I/O 디바이스들(101, 102)을 제어하기 위해 필요한 정보 및 중간 데이터 처리를 위해 필요한 정보를 포함할 수 있다. 예를 들어, 제1 및 제2 I/O 디바이스들(101, 102)을 제어하기 위한 I/O 디바이스 구동 정보는 직접 데이터 통신과 관련된 I/O 디바이스 목록, 데이터의 소스(source) 주소, 타겟(target) 주소, 전송할 데이터의 길이, 네트워크 소켓(socket) 등에 대한 정보를 포함할 수 있다. 중간 데이터 처리를 위한 I/O 디바이스 구동 정보는 처리될 데이터의 주소, 처리된 결과 데이터가 저장될 주소, 처리될 데이터의 길이 등을 포함할 수 있다.
D2D 커맨드 생성기(122)는, 커널 커뮤니케이터(121)가 수집한 정보에 기초하여, D2D 커맨드를 생성할 수 있다. 예시적으로, D2D 커맨드 생성기(122)는 I/O 디바이스 제어 장치(110)와 I/O 디바이스 제어 장치 드라이버(120) 사이에 미리 정해진 규칙 또는 약속에 따라 D2D 커맨드를 생성할 수 있다. D2D 커맨드는 I/O 디바이스들(101, 102)을 제어하기 위한 정보 및 중간 데이터를 처리하기 위한 정보를 포함할 수 있다. D2D 커맨드 생성기(122)는 생성한 D2D 커맨드를 I/O 디바이스 제어 장치(110)로 전달할 수 있다.
완료 큐(123)는 직접 데이터 통신 및 중간 데이터 처리가 정상적으로 수행되었는지 여부를 확인하기 위한 메모리 영역이다. I/O 디바이스 제어 장치(110)는 전달된 D2D 커맨드를 확인하여 D2D 커맨드에 대응하는 동작을 수행할 수 있다. I/O 디바이스 제어 장치(110)는 D2D 커맨드에 대응하는 동작을 수행함으로써 직접 데이터 통신 및 중간 데이터 처리를 수행할 수 있다. I/O 디바이스 제어 장치(110)는 직접 데이터 통신 및 중간 데이터 처리를 수행한 후, 직접 데이터 통신 및 중간 데이터 처리가 정상적으로 수행되었는지 여부를 완료 큐(123)에 저장할 수 있다. I/O 디바이스 제어 장치 드라이버(120)는 완료 큐(123)를 통해 직접 데이터 통신 및 중간 데이터 처리가 정상적으로 수행되었는지 여부를 애플리케이션(14)으로 전달할 수 있다.
도 4는 본 발명의 실시 예에 따른 D2D 커맨드의 예시를 나타낸다. 도 4를 참조하면, D2D 커맨드는 주체 디바이스 또는 데이터 처리 종류를 나타내는 제1 데이터 필드(DD), 통신 방향을 나타내는 제2 데이터 필드(CD), 소스 주소를 나타내는 제3 데이터 필드(SA), 타겟 주소를 나타내는 제4 데이터 필드(TA), 데이터 길이를 나타내는 제5 데이터 필드(DL), 의존성을 나타내는 제6 데이터 필드(DI) 및 기타 정보를 나타내는 제7 데이터 필드(EI)를 포함할 수 있다.
제1 데이터 필드(DD)는 주체 디바이스에 대응하는 정보 또는 데이터 처리 종류에 대응하는 정보 중 어느 하나의 정보를 포함할 수 있다. 주체 디바이스는 제1 및 제2 I/O 디바이스들(101, 102) 중 D2D 커맨드에 대응하는 동작이 수행될 I/O 디바이스를 나타낸다. 예를 들어, 주체 디바이스에 대응하는 정보는 스토리지 디바이스(예를 들어, SSD), 네트워크 디바이스(예를 들어, NIC), 가속화 디바이스(예를 들어, GPU) 등을 가리킬 수 있다. D2D 커맨드 생성기(122)는 직접 데이터 통신을 위한 D2D 커맨드를 생성하는 경우, 주체 디바이스에 대응하는 정보를 D2D 커맨드에 포함시킬 수 있다.
데이터 처리 종류는 중간 데이터 처리를 수행하는 경우, I/O 디바이스 제어 장치(110)가 처리해야 할 연산 종류를 나타낸다. 예를 들어, 중간 데이터 처리에 대응하는 정보는 "MD5 hash", "CRC32 checksum" 등을 가리킬 수 있다. D2D 커맨드 생성기(122)는 중간 데이터 처리를 위한 D2D 커맨드를 생성하는 경우, 데이터 처리 종류에 대응하는 정보를 D2D 커맨드에 포함시킬 수 있다.
제2 데이터 필드(CD)는 통신 방향에 대응하는 정보를 포함할 수 있다. 통신 방향은 주체 디바이스를 기준으로 하는 데이터의 이동 방향을 나타낸다. 예를 들어, 주체 디바이스 내부의 데이터가 다른 I/O 디바이스로 전송되는 경우, 통신 방향은 "Out"일 수 있다. 다른 I/O 디바이스의 데이터가 주체 디바이스로 전송되는 경우, 통신 방향은 "In"일 수 있다. 중간 데이터 처리를 위한 D2D 커맨드의 경우, 통신 방향에 대응하는 값은 "Null"일 수 있다.
제3 데이터 필드(SA)는 소스 주소에 대응하는 정보를 포함할 수 있다. 소스 주소는 제1 및 제2 I/O 디바이스들(101, 102) 또는 I/O 디바이스 제어 장치(110)의 메모리 주소를 나타낸다. 직접 데이터 통신의 경우, 소스 주소는 전송될 데이터가 저장되어 있는 메모리 주소일 수 있다. 예시적으로, 소스 주소는 주체 디바이스 및 통신 방향에 따라 타입이 달라질 수 있다.
예를 들어, 주체 디바이스가 스토리지 디바이스이고 통신 방향이 "Out"인 경우, 소스 주소는 스토리지 디바이스의 메모리 주소일 수 있다. 스토리지 디바이스가 가속화 디바이스로부터 데이터를 수신하는 경우, 주체 디바이스는 스토리지 디바이스이고 통신 방향은 "In"일 수 있다. 이 경우, 소스 주소는 가속화 디바이스의 메모리 주소일 수 있다. 주체 디바이스가 가속화 디바이스이고 통신 방향이 "Out"인 경우, 소스 주소는 가속화 디바이스의 메모리 주소일 수 있다.
따라서, 소스 주소는 스토리지 디바이스의 메모리 주소 타입에 대응하는 값(예를 들어, "10000")이거나, 가속화 디바이스의 메모리 주소 타입에 대응하는 값(예를 들어, "0xab00000")일 수 있다.
중간 데이터 처리의 경우, 소스 주소는 처리할 데이터가 저장된 메모리 주소일 수 있다. 예를 들어, I/O 디바이스 제어 장치(110)가 내부 메모리에 저장된 데이터를 처리하는 경우, 소스 주소는 내부 메모리(예를 들어, 중간 버퍼)의 주소일 수 있다.
제4 데이터 필드(TA)는 타겟 주소에 대응하는 정보를 포함할 수 있다. 타겟 주소는 제1 및 제2 I/O 디바이스들(101, 102) 또는 I/O 디바이스 제어 장치(110)의 메모리 주소를 나타낸다. 직접 데이터 통신의 경우, 타겟 주소는 전송된 데이터가 저장될 메모리 주소일 수 있다. 예시적으로, 타겟 주소는 소스 주소와 마찬가지로 주체 디바이스 및 통신 방향에 따라 타입이 달라질 수 있다.
중간 데이터 처리의 경우, 타겟 주소는 처리된 결과 데이터가 저장될 메모리 주소를 나타낼 수 있다. 예를 들어, 타겟 주소는 I/O 디바이스 제어 장치(110) 내부 메모리(예를 들어, 중간 버퍼)의 주소일 수 있다.
제5 데이터 필드(DL)는 데이터 길이에 대응하는 정보를 포함할 수 있다. 직접 데이터 통신의 경우, 데이터 길이는 전송될 데이터의 길이일 수 있다. 예를 들어, 데이터 길이는 "4KB"일 수 있다. 중간 데이터 처리의 경우, 데이터 길이는 처리할 데이터의 길이일 수 있다.
제6 데이터 필드(DI)는 의존성에 대응하는 정보를 포함할 수 있다. 의존성은 D2D 커맨드와 연관된 다른 D2D 커맨드(즉, 의존성 있는 D2D 커맨드)가 존재하는지 여부를 나타낸다. D2D 커맨드와 의존성 있는 D2D 커맨드가 존재하는 경우, D2D 커맨드가 수행된 이후 의존성 있는 D2D 커맨드가 수행될 수 있다. 예시적으로, 의존성 있는 D2D 커맨드가 존재하지 않는 경우, D2D 커맨드는 의존성에 대응하는 값을 포함하지 않을 수 있다(예를 들어, 의존성에 대응하는 값이 "Null"). 의존성 있는 D2D 커맨드가 존재하는 경우, D2D 커맨드들은 의존성에 대응하는 값(예를 들어, "Null"이 아닌 값)을 포함할 수 있다.
직접 데이터 통신 및 중간 데이터 처리를 위한 복수개의 D2D 커맨드가 생성되는 경우, 수행되어야 할 D2D 커맨드들의 순서는 의존성에 대응하는 값으로부터 결정될 수 있다. 예를 들어, 의존성에 대응하는 값이 "1"인 경우, D2D 커맨드는 연관된 D2D 커맨드들 중 첫 번째로 수행될 수 있으며, 의존성 있는 D2D 커맨드가 존재할 수 있다. 의존성에 대응하는 값이 "2"인 경우, D2D 커맨드는 연관된 D2D 커맨드들 중 두 번째로 수행될 수 있으며, 의존성 있는 D2D 커맨드가 존재할 수 있다. 의존성에 대응하는 값이 "0"인 경우, D2D 커맨드는 연관된 D2D 커맨드들 중 마지막으로 수행될 수 있으며, 의존성 있는 D2D 커맨드가 존재하지 않을 수 있다.
본 발명의 실시 예에 따른 의존성에 대응하는 값을 나타내는 방법은 상술한 예시에 한정되지 않으며, 본 발명의 사상을 벗어나지 않는 범위에서 다양한 방법으로 구현될 수 있다. 예를 들어, D2D 커맨드는 의존성이 있는 D2D 커맨드를 가리키는 포인터 값을 의존성에 대응하는 값으로 포함할 수 있다.
제7 데이터 필드(EI)는 기타 정보에 대응하는 정보를 포함할 수 있다. 기타 정보는 직접 데이터 통신 및 중간 데이터 처리 동작에 있어서 필요한 그 밖의 데이터를 나타낸다. 예시적으로, 기타 정보는 TCP/IP의 정보를 포함할 수 있다. 직접 데이터 통신에 의해 네트워크 디바이스가 데이터를 수신하는 경우, 네트워크 디바이스는 수신한 데이터를 서버 시스템(100) 외부로 전송하기 위해 TCP/IP의 정보가 필요할 수 있다. 기타 정보에 TCP/IP의 정보가 포함된 경우, 네트워크 디바이스는 TCP/IP의 정보를 이용하여 외부로 전송할 패킷(packet)의 헤더(header)를 생성할 수 있다. 중간 데이터 처리를 위한 D2D 커맨드의 경우, 기타 정보에 대응하는 값은 "Null"일 수 있다.
제1 D2D 커맨드(CMD1)는 SSD에서 GPU로 데이터가 전송되는 경우의 생성되는 D2D 커맨드의 예시를 보여준다. 제1 D2D 커맨드(CMD1)는 주체 디바이스, 통신 방향, 소스 주소, 타겟 주소, 데이터 길이, 의존성 및 기타 정보에 대응하는 값으로 각각 "SSD", "Out", "LBA", "GPU의 메모리 주소", "4KB", "Null" 값을 포함할 수 있다. 제1 D2D 커맨드(CMD1)는 SSD가 자신의 메모리 주소로부터 "4KB"의 데이터를 인출하고, 인출된 데이터를 GPU의 메모리 주소에 저장하는 동작을 나타낸다.
I/O 디바이스 제어 장치(110)는 I/O 디바이스 제어 장치 드라이버(120)로부터 제1 D2D 커맨드(CMD1)를 수신할 수 있다. I/O 디바이스 제어 장치(110)는 제1 D2D 커맨드(CMD1)에 기초하여 SSD를 제어할 수 있다. 이에 따라, SSD는 내부 메모리 주소에 저장된 "4KB"의 데이터를 인출하고, 인출된 데이터를 GPU의 메모리 주소에 저장할 수 있다.
제2 D2D 커맨드(CMD2) 및 제3 D2D 커맨드(CMD3)는 SSD에서 NIC로 데이터를 전송하는 경우, 생성되는 D2D 커맨드들의 예시를 보여준다. SSD에서 NIC로 직접 데이터 통신이 수행되는 경우, D2D 커맨드 생성기(122)는 두 개의 D2D 커맨드들을 생성할 수 있다. 일반적으로, 네트워크 디바이스의 메모리는 외부 디바이스에서 자유롭게 접근할 수 없기 때문에 SSD는 NIC의 메모리로 접근하여 인출한 데이터를 바로 저장할 수 없다. 이에 따라, SSD는 인출한 데이터를 I/O 디바이스 제어 장치(110)의 메모리(예를 들어, 중간 버퍼)에 저장하고, NIC는 I/O 디바이스 제어 장치(110)의 메모리(예를 들어, 중간 버퍼)에 저장된 데이터를 가져옴으로써, SSD에서 NIC로의 직접 데이터 통신이 수행될 수 있다. 즉, D2D 커맨드 생성기(122)는 SSD에 대한 제2 D2D 커맨드(CMD2) 및 NIC에 대한 제3 D2D 커맨드(CMD3)를 각각 생성할 수 있다.
제2 D2D 커맨드(CMD2)는 주체 디바이스, 통신 방향, 소스 주소, 타겟 주소, 데이터 길이, 의존성 및 기타 정보에 대응하는 값으로 "SSD", "Out", "LBA", "중간 버퍼의 메모리 주소", "3KB", "1", "Null"을 포함한다. 제2 D2D 커맨드(CMD2)는 SSD가 자신의 메모리 주소로부터 "3KB"의 데이터를 인출하고 중간 버퍼의 메모리 주소에 저장하는 동작을 나타낸다. 또한, 제2 D2D 커맨드(CMD2)는 의존성 있는 D2D 커맨드가 존재함을 나타낸다.
제3 D2D 커맨드(CMD3)는 주체 디바이스, 통신 방향, 소스 주소, 타겟 주소, 데이터 길이, 의존성 및 기타 정보에 대응하는 값으로 "NIC", "In", "중간 버퍼의 메모리 주소", "Null", "3KB", "0", "TCP/IP 정보"를 포함한다. 제3 D2D 커맨드(CMD3)는 NIC가 중간 버퍼의 메모리 주소로부터 "3KB"의 데이터를 인출하고, 인출된 데이터 및 TCP/IP의 정보로부터 패킷을 생성하여 서버 시스템(100) 외부로 패킷을 전송하는 동작을 나타낸다. 또한, 제3 D2D 커맨드(CMD3)는 의존성 있는 D2D 커맨드가 존재하지 않음을 나타낸다.
I/O 디바이스 제어 장치(110)는 I/O 디바이스 제어 장치 드라이버(120)로부터 제2 D2D 커맨드(CMD2) 및 제3 D2D 커맨드(CMD3)를 수신할 수 있다. I/O 디바이스 제어 장치(110)는 제2 D2D 커맨드(CMD2)에 기초하여 SSD를 제어할 수 있다. 이에 따라, SSD는 내부 메모리 주소에 저장된 "3KB"의 데이터를 인출하고, 인출한 데이터를 중간 버퍼의 메모리 주소에 저장할 수 있다. I/O 디바이스 제어 장치(110)는 제3 D2D 커맨드(CMD3)에 기초하여 NIC를 제어할 수 있다. 이에 따라, NIC는 중간 버퍼의 메모리 주소에 저장된 "3KB"의 데이터를 인출하고, TCP/IP의 정보에 따라 패킷을 생성한 후, 인출된 데이터를 서버 시스템(100) 외부로 전송할 수 있다.
제2 D2D 커맨드(CMD2)의 의존성에 대응하는 값이 "1"이므로, I/O 디바이스 제어 장치(110)는 제2 D2D 커맨드(CMD2)와 연관된 제3 D2D 커맨드(CMD3)가 존재함을 확인할 수 있다. 따라서, I/O 디바이스 제어 장치(110)는 제2 D2D 커맨드(CMD2)를 먼저 수행한 후, 제3 D2D 커맨드(CMD3)를 수행할 수 있다.
제4 내지 제6 D2D 커맨드들(CMD4~CMD6)은 SSD에서 NIC로 데이터 전송 시 중간 데이터 처리를 수행하는 경우, D2D 커맨드들의 예시를 나타낸다. 직접 데이터 통신 및 중간 데이터 처리가 수행되는 경우, D2D 커맨드 생성기(122)는 세 개의 D2D 커맨드들을 생성할 수 있다.
제4 D2D 커맨드(CMD4)는 주체 디바이스, 통신 방향, 소스 주소, 타겟 주소, 데이터 길이, 의존성 및 기타 정보에 대응하는 값으로 "SSD", "Out", "LBA", "중간 버퍼의 제1 메모리 주소(b1)", "4KB", "1", "Null"을 포함한다. 제4 D2D 커맨드(CMD4)는 SSD가 자신의 메모리 주소로부터 "4KB"의 데이터를 인출하고, 중간 버퍼의 제1 메모리 주소(b1)에 저장하는 동작을 나타낸다. 또한, 제4 D2D 커맨드(CMD4)는 제4 내지 제6 D2D 커맨드들(CMD4~CMD6) 중 첫 번째로 수행되며, 의존성 있는 D2D 커맨드가 존재함을 나타낸다.
제5 D2D 커맨드(CMD5)는 데이터 처리 종류, 통신 방향, 소스 주소, 타겟 주소, 데이터 길이, 의존성 및 기타 정보에 대응하는 값으로 "MD5 hash", "Null", "중간 버퍼의 제1 메모리 주소(b1)", "중간 버퍼의 제2 메모리 주소(b2)", "4KB", "2", "Null"을 포함한다. 제5 D2D 커맨드(CMD5)는 I/O 디바이스 제어 장치(110)가 중간 버퍼의 제1 메모리 주소(b1)로부터 "4KB"의 데이터를 인출하고, "MD5 hash" 연산을 수행한 후, 중간 버퍼의 제2 메모리 주소(b2)에 저장하는 동작을 나타낸다. 또한, 제5 D2D 커맨드(CMD5)는 제4 내지 제6 D2D 커맨드들(CMD4~CMD6) 중 두 번째로 수행되며, 의존성 있는 D2D 커맨드가 존재함을 나타낸다.
제6 D2D 커맨드(CMD6)는 주체 디바이스, 통신 방향, 소스 주소, 타겟 주소, 데이터 길이, 의존성 및 기타 정보에 대응하는 값으로 "NIC", "In", "중간 버퍼의 제2 메모리 주소(b2)", "Null", "2KB", "0", "TCP/IP의 정보"를 포함한다. 제6 D2D 커맨드(CMD6)는 NIC가 중간 버퍼의 제2 메모리 주소(b2)로부터 "2KB"의 데이터를 인출하고, 인출된 데이터 및 TCP/IP의 정보로부터 패킷을 생성하여 서버 시스템(100) 외부로 전송하는 동작을 나타낸다. 여기서, "2KB"의 데이터는 제5 D2D 커맨드(CMD5)에 따른 연산 동작으로 생성된 결과 데이터일 수 있다. 또한, 제6 D2D 커맨드(CMD6)는 제4 내지 제6 D2D 커맨드들(CMD4~CMD6) 중 마지막으로 수행되며, 의존성 있는 D2D 커맨드가 존재하지 않음을 나타낸다.
I/O 디바이스 제어 장치(110)는 I/O 디바이스 제어 장치 드라이버(120)로부터 제4 내지 제6 D2D 커맨드들(CMD4~CMD6)을 수신할 수 있다. I/O 디바이스 제어 장치(110)는 제4 D2D 커맨드(CMD4)에 기초하여 SSD를 제어할 수 있다. 이에 따라, SSD는 내부 메모리 주소에 저장된 "4KB"의 데이터를 인출하고, 인출한 데이터를 중간 버퍼의 제1 메모리 주소(b1)에 저장할 수 있다. I/O 디바이스 제어 장치(110)는 제5 D2D 커맨드(CMD5)에 기초하여 중간 버퍼의 제1 메모리 주소(b1)에 저장된 데이터를 대해 "MD5 hash" 연산을 수행할 수 있다. I/O 디바이스 제어 장치(110)는 처리된 결과 데이터를 중간 버퍼의 제2 메모리 주소(b2)에 저장할 수 있다. I/O 디바이스 제어 장치(110)는 제6 D2D 커맨드(CMD6)에 기초하여 NIC를 제어할 수 있다. 이에 따라, NIC는 중간 버퍼의 제2 메모리 주소(b2)에 저장된 "2KB"의 데이터를 인출하고, TCP/IP의 정보에 따라 패킷을 생성하여 서버 시스템(100) 외부로 전송할 수 있다.
I/O 디바이스 제어 장치(110)는 제4 내지 제6 D2D 커맨드들(CMD4~CMD6)의 의존성에 기초하여 수행 순서를 결정할 수 있다. 제4 D2D 커맨드(CMD4) 및 제5 D2D 커맨드(CMD5)의 의존성에 대응하는 값이 각각 "1" 및 "2"이므로, I/O 디바이스 제어 장치(110)는 제4 D2D 커맨드(CMD4)를 첫 번째로 수행하고 제5 D2D 커맨드(CMD5)를 두 번째로 수행할 수 있다. 또한, 제6 D2D 커맨드(CMD6)의 의존성에 대응하는 값이 "0"이므로, I/O 디바이스 제어 장치(110)는 제6 D2D 커맨드(CMD6)를 마지막에 수행할 수 있다.
상술한 바와 같이, 본 발명의 실시 예에 따른 I/O 디바이스 제어 장치 드라이버(120)는 미리 정해진 규칙 또는 형식에 따라 D2D 커맨드를 생성하고 I/O 디바이스 제어 장치(110)로 전달할 수 있다. 본 발명의 실시 예에 따른 D2D 커맨드는 도 4에 도시된 바에 한정되지 않으며, 본 발명의 사상을 벗어나지 않는 범위에서 다양한 방법으로 생성될 수 있다. 예를 들어, D2D 커맨드는 도 4에 도시된 정보 중 일부 정보만을 포함하는 형태로 생성될 수 있다.
도 5는 도 3의 I/O 디바이스 제어 장치 드라이버의 동작을 보여주는 순서도이다. 도 1 내지 도 3 및 도 5를 참조하면, S111 단계에서, I/O 디바이스 제어 장치 드라이버(120)는 직접 데이터 통신 및 중간 데이터 처리 명령을 수신할 수 있다. 예시적으로, 애플리케이션(14)이 직접 데이터 통신 및 중간 데이터 처리 함수를 호출하는 경우, I/O 디바이스 제어 장치 드라이버(120)는 직접 데이터 통신 및 중간 데이터 처리 명령을 수신할 수 있다.
I/O 디바이스 제어 장치 드라이버(120)는 애플리케이션(14)으로부터 직접 데이터 통신과 연관된 제1 및 제2 I/O 디바이스들(101, 102)의 파일 디스크립터를 수신할 수 있다. 예를 들어, 스토리지 디바이스가 직접 데이터 통신과 연관되는 경우, I/O 디바이스 제어 장치 드라이버(120)는 스토리지 디바이스가 저장하고 있는 파일(예를 들어, 직접 데이터 통신으로 전송하는 데이터)의 파일 디스크립터를 애플리케이션(14)으로부터 수신할 수 있다. 네트워크 디바이스가 직접 데이터 통신과 연관되는 경우, I/O 디바이스 제어 장치 드라이버(120)는 네트워크 디바이스로 연결된 소켓의 파일 디스크립터를 애플리케이션(14)으로부터 수신할 수 있다.
S112 단계에서, I/O 디바이스 제어 장치 드라이버(120)는 직접 데이터 통신과 연관된 제1 및 제2 I/O 디바이스들(101, 102)의 I/O 디바이스 구동 정보를 확인할 수 있다. 예시적으로, I/O 디바이스 제어 장치 드라이버(120)는 수신된 파일 디스크립터에 기초하여 운영체제(15)에 저장된 I/O 디바이스 구동 정보를 확인할 수 있다. 예를 들어, I/O 디바이스 제어 장치 드라이버(120)는 운영체제(15)에 저장된 구조체로부터 스토리지 디바이스의 파일 정보(예를 들어, 메모리 주소, 데이터 크기 등)를 확인할 수 있다. I/O 디바이스 제어 장치 드라이버(120)는 운영체제(15)에 저장된 구조체로부터 네트워크 디바이스의 소켓 정보(예를 들어, TCP/IP 주소 등)를 확인할 수 있다.
S113 단계에서, I/O 디바이스 제어 장치 드라이버(120)는 I/O 디바이스 구동 정보에 기초하여 D2D 커맨드를 생성할 수 있다. 예시적으로, D2D 커맨드는 주체 디바이스 또는 데이터 처리 종류, 통신 방향, 소스 주소, 타겟 주소, 데이터 길이, 의존성, 및 기타 정보를 포함할 수 있다.
I/O 디바이스 제어 장치 드라이버(120)는 직접 데이터 통신과 연관된 I/O 디바이스에 따라 복수개의 D2D 커맨드들을 생성할 수 있다. 예시적으로, 메모리 접근이 불가능한 I/O 디바이스가 직접 데이터 통신과 연관된 경우, I/O 디바이스 제어 장치 드라이버(120)는 복수개의 D2D 커맨드들을 생성할 수 있다.
S114 단계에서, I/O 디바이스 제어 장치 드라이버(120)는 생성한 D2D 커맨드를 I/O 디바이스 제어 장치(110)로 전달할 수 있다. 예시적으로, I/O 디바이스 제어 장치 드라이버(120)는 생성한 D2D 커맨드를 I/O 디바이스 제어 장치(110)의 커맨드 큐(command queue) 로 전달할 수 있다. I/O 디바이스 제어 장치(110)는 커맨드 큐에 저장된 D2D 커맨드를 확인하고, D2D 커맨드에 따라 제1 및 제2 I/O 디바이스들(101, 102)을 제어할 수 있다.
도 6은 도 1의 I/O 디바이스 제어 장치의 하나의 실시 예를 나타내는 블록도이다. 도 1, 도 2 및 도 6을 참조하면, I/O 디바이스 제어 장치(110)는 커맨드 큐(111)(command queue), 커맨드 파서(112)(command parser), 및 오케스트레이터(113)(orchestrator)를 포함할 수 있다.
커맨드 큐(111)는 D2D 커맨드를 수신하고 저장하기 위한 메모리 영역일 수 있다. 예시적으로, I/O 디바이스 제어 장치 드라이버(120)는 D2D 커맨드를 생성한 후, 생성한 D2D 커맨드를 커맨드 큐(111)에 저장할 수 있다. D2D 커맨드가 복수개인 경우, I/O 디바이스 제어 장치 드라이버(120)는 수행 순서에 기초하여 D2D 커맨드를 커맨드 큐(111)에 저장할 수 있다. 또는, I/O 디바이스 제어 장치 드라이버(120)는 수행 순서와 관계 없이 D2D 커맨드를 커맨드 큐(111)에 저장할 수 있다. 수행 순서와 관계 없이 복수개의 D2D 커맨드들이 커맨드 큐(111)에 저장되더라도, I/O 디바이스 제어 장치(110)는 D2D 커맨드들에 포함된 의존성에 대응하는 값들을 확인하여 복수개의 D2D 커맨드들을 순차적으로 수행할 수 있다.
커맨드 파서(112)는 D2D 커맨드를 해석하여 직접 데이터 통신 및 중간 데이터 처리 명령을 수행하기 위해 필요한 정보를 확인할 수 있다. 예시적으로, 커맨드 파서(112)는 직접 데이터 통신을 위한 제1 및 제2 I/O 디바이스들(101, 102)의 목록, 전송할 데이터의 메모리 주소, 전송된 데이터를 저장할 메모리 주소, 전송할 데이터 길이, 의존성 등을 확인할 수 있다. 커맨드 파서(112)는 중간 데이터 처리를 위한 데이터 처리 종류, 처리할 데이터의 메모리 주소, 처리된 데이터를 저장할 메모리 주소, 처리할 데이터 길이, 의존성 등을 확인할 수 있다. 커맨드 파서(112)는 해석된 정보를 오케스트레이터(113)로 전달할 수 있다.
오케스트레이터(113)는 전달받은 정보를 이용하여 I/O 디바이스 커맨드를 생성할 수 있다. I/O 디바이스 커맨드는 제1 및 제2 I/O 디바이스들(101, 102)을 제어하기 위한 커맨드일 수 있다. 예시적으로, 오케스트레이터(113)는 직접 데이터 통신과 연관된 제1 및 제2 I/O 디바이스들(101, 102)이 요구하는 표준 디바이스 프로토콜에 따라 I/O 디바이스 커맨드를 생성할 수 있다. 예를 들어, 직접 데이터 통신과 연관되는 I/O 디바이스가 PCIe 기반의 스토리지 디바이스인 경우, 스토리지 디바이스는 NVMe(Non Volatile Memory Express) 표준 인터페이스에 기초하여 동작할 수 있다. 따라서, 오케스트레이터(113)는 NVMe 표준 디바이스 프로토콜에 따라 I/O 디바이스 커맨드를 생성할 수 있다.
오케스트레이터(113)는 생성한 I/O 디바이스 커맨드를 대응하는 I/O 디바이스로 전송하여 I/O 디바이스를 제어할 수 있다. 제1 및 제2 I/O 디바이스들(101, 102)은 I/O 디바이스 커맨드에 응답하여 대응하는 동작을 수행할 수 있다. 제1 및 제2 I/O 디바이스들(101, 102)은 I/O 디바이스 커맨드에 따른 동작을 수행한 후, 동작이 정상적으로 수행되었는지 여부를 I/O 디바이스 제어 장치(110)로 전송할 수 있다. 예시적으로, 제1 및 제2 I/O 디바이스들(101, 102)은 오케스트레이터(113) 내부의 큐(queue)(미도시)에 동작 수행에 대한 정보를 저장할 수 있다. 오케스트레이터(113)는 내부의 큐에 저장된 데이터로부터 I/O 디바이스가 정상적으로 동작을 수행했는지 여부를 확인할 수 있다.
오케스트레이터(113)는 의존성 정보에 기초하여 I/O 디바이스 커맨드를 생성할 수 있다. 예시적으로, 오케스트레이터(113)는 의존성에 대응하는 값으로부터 첫 번째로 수행되어야 할 I/O 디바이스 커맨드를 생성하고, 생성된 커맨드를 대응하는 I/O 디바이스로 전송할 수 있다. 오케스트레이터(113)는 I/O 디바이스로부터 I/O 디바이스 커맨드에 따른 동작이 정상적으로 수행된 것을 확인한 후, 두 번째로 수행되어야 할 I/O 디바이스 커맨드를 생성할 수 있다.
이와 같이, 오케스트레이터(113)는 의존성 정보에 기초하여 I/O 디바이스 커맨드를 순차적으로 생성함으로써 제1 및 제2 I/O 디바이스들(101, 102)을 순차적으로 제어할 수 있다. 제1 및 제2 I/O 디바이스들(101, 102)이 I/O 디바이스 커맨드에 응답하여 대응하는 동작을 수행하는 경우, 애플리케이션(14)이 요청한 직접 데이터 통신 및 중간 데이터 처리 동작이 완료될 수 있다.
도 7은 도 6의 I/O 디바이스 제어 장치의 동작에 대한 하나의 예시를 보여주는 순서도이다. 도 7은 제1 내지 제2 I/O 디바이스들(101, 102) 사이의 직접 데이터 통신에 대한 예시를 보여준다. 이하에서는 제1 I/O 디바이스(101)는 스토리지 디바이스이고, 제2 I/O 디바이스(102)는 가속화 디바이스인 것으로 가정한다.
도 1, 도2, 도 6 및 도 7을 참조하면, S121 단계에서, I/O 디바이스 제어 장치(110)는 D2D 커맨드(CMD)를 수신할 수 있다. 예시적으로, I/O 디바이스 제어 장치(110)는 I/O 디바이스 제어 장치 드라이버(120)로부터 D2D 커맨드(CMD)를 수신할 수 있다. I/O 디바이스 제어 장치(110)는 D2D 커맨드(CMD)를 해석하여 직접 데이터 통신에 필요한 정보 등을 확인할 수 있다. 예를 들어, I/O 디바이스 제어 장치(110)는 도 4의 제1 D2D 커맨드(CMD1)를 수신할 수 있다. I/O 디바이스 제어 장치(110)는 도 4의 제1 D2D 커맨드(CMD1)를 해석하여 주체 디바이스, 통신 방향, 소스 주소, 타겟 주소, 데이터 길이, 의존성 등에 대한 정보를 확인할 수 있다.
S122 단계에서, I/O 디바이스 제어 장치(110)는 확인한 정보에 기초하여 I/O 디바이스 커맨드(CMD_D)를 생성할 수 있다. 예를 들어, I/O 디바이스 제어 장치(110)는 스토리지 디바이스에 대한 I/O 디바이스 커맨드(CMD_D)를 생성할 수 있다. 스토리지 디바이스가 NVMe 표준 인터페이스를 기반으로 동작하는 경우, I/O 디바이스 제어 장치(110)는 NVMe 표준 디바이스 프로토콜에 따라 I/O 디바이스 커맨드(CMD_D)를 생성할 수 있다.
S123 단계에서, I/O 디바이스 제어 장치(110)는 생성한 I/O 디바이스 커맨드(CMD_D)를 스토리지 디바이스로 전송할 수 있다. S124 단계에서, 스토리지 디바이스는 I/O 디바이스 커맨드(CMD_D)에 응답하여 메모리에 저장되어 있는 데이터를 인출할 수 있다. 예시적으로, 스토리지 디바이스는 D2D 커맨드(CMD)의 소스 주소에 대응하는 메모리 주소로부터 데이터를 인출할 수 있다. S125 단계에서, 스토리지 디바이스는 인출한 데이터를 가속화 디바이스에 저장할 수 있다. 예시적으로, 스토리지 디바이스는 인출한 데이터를 D2D 커맨드(CMD)의 타겟 주소에 대응하는 메모리 주소에 저장할 수 있다.
S121 내지 S125 단계의 동작들이 수행되는 경우, 스토리지 디바이스에 저장된 데이터는 가속화 디바이스로 전송될 수 있다. 따라서, I/O 디바이스 제어 장치(110)의 동작에 따라 제1 및 제2 I/O 디바이스들(101, 102) 간의 직접 데이터 통신이 수행될 수 있다.
도 8은 도 6의 I/O 디바이스 제어 장치의 동작을 보여주는 순서도이다. 도 1, 도 2, 도 6 및 도 8을 참조하면, S131 단계에서, I/O 디바이스 제어 장치(110)는 D2D 커맨드를 수신할 수 있다. 예시적으로, I/O 디바이스 제어 장치(110)는 I/O 디바이스 제어 장치 드라이버(120)로부터 D2D 커맨드를 수신할 수 있다. S132 단계에서, I/O 디바이스 제어 장치(110)는 수신한 D2D 커맨드를 해석할 수 있다. I/O 디바이스 제어 장치(110)는 D2D 커맨드를 해석하여 제1 및 제2 I/O 디바이스들(101, 102) 간의 직접 데이터 통신에 필요한 정보들을 확인할 수 있다. 예시적으로, 복수개의 D2D 커맨드들이 존재하는 경우, I/O 디바이스 제어 장치(110)는 복수개의 D2D 커맨드들을 해석하여 D2D 커맨드들 사이의 의존성을 확인할 수 있다.
S133 단계에서, I/O 디바이스 제어 장치(110)는 D2D 커맨드에 대응하는 I/O 디바이스 커맨드를 생성할 수 있다. 예시적으로, 복수개의 D2D 커맨드들이 존재하는 경우, I/O 디바이스 제어 장치(110)는 의존성에 기초하여 첫 번째로 수행되어야 할 D2D 커맨드에 대응하는 I/O 디바이스 커맨드를 생성할 수 있다.
S134 단계에서, I/O 디바이스 제어 장치(110)는 생성된 I/O 디바이스 커맨드를 I/O 디바이스로 전송함으로써 I/O 디바이스를 제어할 수 있다. 예시적으로, I/O 디바이스 커맨드는 대응하는 D2D 커맨드의 소스 주소 및 타겟 주소를 포함할 수 있다. I/O 디바이스 커맨드를 수신한 I/O 디바이스는 소스 주소로부터 데이터를 인출하고, 인출된 데이터를 타겟 주소에 저장할 수 있다. 이 경우, 소스 주소 및 타겟 주소는 각각 다른 I/O 디바이스의 메모리 주소일 수 있다.
S135 단계에서, I/O 디바이스 제어 장치(110)는 별도의 의존성 있는 D2D 커맨드가 존재하는지 여부를 판별할 수 있다. 예식적으로, I/O 디바이스 제어 장치(110)는 의존성에 대응하는 값에 기초하여 의존성 있는 D2D 커맨드가 존재하는지 여부를 판별할 수 있다. 의존성 있는 D2D 커맨드가 존재하는 경우, I/O 디바이스 제어 장치(110)는 의존성 있는 D2D 커맨드에 대응하는 I/O 디바이스 커맨드를 생성할 수 있다. 예를 들어, 직접 데이터 통신에 있어서 복수개의 D2D 커맨드들이 생성되는 경우, 의존성 있는 D2D 커맨드가 존재할 수 있다. 의존성 있는 D2D 커맨드가 존재하지 않는 경우, I/O 디바이스 제어 장치(110)는 동작을 종료할 수 있다.
I/O 디바이스 제어 장치 드라이버(120)로부터 수신된 D2D 커맨드들이 모두 처리된 경우, I/O 디바이스 제어 장치(110)는 직접 데이터 통신이 정상적으로 수행되었는지 여부를 I/O 디바이스 제어 장치 드라이버(120)로 전달할 수 있다.
본 발명의 실시 예에 따른 I/O 디바이스 제어 장치(110)의 동작 방법은 도 8에 도시된 바에 한정되지 않는다. 예시적으로, 복수개의 D2D 커맨드들이 존재하는 경우, S132 단계에서, I/O 디바이스 제어 장치(110)는 복수개의 D2D 커맨드들 중 하나의 D2D 커맨드만을 해석할 수 있다. 이 경우, S135 단계에서, 의존성 있는 D2D 커맨드가 존재하는 경우, I/O 디바이스 제어 장치(110)는 다시 S132 단계의 동작을 수행할 수 있다. I/O 디바이스 제어 장치(110)는 의존성 있는 D2D 커맨드를 해석한 후, S133 단계에서, 대응하는 I/O 디바이스 커맨드를 생성할 수 있다.
도 9는 도 1의 I/O 디바이스 제어 장치의 하나의 실시 예를 나타내는 블록도이다. 도 9를 참조하면, I/O 디바이스 제어 장치(210)는 커맨드 큐(211), 커맨드 파서(212), 오케스트레이터(213) 및 중간 버퍼(214)를 포함할 수 있다. 커맨드 큐(211), 커맨드 파서(212) 및 오케스트레이터(213)는 도 6의 커맨드 큐(111), 커맨드 파서(112) 및 오케스트레이터(113)와 유사하므로 중복되는 상세한 설명은 생략된다.
중간 버퍼(214)는 I/O 디바이스의 메모리 접근이 불가능한 경우에 이용되는 메모리 영역일 수 있다. 예시적으로, 데이터를 수신하는 I/O 디바이스의 메모리 접근이 불가능한 경우, 데이터를 송신하는 I/O 디바이스는 데이터를 인출하고, 인출된 데이터를 중간 버퍼(214)에 저장할 수 있다. 데이터를 수신하는 I/O 디바이스는 중간 버퍼(214)에 저장된 데이터를 인출하고, 인출된 데이터를 자신의 메모리에 저장할 수 있다.
도 10은 도 9의 I/O 디바이스 제어 장치의 동작에 대한 하나의 예시를 보여주는 순서도이다. 도 10은 제1 내지 제2 I/O 디바이스들(101, 102) 중 메모리 접근이 불가능한 I/O 디바이스가 존재하는 경우, 직접 데이터 통신이 수행되는 예시를 보여준다. 이하에서는 제1 I/O 디바이스(101)는 스토리지 디바이스이고, 제2 I/O 디바이스(102)는 네트워크 디바이스인 것으로 가정한다.
도 1, 도 2, 도 9 및 도 10을 참조하면, S211 단계에서, I/O 디바이스 제어 장치(210)는 제2 D2D 커맨드(CMD2) 및 제3 D2D 커맨드(CMD3)를 수신할 수 있다. 제2 D2D 커맨드(CMD2) 및 제3 D2D 커맨드(CMD3)는 I/O 디바이스 제어 장치 드라이버(120)로부터 전송될 수 있다. 제2 D2D 커맨드(CMD2)의 주체 디바이스는 스토리지 디바이스일 수 있고, 제3 D2D 커맨드(CMD3)의 주체 디바이스는 네트워크 디바이스일 수 있다. 예를 들어, 제2 D2D 커맨드(CMD2) 및 제3 D2D 커맨드(CMD3)는 도 4에 도시된 제2 D2D 커맨드(CMD2) 및 제3 D2D 커맨드(CMD3)일 수 있다. I/O 디바이스 제어 장치(210)는 제2 D2D 커맨드(CMD2) 및 제3 D2D 커맨드(CMD3)를 해석하여 I/O 디바이스 커맨드를 생성하기 위해 필요한 정보를 획득할 수 있다.
S212 단계에서, I/O 디바이스 제어 장치(210)는 제1 I/O 디바이스 커맨드(CMD_D1)를 생성할 수 있다. I/O 디바이스 제어 장치(210)는 의존성에 대응하는 값에 기초하여 제1 I/O 디바이스 커맨드(CMD_D1)를 먼저 생성할 수 있다. 제1 I/O 디바이스 커맨드(CMD_D1)는 스토리지 디바이스가 메모리에 저장된 데이터를 인출하고, 인출된 데이터를 중간 버퍼(214)에 저장하도록 하는 커맨드일 수 있다. I/O 디바이스 제어 장치(210)는 스토리지 디바이스가 요구하는 표준 프로토콜에 따라 제1 I/O 디바이스 커맨드(CMD_D1)를 생성할 수 있다.
S213 단계에서, I/O 디바이스 제어 장치(210)는 생성된 제1 I/O 디바이스 커맨드(CMD_D1)를 스토리지 디바이스로 전송할 수 있다. S214 단계에서, 스토리지 디바이스는 메모리에 저장된 데이터를 인출할 수 있다. 예시적으로, 스토리지 디바이스는 제1 D2D 커맨드(CMD1)의 소스 주소로부터 데이터를 인출할 수 있다. S215 단계에서, 스토리지 디바이스는 인출된 데이터를 I/O 디바이스 제어 장치(210)에 저장할 수 있다. 인출된 데이터는 I/O 디바이스 제어 장치(210)의 중간 버퍼(214)에 저장될 수 있다.
S216 단계에서, I/O 디바이스 제어 장치(210)는 두 번째로 수행되어야 할 제2 I/O 디바이스 커맨드(CMD_D2)를 생성할 수 있다. 제2 I/O 디바이스 커맨드(CMD_D2)는 네트워크 디바이스가 중간 버퍼(214)에 저장된 데이터를 인출하고, 인출된 데이터를 서버 시스템(100) 외부로 전송하도록 하는 커맨드일 수 있다. 제2 I/O 디바이스 커맨드(CMD_D2)는 외부로 데이터를 전송하기 위한 TCP/IP의 정보를 포함할 수 있다. I/O 디바이스 제어 장치(210)는 네트워크 디바이스가 요구하는 표준 프로토콜에 따라 제2 I/O 디바이스 커맨드(CMD_D2)를 생성할 수 있다.
S217 단계에서, I/O 디바이스 제어 장치(210)는 생성된 제2 I/O 디바이스 커맨드(CMD_D2)를 네트워크 디바이스로 전송할 수 있다. S218 단계에서, 네트워크 디바이스는 I/O 디바이스 제어 장치(210)에 저장된 데이터를 인출할 수 있다. 예시적으로, 네트워크 디바이스는 제2 D2D 커맨드(CMD2)의 소스 주소(얘를 들어, 중간 버퍼(214)의 메모리 주소)에 저장된 데이터를 인출할 수 있다. S219 단계에서, 네트워크 디바이스는 서버 시스템(100) 외부로 전송할 패킷을 생성할 수 있다. 예시적으로, 생성된 패킷은 인출된 데이터 및 TCP/IP의 정보를 포함할 수 있다. S21a 단계에서, 네트워크 디바이스는 생성한 패킷을 서버 시스템(100) 외부로 전송할 수 있다.
S211 내지 S21a 단계의 동작들이 수행되는 경우, 스토리지 디바이스에 저장된 데이터가 네트워크 디바이스로 전송되어 서버 시스템(100) 외부로 전송될 수 있다. 따라서, 본 발명의 실시 예에 따른 I/O 디바이스 제어 장치(210)는 메모리 접근이 불가능한 I/O 디바이스가 존재하는 경우에도 제1 및 제2 I/O 디바이스들(101, 102) 사이의 직접 데이터 통신을 수행할 수 있다.
직접 데이터 통신을 수행하는 점에서 도 9의 I/O 디바이스 제어 장치(210)의 동작들은 도 6의 I/O 디바이스 제어 장치(110)의 동작들과 유사하다. 따라서, 도 9의 I/O 디바이스 제어 장치(210)의 동작 순서는 도 8에 도시된 동작 순서들과 유사하므로 상세한 설명은 생략된다.
도 11은 도 1의 I/O 디바이스 제어 장치의 하나의 실시 예를 나타내는 블록도이다. 도 11을 참조하면, I/O 디바이스 제어 장치(310)는 커맨드 큐(311), 커맨드 파서(312), 오케스트레이터(313), 중간 버퍼(314) 및 데이터 처리기(315)를 포함할 수 있다. 커맨드 큐(311), 커맨드 파서(312), 오케스트레이터(313) 및 중간 버퍼(314)는 도 9의 커맨드 큐(211), 커맨드 파서(212), 오케스트레이터(213) 및 중간 버퍼(214)와 유사하므로 중복되는 상세한 설명은 생략된다.
직접 데이터 통신 및 중간 데이터 처리가 필요한 경우, 처리될 데이터는 중간 버퍼(314)에 저장될 수 있다.
데이터 처리기(315)는 중간 버퍼(314)에 저장된 데이터를 처리할 수 있다. 예시적으로, 중간 데이터 처리를 요구하는 D2D 커맨드는 커맨드 큐(311)를 통해 전달될 수 있다. 커맨드 파서(312)는 D2D 커맨드를 해석하여 중간 데이터 처리에 필요한 정보를 오케스트레이터(313)로 전달할 수 있다. 예를 들어, 커맨드 파서(312)는 도 4의 제5 D2D 커맨드(CMD5)를 해석하여 데이터 처리 종류, 중간 버퍼의 소스 주소 및 타겟 주소, 데이터 길이, 의존성 등에 대한 정보를 오케스트레이터(313)로 전달할 수 있다. 오케스트레이터(313)는 전달된 정보들에 기초하여 데이터 처리기(315)를 제어할 수 있다.
예시적으로, 오케스트레이터(313)는 의존성에 기초하여 중간 데이터 처리의 수행 순서를 결정할 수 있다. 중간 데이터 처리를 수행할 순서가 된 경우, 오케스트레이터(313)는 데이터 처리기(315)를 통해 중간 데이터를 처리할 수 있다. 데이터 처리기(315)는 D2D 커맨드의 소스 주소로부터 데이터를 인출하고, 데이터 처리 종류에 따라 연산을 수행할 수 있다. 예를 들어, 데이터 처리기(315)는 인출된 데이터에 대해 "MD5 hash", "CRC32 checksum" 등의 연산을 수행할 수 있다.
데이터 처리기(315)는 데이터를 처리하여 산출된 결과 데이터를 D2D 커맨드의 타겟 주소에 저장할 수 있다. 이 경우, 소스 주소 및 타겟 주소는 중간 버퍼(314)의 메모리 주소일 수 있다. 또는, I/O 디바이스의 메모리가 I/O 디바이스 제어 장치(310)에 의해 접근 가능한 경우, 소스 주소 및 타겟 주소는 I/O 디바이스의 메모리 주소일 수 있다.
도 12는 도 11의 I/O 디바이스 제어 장치의 동작에 따른 하나의 예시를 보여주는 순서도이다. 도 12는 제1 내지 제2 I/O 디바이스들(101, 102) 사이의 직접 데이터 통신 및 중간 데이터 처리에 대한 예시를 보여준다. 이하에서는 제1 I/O 디바이스(101)는 스토리지 디바이스이고, 제2 I/O 디바이스(102)는 네트워크 디바이스인 것으로 가정한다.
도 1, 도 11 및 도 12를 참조하면, S311 단계에서, I/O 디바이스 제어 장치(310)는 제4 내지 제6 D2D 커맨드들(CMD4~CMD6)을 수신할 수 있다. 이 경우, 제5 D2D 커맨드(CMD5)는 중간 데이터 처리를 위한 데이터 처리 종류에 대응하는 값을 포함할 수 있다. 예를 들어, 제4 내지 제6 D2D 커맨드들(CMD4~CMD6)은 도 4의 제4 내지 제6 D2D 커맨드들(CMD4~CMD6)일 수 있다.
S312 단계에서, I/O 디바이스 제어 장치(310)는 제4 내지 제6 D2D 커맨드들(CMD4~CMD6)의 의존성에 기초하여 제4 D2D 커맨드(CMD4)에 대응하는 제1 I/O 디바이스 커맨드(CMD_D1)를 생성할 수 있다. 제1 I/O 디바이스 커맨드(CMD_D1)는 스토리지 디바이스가 저장된 데이터를 I/O 디바이스 제어 장치(310)에 저장하도록 하는 커맨드일 수 있다. I/O 디바이스 제어 장치(310)는 스토리지 디바이스가 요구하는 표준 프로토콜에 따라 제1 I/O 디바이스 커맨드(CMD_D1)를 생성할 수 있다.
S313 단계에서, I/O 디바이스 제어 장치(310)는 제1 I/O 디바이스 커맨드(CMD_D1)를 스토리지 디바이스로 전송할 수 있다. S314 단계에서, 스토리지 디바이스는 제1 I/O 디바이스 커맨드(CMD_D1)에 응답하여 데이터를 인출할 수 있다. S315 단계에서, 스토리지 디바이스는 인출된 데이터를 I/O 디바이스 제어 장치(310)에 저장할 수 있다. 이 경우, 스토리지 디바이스는 인출된 데이터를 I/O 디바이스 제어 장치(310)의 중간 버퍼(314)에 저장할 수 있다. I/O 디바이스 제어 장치(310)는 스토리지 디바이스로부터 제1 I/O 디바이스 커맨드(CMD_D1)에 대한 동작이 정상적으로 수행되었음을 확인할 수 있다.
I/O 디바이스 제어 장치(310)는 제1 I/O 디바이스 커맨드(CMD_D1)에 대한 동작이 완료된 후, 의존성에 대응하는 값에 따라 제5 D2D 커맨드(CMD5)에 대한 동작을 수행할 수 있다. 예시적으로, 제5 D2D 커맨드(CMD5)에 대응하는 동작은 중간 데이터 처리이므로, I/O 디바이스 제어 장치(310)는 별도의 I/O 디바이스 커맨드를 생성하지 않을 수 있다.
S316 단계에서, I/O 디바이스 제어 장치(310)는 제5 D2D 커맨드(CMD5)에 기초하여 데이터를 처리할 수 있다. 예시적으로, I/O 디바이스 제어 장치(310)는 데이터 처리기(315)를 통해 중간 버퍼(314)에 저장된 데이터를 처리할 수 있다. S317 단계에서, I/O 디바이스 제어 장치(310)는 데이터를 처리하여 산출된 결과 데이터를 저장할 수 있다. 예시적으로, I/O 디바이스 제어 장치(310)는 결과 데이터를 제5 D2D 커맨드(CMD5)의 타겟 주소에 저장할 수 있다. 이 경우, 타겟 주소는 중간 버퍼(314)의 메모리 주소일 수 있다.
중간 데이터 처리가 완료된 후, S318 단계에서, I/O 디바이스 제어 장치(310)는 의존성에 대응하는 값에 따라 제6 D2D 커맨드(CMD6)에 대한 제2 I/O 디바이스 커맨드(CMD_D2)를 생성할 수 있다. 제2 I/O 디바이스 커맨드(CMD_D2)는 네트워크 디바이스가 I/O 디바이스 제어 장치(310)에 저장된 데이터를 인출하고, 인출된 데이터를 서버 시스템(100) 외부로 전송하도록 하는 커맨드일 수 있다. S319 단계에서, I/O 디바이스 제어 장치(310)는 제2 I/O 디바이스 커맨드(CMD_D2)를 네트워크 디바이스로 전송할 수 있다.
S31a 단계에서, 네트워크 디바이스는 제2 I/O 디바이스 커맨드(CMD_D2)에 응답하여 결과 데이터를 인출할 수 있다. 예시적으로, 네트워크 디바이스는 결과 데이터가 저장된 중간 버퍼(314)의 메모리 주소로 접근하여 결과 데이터를 인출할 수 있다. S31b 단계에서, 네트워크 디바이스는 결과 데이터를 외부로 전송하기 위해 패킷을 생성할 수 있다. 예시적으로, 제2 I/O 디바이스 커맨드(CMD_D2)는 TCP/IP의 정보를 포함할 수 있다. 네트워크 디바이스는 결과 데이터 및 TCP/IP의 정보가 포함된 패킷을 생성할 수 있다. S31c 단계에서, 네트워크 디바이스는 생성한 패킷을 서버 시스템(100) 외부로 전송할 수 있다.
상술한 바와 같이, S311 내지 S31c 단계의 동작들이 수행되는 경우, 스토리지 디바이스의 데이터는 데이터 처리 과정을 통해 네트워크 디바이스로 전송될 수 있다. 또한, 전송된 데이터는 서버 시스템(100) 외부로 전송될 수 있다. 본 발명의 실시 예에 따른 I/O 디바이스 제어 장치(310)는 제1 및 제2 I/O 디바이스들(101, 102) 사이의 직접 데이터 통신 및 중간 데이터를 처리를 수행할 수 있다.
도 13은 도 11의 I/O 디바이스 제어 장치의 동작을 보여주는 순서도이다. 도 11 및 도 13을 참조하면, I/O 디바이스 제어 장치(310)는 S321 단계 및 S322 단계의 동작을 수행할 수 있다. S321 단계 및 S322 단계의 동작들은 도 8의 S131 및 S132 단계의 동작들과 유사하므로 상세한 설명은 생략된다.
S323 단계에서, I/O 디바이스 제어 장치(310)는 처리될 D2D 커맨드가 데이터 처리 커맨드인지 여부를 판별할 수 있다. 예시적으로, I/O 디바이스 제어 장치(310)는 처리될 D2D 커맨드가 데이터 처리 종류에 대응하는 값을 포함하는지 여부에 기초하여 처리될 D2D 커맨드가 데이터 처리 커맨드인지 여부를 판별할 수 있다. D2D 커맨드가 주체 디바이스에 대응하는 값을 포함하는 경우, I/O 디바이스 제어 장치(310)는 D2D 커맨드가 데이터 처리 커맨드가 아닌 것으로 판별할 수 있다. D2D 커맨드가 데이터 처리 종류에 대응하는 값을 포함하는 경우, I/O 디바이스 제어 장치(310)는 D2D 커맨드가 데이터 처리 커맨드인 것으로 판별할 수 있다.
D2D 커맨드가 데이터 처리 커맨드인 것으로 판별되는 경우, S324 단계에서, I/O 디바이스 제어 장치(310)는 D2D 커맨드에 기초하여 데이터를 처리할 수 있다. I/O 디바이스 제어 장치(310)는 D2D 커맨드의 소스 주소로부터 데이터를 인출하고, 데이터 처리 종류에 대응하는 연산을 수행하여 데이터를 처리할 수 있다. I/O 디바이스 제어 장치(310)는 처리된 결과 데이터를 D2D 커맨드의 타겟 주소에 저장할 수 있다. 소스 주소 및 타겟 주소는 I/O 디바이스 제어 장치(310)의 메모리 주소일 수 있다. 또는, 소스 주소 및 타겟 주소는 메모리의 접근이 가능한 I/O 디바이스의 메모리 주소일 수 있다.
D2D 커맨드가 데이터 처리 커맨드가 아닌 경우, I/O 디바이스 제어 장치(310)는 S325 단계 및 S326 단계의 동작을 수행할 수 있다. S325 내지 S326 단계의 동작들은 도 8의 S133 및 S134 단계의 동작들과 유사하므로 상세한 설명은 생략된다.
데이터 처리 동작 또는 I/O 디바이스 제어 동작이 완료된 경우, S327 단계에서, I/O 디바이스 제어 장치(310)는 의존성 있는 D2D 커맨드가 존재하는지 여부를 판별할 수 있다. 예시적으로, I/O 디바이스 제어 장치(310)는 D2D 커맨드들의 의존성에 기초하여 의존성이 있는 D2D 커맨드가 존재하는지 여부를 판별할 수 있다. 의존성이 있는 D2D 커맨드가 존재하는 경우, I/O 디바이스 제어 장치(310)는 S323 단계의 동작을 수행할 수 있다. 의존성이 있는 D2D 커맨드가 존재하지 않는 경우, I/O 디바이스 제어 장치(310)는 동작을 종료할 수 있다.
본 발명의 실시 예에 따른 I/O 디바이스 제어 장치는 I/O 디바이스들 사이의 직접 데이터 통신 과정에서 호스트 자원을 사용하지 않을 수 있다. 또한, I/O 디바이스 제어 장치는 중간 데이터 처리 과정에서 호스트 자원을 사용하지 않고 데이터를 처리할 수 있다. 호스트 자원이 사용되지 않는 경우, 호스트의 CPU 또는 메모리에 대한 접근이 생략되어 I/O 디바이스들 사이의 데이터 통신 경로가 단축될 수 있다. 이에 따라, I/O 디바이스 제어 장치는 I/O 디바이스들 사이의 데이터 통신 속도가 향상시키고, 호스트 자원의 사용을 최소화할 수 있다.
본 발명의 실시 예에 따른 I/O 디바이스 제어 장치는 I/O 디바이스들과 별도의 장치로 존재할 수 있다. 따라서, I/O 디바이스들의 하드웨어 구성에 대한 변경 없이 I/O 디바이스 제어 장치는 I/O 디바이스들을 제어할 수 있다.
본 발명의 실시 예에 따른 I/O 디바이스 제어 장치는 하드웨어, 소프트웨어 또는 이들의 조합으로 구현될 수 있다. 예시적으로, I/O 디바이스 제어 장치가 하드웨어로 구현되는 경우, I/O 디바이스 제어 장치는 서버 시스템에 장착되는 형태로 구현될 수 있다. 예를 들어, I/O 디바이스 제어 장치가 PCIe 표준 인터페이스를 기반으로 동작하는 경우, I/O 디바이스 제어 장치는 PCIe 카드 형태로 구현되어 PCIe 슬롯에 장착될 수 있다. 따라서, 본 발명에 따른 I/O 디바이스 제어 장치는 다양한 네트워크 인터페이스에 기초하여 구현될 수 있다.
본 발명의 실시 예에 따른 I/O 디바이스 제어 장치 드라이버는 I/O 디바이스 제어 장치와 호스트를 연결하는 소프트웨어일 수 있다. I/O 디바이스 제어 장치 드라이버는 호스트의 명령에 응답하여 미리 정해진 규칙 또는 약속에 따라 D2D 커맨드를 생성하고 생성한 D2D 커맨드를 I/O 디바이스 제어 장치로 전달할 수 있다. 이에 따라, I/O 디바이스 제어 장치는 호스트의 명령에 대응하는 직접 데이터 통신 및 중간 데이터 처리 동작을 효율적으로 수행할 수 있다.
상술된 내용은 본 발명을 실시하기 위한 구체적인 실시 예들이다. 본 발명은 상술된 실시 예들뿐만 아니라, 단순하게 설계 변경되거나 용이하게 변경할 수 있는 실시 예들 또한 포함할 것이다. 또한, 본 발명은 실시 예들을 이용하여 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다. 따라서, 본 발명의 범위는 상술된 실시 예들에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 할 것이다.
100: 서버 시스템 110: I/O 디바이스 제어 장치
111: 커맨드 큐 112: 커맨드 파서
113: 오케스트레이터 120: I/O 디바이스 제어 장치 드라이버
121: 커널 커뮤니케이터 122: D2D 커맨드 생성기
123: 완료 큐

Claims (20)

  1. 제1 I/O(Input/Output) 디바이스 및 제2 I/O 디바이스 사이의 데이터 통신에 대한 적어도 하나의 D2D(Device to Device) 커맨드를 저장하는 커맨드 큐;
    상기 적어도 하나의 D2D 커맨드로부터 상기 데이터 통신과 관련된 정보를 획득하는 커맨드 파서; 및
    상기 획득된 정보에 기초하여 상기 제1 I/O 디바이스로부터 상기 제2 I/O 디바이스로 데이터가 전송되도록 상기 제1 I/O 디바이스 및 상기 제2 I/O 디바이스 중 적어도 하나를 제어하는 오케스트레이터를 포함하는 I/O 디바이스 제어 장치.
  2. 제 1 항에 있어서,
    상기 적어도 하나의 D2D 커맨드는 상기 데이터 통신과 관련된 주체 디바이스, 소스 주소, 및 타겟 주소에 대한 정보를 포함하고,
    상기 주체 디바이스는 상기 제1 I/O 디바이스 또는 상기 제2 I/O 디바이스를 가리키고,
    상기 소스 주소는 상기 제1 I/O 디바이스의 메모리 주소를 가리키고,
    상기 타겟 주소는 상기 제2 I/O 디바이스의 메모리 주소를 가리키는 I/O 디바이스 제어 장치.
  3. 제 2 항에 있어서,
    상기 오케스트레이터는 상기 적어도 하나의 D2D 커맨드에 기초하여 상기 주체 디바이스가 상기 소스 주소에 저장된 데이터를 인출하여 상기 타겟 주소에 상기 인출된 데이터를 저장하도록 상기 주체 디바이스를 제어하는 I/O 디바이스 제어 장치.
  4. 제 2 항에 있어서,
    상기 적어도 하나의 D2D 커맨드는 상기 데이터 통신과 관련된 통신 방향 및 데이터 길이에 대한 정보를 더 포함하고,
    상기 통신 방향은 상기 주체 디바이스를 기준으로 상기 데이터의 이동 방향을 가리키고, 상기 데이터 길이는 상기 소스 주소에 저장된 데이터의 길이를 가리키는 I/O 디바이스 제어 장치.
  5. 제 2 항에 있어서,
    상기 적어도 하나의 D2D 커맨드는 상기 데이터 통신과 관련된 의존성에 대한 정보를 더 포함하고,
    상기 의존성은 상기 적어도 하나의 D2D 커맨드가 수행된 이후에, 추가적으로 수행될 의존성 있는 D2D 커맨드가 존재하는지 여부를 가리키고,
    상기 오케스트레이터는 상기 의존성에 기초하여 상기 의존성 있는 D2D 커맨드가 존재하지 않음을 판별하는 I/O 디바이스 제어 장치.
  6. 제 2 항에 있어서,
    상기 오케스트레이터는 상기 적어도 하나의 D2D 커맨드에 대응하는 I/O 디바이스 커맨드를 생성하고, 상기 I/O 디바이스 커맨드를 상기 주체 디바이스로 전송하는 I/O 디바이스 제어 장치.
  7. 제 6 항에 있어서,
    상기 오케스트레이터는 상기 주체 디바이스가 요구하는 표준 디바이스 프로토콜에 따라 상기 I/O 디바이스 커맨드를 생성하는 I/O 디바이스 제어 장치.
  8. 제 1 항에 있어서,
    상기 제1 I/O 디바이스 또는 상기 제2 I/O 디바이스에 저장된 데이터가 인출되는 경우, 상기 인출된 데이터를 저장하는 중간 버퍼를 더 포함하는 I/O 디바이스 제어 장치.
  9. 제 8 항에 있어서,
    상기 적어도 하나의 D2D 커맨드는 제1 D2D 커맨드 및 제2 D2D 커맨드를 포함하고,
    상기 제1 D2D 커맨드 및 상기 제2 D2D 커맨드는 각각 상기 데이터 통신과 관련된 주체 디바이스, 소스 주소, 타겟 주소, 및 의존성에 대한 정보들을 포함하고,
    상기 제1 D2D 커맨드의 상기 주체 디바이스는 상기 제1 I/O 디바이스를 가리키고, 상기 제1 D2D 커맨드의 상기 소스 주소는 상기 제1 I/O 디바이스의 메모리 주소를 가리키고, 상기 제1 D2D 커맨드의 상기 타겟 주소는 상기 중간 버퍼의 메모리 주소를 가리키고, 상기 제1 D2D 커맨드의 상기 의존성은 의존성 있는 상기 제2 D2D 커맨드가 존재함을 가리키고,
    상기 제2 D2D 커맨드의 상기 주체 디바이스는 상기 제2 I/O 디바이스를 가리키고, 상기 제2 D2D 커맨드의 상기 소스 주소는 상기 중간 버퍼의 상기 메모리 주소를 가리키고, 상기 제2 D2D 커맨드의 상기 타겟 주소는 상기 제2 I/O 디바이스의 메모리 주소를 가리키고, 상기 제2 D2D 커맨드의 상기 의존성은 의존성 있는 D2D 커맨드가 존재하지 않음을 가리키는 I/O 디바이스 제어 장치.
  10. 제 9 항에 있어서,
    상기 오케스트레이터는,
    상기 제1 D2D 커맨드에 기초하여 상기 제1 I/O 디바이스가 상기 제1 I/O 디바이스의 상기 메모리 주소에 저장된 데이터를 인출하여 상기 중간 버퍼의 상기 메모리 주소에 인출된 데이터를 저장하도록 상기 제1 I/O 디바이스를 제어하고,
    상기 제2 D2D 커맨드에 기초하여 상기 제2 I/O 디바이스가 상기 중간 버퍼의 상기 메모리 주소에 저장된 데이터를 인출하여 상기 제2 I/O 디바이스의 상기 메모리 주소에 인출된 데이터를 저장하도록 상기 제2 I/O 디바이스를 제어하는 I/O 디바이스 제어 장치.
  11. 제 9 항에 있어서,
    상기 오케스트레이터는 상기 제1 D2D 커맨드의 의존성 및 상기 제2 D2D 커맨드의 의존성에 기초하여 상기 제1 D2D 커맨드를 수행한 후 상기 제2 D2D 커맨드를 수행하는 I/O 디바이스 제어 장치.
  12. 제 9 항에 있어서,
    상기 제2 D2D 커맨드는 TCP/IP(Transmission Control Protocol/Internet Protocol)의 정보를 더 포함하고,
    상기 오케스트레이터는 상기 제2 D2D 커맨드에 기초하여 상기 제2 I/O 디바이스가 상기 중간 버퍼의 상기 메모리 주소에 저장된 데이터를 인출하고, 상기 인출된 데이터 및 상기 TCP/IP의 정보가 포함된 패킷을 생성하여 외부로 전송하도록 상기 제2 I/O 디바이스를 제어하는 I/O 디바이스 제어 장치.
  13. 제 8 항에 있어서,
    상기 중간 버퍼에 저장된 데이터를 처리하고, 상기 처리로부터 생성된 결과 데이터를 상기 중간 버퍼에 저장하는 데이터 처리기를 더 포함하는 I/O 디바이스 제어 장치.
  14. 제 13 항에 있어서,
    상기 적어도 하나 이상의 D2D 커맨드는 제1 D2D 커맨드, 제2 D2D 커맨드 및 제3 D2D 커맨드를 포함하고,
    상기 제1 D2D 커맨드 및 제3 D2D 커맨드는 각각 상기 데이터 통신과 관련된 주체 디바이스, 소스 주소, 타겟 주소, 및 의존성에 대한 정보들을 포함하고,
    상기 제2 D2D 커맨드는 상기 처리와 관련된 데이터 처리 종류, 소스 주소, 타겟 주소, 및 의존성에 대한 정보들을 포함하고,
    상기 제1 D2D 커맨드의 상기 주체 디바이스는 상기 제1 I/O 디바이스를 가리키고, 상기 제1 D2D 커맨드의 상기 소스 주소는 상기 제1 I/O 디바이스의 메모리 주소를 가리키고, 상기 제1 D2D 커맨드의 상기 타겟 주소는 상기 중간 버퍼의 제1 메모리 주소를 가리키고, 상기 제1 D2D 커맨드의 상기 의존성은 의존성 있는 제2 D2D 커맨드가 존재함을 가리키고,
    상기 제2 D2D 커맨드의 상기 데이터 처리 종류는 상기 처리에 대응하는 연산의 종류를 가리키고, 상기 제2 D2D 커맨드의 상기 소스 주소는 상기 중간 버퍼의 상기 제1 메모리 주소를 가리키고, 상기 제2 D2D 커맨드의 상기 타겟 주소는 상기 중간 버퍼의 제2 메모리 주소를 가리키고, 상기 제2 D2D 커맨드의 상기 의존성은 의존성 있는 제3 D2D 커맨드가 존재함을 가리키고,
    상기 제3 D2D 커맨드의 상기 주체 디바이스는 상기 제2 I/O 디바이스를 가리키고, 상기 제3 D2D 커맨드의 상기 소스 주소는 상기 중간 버퍼의 상기 제2 메모리 주소를 가리키고, 상기 제3 D2D 커맨드의 상기 타겟 주소는 상기 제2 I/O 디바이스의 메모리 주소를 가리키고, 상기 제3 D2D 커맨드의 상기 의존성은 의존성 있는 D2D 커맨드가 존재하지 않음을 가리키는 I/O 디바이스 제어 장치.
  15. 제 14 항에 있어서,
    상기 오케스트레이터는,
    상기 제1 D2D 커맨드에 기초하여 상기 제1 I/O 디바이스가 상기 제1 I/O 디바이스의 상기 메모리 주소에 저장된 데이터를 인출하여 상기 중간 버퍼의 상기 제1 메모리 주소에 인출된 데이터를 저장하도록 상기 제1 I/O 디바이스를 제어하고,
    상기 제2 D2D 커맨드에 기초하여 상기 데이터 처리기가 상기 데이터 처리 종류에 따라 상기 중간 버퍼의 상기 제1 메모리 주소에 저장된 데이터를 처리한 후, 상기 결과 데이터를 상기 중간 버퍼의 상기 제2 메모리 주소에 저장하도록 상기 데이터 처리기를 제어하고,
    상기 제3 D2D 커맨드에 기초하여 상기 제2 I/O 디바이스가 상기 중간 버퍼의 상기 제2 메모리 주소에 저장된 데이터를 인출하여 상기 제2 I/O 디바이스의 상기 메모리 주소에 인출된 데이터를 저장하도록 상기 제2 I/O 디바이스를 제어하는 I/O 디바이스 제어 장치.
  16. 제 1 항에 있어서,
    상기 제1 I/O 디바이스, 상기 제2 I/O 디바이스 및 상기 I/O 디바이스 제어 장치 각각은 PCIe(Peripheral Component Interconnect Express) 슬롯에 장착되는 I/O 디바이스 제어 장치.
  17. 제1 I/O(Input/Output) 디바이스 및 제2 I/O 디바이스 중 적어도 하나를 제어하는 I/O 디바이스 제어 장치의 동작 방법에 있어서,
    상기 제1 I/O 디바이스 및 상기 제2 I/O 디바이스 사이의 데이터의 전송에 대한 적어도 하나의 D2D 커맨드를 수신하는 단계;
    상기 적어도 하나의 D2D 커맨드로부터 상기 데이터의 상기 전송과 관련된 정보를 획득하는 단계;
    상기 획득된 정보에 기초하여 적어도 하나 이상의 I/O 디바이스 커맨드를 생성하는 단계; 및
    상기 적어도 하나 이상의 I/O 디바이스 커맨드를 상기 제1 I/O 디바이스 및 상기 제2 I/O 디바이스 중 적어도 하나로 전송하는 단계를 포함하는 동작 방법.
  18. 제 17 항에 있어서,
    상기 획득된 정보에 기초하여 상기 적어도 하나 이상의 D2D 커맨드가 데이터 처리 커맨드를 포함하는지 여부를 판별하는 단계; 및
    상기 데이터 처리 커맨드가 존재하는 경우, 상기 데이터를 처리하는 단계를 더 포함하는 동작 방법.
  19. 호스트로부터 제1 I/O(Input/Output) 디바이스 및 제2 I/O 디바이스 사이의 데이터 통신에 대한 명령을 I/O 디바이스 제어 장치로 전달하는 I/O 디바이스 제어 장치 드라이버의 동작 방법에 있어서,
    상기 호스트로부터 상기 제1 I/O 디바이스로부터 상기 제2 I/O 디바이스로 데이터를 전송하는 상기 명령을 수신하는 단계;
    상기 호스트로부터 상기 제1 I/O 디바이스 및 상기 제2 I/O 디바이스의 구동 정보를 확인하는 단계;
    상기 구동 정보에 기초하여 상기 명령에 대한 적어도 하나 이상의 D2D 커맨드를 생성하는 단계; 및
    상기 적어도 하나 이상의 D2D 커맨드를 상기 I/O 디바이스 제어 장치로 전달하는 단계를 포함하는 동작 방법.
  20. 제 19 항에 있어서,
    상기 D2D 커맨드는 상기 데이터 통신과 관련된 주체 디바이스, 소스 주소 및 타겟 주소에 대한 정보들을 포함하고,
    상기 주체 디바이스는 상기 제1 I/O 디바이스 또는 상기 제2 I/O 디바이스를 가리키고,
    상기 소스 주소는 상기 제1 I/O 디바이스의 메모리 주소를 가리키고,
    상기 타겟 주소는 상기 제2 I/O 디바이스의 메모리 주소를 가리키는 동작 방법.
KR1020170123717A 2017-09-25 2017-09-25 입출력 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법 KR101980190B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020170123717A KR101980190B1 (ko) 2017-09-25 2017-09-25 입출력 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법
US16/127,362 US10664418B2 (en) 2017-09-25 2018-09-11 Peripheral device controlling device, operation method thereof, and operation method of peripheral device controlling device driver

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170123717A KR101980190B1 (ko) 2017-09-25 2017-09-25 입출력 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법

Publications (2)

Publication Number Publication Date
KR20190035988A true KR20190035988A (ko) 2019-04-04
KR101980190B1 KR101980190B1 (ko) 2019-05-21

Family

ID=65807651

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170123717A KR101980190B1 (ko) 2017-09-25 2017-09-25 입출력 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법

Country Status (2)

Country Link
US (1) US10664418B2 (ko)
KR (1) KR101980190B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022181929A1 (ko) * 2021-02-26 2022-09-01 (주)씨앤테크 기기간 연결을 지원하는 사물인터넷 통신 시스템

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11604657B2 (en) * 2021-04-30 2023-03-14 Ncr Corporation Containerized point-of-sale (POS) system and technique for operating

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20100107485A (ko) * 2008-02-14 2010-10-05 인터내셔널 비지네스 머신즈 코포레이션 단일 i/o 동작내에서 양방향 데이터 전송
JP2011113163A (ja) * 2009-11-25 2011-06-09 Nec Corp Ioアクセス通信システムにおけるエンドポイント間通信制御装置および方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006318139A (ja) * 2005-05-11 2006-11-24 Matsushita Electric Ind Co Ltd データ転送装置、データ転送方法およびプログラム
US7577774B2 (en) * 2005-05-13 2009-08-18 Texas Instruments Incorporated Independent source read and destination write enhanced DMA
JP2010250665A (ja) 2009-04-17 2010-11-04 Toshiba Corp PCIExpressのTLP処理回路、及びこれを備える中継デバイス
WO2011007459A1 (ja) * 2009-07-17 2011-01-20 株式会社日立製作所 ストレージ装置及びその制御方法
US8417186B2 (en) * 2009-08-10 2013-04-09 Motorola Solutions, Inc. Method and apparatus for communicating push-to-talk state to a communication device
US8244930B1 (en) * 2010-05-05 2012-08-14 Hewlett-Packard Development Company, L.P. Mechanisms for synchronizing data transfers between non-uniform memory architecture computers
AU2013388031C1 (en) 2013-10-29 2016-04-28 Huawei Technologies Co., Ltd. Data processing system and data processing method
US20160328348A1 (en) * 2014-01-29 2016-11-10 Hitachi, Ltd. Computer and computer i/o control method
US9558148B2 (en) 2014-04-30 2017-01-31 Intel Corporation Method to optimize network data flows within a constrained system
US10216668B2 (en) * 2016-03-31 2019-02-26 Intel Corporation Technologies for a distributed hardware queue manager
KR102239488B1 (ko) * 2017-05-31 2021-04-12 삼성에스디에스 주식회사 디바이스 간 통신 시스템 및 방법
KR102468390B1 (ko) * 2017-05-31 2022-11-18 삼성에스디에스 주식회사 토큰 관리 방법 및 이를 수행하기 위한 서버

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20100107485A (ko) * 2008-02-14 2010-10-05 인터내셔널 비지네스 머신즈 코포레이션 단일 i/o 동작내에서 양방향 데이터 전송
JP2011113163A (ja) * 2009-11-25 2011-06-09 Nec Corp Ioアクセス通信システムにおけるエンドポイント間通信制御装置および方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022181929A1 (ko) * 2021-02-26 2022-09-01 (주)씨앤테크 기기간 연결을 지원하는 사물인터넷 통신 시스템
CN115315921A (zh) * 2021-02-26 2022-11-08 西恩泰克有限公司 支持机器间连接的物联网通信系统

Also Published As

Publication number Publication date
US20190095359A1 (en) 2019-03-28
KR101980190B1 (ko) 2019-05-21
US10664418B2 (en) 2020-05-26

Similar Documents

Publication Publication Date Title
JP5479802B2 (ja) ハイブリッド・コンピューティング環境におけるデータ処理のための方法、装置、およびプログラム
US9497268B2 (en) Method and device for data transmissions using RDMA
US8219722B2 (en) DMA and graphics interface emulation
US9886287B2 (en) Adaptive device driver method and system
KR102331926B1 (ko) 저장 장치를 포함하는 호스트 시스템의 동작 방법 및 저장 장치 제어기의 동작 방법
KR101980190B1 (ko) 입출력 디바이스 제어 장치, 그것의 동작 방법 및 입출력 디바이스 제어 장치 드라이버의 동작 방법
JP6250842B2 (ja) Usbオーバーipを用いた、別のデバイスとの非usbセンサの共有
KR20210080009A (ko) 가속기, 가속기의 동작 방법 및 가속기를 포함한 디바이스
JP7093979B2 (ja) デバイスプロキシ装置及びそれを含む計算機システム
CN103092676A (zh) 虚拟机集群的模拟输入输出方法、装置及系统
US20130030568A1 (en) Robot system control method and a device therefor
JP5160844B2 (ja) Hidデバイスの通信速度を高める方法
US10169272B2 (en) Data processing apparatus and method
US20140149528A1 (en) Mpi communication of gpu buffers
JP6035715B2 (ja) コンピュータシステム、情報処理システム、仮想メディア方法、および、プログラム
US8578378B2 (en) Facilitating compatible interaction, at least in part
JP2020190765A (ja) 転送装置、情報処理装置、および、データ転送方法
JPWO2018173300A1 (ja) I/o制御方法およびi/o制御システム
US11689621B2 (en) Computing device and storage card
US11671350B1 (en) Data request servicing using multiple paths of smart network interface cards
JP7196858B2 (ja) 入出力実行装置、デバイス仮想化システム、入出力実行方法、および、プログラム
CN110971631B (zh) 访问ceph集群的方法、装置、服务器及介质
US20140146065A1 (en) Mpi communication of gpu buffers
Tan et al. Design and Implementation of Bootloader for Vehicle Control Unit Based on Can Bus
KR20230011871A (ko) 스토리지 장치 및 연산 장치를 포함하는 가상화 장치, 및 이의 동작하는 방법

Legal Events

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