KR20140132386A - 감소된 지연을 갖는 원격 직접 메모리 액세스 - Google Patents

감소된 지연을 갖는 원격 직접 메모리 액세스 Download PDF

Info

Publication number
KR20140132386A
KR20140132386A KR1020147027304A KR20147027304A KR20140132386A KR 20140132386 A KR20140132386 A KR 20140132386A KR 1020147027304 A KR1020147027304 A KR 1020147027304A KR 20147027304 A KR20147027304 A KR 20147027304A KR 20140132386 A KR20140132386 A KR 20140132386A
Authority
KR
South Korea
Prior art keywords
buffer
information
source
registration
deregistration
Prior art date
Application number
KR1020147027304A
Other languages
English (en)
Other versions
KR101703403B1 (ko
Inventor
마크 에스 헤프티
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20140132386A publication Critical patent/KR20140132386A/ko
Application granted granted Critical
Publication of KR101703403B1 publication Critical patent/KR101703403B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal

Abstract

본 발명은 감소된 지연시간을 갖는 원격 직접 메모리 액세스(RDMA)를 위한 시스템 및 방법을 제공한다. RDMA는 실질적으로 프로세싱을 위한 요구 없이 네트워킹된 디바이스 내의 메모리 버퍼들 사이에 정보가 직접 전달되게 한다. RDMA는 미리 사전 등록되지 않은 버퍼들을 위한 등록/등록해제를 요구하지만, 감소된 지연시간을 갖는 RDMA는 등록/등록해제 중에 정보를 중간 버퍼에 전달하여, 일반적으로 이들 프로세스가 완료하는 것을 대기하는 낭비될 시간을 활용하고, 소스 버퍼가 등록될 때 전달을 위한 정보의 양을 감소시킨다. 이 방식으로, RDMA 트랜잭션이 더 신속하게 완료될 수 있다. 감소된 지연시간을 갖는 RDMA는 다양한 정보 트랜잭션을 촉진하도록 채용될 수 있다. 예를 들어, 감소된 지연시간을 갖는 RDMA는 디바이스 내에 정보를 스트리밍하도록 이용될 수 있고, 또는 디바이스의 외부의 정보 소스를 위한 정보를 직접 애플리케이션 버퍼에 전달하는데 사용될 수 있다.

Description

감소된 지연을 갖는 원격 직접 메모리 액세스{REMOTE DIRECT MEMORY ACCESS WITH REDUCED LATENCY}
관련 출원의 상호 참조
본 출원은 그 개시 내용이 본 명세서에 참조로서 그대로 합체되어 있는 본 출원과 동일자로 출원된 발명의 명칭이 "감소된 지연시간을 갖는 연속적인 정보 전달(Continuous Information Transfer with Reduced Latency)"인 PCT 출원 제 호(문서번호 P41676PCT)에 관련된다.
분야
이하의 개시 내용은 컴퓨팅 디바이스들 사이의 정보 전달에 관한 것으로서, 더 구체적으로는 낮은 지연시간(latency)을 갖는 원격 직접 메모리 액세스를 통한 정보 전달에 관한 것이다.
컴퓨팅 디바이스 상에서 실행하는 애플리케이션은 예를 들어 네트워크 상에 상주하는 정보 소스와 상호 작용하는 운영 체제 커널(operating system kernel)과 같은 컴퓨팅 디바이스 내의 프로세싱 리소스에 의존할 수 있다. 커널은 컴퓨팅 시스템의 하드웨어 레벨에서 행해진 실제 데이터 프로세싱과 애플리케이션 사이에 브리지를 형성하는 프로세싱 엔진이다. 이 역할에서, 운영 체제 커널은 정보가 네트워크 리소스에 전송되거나 그로부터 수신되게 하도록 네트워크 인터페이스 회로와 같은 하드웨어-레벨 리소스와 상호 작용할 수도 있다. 네트워크상호 작용을 허용하면서, 성능은 운영 체제 커널의 액티비티 레벨(activity level)에 의해 상당히 영향을 받을 수 있다. 네트워크 인터페이스 회로에 의해 수신된 통신은 운영 체제 커널이 다른 작업으로 분주한 경우에 지연될 수도 있다. 그 결과, 컴퓨팅 디바이스의 메인 프로세싱 리소스를 수반하지 않는 네트워크 정보를 전달하기 위한 다른 방법이 개발되어 왔다. 원격 직접 메모리 액세스(Remote Direct Memory Access: RDMA)는 메인 프로세싱 리소스(예를 들어, 운영 체제 커널)를 수반하지 않고 네트워킹된 디바이스가 다른 네트워킹된 디바이스의 메모리 내에 정보를 직접 배치하게 한다. RDMA는 더 낮은 지연시간을 갖고 실질적으로 증가된 네트워크 처리량을 허용하지만, 몇몇 문제가 여전히 존재한다. RDMA는 예를 들어 애플리케이션에 의해 사용되는 메모리 버퍼로부터 정보를 취하고 이후에 정보를 네트워크 상의 다른 디바이스에 전송할 수 있는 네트워크 인터페이스 회로에 액세스 가능한 메모리 버퍼에 직접 정보를 전달함으로써 동작할 수 있다. 그러나, 운영 체제 커널은 경고 없이 가상 메모리에 애플리케이션 버퍼의 콘텐트를 이동시킬 수 있고, 따라서 애플리케이션 메모리 버퍼는 먼저 콘텐트가 RDMA 트랜잭션 중에 이동되는 것을 방지하도록 등록(register)되어야 하고, 이어서 다른 시스템 리소스에 의한 사용을 위해 메모리 공간을 비우도록 등록해제(deregister)된다. 애플리케이션 메모리 버퍼의 등록/등록해제는 정보가 전달되는 속도를 감속시킬 수도 있는 지연시간을 RDMA에 도입하고, 따라서 통신 성능에 악영향을 미칠 수도 있다.
청구된 요지의 다양한 실시예의 특징 및 장점은 이하의 상세한 설명이 진행됨에 따라, 도면을 참조하여 명백해질 것이고, 유사한 도면 부호가 유사한 부분을 나타낸다.
도 1은 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 원격 직접 메모리 액세스를 위해 구성된 예시적인 시스템을 도시한다.
도 2는 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 원격 직접 메모리 액세스를 사용하는 예시적인 정보 전달을 도시한다.
도 3은 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 원격 직접 메모리 액세스 중에 등록의 예를 도시한다.
도 4는 본 발명의 적어도 하나의 실시예에 다른 감소된 지연시간을 갖는 원격 직접 메모리 액세스 중에 등록해제의 예를 도시한다.
도 5는 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 원격 직접 메모리 액세스를 위한 예시적인 동작의 흐름도를 도시한다.
도 6은 본 발명의 적어도 하나의 실시예에 따른 정보를 스트리밍하기 위해 감소된 지연시간을 갖는 원격 직접 메모리 액세스를 사용하는 예를 도시한다.
도 7은 본 발명의 적어도 하나의 실시예에 따른 정보를 스트리밍하기 위해 감소된 지연시간을 갖는 원격 직접 메모리 액세스를 사용하기 위한 예시적인 동작의 흐름도를 도시한다.
도 8은 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 원격 직접 메모리 액세스를 사용하여 애플리케이션 버퍼에 직접 정보를 전달하는 외부 소스의 예를 도시한다.
도 9는 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 원격 직접 메모리 액세스를 사용하여 애플리케이션 버퍼에 직접 정보를 전달하는 외부 정보 소스를 위한 예시적인 동작의 흐름도를 도시한다.
이하의 상세한 설명은 예시적인 실시예를 참조하여 진행될 것이지만, 그 다수의 대안, 수정 및 변형이 당 기술 분야의 숙련자들에게 명백할 것이다.
본 발명은 감소된 지연을 갖는 원격 직접 메모리 액세스를 위한 시스템 및 방법을 설명한다. 일반적으로, 원격 직접 메모리 액세스(RDMA)에서, 일 네트워킹된 디바이스에 상주하는 정보는 다른 네트워킹된 디바이스의 메모리 내에 직접 전달될 수 있다. RDMA는 또한 RDMA 콘소시엄 및 직접 액세스 전송(Direct Access Transport: DAT) 콜래보레이티브(collaborative)에 의해 원래 제안되었던 현존하는 통신 프로토콜에 대응하고, 예를 들어 InfinBandTM 및 iWARP와 같은 고성능 네트워킹 아키텍처 내에 통합되어 왔다. 현존하는 RDMA 통신 프로토콜의 양태는 개시된 실시예를 설명할 때 설명을 위해 본 명세서에 참조될 수 있지만, 이들 실시예의 구현예는 현존하는 RDMA 통신 프로토콜을 사용하는 것에 한정되는 것은 아니고, 네트워킹된 디바이스가 다른 네트워킹된 디바이스의 메모리 내로 직접 정보를 전달하게 하는 임의의 현존하는 또는 최신의 통신 시스템에서 채용될 수 있다.
일 실시예에서, 애플리케이션 버퍼는 정보가 네트워크 인터페이스 회로(NIC) 버퍼에 직접 전달되게 하도록 구성될 수 있고, 또는 대안적으로 NIC 버퍼는 디바이스 내의 프로세싱 회로(예를 들어, 운영 체제 커널)의 포함 없이 정보가 애플리케이션 버퍼에 전달되게 하도록 구성될 수 있다. 그러나, 운영 체제 커널은 정상 디바이스 동작의 도중에, 다른 디바이스 액티비티를 위해 물리적 메모리 리소스를 비우도록 애플리케이션 버퍼의 콘텐트를 다른 위치(예를 들어, 가상 메모리)로 이동시키려고 시도한다. 전달이 완료되기 전에 애플리케이션 버퍼의 콘텐트를 이동시키는 것은 전달을 오손할 것이다. 애플리케이션 버퍼는 이어서 콘텐트가 이동하는 것을 방지하도록 등록되어야 하고, 전달이 동적 재할당을 위해 메모리 공간을 비우기 위해 완료된 후에 등록해제되어야 한다. 메모리 공간의 등록 및/또는 등록해제는 시간을 소요하고, RDMA에 지연시간을 도입할 수도 있다. 그러나, 이 지연시간은 등록 및/또는 등록해제 중에 다른 프로세스를 수행함으로써 회피될 수도 있다. 이들 작업을 "중첩"하는 것은 전체 전달 프로세스가 더 일찍 완료되게 한다.
예를 들어, 소스 버퍼(예를 들어, 애플리케이션 버퍼)는 타겟 버퍼(예를 들어, NIC 버퍼)에 정보를 전달하기를 원할 수도 있다. 소스 버퍼는 등록 중에 중간 버퍼에 정보를 복사하도록 구성될 수 있고, 중간 버퍼는 이어서 그가 수신하는 정보를 소스 버퍼로부터 타겟 버퍼로 전송하도록 구성될 수 있다. 그 결과, 소스 버퍼는 정보 전달을 시작하기 위해 등록이 완료하는 것을 대기할 필요가 없고, 등록이 완료된 후에 전달을 위한 정보의 양이 감소된다. 일 실시예에서, 등록 중에 전달을 위한 정보의 양은 예를 들어 등록의 기간에 기초하여 실험적으로 결정된다. 예를 들어, 정보는 디폴트 등록 오프셋이 성취될 때까지 또는 등록이 계속되는 동안 크기를 증가하는 블록 내에서 소스 버퍼로부터 중간 버퍼로 전달될 수 있다. 완전한 정보 블록의 수신시에, 중간 버퍼는 타겟 버퍼에 완전한 블록을 전달할 수 있다. 등록이 완료될 때, 소스 버퍼가 RDMA를 통해 타겟 버퍼에 직접 정보의 나머지(예를 들어, 중간 버퍼로 미리 전달되지 않은)를 전달할 수 있다.
동일한 또는 상이한 실시예에서, 등록이 완료된 후에, 소스 버퍼는 다른 중간 버퍼에 정보를 전달하기 시작하여 등록해제에 의해 발생되는 지연시간을 감소시키는 것을 돕도록 구성될 수도 있다. 예를 들어, 소스 버퍼 콘텐트의 저부 부근으로부터 오프셋된 정보(예를 들어, 예측된 등록해제 기간에 기초함)는 소스 버퍼가 등록되는 동안 다른 중간 버퍼에 전달될 수 있다. 따라서, 소스 버퍼가 등록되는 동안 전달을 위한 정보의 양은 오프셋량만큼 감소되고, 이는 전달의 기간을 감소시킨다. 등록해제는 등록된 소스 버퍼로부터 정보의 전달의 완료 직후에 개시될 수도 있고, 다른 중간 버퍼에 전달된 정보가 등록해제 중에 타겟 버퍼에 전달될 수 있다. 그 결과, 소스 버퍼는 등록 및 등록해제의 모두 중에 타겟 버퍼에 정보를 전달하도록 구성되어, 소스 버퍼가 등록되는 동안 전달될 정보의 양을 감소시키고, 현존하는 RDMA 트랜잭션에 비교할 때 지연시간을 감소시킨다.
동일한 또는 상이한 실시예에서, 감소된 지연시간을 갖는 RDMA는 네트워킹된 디바이스로 또는 디바이스로부터 정보의 연속적인 직접 전달(예를 들어, 정보의 스트리밍)을 생성하는데 이용될 수 있다. 예를 들어, 애플리케이션 버퍼 및 NIC 버퍼는 RDMA 통신을 위한 로컬 버퍼를 노출시키도록 구성될 수 있다. 애플리케이션 버퍼는 이어서 NIC 버퍼의 로컬 버퍼 내로 어드레스 정보(예를 들어, 스캐터-게더 리스트 엔트리(scatter-gather list entry))를 전달하도록 구성될 수 있고, 마찬가지로, NIC 버퍼는 애플리케이션 버퍼의 로컬 버퍼 내로 어드레스 정보를 전달하도록 구성될 수 있다. 어느 하나의 버퍼가 다른 버퍼에 정보를 전달하기를 원할 때(예를 들어, 애플리케이션 버퍼가 NIC 버퍼에 정보를 전달하기를 원함), 소스(예를 들어, 애플리케이션) 버퍼는 타겟(예를 들어, NIC) 버퍼 내의 이용 가능한 메모리에 대응하는 적어도 하나의 어드레스를 결정하기 위해 그 로컬 버퍼에 액세스할 수 있다. 로컬 버퍼 내에 어드레스가 존재하지 않으면(예를 들어, 어떠한 어드레스 정보도 전혀 없고, 모든 어드레스가 사용되고 있는 등), 소스 버퍼는 새로운 정보가 로컬 버퍼에 기록되어 있다는 표시를 위해 로컬 버퍼와 연계된 완료 대기열을 모니터링할 수 있다. 새로운 정보가 로컬 버퍼에 기록되어 있다는 표시에 따라, 소스 버퍼는 타겟 버퍼 내의 이용 가능한 메모리 위치에 대응하는 적어도 하나의 어드레스를 검색하도록 로컬 버퍼에 액세스할 수도 있다.
상기 실시예에 추가하여, 소스 버퍼는 또한 정보가 타겟 버퍼에 전달될 방법을 결정하도록 구성될 수도 있다. 현존하는 RDMA 프로토콜이 채용되는 경우에, 인라인 데이터 전달 방법이 애플리케이션 버퍼를 등록할 필요 없이 소량의 데이터를 전달하는데 이용될 수 있다. 대량의 데이터가 전달되면(예를 들어, 특정 또는 사전 결정된 양보다 큰 데이터의 양), 전술된 바와 같은 감소된 지연시간을 갖는 RDMA 전달 방법이 이용될 수도 있다. 소스 버퍼는 이어서 이용 가능한 메모리 위치 및 결정된 전달 방법에 기초하여 타겟 버퍼에 데이터가 전달되게 하도록 구성될 수 있다. 이 방식으로, 정보는 정보, 등록, 등록해제 등에 대한 이용 가능한 메모리 위치의 결정에 의해 발생된 지연시간이 거의 없거나 전혀 없이 타겟 버퍼 내의 개방 메모리 위치로 연속적으로 전달될 수 있다.
동일한 또는 상이한 실시예에서, 정보는 현존하는 RDMA 트랜잭션에 요구되는 바와 같이 NIC 버퍼에 먼저 저장될 필요 없이 디바이스의 외부의(예를 들어, 네트워크 상에 상주하는) 정보 소스로부터 애플리케이션 버퍼로 직접 전달될 수 있다. 예를 들어, 어드레스 버퍼는 외부 소스가 애플리케이션 버퍼에 직접 정보를 전달하기 위해 사용할 수 있는 애플리케이션 버퍼 어드레스 정보(예를 들어, 스캐터-게더 리스트 엔트리)를 포함할 수 있다. 외부 소스는 이어서 애플리케이션 버퍼 내의 이용 가능한 메모리 위치와 연계된 어드레스가 이용 가능한지를 결정하기 위해 어드레스 버퍼를 검사하도록 구성될 수 있다. 애플리케이션 버퍼 내의 이용 가능한 메모리 위치를 위한 어드레스가 이용 가능한 것으로 결정되면, 외부 소스는 애플리케이션 버퍼에 직접 정보를 전달하기 위해 이들 어드레스를 사용할 수 있다. 어떠한 어드레스도 이용 가능한 것으로 결정되지 않으면(예를 들어, 어드레스 버퍼가 비어 있고, 어드레스 버퍼 내의 모든 어드레스가 사용되고 있는 등), 외부 소스는 현존하는 RDMA 트랜잭션에서와 같이 NIC 버퍼에 정보를 전달하기 시작할 수도 있다. 그러나, 외부 소스는 또한 메모리 위치가 애플리케이션 버퍼에 직접 정보를 전달하기 위해 이용 가능해지는지를 판정하기 위해 어드레스 버퍼를 계속 검사하도록 구성될 수도 있다. 메모리 위치가 이용 가능해지면, 외부 소스는 애플리케이션 버퍼에 직접 정보를 전달하기 시작할 수도 있다. 일 실시예에서, 애플리케이션 버퍼에 직접 전달된 정보는 NIC 버퍼에 미리 전달된 정보를 따르는 것을 나타내는 시퀀스 번호를 포함할 수도 있다. 그 결과, 지연시간은 더 감소될 수도 있다.
도 1은 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 RDMA를 위해 구성된 예시적인 시스템(100)을 도시한다. 시스템(100)은 적어도 정보를 프로세싱하고 네트워크 상에서 통신하도록 구성된 단일 디바이스 또는 다중 디바이스 형성 시스템을 포함할 수 있다. 시스템(100)의 예는 Android
Figure pct00001
운영 체제(OS), iOS
Figure pct00002
, Blackberry
Figure pct00003
OS, Palm
Figure pct00004
OS, Symbian
Figure pct00005
OS 등에 기초하는 셀룰러 핸드셋 또는 스마트폰과 같은 모바일 통신 디바이스, ipad
Figure pct00006
, Galaxy Tab
Figure pct00007
, Kindle Fire
Figure pct00008
등과 같은 태블릿 컴퓨터와 같은 모바일 컴퓨팅 디바이스, 인텔 코포레이션(Intel Corp.)에 의해 제조되는 저전력 칩셋을 포함하는 Ultrabook
Figure pct00009
, 넷북, 노트북 컴퓨터, 랩탑 컴퓨터 등을 포함할 수 있지만, 이들에 한정되는 것은 아니다. 시스템(100)의 예는 예를 들어 일체형 또는 개별 디스플레이 등을 갖는 데스크탑 컴퓨터와 같은 통상적으로 고정형 디바이스를 또한 포함할 수도 있다.
시스템(100)은 예를 들어, 메인 플랫폼(102), 서브시스템(104) 및 네트워크 인터페이스 회로(network interface circuit: NIC)(106)를 포함할 수 있다. 메인 플랫폼(102)은 시스템(100)을 위한 더 실질적인 정보 프로세싱 리소스를 포함할 수도 있다. 예를 들어, 메인 플랫폼(102)은 시스템(100)의 정상 동작 중에 발생할 수도 있는 기능을 조화하도록 구성될 수 있다. 서브시스템(104)은 예를 들어 비디오 입출력, 오디오 입출력, 사용자 인터페이스 등과 같은 시스템(100) 내의 다른 기능성을 제공하도록 구성된 시스템(100) 내의 회로를 포함할 수 있다. NIC(106)는 시스템(100)과 다양한 유선 또는 무선 네트워크(108) 상에 상주하는 다른 디바이스 사이의 상호 작용성을 지원하도록 구성될 수 있는 물리적 계층 통신 리소스를 포함할 수 있다.
메인 플랫폼(102)은 예를 들어 프로세싱 회로(110), 프로세싱 지원 회로(112) 및 메모리 회로(114)를 포함할 수 있다. 프로세싱 회로(110)는 개별 구성요소 내에 위치된 하나 이상의 프로세서를 포함할 수 있고, 또는 대안적으로 단일 구성요소 내에(예를 들어, 시스템-온-칩(SoC) 구성) 하나 이상의 프로세싱 코어를 포함할 수 있다. 예시적인 프로세서는 Pentium, Xeon, Itanium, Celeron, Atom, Core i-시리즈 제품군에서의 것들을 포함하는 인텔 코포레이션으로부터 입수 가능한 다양한 X86-기반 마이크로프로세서를 포함할 수 있다. 프로세싱 회로(110)는 프로세싱 지원 회로(112)를 사용하여 시스템(100) 내의 다른 회로와 통신하도록 구성될 수 있다. 프로세싱 지원 회로(112)는 예를 들어 메모리 제어기, 그래픽 제어기, 버스 제어기 등을 포함하는 프로세싱 회로(110)를 지원하기 위한 코어 논리 칩셋을 포함할 수 있다. 프로세싱 회로(110)는 프로세싱 지원 회로(112)를 통해 서브시스템(104) 및 NIC(106)와 같은 시스템(100) 내의 다른 회로와 상호 작용할 수도 있다. 프로세싱 지원 회로(112)는 예를 들어 인텔 코포레이션에 의해 제조되는 Northbridge 및 Southbridge 칩셋과 같은 2개 이상의 개별 집적 회로(IC)를 포함하는 칩셋으로서 구체화될 수도 있지만, 프로세싱 지원 회로(112) 내에 통상적으로 포함된 기능성의 일부 또는 모두는 또한 프로세싱 회로(110)에서 발견될 수 있다.
프로세싱 회로(110)는 인스트럭션을 실행하도록 구성될 수 있다. 인스트럭션은 실행될 때, 프로세싱 회로(108)가 예를 들어 데이터 판독(액세싱), 데이터 기록(저장), 데이터 프로세싱, 데이터 포뮬레이팅, 데이터 생성, 데이터 전환, 데이터 변환 등과 같은 기능을 수행하게 하는 프로그램 코드를 포함한다. 메모리 회로(114)는 고정식 또는 이동식 포맷의 랜덤 액세스 메모리(RAM) 및/또는 판독 전용 메모리(ROM)를 포함할 수 있다. RAM은 예를 들어 정적 RAM(SRAM) 또는 동적 RAM(DRAM)과 같은 시스템(100)의 동작 중에 정보를 보유하도록 구성된 메모리를 포함할 수 있다. 예를 들어, 바이오스 메모리와 같은 ROM은 시스템(100)이 활성화할 때 인스트럭션을 제공하도록 구성될 수도 있다. ROM의 다른 예는 전자 프로그램가능 ROM(EPROM), 플래시 등과 같은 프로그램가능 메모리를 포함한다. 고정식 및/또는 이동식 메모리의 다른 실시예는 플로피 디스크, 하드 드라이브 등과 같은 자기 메모리, 고체 상태 플래시 메모리(예를 들어, eMMC 등)와 같은 전자 메모리, 이동식 메모리 카드 또는 스틱(예를 들어, uSD, USB 등), 콤팩트 디스크-기반 ROM(CD-ROM), 홀로그래픽 메모리 등과 같은 광학 메모리를 포함한다.
일 실시예에서, 적어도 하나의 애플리케이션(116)은 시스템(100)의 메모리 회로(114) 내에서 실행하도록 구성될 수 있다. 예를 들어, 애플리케이션(116)은 시스템(100)의 운영 체제의 부분(예를 들어, 서비스)일 수 있고, 시스템(100)에 의해 자동으로 실행될 수 있고, 시스템(100)의 사용자에 의해 실행될 수 있는 등이다. 애플리케이션(116)은 시스템(100)의 동작을 지원하고, 사용자-요구 기능(예를 들어, 통신, 엔터테인먼트, 생산성, 네비게이션 등)을 제공하고, 외부 정보 소비자(예를 들어, 네트워크(108) 상의 디바이스)에 정보를 제공하도록 구성될 수 있다. 실행 중에, 애플리케이션(116)은 정보를 저장하기 위한 메모리 회로(114) 내의 공간을 요구할 수도 있다(예를 들어, 애플리케이션 버퍼(118)). 예를 들어, 애플리케이션(116)이 네트워크(108) 상에 상주하는 디바이스와 상호 작용하도록 구성되는 경우에, 애플리케이션 버퍼(118)는 NIC(106)를 거쳐 네트워크(108)에 전송될 정보 또는 대안적으로 NIC(106)를 거쳐 네트워크(108)로부터 수신된 정보를 저장할 수도 있다. NIC 버퍼(120)는 네트워크(108) 상에서의 전송을 위해 시스템(100)으로부터(예를 들어, 애플리케이션(118)으로부터) 정보를 수신하고 저장하고, 또는 시스템(100) 내의 소비자(예를 들어, 애플리케이션(118))를 위한 네트워크(108)로부터 정보를 수신하도록 구성될 수 있다.
RDMA(122)에 앞서, 메인 플랫폼 프로세싱 리소스(예를 들어, 프로세싱 회로(110) 및/또는 프로세싱 지원 회로(112))는 버퍼(120)로부터 버퍼(118)로 정보를 전달하도록(예를 들어, 애플리케이션(116)에 의한 사용을 위해), 그리고 버퍼(118)로부터 버퍼(120)로 정보를 전달하도록(예를 들어, 네트워크(108)로의 전송을 위해) 요구될 것이다. 이 방식으로 정보를 전달하는 것은 정보가 버퍼(118, 120) 사이에서 전달되게 하지만, 계통적 한계를 받게 될 수도 있다. 예를 들어, 프로세싱 회로(110) 및/또는 프로세싱 지원 회로(112)가 시스템(100) 내의 다른 작업을 취급하여 분주해질 가능성이 있고, 따라서 버퍼(118, 120) 사이의 정보의 전달은 지연될 수도 있는데, 이는 이어서 애플리케이션(116)의 실행의 지연시간을 유발할 수 있고 시스템(100)의 성능에 악영향을 미칠 수도 있다. RDMA(122)는 메인 플랫폼 프로세싱 리소스를 수반하지 않고 버퍼(118, 120) 사이에 직접 정보를 전달함으로써 이 상황을 완화하는 것을 돕는다. 그러나, 현존하는 RDMA 프로토콜은 또한 몇몇 제한을 받게 된다. 메인 플랫폼 프로세싱 리소스는 시스템(100) 내의 다른 액티비티를 위해 리소스를 비우기 위해 물리적 메모리의 콘텐트를 가상 메모리(예를 들어, 시스템(100)을 위해 요구된 물리적 메모리의 양을 감소시키기 위해 물리적 메모리를 시뮬레이팅하는 영구 저장 장치)에 예기치 않게 이동시킬 수도 있다. 정보 전달 중에 가상 메모리로 애플리케이션 버퍼(118)의 콘텐트를 이동시키는 것은 부정확한 정보가 전달되게 할 것이고, 따라서 전달이 오손된다. 애플리케이션 버퍼(18)의 콘텐트가 이동하는 것을 방지하기 위해, 애플리케이션 버퍼(18)는 현존하는 RDMA 프로토콜이 정보를 전달할 수 있기 전에 먼저 등록되어야 한다. 버퍼는 이어서 전달이 완료되어 메모리가 재차 동적 재할당을 위해 이용 가능한 애플리케이션 버퍼(118)에 의해 사용되게 한 후에 등록해제되어야 한다. 이 요구는 사전 등록될 수 있기 때문에(예를 들어, 시스템(100)의 활성화로부터 NIC(106)에 영구적으로 등록될 수 있음) NIC 버퍼(120)에 적용되지 않을 수도 있다. 등록 및 등록해제는 시스템(100)의 메인 플랫폼 프로세싱 리소스에 의해 조화되고, 이는 재차 프로세싱 회로(110) 및/또는 프로세싱 지원 회로(112)가 시스템(100) 내의 다른 액티비티로 분주한 것에 기인하여 잠재적인 지연을 RDMA 트랜잭션에 인가한다.
일 실시예에서, RDMA(122)의 동작은 하나 이상의 중간 버퍼(124)의 사용을 통해 향상될 수도 있다. 예를 들어, 정보는 등록 및 등록해제 중에 "소스" 버퍼(예를 들어, 애플리케이션 버퍼(118))로부터 직접 중간 버퍼(124)로 전달될 수도 있어, 이들 동작에 의해 발생된 지연의 일부 또는 모두를 제거한다. 이 방식으로, 소스 버퍼가 일반적으로 등록이 완료하는 것을 대기하면서 아이들링하는 시간이 정보를 전달하는데 사용될 수 있고, 소스 버퍼가 등록되는 동안 전달해야 하는 정보의 양이 감소된다. 도 2는 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 RDMA를 사용하는 예시적인 정보 전달을 도시한다. 도 2의 예에서, 소스 버퍼(200)는 타겟 버퍼(202)에 정보를 전달하려고 시도한다. 소스 버퍼(200)(예를 들어, 애플리케이션 버퍼(118))는 사전 등록되지 않고, 따라서 전달의 기간 동안 메모리 회로(114) 내의 그 콘텐트의 완전성을 유지하도록 등록되어야 한다. 타겟 버퍼(202)(예를 들어, NIC 버퍼(120))는 사전 등록된다. 소스 버퍼(200)를 위한 등록은 204에서 개시된다. 동시에 또는 그 직후에, 소스 버퍼(200)는 206에 도시된 바와 같이 중간 버퍼(예를 들어, 등록 버퍼(124A))에 정보를 복사하기 시작하도록 구성될 수 있다. 등록 버퍼(124A)는 소스 버퍼(200)로부터 정보를 수신하고 정보를 타겟 버퍼(202)에 전달하도록 구성된 사전 등록된 버퍼일 수 있다. 등록 버퍼는 예를 들어 16 Kb와 같은 설정된 크기를 가질 수도 있고, 또는 예를 들어 소스 버퍼(200)를 등록하기 위해 소요되는 시간량에 기초하여 동작 중에 결정될 수도 있는 가변 크기를 가질 수 있다. 예를 들어, 등록은 메인 플랫폼(102)이 다른 작업으로 분주하면 더 오래 소요될 수도 있고, 그 결과 등록 버퍼(124A)의 크기는 소스 버퍼(200)로부터 더 많은 정보를 수신하도록 증가될 수 있다. 등록 버퍼(124A)의 크기는 등록 중에 전달될 총 정보량에 동일할 필요는 없고, 일 실시예에서 등록 버퍼(124A)는 그가 수신함에 따라 정보를 계속 전달하도록 구성될 수 있고, 따라서 등록 중에 전달된 모든 정보를 유지하는 경우는 결코 없다.
소스 버퍼(200)는 특정 임계치가 도달할 때까지 등록 버퍼(124A)에 정보를 계속 전달하도록 구성될 수 있다. 예를 들어, 정보는 오프셋이 전달을 위한 정보의 양에 기초하여 도달할 때까지, 특정 메모리 어드레스가 도달할 때까지, 등록이 계속되는 동안 등에 등록 버퍼(124A)에 전달될 수 있다. 일 실시예에서, 등록 버퍼(124A)는 RDMA를 거쳐 소스 버퍼로부터 직접 타겟 버퍼(208)로 수신된 정보를 기록하도록 구성될 수 있다. 예를 들어, 등록 버퍼(124A)는 소스 버퍼(200)로부터 수신된 정보가 타겟 버퍼(202)에 직접 전달되게 하도록 타겟 버퍼(202)에 하나 이상의 RDMA_post_write 명령을 발행할 수 있다. 소스 버퍼(200)가 등록 버퍼(124A)에 정보를 전달할 수 있고 등록 버퍼(124A)가 타겟 버퍼(202)에 정보를 전달할 수 있는 예시적인 방법론이 도 3에 상세히 설명된다.
등록은 210에서 완료될 수 있고, 동시에 또는 그 직후에 소스 버퍼(200)는 212에 도시된 바와 같이 소스 버퍼(200)로부터 직접 타겟 버퍼(200)에 정보가 전달되게 하도록 구성될 수 있다. 예를 들어, 소스 버퍼(200)는 RDMA 기록 명령을 타겟 버퍼(202)에 발행하여 정보가 이제 등록된 소스 버퍼(200)로부터 직접 타겟 버퍼(202)에 전달되게 한다. 동일한 또는 상이한 실시예에서, RDMA 기록 명령(212)이 발행된 동시에 또는 직후에, 소스 버퍼(200)는 또한 214에 도시된 바와 같이 소스 버퍼(200)의 저부 부근으로부터 다른 중간 버퍼(예를 들어, 등록해제 버퍼(124B))로 정보를 복사하기 시작하도록 구성될 수도 있다. 등록 버퍼(124B)에 전달된 정보의 시작 어드레스 및 양은 예를 들어 소스 버퍼(200)가 등록해제를 완료하는데 소용될 예측된 시간에 기초하여 결정될 수 있는 크기 또는 오프셋에 기초할 수도 있다. 216에서, 212에서 개시되었던 정보의 전달이 완료될 수 있고, 등록해제가 개시될 수도 있다. 등록해제 버퍼(124B)는 이어서 218에 도시된 바와 같이 소스 버퍼(200)로부터 타겟 버퍼(202)로 그가 수신한 정보를 전달하도록 구성될 수 있다. 예를 들어, 등록해제 버퍼(124A)는 소스 버퍼(200)로부터 수신된 정보가 직접 타겟 버퍼(202)에 전달되게 하도록 타겟 버퍼(202)에 하나 이상의 RDMA_post_write 명령을 발행할 수도 있다. 소스 버퍼(200)가 등록해제 버퍼(124B)에 정보를 전달할 수 있고 등록해제 버퍼(124B)가 타겟 버퍼(202)에 정보를 전달할 수 있는 예시적인 방법론이 도 4에 상세히 설명된다.
도 3은 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 RDMA 중에 등록의 예를 도시한다. 등록은 204에서 개시된다(예를 들어, "IR"). 예시적인 개시 명령이 300에 개시되어 있다. 명령은 정보를 전달하기 전에 발생할 필요가 없는 점에서 "비동기식"인 것으로 간주될 수도 있다. 명령은 등록될 메모리의 시작 어드레스 및 길이를 포함하는 RDMA 등록 메모리 명령일 수도 있다. 예를 들어, 등록될 메모리의 시작은 버퍼의 시작에 등록 오프셋 크기를 더한 값일 수 있다. 등록 오프셋 크기는 등록 중에 등록 버퍼(124A)에 기록될 데이터의 양을 나타낼 수 있다. 등록될 메모리의 길이는 등록 오프셋 크기 및 전달이 등록해제 중에 발생할 것이면, 등록해제 오프셋 크기가 그로부터 감산되는 소스 버퍼(200)의 크기일 수도 있다. 예를 들어, 등록될 정보의 양은 도 2의 점선(210, 216) 사이의 소스 버퍼(200) 내의 정보일 수도 있다. 등록 오프셋 크기는 206A 내지 206D에 도시된 바와 같이 실험적으로 결정될 수도 있다. 사전 결정된 초기 블록 크기는 206A에서 소스 버퍼(200)로부터 등록 버퍼(124A)로 복사될 수도 있다. 블록의 전달이 206B에서 완료될 때, 블록은 208A에 도시된 바와 같이 등록 버퍼(124A)로부터 전달될 수도 있다. 정보의 블록은 등록 버퍼(124A)에 전달될 정보의 양이 최대 오프셋 미만일 때 또는 등록이 완료되지 않을 때 등록 버퍼(124A)에 계속 복사될 수도 있다. 일 실시예에서, 전달된 각각의 정보의 블록(예를 들어, 206C, 206D 등)은 크기가 증가될 수 있고(예를 들어, 2배), 수신이 완료되자마자(예를 들어, 208B, 208C 등) 등록 버퍼(124A)로부터 전달될 수도 있다. 이들 동작의 실시예를 설명하는 예시적인 의사코드는 이하와 같다.
Figure pct00010
"Initial_Size"는 시스템(100)에서 사전 결정될 수 있는 초기 블록 크기이고, "registration_offset"은 등록 중에 복사되도록 허용되는 오프셋의 최대 크기이고, "registration_buffer"는 등록 버퍼(124A)의 시작 어드레스이고, "offset"은 등록 버퍼에 복사된 정보의 누적량이고, "source_buffer"는 소스 버퍼의 시작 어드레스이고, "size"는 전달되는 현재 정보 블록 크기이고, "target_buffer"는 타겟 버퍼(202)의 시작 어드레스이고, "rkey"는 타겟 버퍼(202)에 액세스하는데 사용된 보안키이다. 상기 예시적인 의사코드에서, 복사 루프의 종료시에, 등록 오프셋 크기는 복사 루프로부터 발생하는 오프셋 크기로서 설정되고(registration_offset = offset), 따라서 적절한 등록 오프셋 크기를 실험적으로 설정한다. 예를 들어, 시스템(100)이 분주하면 등록이 더 오래 소요될 것이고, 복사 루프는 정보의 최대량이 이동될 때 종료될 가능성이 가장 많다(예를 들어, offset ≥ registration_offset). 이러한 경우에, 등록 오프셋은 "offset"이 현재 등록 오프셋에 동일할 것이기 때문에 변경되지 않을 것이다. 그러나, 등록은 시스템(100)이 분주하지 않으면 신속하게 진행할 수 있고, 복사 루프는 이어서 등록의 종료시에(예를 들어, 등록이 완료됨) 종료될 가능성이 가장 많을 것이고, 등록 오프셋의 크기는 등록 중에 이동된 정보량에 동일하게 설정될 것이다. 이 방식으로, 등록 중에 이동된 데이터의 양은 시스템(100)의 현재 조건을 나타낼 수도 있다. 업데이트된 등록 오프셋 크기는 시스템(100)이 예를 들어 초기 정보 블록의 크기(예를 들어, Initial_size)를 조정하고, 등록 버퍼(142A)의 크기를 조정하고, 등록해제 오프셋 및/또는 버퍼(142B)의 크기를 조정하게 할 수도 있다.
등록이 240에서 완료된 후에(예를 들어, "CR"), RDMA 명령이 212'에서 발행되어 등록 버퍼(124A)에 미리 전달되어 있지 않은 정보가 타겟 버퍼(202)에 직접 전달되게 할 수 있고, 또한 등록해제 중에 전달될 임의의 정보를 고려할 수도 있다. RDMA 기록 명령(212')은 예를 들어 소스 버퍼 시작 어드레스, 길이, 타겟 버퍼 시작 어드레스 및 액세스 키를 파라미터로서 포함할 수 있다. 도 3에 도시된 예시적인 rdma_post_write 명령에서, 소스 버퍼 시작 어드레스는 등록 오프셋 크기(예를 들어, 등록 버퍼에 미리 전달된 정보의 양)를 포함하는 버퍼의 실제 시작일 수도 있다. 길이는 등록 오프셋 크기 및 등록해제 오프셋 크기(예를 들어, 등록해제 중에 전달될 정보의 양)가 그로부터 감산되는 소스 버퍼(200)의 버퍼 크기이다. 타겟 버퍼 시작 어드레스는 등록 오프셋 크기를 더한 타겟 버퍼의 실제 시작 어드레스이고(예를 들어, 등록 중에 미리 전달되었던 정보 상에 기록하는 것을 회피하기 위해), rkey는 소스 버퍼(200)가 타겟 버퍼(202)에 직접 정보를 전달하는 것을 허용하는 보안키이다.
도 4는 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 RDMA 중의 등록해제의 예를 도시한다. RDMA 기록 명령(212')이 발행된 동시에 또는 직후에, 소스 버퍼(200)는 또한 214에 도시된 바와 같이 버퍼의 저부 부근으로부터 등록해제 버퍼(124B)로 정보를 복사하기 시작하도록 구성될 수도 있다. 등록해제 버퍼(124B)로 정보를 복사하는 적어도 하나의 장점은, 소스 버퍼(200)가 등록되는 동안 더 적은 정보가 전달되도록 요구된다는 것이다(예를 들어, 버퍼 크기 - 등록 오프셋 - 등록해제 오프셋). 그 결과, 등록해제는 더 신속하게 시작될 수 있고, 소스 버퍼(200)에 의해 점유된 메모리(예를 들어, 메모리 회로(114))는 동적 재할당을 위해 더 신속하게 이용 가능해질 수도 있다. 일 실시예에서, 정보는 RDMA 기록(212')이 진행중인 동안 214에 도시된 바와 같이 등록해제 버퍼(124B)에 복사될 수 있고, 복사(214)는 RDMA 기록(212')이 완료되는 것과 대략 동시에 완료된다. 소스 버퍼(200)의 등록해제는 이어서 216에 도시된 바와 같이 개시될 수 있고(예를 들어, "ID")(예를 들어, 모든 정보가 소스 버퍼(200)로부터 전달된 이후로), 동시에 또는 그 직후에 등록해제 버퍼(124B)는 218에 도시된 바와 같이 소스 버퍼(200)로부터 수신된 정보가 전달되게 할 수도 있다(예를 들어, 타겟 버퍼(202)로). 예를 들어, 등록해제 버퍼(124B)는 소스 버퍼(200)로부터 수신된 정보가 타겟 버퍼(202)에 직접 전달되게 하도록 타겟 버퍼(202)에 RDMA_post_write 명령을 발행할 수 있다. 218에서 타겟은 또한 "즉시 데이터"를 포함할 수 있다. RDMA에서, 즉시 데이터는 정보의 전달이 완료되었다는 것을(예를 들어, 전달된 정보가 이제 액세스될 수 있다는 것을) 수신 버퍼에 통지한다. 이들 동작의 예시적인 실시예를 설명하는 의사코드는 이하와 같다.
Figure pct00011
여기서, "deregistration_offset"은 등록해제 중에 기록될 정보의 양이고, "source_buffer_length"는 소스 버퍼(200)의 길이이다. 이 방식으로, RDMA 기록(212)이 완료된 후에 소스 버퍼(200)에서 전달되도록 여전히 남아 있을 정보(예를 들어, source_buffer + source_buffer_length - deregistration_offset)는 등록해제 버퍼(124B)에 복사될 수 있고, 이어서 명령(212')과 연계된 기록이 완료된 후에(예를 들어, wait_for_completion(rdma 기록(212')) 타겟 버퍼(202)에 전달된다.
도 5는 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 RDMA를 위한 예시적인 동작의 흐름도를 도시한다. 동작 500에서, 소스 버퍼 내의 정보는 다른 버퍼로(예를 들어, 타겟 버퍼로) 전달을 대기할 수도 있다. 소스 버퍼는 이어서 동작 502에서 메모리 등록을 개시할 수 있다. 전달된 정보의 양이 최대 크기(예를 들어, 등록 오프셋) 미만일 때 또는 등록이 동작 504에서 결정된 바와 같이 불완전할 때, 동작 506 내지 510에서 정보는 소스 버퍼로부터 등록 버퍼로, 이어서 등록 버퍼로부터 타겟 버퍼로 전달될 수 있다. 예를 들어, 동작 506에서, 정보의 블록은 소스 버퍼로부터 등록 버퍼로 직접 전달될 수 있다. 전달은 RDMA 기록 명령을 등록 버퍼에 발생함으로써 발생할 수 있고, 초기 블록 크기는 시스템(100) 내에서 사전 결정될 수 있다. 다음에, 동작 508에서, 정보 블록은 등록 버퍼로부터 타겟 버퍼로 직접 전달될 수 있다. 동작 510에서, 블록 크기는 증분될 수 있다(예를 들어, 블록 크기가 2배가 될 수 있음). 동작 504에서, 전달된 데이터의 양은 최대 크기 이상인 것으로 결정될 때 또는 등록이 완료될 때, 등록의 완료 후에 등록된 소스 버퍼로부터 타겟 버퍼로 직접 정보 전달이 예를 들어 타겟 버퍼에 RDMA 기록 명령을 발행함으로써 동작 512에서 개시될 수도 있다.
동작 512가 발생한 동시에 또는 직후에, 소스 버퍼로부터 직접 등록해제 버퍼로의 정보의 전달이 예를 들어 RDMA 기록 명령을 등록해제 버퍼에 발행함으로써 동작 514에서 개시될 수 있다. 이어서 동작 512에서 개시된 정보 전달이 이제 완료되었는지 여부에 대한 판정이 동작 516에서 행해질 수도 있다. 동작 512에서 개시된 정보 전달이 완료된 것으로 판정되면, 등록해제가 이어서 동작 518에서 개시될 수 있고, 이는 동작 520에서 등록해제 버퍼로부터 직접 타겟 버퍼로 정보의 전달로 바로 이어질 수 있다. 소스 버퍼로부터 타겟 버퍼로의 정보의 전달은 예를 들어 RDMA 기록 명령을 타겟 버퍼에 발행함으로써 발생할 수도 있다.
감소된 지연시간을 갖는 원격 직접 메모리 액세스의 예시적인 애플리케이션
감소된 지연시간을 갖는 RDMA가 현존하는 RDMA 프로토콜에서 요구되는 바와 같은 메모리 등록 및 등록해제에 따라 보여지는 지연시간을 감소시키도록 채용될 수도 있다. 그러나, 다양한 실시예에서, 이들 원리는 현존하는 RDMA 트랜잭션에서 보여지는 지연시간의 다른 잠재적인 소스를 더 제거하도록 적용될 수도 있다. 일 실시예에서, 정보는 소스 버퍼에 로컬하게 이용 가능한 타겟 버퍼 내의 이용 가능한 메모리 공간에 대응하는 어드레스 정보에 기초하여 소스 버퍼로부터 타겟 버퍼로 전달될 수 있어, 실질적으로 연속적인 정보의 스트림 또는 "스트리밍 정보"를 생성한다. 동일한 또는 상이한 실시예에서, 시스템(100)의 외부의 정보 소스는 NIC 버퍼를 스킵하고 정보를 직접 애플리케이션 버퍼에 전달할 수 있어, 정보 전달을 더 촉진하고 현존하는 RDMA에서와 같이 NIC 버퍼를 통해 통신하게 함으로써 발생된 지연시간을 제거한다.
도 6은 본 발명의 적어도 하나의 실시예에 따른 정보를 스트리밍하기 위해 감소된 지연시간을 갖는 RMDA를 사용하는 예를 도시한다. 일 실시예에서, 애플리케이션 버퍼(118')가 NIC 버퍼(120')에 정보를 전달하기 전에 또는 역으로 NIC 버퍼(120')가 애플리케이션 버퍼(118')에 정보를 전달하기 전에, 버퍼(118') 및/또는 버퍼(120')는 RDMA 기록을 위해 로컬 버퍼(600, 602)를 노출시키도록 구성될 수 있다. 예를 들어, 애플리케이션 버퍼(118')는 604에 도시된 바와 같이 RDMA를 통해 어드레스 버퍼(602) 내로 직접 어드레스 정보(예를 들어, 하나 이상의 스캐터-게더 엔트리(scatter-gather entry: SGE) 1 내지 n을 포함하는 스캐터-게더 리스트(SGL))를 기록하도록 구성될 수 있고, NIC 버퍼(120')는 606에 도시된 바와 같이 RDMA를 통해 어드레스 버퍼(600) 내에 직접 어드레스 정보(예를 들어, 하나 이상의 SGE 1 내지 n을 포함하는 SGL)를 기록하도록 구성될 수 있다. 예시적인 스캐터-게더 엔트리는 각각의 버퍼(118', 120') 내의 이용 가능한 메모리 공간에 대응하는 메모리 위치 정보(예를 들어, 어드레스)를 포함할 수 있다.
애플리케이션 버퍼(118')가 NIC 버퍼(120')에 전달을 위한 정보를 갖는 예시적인 동작에서, NIC 버퍼(120')는 606에 도시된 바와 같이 하나 이상의 SGE를 포함하는 SGL을 어드레스 버퍼(600)에 기록할 수 있다. 애플리케이션 버퍼는 또한 604에 도시된 바와 같이 SGL을 어드레스 버퍼(602)에 기록할 수 있지만, 애플리케이션 버퍼(118')로부터 NIC 버퍼(120')로 정보가 전달되는 것은 필수적인 것은 아니다. 애플리케이션 버퍼는 이어서 NIC 버퍼(120') 내의 이용 가능한 메모리 공간에 대응하는 어드레스를 검사하기 위해 어드레스 버퍼(600)에 액세스하도록 구성될 수 있다. 어떠한 SGE도 이용 가능하지 않으면(예를 들어, 버퍼가 비어 있고, 모든 현존하는 SGE가 사용되고 있는 등), 애플리케이션 버퍼(118')는 어드레스 버퍼(600)가 업데이트되어 있다는 표시를 위한 어드레스 버퍼(600)와 연계된 완료 대기열을 모니터링할 수 있다. 예시된 예에서, SGE 1이 이용 가능하고, 따라서 애플리케이션 버퍼(118')는 SGE 1에 의해 식별된 NIC 버퍼(120') 내의 메모리 공간 내에 직접 정보를 전달할 수 있다.
동일한 또는 상이한 실시예에서, 애플리케이션 버퍼(118')는 이어서 NIC 버퍼(120')에 정보를 전달하기 위한 방법을 결정할 수 있다. 예를 들어, 단지 소량의 정보만이 전달되면(시스템(100) 내에서 사전 결정될 수 있는 특정량 미만의 정보의 양), 애플리케이션 버퍼(118')는 608에 도시된 바와 같은 RDMA 인라인 데이터 기록 방법을 사용하여 정보를 전달하도록 구성될 수 있다. RDMA 데이터 인라인 기록 명령은 현존하는 RDMA 프로토콜에 규정되고, 소스 버퍼(예를 들어, 애플리케이션 버퍼(118'))에 먼저 등록할 필요 없이 소량의 정보를 전달하도록 채용될 수도 있다. 다양한 개시된 실시예에 따라 채용될 수도 있는 RDMA 인라인 데이터 기록 명령의 예는
Figure pct00012
일 수 있다.
여기서, "inline_size"는 RDMA 인라인 데이터 기록 명령을 통해 전달을 위한 정보의 양이고, "target_buffer_address"는 타겟 버퍼(예를 들어, NIC 버퍼(120')) 내의 이용 가능한 메모리 공간의 어드레스이다. 예를 들어, "target_buffer_address"는 어드레스 버퍼(600)로부터 얻어진 SGE에 기초하여 결정될 수 있다. 대량의 정보가 전달되면(예를 들어, 특정량보다 큰 정보의 양), 애플리케이션 버퍼(118')는 610에 도시된 바와 같이 감소된 지연시간을 갖는 RDMA를 사용하여 정보를 전달하도록 구성될 수 있다. 정보는 예를 들어 적어도 도 1 내지 도 5의 설명에서 본 명세서에 개시되었던 감소된 지연시간을 갖는 RDMA의 다양한 실시예에 따라 610에서 전달될 수 있다. 애플리케이션 버퍼(118')가 608에서 인라인 데이터 기록 방법을 사용하는지 또는 610에서 감소된 지연시간을 갖는 원격 직접 메모리 액세스를 사용하는지 여부에 무관하게, 정보 전달이 완료될 때, 애플리케이션 버퍼(118')는 612에 도시된 바와 같이 NIC 버퍼 완료 대기열(614)에 즉시 데이터를 더 기록할 수 있다. 612에서 즉시 데이터의 기록은 정보 전달이 완료되었다는 것과 정보에 액세스할 수도 있다는 것을 NIC 버퍼(120')에 통보한다. 도 6에 도시된 예는 애플리케이션 버퍼(118')로부터 NIC 버퍼(120')로의 정보의 전달을 도시하고 있지만, 이는 단지 본 명세서에서 설명을 위한 것일 뿐이라는 것을 주목하는 것이 중요하다. NIC 버퍼(120')가 도 6의 설명에서 전술된 것들에 유사한 동작들을 사용하여 애플리케이션 버퍼(118')에 정보를 전달하게 하는 것이 또한 가능할 것이다.
도 7은 본 발명의 적어도 하나의 실시예에 따른 정보를 스트리밍하기 위해 감소된 지연시간을 갖는 원격 직접 메모리 액세스를 사용하기 위한 예시적인 동작의 흐름도를 도시한다. 동작 700에서, 소스 버퍼(예를 들어, 도 6의 예에서 애플리케이션 버퍼(118'))는 로컬 어드레스 버퍼를 노출시킬 수 있다(예를 들어, 타겟 버퍼가 RDMA를 통해 로컬 어드레스 버퍼 내에 직접 어드레스 정보를 기록할 수 있도록). 동작 702에서, 소스 버퍼는 또한 다른 버퍼(예를 들어, 타겟 버퍼)의 노출된 버퍼 내에 직접 어드레스 정보(예를 들어, SGL)를 기록할 수 있다. 동작 702는 소스 버퍼가 타겟 버퍼에 정보를 전달하게 하기 위해 요구되지 않는 점에서 선택적이다. 동작 704에서, 소스 버퍼로부터 타겟 버퍼로 전달을 위한 정보가 존재하는지 여부에 대한 판정이 이어서 행해질 수도 있다. 동작 704에서, 전달을 위한 정보가 존재하는 것으로 판정되면, 소스 버퍼는 타겟 버퍼 내의 이용 가능한 메모리 공간에 대응하는 다음의 사용 가능한 어드레스(예를 들어, SGE)를 결정하기 위해 로컬 어드레스 버퍼를 검사할 수 있다. 적어도 하나의 SGE가 이용 가능한지 여부에 대한 판정이 이어서 동작 708에서 행해질 수도 있다. 동작 708에서, 어떠한 SGE도 이용 가능하지 않은 것으로 판정되면(예를 들어, 로컬 어드레스 버퍼가 비어 있고, 모든 SGE가 사용되고 있는 등), 동작 710에서 로컬 어드레스 버퍼를 위한 완료 대기열이 업데이트 표시를 위해 모니터링될 수도 있다. 이어서 업데이트 표시가 완료 대기열 내에서 수신되었는지 여부에 대한 판정이 동작 712에서 행해질 수도 있다. 완료 대기열은 업데이트 표시가 수신되어 있다고 판정될 때까지 모니터링될 수도 있다. 완료 대기열 내의 업데이트 표시의 수신은 소스 버퍼가 동작 706에서 정보를 전달하는데 사용될 수도 있는 SGE를 위한 로컬 어드레스 버퍼를 재차 검사하게 할 수도 있다.
사용 가능한 SGE가 동작 708에서 존재하는 것으로 판정되면, 동작 714에서, "소량"의 정보가 전달되어야 하는지 여부에 대한 추가의 판정이 행해질 수도 있다. 예를 들어, 동작 714에서, 전달될 정보의 양은 시스템(100) 내에서 사전 결정된 특정 데이터의 양에 비교될 수도 있다. 전달을 위한 정보의 양이 작은 것으로 판정되면(예를 들어, 특정량 미만), 정보는 동작 716에서 RDMA 인라인 데이터 기록 방법을 통해 전달될 수도 있다. 그렇지 않으면, 동작 718에서, 정보는 감소된 지연시간을 갖는 RDMA를 사용하여 전달될 수도 있다.
도 8은 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 RDMA를 사용하여 애플리케이션 버퍼에 직접 정보를 전달하는 외부 정보 소스의 예를 도시한다. 외부 정보 소스(800)(예를 들어, 네트워크(108) 상의 디바이스)는 시스템(100) 내의 애플리케이션 버퍼(118")에 정보를 전달하도록 요구할 수도 있다. 현존하는 RDMA 프로토콜에서, 정보는 NIC 버퍼(120')에 먼저 전달되어야 할 것인데, 이는 이어서 정보를 애플리케이션 버퍼(118")에 전달할 것이다. 그러나, 감소된 지연시간을 갖는 RDMA의 적어도 하나의 애플리케이션에서, 외부 정보 소스(800)가 애플리케이션 버퍼(118")에 직접 정보를 전달하게 하는 것이 가능할 수도 있어, NIC 버퍼(120')를 스킵하고 정보 전달을 위한 실질적인 지연시간 감소를 야기한다. 일 실시예에서, 외부 어드레스 버퍼(EAB)(802)는 애플리케이션 버퍼(118")와 연계될 수 있고 외부 정보 소스(800)에 액세스 가능할 수 있다. EAB(802)는 그 내로 정보가 직접 전달될 수 있는 애플리케이션 버퍼(118") 내의 이용 가능한 메모리 공간에 대응하는 어드레스 정보(예를 들어, SGE 1 내지 n)를 외부 정보 소스(800)에 통보하도록 채용될 수 있다. 초기에, 애플리케이션 버퍼(118")는 어드레스 정보(예를 들어, SGE 1 내지 n)를 EAB(802)에 제공하도록 구성될 수 있다. 외부 정보 소스(800)는 804에 도시된 바와 같이 이용 가능한 메모리 공간에 대응하는 어드레스 정보(예를 들어, 적어도 하나의 SGE)에 대해 EAB(802)를 검사하도록 구성될 수 있다. 적어도 하나의 SGE가 이용 가능하면(예를 들어, SGE 1), 외부 정보 소스(800)는 806에 도시된 바와 같이 애플리케이션 버퍼(118") 내로 직접 정보를 전달하기 시작할 수도 있다.
그러나, EAB(802)를 검사한 후에, 외부 정보 소스(800)가 808에 도시된 바와 같이 어떠한 SGE도 이용 가능하지 않다고(예를 들어, EAB(802)가 비어 있고, 모든 SGE가 사용되고 있는 등) 판정하면, 외부 소스(800)는 810에 도시된 바와 같이 NIC 버퍼(120')에 정보를 전달하기 시작하도록 구성될 수 있다. NIC 버퍼(120')는 예를 들어 감소된 지연시간(610)을 갖는 RDMA를 거쳐 애플리케이션 버퍼(118")에 정보를 전달하기 시작하도록 구성될 수 있다. 일 실시예에서, 외부 정보 소스(800)는 NIC 버퍼(120')로의 정보의 전달 중에 EAB(802)를 계속 검사하여 812에 도시된 바와 같이 메모리 공간이 애플리케이션 버퍼(118")에서 이용 가능하게 되는지를 판정하도록 구성될 수도 있다. 예를 들어, 정보 소스(800)는 업데이트 표시를 위해 EAB(802)와 연계된 완료 대기열을 모니터링할 수 있고, 업데이트가 발생하였다고 판정할 때, 이용 가능한 SGE에 대해 EAB(802)를 검사할 수 있다. 외부 정보 소스(800)가 메모리 공간이 직접 전달을 위해 애플리케이션 버퍼(118") 내에서 이용 가능한 것으로 판정하면, 외부 정보 소스(800)는 애플리케이션 버퍼(118")에 직접 데이터를 전달하기 시작(또는 재개)할 수 있다. 일 실시예에서, 외부 소스(800)로부터 전달된 모든 정보는 적절한 수신 순서로 수신된 정보를 배치하는데 채용될 수 있는 시퀀스 번호를 포함할 수 있다. 예를 들어, 외부 소스(800)가 NIC 버퍼(120')에 몇몇 정보를 전달하고 이어서 애플리케이션 버퍼(118")에 직접 정보를 전달하기 시작하면, 애플리케이션 버퍼(118")에 직접 전달된 정보는 NIC 버퍼(120')에 먼저 전달된 정보에 할당된 시퀀스 번호 다음에 있는 시퀀스 번호들을 포함할 수도 있다. 이 방식으로, 애플리케이션 버퍼(118")는 2개의 소스(예를 들어, 외부 소스(800) 및 NIC 버퍼(120'))로부터 수신된 정보를 정확한 수신 순서로 재정렬하는 것이 가능할 수도 있다.
도 9는 본 발명의 적어도 하나의 실시예에 따른 감소된 지연시간을 갖는 RDMA를 사용하여 애플리케이션 버퍼에 직접 정보를 전달하는 외부 정보 소스에 대한 예시적인 동작의 흐름도를 도시한다. 동작 900에서, 외부 정보 소스(예를 들어, 네트워크(108) 상의 디바이스)는 애플리케이션 버퍼로 전달을 위한 정보를 갖는 것으로 판정할 수도 있다. 동작 902에서, 외부 정보 소스는 그 내로 정보가 직접 전달될 수 있는 애플리케이션 버퍼 내의 이용 가능한 메모리 공간에 대응한 어드레스 정보(예를 들어, 적어도 하나의 SGE)가 이용 가능한지를 판정하기 위해 애플리케이션 버퍼와 연계된 외부 어드레스 버퍼를 검사할 수도 있다. 동작 904에서, 이용 가능한 어드레스 공간에 대응하는 적어도 하나의 SGE가 존재하는 것으로 판정되면, 동작 906에서 정보는 외부 정보 소스로부터 직접 애플리케이션 버퍼로 전달될 수 있다. 대안적으로, 동작 904에서, 어떠한 SGE도 존재하지 않는 것으로 판정되면(예를 들어, 외부 어드레스 버퍼가 비어 있고, 모든 SGE가 사용되고 있는 등), 동작 908에서 외부 소스는 NIC 버퍼에 정보를 전달하기 시작할 수도 있다.
NIC 버퍼에 정보를 전달하는 동안, 외부 정보 소스는 동작 910에서 애플리케이션 버퍼 내의 이용 가능한 메모리 공간에 대응하는 어드레스 정보에 대한 외부 어드레스 버퍼를 계속 검사할 수도 있다. 예를 들어, 외부 소스는 외부 어드레스 버퍼가 업데이트되어 있다는 표시에 대해 외부 어드레스 버퍼와 연계된 완료 대기열을 모니터링할 수 있다. 외부 정보 소스는 동작 912에서 그 내로 정보가 직접 전달될 수 있는 애플리케이션 버퍼 내의 이용 가능한 메모리 공간에 대응하는 적어도 하나의 SGE가 존재하는 것으로 판정될 때까지 NIC 버퍼에 정보를 계속 전달할 수 있다. 동작 914에서, 외부 정보 소스는 애플리케이션 버퍼에 정보를 직접 전달하기 시작(또는 재개)할 수도 있다. 애플리케이션 버퍼 내로 직접 전달된 정보는, NIC 버퍼에 전달된 정보가 이제 애플리케이션 버퍼에 직접 전달되는 정보를 처리하는 것을 표시하도록 시퀀싱될 수도 있다(예를 들어, 시퀀스 번호를 포함할 수 있음).
도 5, 도 7 및 도 9는 상이한 실시예에 따른 다양한 동작을 도시하고 있지만, 도 5, 도 7 및 도 9에 도시된 모든 동작이 다른 실시예를 위해 필수적인 것은 아니라는 것이 이해되어야 한다. 실제로, 본 발명의 다른 실시예에서, 도 5, 도 7 및 도 9에 도시된 동작 및/또는 본 명세서에 설명된 다른 동작은 어떠한 도면에도 구체적으로 도시되어 있지 않은 방식으로 조합될 수도 있지만, 여전히 발명에 완전히 따른다는 것이 본 본 명세서에서 완전히 고려된다. 따라서, 하나의 도면에 정확하게 도시되어 있지 않은 특징 및/또는 동작들에 관련된 청구항들이 본 발명의 범주 및 내용 내에서 간주된다.
본 명세서의 임의의 실시예에 사용될 때, 용어 "모듈"은 임의의 전술된 동작을 수행하도록 구성된 소프트웨어, 펌웨어 및/또는 회로를 칭할 수 있다. 소프트웨어는 비일시적 컴퓨터 판독가능 저장 매체 상에 기록된 소프트웨어 패키지, 코드, 인스트럭션, 인스트럭션 세트 및/또는 데이터로서 구체화될 수 있다. 펌웨어는 메모리 디바이스 내에 하드 코딩된(예를 들어, 비휘발성) 코드, 인스트럭션 또는 인스트럭션 세트로서 구체화될 수 있다.
"회로"는 본 명세서의 임의의 실시예에서 사용될 때, 예를 들어 단독으로 또는 임의의 조합으로, 유선 회로, 하나 이상의 개별 인스트럭션 프로세싱 코어를 포함하는 컴퓨터 프로세서와 같은 프로그램가능 회로, 상태 머신 회로 및/또는 프로그램가능 회로에 의해 실행된 인스트럭션을 저장하는 펌웨어를 포함할 수 있다. 모듈은 집합적으로 또는 개별적으로, 예를 들어 집적 회로(IC), 시스템 온 칩(SoC), 데스크탑 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 서버, 스마트폰 등과 같은 대형 시스템의 부분을 형성하는 회로로서 구체화될 수도 있다.
InfiniBandTM 통신 프로토콜은 2001년 6월 발표된 "InfiniBand Architecture Specification"이라 명명된 InfiniBand Trade Association(IBTA)에 의해 발표된 InfiniBand 사양 및/또는 이 사양의 이후의 버전에 순응하거나 호환성이 있을 수 있다.
iWARP 통신 프로토콜은 RDMA 콘소시엄에 의해 개발되어 2007년 발표된 "RDMA over Transmission Control Protocol(TCP) standard"라 명명된 Internet Engineering Task Force(IETF)에 의해 유지되고 발표되는 iWARP 표준 및/또는 이 표준의 이후의 버전에 순응하거나 호환성이 있을 수도 있다.
본 명세서에 설명된 임의의 동작은 개별적으로 또는 조합으로, 하나 이상의 프로세서에 의해 실행될 때 방법들을 수행하는 인스트럭션이 그 위에 저장되어 있는 하나 이상의 저장 매체를 포함하는 시스템에서 구현될 수 있다. 여기서, 프로세서는 예를 들어 서버 CPU, 모바일 디바이스 CPU 및/또는 다른 프로그램가능 회로를 포함할 수 있다. 또한, 본 명세서에 설명된 동작은 하나 초과의 상이한 물리적 위치에서 프로세싱 구조체와 같은 복수의 물리적 디바이스를 가로질러 분포될 수도 있다는 것이 의도된다. 저장 매체는 임의의 유형의 탠저블 매체, 예를 들어 하드 디스크, 플로피 디스크, 광학 디스크, 콤팩트 디스크 판독 전용 메모리(CD-ROM), 콤팩트 디스크 재기록가능(CD-RW) 및 자기 광학 디스크를 포함하는 임의의 유형의 디스크와, 반도체 디바이스, 예를 들어 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 예를 들어 동적 및 정적 RAM, 소거가능 프로그램가능 판독 전용 메모리(EPROM), 전기적 소거가능한 프로그램가능 판독 전용 메모리(EEPROM), 플래시 메모리, 고체 상태 디스크(SSD), 임베디드 멀티미디어 카드(eMMC), 보안 디지털 입출력(SDIO) 카드, 자기 또는 광학 카드 또는 전자 인스트럭션을 저장하기에 적합한 임의의 유형의 매체를 포함할 수도 있다. 다른 실시예는 프로그램가능 제어 디바이스에 의해 실행된 소프트웨어 모듈로서 구현될 수도 있다.
본 발명은 감소된 지연시간을 갖는 원격 직접 메모리 액세스(RDMA)를 위한 시스템 및 방법을 제공한다. RDMA는 실질적인 프로세싱의 요구 없이 네트워킹된 디바이스 내의 메모리 버퍼들 사이에 직접 정보가 전달되게 한다. RDMA는 미리 사전 등록되지 않은 버퍼에 대해 등록/등록해제를 요구하지만, 감소된 지연시간을 갖는 RDMA는 등록/등록해제 중에 중간 버퍼에 정보를 전달하여, 일반적으로 이들 프로세스가 완료하기를 대기하는데 낭비되는 시간을 활용하고, 소스 버퍼가 등록되는 동안 전달을 위한 정보의 양을 감소시킨다. 이 방식으로, RDMA 트랜잭션은 더 신속히 완료될 수도 있다. 감소된 지연시간을 갖는 RDMA는 다양한 정보 트랜잭션을 촉진하도록 이용될 수도 있다. 예를 들어, 감소된 지연시간을 갖는 RMDA는 디바이스 내의 정보를 스트리밍하도록 활용될 수도 있고 또는 디바이스의 외부의 정보 소스를 위한 정보를 애플리케이션 버퍼에 직접 전달하는데 사용될 수도 있다.
이하의 예는 다른 실시예에 관한 것이다. 일 예시적인 실시예에서, 시스템이 제공된다. 시스템은 적어도 정보를 수신하도록 구성된 타겟 버퍼 및 정보를 수신하고 전송하도록 구성된 중간 버퍼를 포함하는 메모리 회로를 포함할 수 있다. 메모리 회로는 소스 버퍼의 등록 중에 정보가 중간 버퍼로 전달되게 하도록 구성된 소스 버퍼를 또한 포함할 수도 있다. 소스 버퍼는 등록이 완료된 후에 부가의 정보가 직접 타겟 버퍼에 전달되게 하도록 더 구성될 수도 있다.
상기 예시적인 시스템은, 소스 버퍼가 원격 데이터 메모리 액세스(RDMA)를 사용하여 정보가 전달되게 하도록 구성되게 더 구성될 수도 있다.
상기 예시적인 시스템은, 정보가 중간 버퍼로 전달되게 하도록 구성되는 것은 소스 버퍼가 복사된 정보의 양 중 적어도 하나가 등록 오프셋보다 작을 때 또는 소스 버퍼의 등록이 완료되지 않을 때 정보의 블록이 등록 버퍼에 복사되게 하도록 더 구성되는 것을 포함하게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 시스템은, 각각의 정보의 블록은 크기가 증가하게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 시스템은, 등록 버퍼는 소스 버퍼로부터 수신된 정보의 블록이 타겟 버퍼에 전달되게 하도록 구성되게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 시스템은, 부가의 정보가 타겟 버퍼에 직접 전달되게 하는 것은 등록 오프셋에 기초하여 소스 버퍼의 어드레스에서 시작하는 부가의 정보가 타겟 버퍼에 직접 전달되게 하도록 더 구성되는 것을 포함하게 하도록 더 구성될 수도 있다.
상기 예시적인 시스템은, 소스 버퍼는 적어도 등록해제 오프셋에 기초하여 메모리 어드레스에서 시작하는 정보가 소스 버퍼의 등록해제에 앞서 중간 버퍼에 전달되게 하도록 더 구성되게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 시스템은, 등록해제에 앞서 정보가 중간 버퍼에 전달되게 하는 것은 타겟 버퍼로의 부가의 정보의 전달 중에 정보가 등록해제 버퍼에 복사되게 하도록 더 구성되게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 시스템은, 등록해제 버퍼는 소스 버퍼로부터 수신된 정보가 소스 버퍼의 등록해제 중에 타겟 버퍼에 전달되게 하도록 구성되게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 시스템은, 부가의 정보가 타겟 버퍼에 직접 전달되게 하는 것은 소스 버퍼가 적어도 하나의 등록해제 오프셋에 기초하여 메모리 어드레스에서 종료하는 부가의 정보를 타겟 버퍼에 직접 전달하도록 더 구성되는 것을 포함하게 하도록 더 구성될 수도 있다.
다른 예시적인 실시예에서, 방법이 제공된다. 방법은 초기에 소스 버퍼로부터 타겟 버퍼로 전달될 정보를 결정하는 단계를 포함할 수도 있다. 방법은 소스 버퍼의 등록 중에 소스 버퍼로부터 중간 버퍼로 정보가 전달되게 하는 단계, 및 등록이 완료된 후에 부가의 정보가 소스 버퍼로부터 타겟 버퍼로 직접 전달되게 하는 단계를 더 포함할 수도 있다.
상기 예시적인 방법은, 정보는 원격 직접 메모리 액세스(RDMA)를 통해 전달되게 하도록 더 구성될 수도 있다.
상기 예시적인 방법은, 소스 버퍼로부터 중간 버퍼로 정보가 전달되게 하는 단계는 전달될 정보의 양 중 적어도 하나가 등록 오프셋보다 작을 때 또는 소스 버퍼의 등록이 완료되지 않았을 때 정보가 등록 버퍼에 블록으로서 복사되게 하는 단계를 포함하게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 방법은, 각각의 정보의 블록은 크기가 증가하게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 방법은, 등록 버퍼 내에 수신된 정보의 블록이 타겟 버퍼에 전달되게 하는 단계를 더 포함하게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 방법은, 부가의 정보가 타겟 버퍼에 직접 전달되게 하는 단계는 등록 오프셋에 기초하여 소스 버퍼 내의 어드레스에서 시작하는 부가의 정보가 타겟 버퍼에 직접 전달되게 하는 단계를 포함하게 하도록 더 구성될 수도 있다.
상기 예시적인 방법은, 적어도 등록해제 오프셋에 기초하여 메모리 어드레스에서 시작하는 정보가 소스 버퍼의 등록해제에 앞서 중간 버퍼에 전달되게 하는 단계를 더 포함하게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 방법은, 등록해제에 앞서 정보가 중간 버퍼 회로에 전달되게 하는 단계는 타겟 버퍼로의 부가의 정보의 전달 중에 정보가 등록해제 버퍼에 복사되게 하는 단계를 포함하게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 방법은, 등록해제 버퍼 내에 수신된 정보가 소스 버퍼의 등록해제 중에 타겟 버퍼에 전달되게 하는 단계를 더 포함하게 하도록 더 구성될 수도 있다. 본 예시적인 구성에서, 방법은, 부가의 정보가 직접 타겟 버퍼에 전달되게 하는 단계는 적어도 등록해제 오프셋에 기초하여 메모리 어드레스에서 종료하는 부가의 정보가 타겟 버퍼에 직접 전달되게 하는 단계를 포함하게 하도록 더 구성될 수도 있다.
다른 예시적인 실시예에서, 원격 직접 메모리 액세스를 수행하도록 구성된 디바이스가 제공되고, 디바이스는 상기 예시적인 방법들 중 임의의 하나를 수행하도록 배열된다.
다른 예시적인 실시예에서, 상기 예시적인 방법들 중 임의의 하나를 수행하도록 배열된 칩셋이 제공된다.
다른 예시적인 실시예에서, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 컴퓨팅 디바이스가 상기 예시적인 방법들 중 임의의 하나를 수행하게 하는 복수의 인스트럭션을 포함하는 적어도 하나의 머신 판독가능 매체가 제공된다.
다른 예시적인 실시예에서, 감소된 지연시간을 갖는 원격 직접 메모리 액세스를 위한 장치가 제공되고, 장치는 상기 예시적인 방법들 중 임의의 하나를 수행하도록 배열된다.
본 명세서에 채용되어 있는 용어 및 표현은 한정이 아니라 설명의 용어로서 사용된 것이고, 이러한 용어 및 표현의 사용에 있어서 도시되고 설명된 특징의 임의의 등가물(또는 그 부분)을 배제하려는 의도는 없고, 다양한 수정이 청구범위의 범주 내에서 가능하다는 것이 인식된다. 이에 따라, 청구범위는 모든 이러한 등가물을 커버하도록 의도된다.

Claims (24)

  1. 메모리 회로를 포함하는 시스템으로서,
    상기 메모리 회로는,
    적어도 정보를 수신하도록 구성된 타겟 버퍼와,
    정보를 수신하고 송신하도록 구성된 중간(intermediate) 버퍼와,
    소스 버퍼의 등록 중에 정보가 중간 버퍼로 전달되게 하고, 등록이 완료된 후에 부가의 정보가 상기 타겟 버퍼에 직접 전달되게 하도록 구성된 상기 소스 버퍼를 포함하는
    시스템.
  2. 제 1 항에 있어서,
    상기 소스 버퍼는 원격 데이터 메모리 액세스(RDMA)를 사용하여 상기 정보가 전달되게 하도록 구성되는
    시스템.
  3. 제 1 항에 있어서,
    상기 정보가 중간 버퍼로 전달되게 하도록 구성되는 것은, 상기 소스 버퍼가, 복사된 정보의 양 중 적어도 하나가 등록 오프셋보다 작을 때 또는 상기 소스 버퍼의 등록이 완료되지 않을 때 정보의 블록이 등록 버퍼에 복사되게 하도록 또한 구성되는 것을 포함하는
    시스템.
  4. 제 3 항에 있어서,
    각각의 정보의 블록은 크기가 증가하는
    시스템.
  5. 제 3 항에 있어서,
    상기 등록 버퍼는 상기 소스 버퍼로부터 수신된 상기 정보의 블록이 상기 타겟 버퍼에 전달되게 하도록 구성되는
    시스템.
  6. 제 3 항에 있어서,
    상기 부가의 정보가 상기 타겟 버퍼에 직접 전달되게 하는 것은, 상기 소스 버퍼가, 상기 등록 오프셋에 기초하여 상기 소스 버퍼의 어드레스에서 시작하는 상기 부가의 정보가 상기 타겟 버퍼에 직접 전달되게 하도록 또한 구성되는 것을 포함하는
    시스템.
  7. 제 1 항에 있어서,
    상기 소스 버퍼는 적어도 등록해제 오프셋에 기초하여 메모리 어드레스에서 시작하는 정보가 상기 소스 버퍼의 등록해제에 앞서 중간 버퍼에 전달되게 하도록 또한 구성되는
    시스템.
  8. 제 7 항에 있어서,
    상기 등록해제에 앞서 정보가 중간 버퍼에 전달되게 하는 것은, 상기 소스 버퍼가, 상기 타겟 버퍼로의 상기 부가의 정보의 전달 중에 정보가 등록해제 버퍼에 복사되게 하도록 또한 구성되는
    시스템.
  9. 제 7 항에 있어서,
    등록해제 버퍼는 상기 소스 버퍼로부터 수신된 정보가 상기 소스 버퍼의 등록해제 중에 상기 타겟 버퍼에 전달되게 하도록 구성되는
    시스템.
  10. 제 7 항에 있어서,
    상기 부가의 정보가 상기 타겟 버퍼에 직접 전달되게 하는 것은, 상기 소스 버퍼가, 적어도 상기 등록해제 오프셋에 기초하여 메모리 어드레스에서 종료하는 상기 부가의 정보를 상기 타겟 버퍼에 직접 전달하도록 또한 구성되는 것을 포함하는
    시스템.
  11. 소스 버퍼로부터 타겟 버퍼로 전달될 정보를 결정하는 단계와,
    상기 소스 버퍼의 등록 중에 상기 소스 버퍼로부터 중간 버퍼로 정보가 전달되게 하는 단계와,
    등록이 완료된 후에 부가의 정보가 상기 소스 버퍼로부터 상기 타겟 버퍼로 직접 전달되게 하는 단계를 포함하는
    방법.
  12. 제 11 항에 있어서,
    상기 정보는 원격 직접 메모리 액세스(RDMA)를 통해 전달되는
    방법.
  13. 제 11 항에 있어서,
    상기 소스 버퍼로부터 중간 버퍼로 정보가 전달되게 하는 단계는, 전달될 정보의 양 중 적어도 하나가 등록 오프셋보다 작을 때 또는 상기 소스 버퍼의 등록이 완료되지 않았을 때 정보가 등록 버퍼에 블록으로서 복사되게 하는 단계를 포함하는
    방법.
  14. 제 13 항에 있어서,
    각각의 정보의 블록은 크기가 증가하는
    방법.
  15. 제 13 항에 있어서,
    상기 등록 버퍼 내에 수신된 정보의 블록이 상기 타겟 버퍼에 전달되게 하는 단계를 더 포함하는
    방법.
  16. 제 13 항에 있어서,
    상기 부가의 정보가 타겟 버퍼에 직접 전달되게 하는 단계는 상기 등록 오프셋에 기초하여 상기 소스 버퍼 내의 어드레스에서 시작하는 상기 부가의 정보가 상기 타겟 버퍼에 직접 전달되게 하는 단계를 포함하는
    방법.
  17. 제 11 항에 있어서,
    적어도 등록해제 오프셋에 기초하여 메모리 어드레스에서 시작하는 정보가 상기 소스 버퍼의 등록해제에 앞서 중간 버퍼에 전달되게 하는 단계를 더 포함하는
    방법.
  18. 제 17 항에 있어서,
    상기 등록해제에 앞서 정보가 중간 버퍼에 전달되게 하는 단계는 상기 타겟 버퍼로의 상기 부가의 정보의 전달 중에 정보가 등록해제 버퍼에 복사되게 하는 단계를 포함하는
    방법.
  19. 제 17 항에 있어서,
    등록해제 버퍼 내에 수신된 정보가 상기 소스 버퍼의 등록해제 중에 상기 타겟 버퍼에 전달되게 하는 단계를 더 포함하는
    방법.
  20. 제 17 항에 있어서,
    상기 부가의 정보가 타겟 버퍼에 직접 전달되게 하는 단계는 적어도 상기 등록해제 오프셋에 기초하여 메모리 어드레스에서 종료하는 상기 부가의 정보가 상기 타겟 버퍼에 직접 전달되게 하는 단계를 포함하는
    방법.
  21. 원격 직접 메모리 액세스를 수행하도록 구성된 디바이스로서,
    상기 디바이스는 청구항 제 11 항 내지 제 20 항 중 어느 한 항의 방법을 수행하도록 구성되는
    디바이스.
  22. 청구항 제 11 항 내지 제 20 항 중 어느 한 항의 방법을 수행하도록 구성된
    칩셋.
  23. 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 상기 컴퓨팅 디바이스가 청구항 제 11 항 내지 제 20 항 중 어느 한 항에 따른 방법을 수행하게 하는 복수의 인스트럭션을 포함하는
    적어도 하나의 머신 판독가능 매체.
  24. 감소된 지연시간을 갖는 원격 직접 메모리 액세스를 위한 장치로서,
    상기 장치는 청구항 제 11 항 내지 제 20 항 중 어느 한 항의 방법을 수행하도록 구성되는
    장치.
KR1020147027304A 2012-04-10 2012-04-10 감소된 지연을 갖는 원격 직접 메모리 액세스 KR101703403B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2012/032909 WO2013154541A1 (en) 2012-04-10 2012-04-10 Remote direct memory access with reduced latency

Publications (2)

Publication Number Publication Date
KR20140132386A true KR20140132386A (ko) 2014-11-17
KR101703403B1 KR101703403B1 (ko) 2017-02-06

Family

ID=49327966

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147027304A KR101703403B1 (ko) 2012-04-10 2012-04-10 감소된 지연을 갖는 원격 직접 메모리 액세스

Country Status (6)

Country Link
US (2) US9774677B2 (ko)
KR (1) KR101703403B1 (ko)
CN (1) CN104205078B (ko)
BR (1) BR112014025287A2 (ko)
DE (1) DE112012006227B4 (ko)
WO (1) WO2013154541A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013154540A1 (en) 2012-04-10 2013-10-17 Intel Corporation Continuous information transfer with reduced latency
US10073809B2 (en) * 2015-04-27 2018-09-11 Intel Corporation Technologies for scalable remotely accessible memory segments
US10509764B1 (en) 2015-06-19 2019-12-17 Amazon Technologies, Inc. Flexible remote direct memory access
US9954979B2 (en) * 2015-09-21 2018-04-24 International Business Machines Corporation Protocol selection for transmission control protocol/internet protocol (TCP/IP)
US10203888B2 (en) * 2015-12-18 2019-02-12 Intel Corporation Technologies for performing a data copy operation on a data storage device with a power-fail-safe data structure
US10713211B2 (en) 2016-01-13 2020-07-14 Red Hat, Inc. Pre-registering memory regions for remote direct memory access in a distributed file system
US10901937B2 (en) 2016-01-13 2021-01-26 Red Hat, Inc. Exposing pre-registered memory regions for remote direct memory access in a distributed file system
JP6740683B2 (ja) * 2016-04-07 2020-08-19 富士通株式会社 並列処理装置及び通信制御方法
US10198378B2 (en) * 2016-11-18 2019-02-05 Microsoft Technology Licensing, Llc Faster data transfer with simultaneous alternative remote direct memory access communications
US10620870B2 (en) 2017-12-08 2020-04-14 Intel Corporation Data storage device with bytewise copy
US10635355B1 (en) * 2018-11-13 2020-04-28 Western Digital Technologies, Inc. Bandwidth limiting in solid state drives
KR20210030073A (ko) 2019-09-09 2021-03-17 삼성전자주식회사 엣지 컴퓨팅 서비스를 위한 방법 및 장치

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090083392A1 (en) * 2007-09-25 2009-03-26 Sun Microsystems, Inc. Simple, efficient rdma mechanism
US20110106905A1 (en) * 2009-10-30 2011-05-05 International Business Machines Corporation Direct sending and asynchronous transmission for rdma software implementations

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7370082B2 (en) * 2003-05-09 2008-05-06 Microsoft Corporation Remote invalidation of pre-shared RDMA key
US7814179B2 (en) * 2003-10-24 2010-10-12 Microsoft Corporation Interface between mobile connectivity service and WWAN device
US7912979B2 (en) * 2003-12-11 2011-03-22 International Business Machines Corporation In-order delivery of plurality of RDMA messages
US7441006B2 (en) 2003-12-11 2008-10-21 International Business Machines Corporation Reducing number of write operations relative to delivery of out-of-order RDMA send messages by managing reference counter
US7606251B2 (en) * 2004-08-05 2009-10-20 International Business Machines Corporation Method, system, and computer program product for reducing network copies by port-based routing to application-specific buffers
US20070041383A1 (en) 2005-04-05 2007-02-22 Mohmmad Banikazemi Third party node initiated remote direct memory access
WO2007139426A1 (en) 2006-05-31 2007-12-06 Intel Corporation Multiple phase buffer enlargement for rdma data transfer
US8244826B2 (en) 2007-10-23 2012-08-14 International Business Machines Corporation Providing a memory region or memory window access notification on a system area network
US8024417B2 (en) 2008-06-04 2011-09-20 Microsoft Corporation Simple flow control protocol over RDMA
DE102009030047A1 (de) 2009-06-22 2010-12-23 Deutsche Thomson Ohg Verfahren und System zur Übertragung von Daten zwischen Datenspeichern durch entfernten direkten Speicherzugriff sowie Netzwerkstation die eingerichtet ist um in dem Verfahren als Sendestation bzw. als Empfangstation zu operieren
WO2013154540A1 (en) 2012-04-10 2013-10-17 Intel Corporation Continuous information transfer with reduced latency

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090083392A1 (en) * 2007-09-25 2009-03-26 Sun Microsystems, Inc. Simple, efficient rdma mechanism
US20110106905A1 (en) * 2009-10-30 2011-05-05 International Business Machines Corporation Direct sending and asynchronous transmission for rdma software implementations

Also Published As

Publication number Publication date
KR101703403B1 (ko) 2017-02-06
US20180146038A1 (en) 2018-05-24
DE112012006227T5 (de) 2015-01-15
WO2013154541A1 (en) 2013-10-17
US10334047B2 (en) 2019-06-25
DE112012006227B4 (de) 2023-07-27
BR112014025287A2 (pt) 2017-10-24
CN104205078B (zh) 2018-01-19
CN104205078A (zh) 2014-12-10
US20140201306A1 (en) 2014-07-17
US9774677B2 (en) 2017-09-26

Similar Documents

Publication Publication Date Title
KR101703403B1 (ko) 감소된 지연을 갖는 원격 직접 메모리 액세스
US11500810B2 (en) Techniques for command validation for access to a storage device by a remote client
US9477632B2 (en) Access proxy for accessing peripheral component interconnect express endpoint device, PCIe exchanger and computer system
US9582463B2 (en) Heterogeneous input/output (I/O) using remote direct memory access (RDMA) and active message
US10866737B2 (en) Apparatus, method and system to store information for a solid state drive
CN104714905A (zh) 用于执行从第一适配器到第二适配器的失效转移操作的方法和系统
US10901624B1 (en) Dummy host command generation for supporting higher maximum data transfer sizes (MDTS)
CN105359114B (zh) 用于在寻址方案之间进行迁移的方法和系统
CN111615692A (zh) 数据搬运方法、计算处理装置、设备及存储介质
US9490988B2 (en) Continuous information transfer with reduced latency
CN112799696B (zh) 固件升级方法和相关设备
EP3360044B1 (en) System and method for providing operating system independent error control in a computing device
US10949095B2 (en) Method, network adapters and computer program product using network adapter memory to service data requests
US8214448B2 (en) Optimized utilization of DMA buffers for incoming data packets in a network protocol
WO2021082877A1 (zh) 访问固态硬盘的方法及装置
US20230236742A1 (en) NONVOLATILE MEMORY EXPRESS (NVMe) OVER COMPUTE EXPRESS LINK (CXL)
CN113934677A (zh) 数据处理方法、装置、电子设备和存储介质
JP2005301714A (ja) マルチcpuシステム、そのデータ転送方法、及びそのプログラム
US9448954B2 (en) Method and an apparatus for coherency control
CN117632794A (zh) 调用待决高速缓存行逐出
WO2011137811A2 (zh) 数据写处理方法、装置和终端设备

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal