KR100974155B1 - 데이터 전송 에러 검사 방법 및 시스템과 네트워크인터페이스 컨트롤러 - Google Patents
데이터 전송 에러 검사 방법 및 시스템과 네트워크인터페이스 컨트롤러 Download PDFInfo
- Publication number
- KR100974155B1 KR100974155B1 KR1020067011283A KR20067011283A KR100974155B1 KR 100974155 B1 KR100974155 B1 KR 100974155B1 KR 1020067011283 A KR1020067011283 A KR 1020067011283A KR 20067011283 A KR20067011283 A KR 20067011283A KR 100974155 B1 KR100974155 B1 KR 100974155B1
- Authority
- KR
- South Korea
- Prior art keywords
- segment
- data transmission
- tcp
- data
- mpa
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1829—Arrangements specially adapted for the receiver end
- H04L1/1835—Buffer management
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols 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]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/163—In-band adaptation of TCP data exchange; In-band control procedures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- Probability & Statistics with Applications (AREA)
- Theoretical Computer Science (AREA)
- Communication Control (AREA)
- Detection And Prevention Of Errors In Transmission (AREA)
Abstract
본 발명은 데이터 전송 에러 검사에 관한 것으로, 네트워크 인터페이스 컨트롤러 구현예는 특정 접속의 모든 세그먼트가 정렬된 경우에는 메모리에 대한 직접 데이터 배치, 즉 재조립 버퍼를 액세스하지 않는 컷스루(즉, "FAST" 접속 유형)를 수행하고, 모든 세그먼트가 정렬되지 않는 경우에는 데이터를 재조립 버퍼로 이동시킨다(즉, "SLOW" 접속 유형). 접속의 유형은 FAST에서 SLOW로 변경될 수 있고, 또 그 반대로 변경될 수도 있다. 이러한 구현예는 세그먼트 수신을 확인해주는 TCP 확인응답을 발송하기 전에 고속 접속에서의 인입 DDP 세그먼트의 대부분에 대한 CRC 검증을 실행하는 것이 바람직하다. 본 발명에 따라 CRC 값을 계산하는 방법은 각각의 TCP 세그먼트가 정렬된 DDP 세그먼트로 개시하고 TCP 페이로드의 최초의 2바이트가 MPA 프레임의 MPA 길이 필드인 것으로 가정한다.
Description
본 발명은 전반적으로 데이터 전송에 관한 것으로, 보다 구체적으로는 정렬된 DDP 세그먼트를 위한 컷스루(cut-through) 구현을 이용하는 RDMA 가능 네트워크 인터페이스 컨트롤러(RNIC)에 관한 것이다.
1. 개요
도 1a를 참조하면, 종래의 데이터 전송 환경(1)의 블록도가 도시되어 있다. 데이터 전송 환경(1)은 데이터 전송(3A)을 하나 이상의 원격 데이터 메모리 액세스(RDMA) 가능 네트워크 인터페이스 컨트롤러(RNIC)(4)를 통해 데이터 싱크(5)(즉, 피어(peer))에 송신하며, 데이터 싱크(5)는 데이터 전송(3B)을 수신한다. RNIC(4)는 여러 구성요소(추가로 후술됨) 중에서도 특히 재조립 버퍼(reassembly buffer)(6)를 포함한다. 네트워크 통신 속도는 최근에는 초당 10 메가비트(Mbps) 내지 100Mbps에서 초당 1기가비트(Gbps)까지 급격히 증가되었으며, 현재는 10Gbps 정도의 속도에 이르고 있다. 그러나, 이러한 통신 대역폭 증가는 현재의 중앙 처 리 장치(CPU)가 데이터를 효율적으로 처리할 수 있는 속도를 앞지르기 시작하고 있으며, 그 결과 예컨대 RNIC(4) 등의 서버 프로세서에서 간혹 병목현상이 발생되기도 한다. 예컨대, 통상의 1Gbps 네트워크 접속은 풀상태로 이용되는 경우에 2㎓ CPU에 커다란 부담이 될 수 있다. 특히, 이와 같은 CPU는 자신의 처리 성능의 대략 절반 정도를 단지 네트워크 카드로부터 인입되고 있는 데이터를 처리하는 저레벨 전송 제어 프로토콜(TCP)을 핸들링하는데 이용한다.
이러한 문제점을 해결하기 위한 한 가지 방안은 전송 제어 및 인터넷 프로토콜(TCP/IP) 스택을 CPU에 의해 처리될 소프트웨어로서가 아닌 하드웨어로서의 유한 상태 머신(FSM)으로 구현하는 것이다. 이 방안은 매우 고속으로 패킷 처리를 가능하게 하여, 그 결과 연속적인 짧은 패킷을 유선 속도로 처리할 수 있게 한다. 또한, 이 방안은 저비용으로 매우 컴팩트하면서 강력한 솔루션을 제공한다. 불행히도, TCP/IP 스택이 소프트웨어로 구현되도록 한정되어 개발되었기 때문에, TCP/IP 스택을 하드웨어로 구성하는 것은 다양한 새로운 문제를 발생시킨다. 예컨대, 야기되는 문제로는, 소프트웨어 기반 프로토콜을 어떻게 하드웨어 FSM으로 구현하여 향상된 성능을 달성하도록 할 것인가에 대한 문제와, 상위 계층 프로토콜(ULP)(예컨대, 애플리케이션 프로토콜)의 더 고속의 구현을 제공하기 위해 어떻게 상위 계층 프로토콜에 대한 유용하면서 효율적인 인터페이스를 설계할 것인가에 대한 문제와, 일정 비율로 증대된 구현 장치에서의 새로운 병목현상을 어떻게 방지할 것인가에 대한 문제가 있다.
이러한 새로운 문제점을 해소하기 위해, 새로운 통신 계층이 개발되어 통상 적인 상위 계층 프로토콜과 TCP/IP 스택 사이에 놓여 지게 되었다. 그러나, 불행히도, 상위 계층 프로토콜이 간접적인 데이터 배치를 위한 버퍼를 제공하여야 하기 때문에, TCP/IP 스택 위에 위치되는 프로토콜은 통상적으로 다수의 카피 동작을 요구하여, 레이턴시가 증가되고 상당한 CPU 및 메모리 자원을 소모한다. 카피 동작의 양을 감소시키기 위해, iWARP로서 지칭되는 한 조의 새로운 프로토콜이 개발되었다.
2. 프로토콜
이하에서는, 도 1b를 참조하여, iWARP 프로토콜을 포함하는 다양한 프로토콜과 데이터 전송 포맷 구조에 대한 간략한 개요를 설명할 것이다. 도면을 통해 알 수 있는 바와 같이, 각각의 데이터 전송은 데이터 전송에 관해 각각 상이한 기능을 제공하는 다수의 상이한 프로토콜에 관련된 정보를 포함할 것이다. 예컨대, 도 1b에 도시된 바와 같이, 이더넷 프로토콜(100)은 IEEE 표준 802.3에 의해 정의된 바와 같은 근거리 통신망(LAN) 접속을 제공하며, 인터넷 프로토콜(IP)(102)은 필수적인 네트워크 경로배정 정보를 추가시키며, 전송 제어 프로토콜(TCP)(104)은 외부로 향하는 TCP 세그먼트(106)를 스케쥴링하고 전달 보장(delivery guarantee)을 충족시키며, 프로토콜 데이터 유닛(PDU) 정렬을 갖는 마커(MPA : a Marker with Protocol data unit Alignment) 프로토콜은 DDP 세그먼트(112)(하나만 도시되어 있지만, 스트림으로 구성될 수도 있음) 양단의 고정된 구간(즉, 매 512 바이트)에서 후방 MPA 마커(110)를 포함하는 MPA 프레임(109)를 제공하며, 또한 각각의 MPA 프레임(109)에 길이 필드(114) 및 순환 중복 검사(CRC) 필드(116)를 추가시킨다. 또 한, 직접 데이터 배치(DDP) 프로토콜(120)은 외부로 향하는 메시지를 하나 이상의 DDP 세그먼트(112)로 단편화하고, 하나 이상의 DDP 세그먼트를 DDP 메시지(113)로 재조립하며, 원격 데이터 메모리 액세스(RDMA) 프로토콜(122)은 RDMA Write, Read, Send를 DDP 메시지로 변환하거나, DDP 메시지에서 이들을 분리해낸다. 명료하게 도시하기 위해 오직 하나의 DDP 세그먼트(112)가 도시되어 있지만, 다수의 DDP 세그먼트(112)가 각각의 TCP 세그먼트(106)에 제공될 수 있음을 이해하여야 한다.
RDMA 프로토콜(122)을 구체적으로 살펴보면, RDMA 컨소시엄에 의해 개발된 이 프로토콜은 하나의 컴퓨터가 정보를 또 다른 컴퓨터의 메모리에 직접 위치시키도록 하여 메모리 보호 시맨틱(semantic)을 유지하면서 메모리 버스 대역폭 및 중앙 처리 장치(CPU) 처리 오버헤드에 대한 요구를 최소로 할 수 있도록 함으로써 데이터 카피 동작을 제거할 수 있고 레이턴시를 감소시킬 수 있다. TCP/IP를 통한 RDMA는 프로세서 및 메모리에 부과되는 오버헤드를 감소시킴으로써 데이터 센터 내에서의 더욱 효율적이고 조정 가능한 연산 및 데이터 전달을 가능하게 하며, 이로써 프로세서가 사용자 애플리케이션 등과 같은 다른 작업을 위해 이용 가능하도록 하여 인프라스트럭쳐 활용을 향상시킨다. 이 경우, 네트워크가 더욱 효율적이 되므로, 애플리케이션은 대형의 더욱 고가의 시스템에 작업을 집중하는 것과 반대로 태스크를 네트워크에 걸쳐 공유함으로써 더 우수하게 조율할 수 있다. RDMA 기능을 이용하면, 송신기는 이더넷 바이트 스트림이 수신기에서의 비정규 순서의 모드(out-of-order mode)에서 더욱 용이하게 디코딩되어 실행될 수 있도록 헤더를 이더넷 바이트 스트림 상에 위치시키도록 프레임을 구성할 수 있으며, 이것은 특히 인터넷 스몰 컴퓨터 시스템 인터페이스(iSCSI) 및 다른 저장 트래픽 타입에 대한 성능을 향상시킬 것이다. RDMA에 의해 제공된 또 다른 장점은 더 적은 유형의 상호접속을 통해 함수를 데이터 센터에 집중시키는 기능이다. 더 적은 수의 상호접속을 통해 함수를 집중시킴으로써, 그 결과의 인프라스트럭쳐는 덜 복잡해져 관리가 용이하게 되며, 아키텍쳐 용장성을 위한 기회를 제공하여, 시스템 복구성을 향상시킨다.
DDP 프로토콜에 대해 구체적으로 설명하면, 이 프로토콜은 데이터가 중간 버퍼없이 상위 계층 프로토콜(ULP) 수신 버퍼에 직접 위치될 수도 있도록 하는 메카니즘을 제공한다. DDP는 인입 TCP 세그먼트를 처리할 시에 RDMA 가능 네트워크 인터페이스 컨트롤러(RNIC)에 의해 수행된 추가의 카피 동작(재조립 버퍼로의 카피 및 재조립 버퍼로부터의 카피)을 감소시키고, 일부 경우에는 이러한 카피 동작을 완전히 제거한다.
3. 도전과제
하드웨어 설정에서 RDMA 및 DDP로 TCP/IP를 효율적으로 구현하는데 직면하는 한 가지 과제는 표준 TCP/IP 오프-로드 엔진(TOE) 구현이 비정규의 순서로 수신된 TCP 스트림을 배열하기 위해 수신 로직에 재조립 버퍼를 포함하고, 이로써 카피 동작을 증가시킨다는 점이다. 또한, 수신기의 데이터 버퍼에의 직접 데이터 배치가 완료되도록 하기 위해, RNIC는 각각의 도달 TCP 세그먼트 페이로드(127)에 대한 목적지 버퍼의 위치를 확인할 수 있어야 한다. 그 결과, 모든 TCP 세그먼트는 이들이 정규의 순서(in-order)가 되도록 하고 목적지 버퍼가 위치 확인될 수 있도록 하 기 위해 재조립 버퍼에 저장된다. 이러한 문제점을 해소하기 위해, iWARP 사양은 생성된 DDP 세그먼트가 TCP 세그먼트에 정렬되도록 하는 방식으로 송신 RNIC가 RDMA 메시지의 단편화를 수행하도록 강력하게 권장한다. 그럼에도 불구하고, 특히 데이터 전송이 다수의 교차점(interchange)을 통과하는 곳에서는 간혹 비정렬된 DDP 세그먼트를 방지할 수는 없다.
도 1b를 참조하면, "정렬"이라는 표현은 TCP 헤더(126) 다음에 DDP 세그먼트(112)가 즉각적으로 후속되고(즉, MPA 헤더가 TCP 헤더를 후속하고, DDP 헤더가 TCP 헤더를 후속함), DDP 세그먼트(112)가 전체적으로 하나의 TCP 세그먼트(106)에 포함되는 것을 의미한다. 특히, 각각의 TCP 세그먼트(106)는 TCP 헤더(126) 및 TCP 페이로드/TCP 데이터(127)를 포함한다. "TCP 홀"(130)은 TCP 데이터 스트림에서의 TCP 세그먼트가 존재하지 않는 곳이다. MPA 마커(110)는, 비정규 순서의 TCP 세그먼트(106)가 수신되어 그 TCP 세그먼트(106) 내의 MPA 프레임(109)이 TCP 세그먼트(106)와 정렬되는지의 여부를 수신기가 알고자 하는 시점에 대한 데이터를 제공한다. 각각의 마커(110)는 TCP 스트림에서 동일한 구간(512 바이트)으로 위치되어 특정 접속의 초기 시퀀스 번호로 개시하며, 마커가 이동하는 MPA 프레임(109)의 DDP/RDMA 헤더(124)를 나타내 준다. 제1 순서의 식별 번호가 최초의 TCP 세그먼트(106)에 할당되고, 후속 TCP 세그먼트(106)에서의 각각의 초기 시퀀스 번호는 증분된 시퀀스 번호를 포함한다.
도 1b에서, 실선은 TCP 헤더(126) 다음에 MPA 길이 필드(114) 및 DDP/RDMA 헤더(124)가 즉각적으로 후속되고, DDP 세그먼트(112)가 전체적으로 TCP 세그먼 트(106)에 포함되는 정렬된 데이터 전송의 예를 예시한다. DDP 프로토콜(120) 계층에서의 점선은 TCP 헤더(126) 다음에 MPA 길이 필드(114) 및 DDP/RDMA 헤더(124)가 즉각적으로 후속되지 않는 비정렬된 DDP 세그먼트(112NA)를 나타낸다. 비정렬된 DDP 세그먼트는 예컨대 송신 RNIC와 수신 RNIC 사이에 위치할 미들-박스에 의한 재단편화에 기인하거나, 또는 이용 중인 최대 세그먼트 크기(MSS)의 감소에 기인할 것이다. 송신기 RNIC가 DDP 단편화를 변경(TCP 스트림에서의 DDP 헤더의 위치를 변경)할 수 없기 때문에, 송신기 동작은 더 큰 MSS를 이용한 초기의 DDP 세그먼트 생성에도 불구하고 신규의 감소된 MSS를 요구할 것이다. 어떠한 경우에는 카피 동작의 증가에 의해 속도 및 효율이 감소된다. 따라서, 본 기술분야에서는 비정렬된 DDP 세그먼트 배치 및 전달과는 상이한 양상으로 정렬된 DDP 세그먼트 배치 및 전달을 핸들링하기 위한 방안에 대한 필요성이 존재한다.
비정렬된 DDP 세그먼트(112NA) 핸들링에 관련한 또 다른 도전과제는 비정렬을 야기하는 것이 무엇인지를 결정하기가 간혹 어렵다는 사실에 의해 발생된다. 예컨대, 단일의 비정렬된 DDP 세그먼트(112NA)는 2개 이상의 TCP 세그먼트(106)로 분할될 수 있으며, 이들 TCP 세그먼트 중의 하나는 도달하고, 또 다른 하나는 도달하지 않을 수도 있다. 또 다른 경우, 일부 DDP 세그먼트(112NA)가 MPA 마커(110) 사이에서 드롭될 수도 있거나, 헤더가 상실될 수도 있거나, 또는 세그먼트 테일이 상실될 수도 있는 여러 경우가 있다(후자의 경우, 세그먼트를 부분적으로 위치시킬 수 있고, 나머지 부분이 도달할 때에 이 부분을 위치시킬 곳을 이해하기 위해 약간의 정보를 유지할 필요가 있다). 이 후자의 경우에 관련하여, 도 1c는 하나 이상 의 비정렬된 DDP 세그먼트(112NA)에 대한 MPA 마커 참조와 관련한 가능한 상황의 블록도를 도시하고 있다. "경우 A"는 새로이 수신된 DDP 세그먼트(162)의 DDP 세그먼트 헤더(160)가 이전에 처리된 DDP 세그먼트(166)의 MPA 길이 필드(164)를 참조하는 상황을 예시하고 있다. "경우 B"는 새로이 수신된 DDP 세그먼트(162) 헤더(160)가 새로이 수신된 DDP 세그먼트(162) 내에 위치된 마커(168)를 참조하는 상황을 예시하고 있다. 즉, 마커(168)는 새로이 수신된 DDP 세그먼트(162)의 개시점을 참조하고 있다. "경우 C"는 마커(168)가 새로이 수신된 DDP 세그먼트(162)에 위치되지만, 세그먼트 외부를 가리키는 상황을 예시하고 있다. "경우 D"는 마커(168)가 새로이 수신된 DDP 세그먼트(162)에 위치되고, 세그먼트 내부를 가리키는 상황을 예시하고 있다. "경우 E"는 새로이 수신된 DDP 세그먼트(162)에 마커가 위치되지 않는 상황을 예시하고 있다. 임의의 경우에, DDP 세그먼트 비정렬의 원인이 결정될 수 없는 곳에서, 경우가 너무 많아서 적합하게 해소할 수 없고 또한 정보/부분 세그먼트가 너무 많아서 중간 저장장치에 유지할 수가 없기 때문에, RNIC는 직접 데이터 배치를 행할 수 없다. 따라서, 정렬된 DDP 세그먼트와 비정렬된 DDP 세그먼트의 상이한 핸들링을 제공하는 어떠한 해결방안이 비정렬을 야기할 수도 있는 여러 가지 상황을 해소해야만 한다.
4. DDP/RDMA 동작 흐름
도 1d 내지 도 1h를 참조하여, 이하에서는 추후의 설명을 위해 DDP/RDMA 동작 흐름의 개요를 설명할 것이다. 구체적으로 DDP 프로토콜(120)(도 1b)을 참조하면, DDP는 태그 부착 메시지(tagged message) 및 태그 미부착 메시지로 지칭되는 2 가지 유형의 메시지를 제공한다. 도 1d를 참조하면, "태그 부착 메시지"에서, 각각의 DDP 세그먼트(112)(도 1b)는, 데이터가 직접 위치될 수 있는 수신기 상의 목적지 버퍼의 메모리 영역/윈도우(예컨대, 도 1g에서의 메모리 영역(232))와, 이 영역/윈도우의 타겟 오프셋(TO)과, 세그먼트 페이로드(도시하지 않음)를 식별하는 DDP/RDMA 헤더(124)의 스티어링 태그("STag")를 운반한다. 이 경우, 목적지 버퍼의 이용 가능성은 STag를 통해 "광고"된다. 도 1e를 참조하면, "태그 미부착 메시지"는 원격 송신기가 수신기의 버퍼를 알지 못하여 대기열 ID(QN), 메시지 시퀀스 번호(MSN) 및 메시지 오프셋(MO)을 갖는 메시지를 발송하는 메시지이며, 이 메시지는 적합한 버퍼를 결정하기 위해 수신기에서 사용될 것이다.
도 1f 내지 도 1h를 참조하면, RDMA 프로토콜은 4가지 유형의 메시지, 즉 방송(200), 기입(202), 판독(204) 및 판독 응답(206) 메시지를 정의한다. 다시 도 1a를 참조하면, 버브 인터페이스(verb interface)(7)는 RNIC(4)를 소비자에게 제공하며, RNIC(4) 자원을 할당 및 할당해제하고 RNIC(4)에 대한 작업 요청(WR)(208)을 포스팅하기 위한 방법을 포함한다. 버브 인터페이스(7)는 통상적으로 사용자 공간 소비자로서 작용하는 사용자 공간 라이브러리(9A) 및 커널 공간 소비자로서 작용하는 커널 모듈(9B)의 2개의 파트를 갖는 버브 라이브러리(8)에 의해 구현된다. 버브 인터페이스(7)는 RNIC(4) 하드웨어 및 펌웨어로 작동하는 RNIC 전용(RNIC-specific) 소프트웨어이다. 버브 인터페이스(7)(버브 라이브러러(8)), 하드웨어 및 펌웨어에서 구현되어야 하는 것에 대한 엄격한 정의는 없다. 버브 인터페이스(7)는 소비자에게 RNIC(4) 서비스를 제공하는 단일의 패키지로 보급될 수 있으 며, 이로써 소비자가 주로 RNIC(4) 자원의 관리(할당 및 할당해제)와 RNIC(4)에 대한 작업 요청(WR)의 포스팅의 2가지 유형의 동작을 수행할 수 있다. RNIC(4) 자원 관리의 예로는, 대기열쌍 할당 및 할당해제, 완성 대기열(이후, "CQ") 할당 및 할당해제 또는 메모리 영역 할당 및 할당해제가 있다. 이들 관리 태스크는 아래에서 더욱 상세하게 설명될 것이다.
도 1f 내지 도 1h에 도시된 바와 같이, 소비자는 작업 요청(208)이 포스팅되는 대기열쌍을 할당한다. "대기열쌍"(이후 "QP")은 TCP 접속과 연관되며, 한쌍의 작업 대기열(예컨대, 발송 및 수신)(210, 212)과, 각각의 대기열에 대한 포스팅 메카니즘(도시하지 않음)을 포함한다. 각각의 작업 대기열(210, 212)은 각각의 작업 대기열 엘레멘트(Work Queue Elements)(WQE)(216)가 하나의 작업 요청(WR)(208)을 기술하는 일부 제어 정보를 유지하고 소비자 버퍼를 참조하는(또는 알려주는) WQE의 리스트이다. 소비자는 버스 인터페이스(7)(도 1a) 및 RNIC(4)가 포스팅된 작업 요청(WR)(208)을 실행하도록 하기 위해 작업 요청(WR)(208)을 작업 대기열(210, 212)에 포스팅한다. 또한, 소비자가 판독 대기열(214)(도 1h) 및 작업 대기열 엘레멘트(WQE)(216) 등과 직접 대화하지 않는 QP를 구성할 수도 있는 자원이 존재한다.
WQE(216)에 의해 유지될 수 있는 대표적인 정보는 소비자 작업 대기열(WR) 타입(즉, 송신 WR(208S)에 대해서는 RDMA 발송, RDMA 기입, RDMA 판독 등이 될 수 있고, 수신 WR(208R)에 대해서는 RDMA 수신만이 될 수 있음) 및 소비자 버퍼에 대한 기술(description)이며, 이들 중의 하나는 수신된 데이터에 대한 위치를 송신 또는 제공하기 위해 데이터를 운반한다. WQE(216)는 항상 단일 RDMA 메시지를 기술하고 대응한다. 예컨대, 소비자가 RDMA Write 타입의 발송 작업 요청(WR)(208S)을 포스팅할 때, 버브 라이브러리(8)(도 1a)는 데이터가 취해져 RDMA 기입 메시지를 이용하여 응답자에게 발송될 필요가 있는 소비자 버퍼를 기술하는 WQE(216S)를 구축한다. 또 다른 예에서, 수신 작업 요청(WR)(208R)(도 1f)이 제공된다. 이 경우, 버브 라이브러리(8)(도 1a)는 수신된 발송 메시지(200)의 페이로드를 위치시키기 위해 사용될 소비자 버퍼를 유지하는 수신 대기열(RQ)(212)에 WQE(216R)을 추가한다.
버브 라이브러리(8)(도 1a)가 새로운 WQE(216)를 발송 대기열(SQ)(210) 또는 수신 대기열(RQ)(212)에 추가할 때, 버브 라이브러리(8)는 새로운 WQE(216)이 발송 대기열(SQ)/수신 대기열(RQ)에 각각 추가되었다는 것을 RNIC(4)(도 1a)에게 통보한다(이후, "초인종을 울림(rings doorbell)"으로 지칭됨). 이 "초인종 울림" 동작은 통상적으로 RNIC 메모리 공간에 대한 기입 동작이며, 이 기입 동작은 RNIC 하드웨어에 의해 검출되어 디코딩된다. 따라서, 초인종 울림 동작은 특정의 SQ/RQ에 대개 각각 행해질 필요가 있는 새로운 작업이 있다는 것을 RNIC에게 통보한다.
RNIC(4)(도 1a)는 진행중인(포스팅된) WQE(216)을 갖는 발송 대기열(SQ)(210)의 리스트를 유지한다. 또한, RNIC는 이들 발송 대기열(SQ)(210)들 간을 중재하며, 이들을 하나씩 차례로 제공한다. RNIC(4)가 발송 제공할 대기열(SQ)(210)을 선택할 때, RNIC(4)는 제공할 다음 WQE(216)을 판독하며(WQE가 소비자에 의해 포스팅되는 순서로 RNIC에 의해 처리됨), 요청된 RDMA 메시지에 속하는 하나 이상의 DDP 세그먼트(220)를 생성한다.
이하에서는 도 1f 내지 도 1h를 참조하여 특정한 유형의 RDMA 메시지의 핸들링에 대해 설명할 것이다. 도 1f에 도시된 바와 같이, RNIC(요청자)는 특정한 발송 대기열(SQ)(210S)을 제공하기 위해 선택한다. RNIC는 발송 대기열(SQ)(210S)로부터 WQE(216S)를 판독한다. 이 WQE(216S)가 RDMA 발송 요청에 대응한다면, RNIC는 발송 메시지를 생성하고, 이 메시지를 피어 RNIC(응답자)에게 발송한다. 생성된 메시지는 예컨대 3개의 DDP 세그먼트(220)를 포함할 수도 있다. RNIC(응답자)가 발송 메시지를 수신할 때, 그 RNIC는 수신 대기열(RQ(212)로부터 WQE(216R)를 판독하고, 수신된 DDP 세그먼트(220)의 페이로드를 그 WQE(216R)에 의해 참조된 소비자 버퍼(즉, 응답자 Rx 버퍼)(230)에 위치시킨다. 발송 메시지(200)가 정규 순서의 상태로 수신된다면, RNIC는 수신 대기열(RQ)(212)로부터 최초의 미사용 WQE(216R)를 선택한다. WQE(216R)는 소비자에 의해 포스팅되는 순서로 요청 대기열(RQ)(212)에 연결되어 있다. 태그 미부착 DDP 세그먼트를 통해, 발송 메시지(200)는 메시지 시퀀스 번호(MSN)(도 1e)를 운반하며, 이 메시지 시퀀스 번호는 1로 초기화되고, 동일한 DDP 대기열에 속하는 각각의 발송된 DDP 메시지(220)로 송신기에 의해 일정하게 증가된다(태그 부착 메시지에 대해서는 이하에서 RDMA 기입 메시지에 관련하여 설명될 것이다). DDP 대기열은 DDP 헤더 내의 대기열 번호(QN)(도 1e)에 의해 식별된다. RDMA 프로토콜은 3개의 DDP 대기열을 인입 RDMA 발송에 대해서는 QN#0로, 인입 RDMA 판독 요청에 대해서는 QN#1로, 인입 중단(Terminate)에 대해서는 QN#2로 정의한다. 따라서, 발송 메시지(200)가 비정규 순서의 상태로 도달할 때, RNIC(4)는 그 메시지의 MSN을 이용하여 그 발송 메시지(200)에 대응하는 WQE(216R)를 탐색한다. 하나의 수신된 발송 메시지(200)는 수신 대기열(RQ(212)로부터 하나의 WQE(216R)를 소비한다. 포스팅된 WQE의 부족, 또는 WQE 버퍼의 길이를 초과하는 메시지 데이터 길이는 중대한 오류로 간주되어 접속 중단에 이르게 된다.
이하에서는 도 1g 및 도 1h를 참조하여, 태그 부착 동작을 이용하는 RDMA 기입 메시지(202)와, RDMA 판독 메시지(204)의 일부를 설명할 것이다. 태그 부착 동작을 이용하기 위해, 소비자는 메모리 영역(232)을 등록할 필요가 있다. 메모리 영역(232)은 수신기, 즉 도 1g의 응답기 상의 핀 배열 메모리의 가상으로 인접하는 공간이다. 메모리 영역(232)은 그 메모리 영역(232)의 가상 어드레스(VA), 길이, 액세스 허용 및 그 메모리 영역(232)에 연관된 물리적 페이지의 리스트에 의해 설명된다. 메모리 영역(232) 등록의 결과, 소비자는 그 수신된 메모리 영역(232)을 액세스하는데 사용될 수 있는 스티어링 태그(STag)를 수신한다. 원거리 사용자(예컨대, 도 1g에서의 요청자)에 의한 메모리 영역(232)의 액세스는 근거리 소비자(예컨대, 도 1g에서의 응답자)와의 어떠한 대화 없이도 RNIC(4)에 의해 수행된다. 소비자가 원거리 메모리(232)를 액세스하고자 원할 때, 소비자는 각각 RDMA 기입 또는 RDMA 판독 타입의 발송 작업 요청(WR)(208W) 또는 발송 작업 요청(208R)(도 1h)을 포스팅한다. 버브 라이브러리(80)(도 1a)는 대응하는 WQE(216W(도 1g) 또는 216R(도 1h))를 각각 발송 대기열(SQ)(210W 또는 210R)에 추가하고, 이것을 RNIC(4)에 통보한다. 접속이 중재(arbitration)를 획득할 때, RNIC(16)은 WQE(216W 또는 216R)을 판독하고, 각각 RDMA 기입 메시지(202) 또는 RDMA 판독 메시지(204)를 생성한다.
RDMA 기입 메시지(202)를 구체적으로 참조하면, 도 1g에 도시된 바와 같이, RDMA 기입 메시지(202)가 RNIC(4)에 의해 수신될 때, RNIC는 STag와 DDP 세그먼트(그 메시지에 속하는)의 헤더 내의 TO(도 1d) 및 길이를 이용하여 등록된 메모리 영역(232)을 탐색하고, RDMA 기입 메시지(202)의 페이로드를 메모리(232)에 위치시킨다. 수신기 소프트웨어 또는 CPU(즉, 도시된 바와 같은 응답자)는 데이터 배치 동작에는 관여하지 않으며, 이 동작이 발생하였다는 것을 알지 못한다.
RDMA 판독 메시지(204)를 구체적으로 참조하면, 도 1h에 도시된 바와 같이, 메시지가 RNIC(4)(도 1a)에 의해 수신될 때, RNIC는 RDMA 판독 응답 메시지(206)를 생성하고, 이것을 원격 호스트, 즉 도시된 바와 같은 요청자에게 돌려 보낸다. 이 경우, 수신 대기열은 판독 대기열(214)로서 지칭된다. RDMA 판독 응답 메시지(206)의 생성 또한 근거리 소비자(즉, 응답자)의 관여 없이 행해지며, 이 근거리 소비자는 이 동작이 발생하였다는 것을 알지 못한다. RDMA 판독 응답 메시지(206)가 수신될 때, RNIC(4)(도 1a)는 이 메시지를 RDMA 기입 메시지(204)를 핸들링하는 것과 유사하게 핸들링한다. 즉, RNIC(4)는 이 메시지를 요청자측 상의 메모리 영역(232)에 기입한다.
소비자 작업 대기열의 핸들링에 부가하여, RNIC(4)(도 1a)는 또한 도 1f 내지 도 1h에 도시된 바와 같이 이들 요청의 완료에 대해 소비자에게 통보한다. 완료 통보는 또 다른 RNIC 자원인 완료 대기열(240)을 이용하여 수행되며, 이 완료 대기열은 소비자에 의해 할당된다(버브 라이브러리(8)에 의해 제공된 전용 함수를 통해). 완료 대기열(240)은 완료 대기열 엘레멘트(CQE)(242)를 포함한다. CQE(242)는 RNIC(4)가 소비자 작업 요청(WR)(208S, 208W, 208RR)의 완료를 보고할 때 RNIC(4)(도 a1)에 의해 완료 대기열(CQ)(240)에 위치된다. 각각의 작업 대기열(즉, 발송 대기열(SQ)(210), 수신 대기열(RQ)(212))은 관련된 완료 대기열(CQ(240)을 갖는다(주의 : 판독 대기열(214)이 하드웨어에 의해 유지된 내부 대기열이고, 소프트웨어로 보여질 수 없음. 따라서, 이 대기열에 연관된 CQ(240)는 없으며, 소비자는 이 대기열을 할당하지 못 할뿐만 아니라 그 존재에 대해서도 알지 못함). 그러나, 동일한 완료 대기열(CQ)(240)이 하나 이상의 발송 대기열(SQ)(210) 및 수신 대기열(RQ)(212)에 연관될 수 있음을 유의하여야 한다. 연관은 대기열쌍(QP) 할당시에 수행된다. 동작시, 소비자가 작업 요청(WR)(208)을 발송 대기열(SQ)(210)에 포스팅할 때, 이 요청이 완료될 때의 통지를 얻고자 원하는지의 여부를 특정할 수 있다. 소비자가 완료 통보를 요청한다면, RNIC(4)는 작업 요청(WR)의 완료시에 완료 대기열 엘레멘트(CQW)(242)를 발송 대기열(SQ)(210)에 연관된 연관 완료 대기열(CQ)(240)에 위치시킨다. RDMA 프로토콜은 발송 대기열(SQ)(210)에 포스팅된 작업 요청(WR)(208)에 대한 매우 간편한 완료 순서를 정의한다. 특히, RDMA 발송 작업 요청(WR)(208S) 및 RDMA 기입 작업 요청(WR)(208W)은 이들이 신뢰적으로 송신될 때에 완료된다. RDMA 판독 작업 요청(WR)(208R)은 대응하는 RDMA 판독 응답 메시지(206)가 수신되어 메모리 영역(232)에 위치될 때에 완료된다. 소비자 작업 요청(WR)은 이들이 발송 대기열(SQ)(210)에 포스팅되는 순서 로 완료된다. 도 1f를 참조하면, 수신 대기열(RQ)(212)에 포스팅된 각각의 작업 대기열(WR) 또한 완료 통보를 요구한다. 따라서, RNIC(4)(도 1a)가 수신된 발송 메시지(200)의 배치를 완료할 때, RNIC(4)는 그 수신 대기열(RQ)(212)에 연관된 완료 대기열(CQ)(240)에 완료 대기열 엘레멘트(CQE)(242)를 위치시킨다.
전술한 맥락에서, 본 기술분야에서는 정렬된 DDP 세그먼트 배치 및 전달을 비정렬된 DDP 세그먼트 배치 및 전달과는 상이하게 핸들링하기 방법이 요구된다.
본 발명은 특정 접속의 모든 수신 DDP 세그먼트가 정렬되는 메모리에 직접 데이터 배치를 수행하거나, 또는 특정 접속의 일부 DDP 세그먼트가 비정렬되는 재조립 버퍼를 통해 데이터를 이동시키는 RNIC 장치를 포함한다. 재조립 버퍼를 액세스하지 않고 컷스루하는 접속의 유형은 "고속" 접속으로 지칭되는 한편, 다른 유형의 접속은 "저속" 접속으로 지칭된다. 소비자가 접속을 구축할 때, 그 소비자는 접속 유형을 특정한다. 예컨대, 인터넷을 통해 다른 대륙으로 가는 접속은 정렬된 세그먼트로 목적지에 도달할 확률이 낮으며, 그에 따라 소비자에 의해 "저속" 접속 유형으로서 지정되어야 한다. 한편, 저장 영역 네트워크(SAN) 내의 2개의 서버를 접속시키는 접속은 모든 DDP 세그먼트가 정렬될 확률이 매우 높으며, 그에 따라 소비자에 의해 "고속" 접속으로서 특정될 것이다. 접속 유형은 고속에서 저속으로, 그리고 그 반대로 변경할 수 있다. 본 발명은 메모리 대역폭, 레이턴시 및 TCP 재송신을 이용한 에러 복구를 감소시키며, 빈 수신 대기열, 즉 수신 대기열이 인입하는 태그 미부착 DDP 세그먼트에 대한 포스팅된 작업 대기열 엘레멘트(WQE)를 갖지 못할 때의 수신 대기열로부터 "원활한 복구"을 제공한다. 종래의 장치는 접속 중단으로 종료할 것이다. 이와 달리, 본 발명에 따른 고속 접속은 이러한 세그먼트를 드롭(drop)시키고, TCP 전송 프로세스를 이용하여 이러한 상황을 복구하고 접속 중단을 방지할 것이다. 본 장치는 또한 세그먼트 수신을 확인하는 TCP 확인응답(Ack)을 발송하기 전에 고속 접속에서의 인입 DDP 세그먼트의 거의 대부분에 대하여 순환 중복 검사(CRC) 검증을 시행할 것이다. 이로써, CRC 검사에 의해 검출된 데이터 붕괴를 신뢰적인 TCP 서비스를 이용하여 효과적으로 복구할 수 있게 된다.
본 발명의 제1 특징은 오류에 대하여 데이터 전송을 검사하는 방법에 관한 것이며, 본 방법은 데이터 전송이 적어도 하나의 정렬된 직접 데이터 배치(DDP) 세그먼트를 포함하는 것으로 가정하는 단계와, 전송 제어 프로토콜(TCP) 페이로드의 최초의 2바이트가 프로토콜 데이터 유닛 정렬을 갖는 마커(MPA) 프로토콜 프레임의 길이 필드를 포함한다는 가정에 기초하여 데이터 전송의 경계를 식별하는 단계와, 전술한 가정들에 기초하여 순환 중복 검사(CRC) 값을 계산하는 단계를 포함한다.
본 발명의 제2 특징은 데이터 전송을 에러에 대하여 검사하는 시스템에 관한 것이며, 본 시스템은 전송 제어 프로토콜(TCP) 페이로드의 최초의 2바이트가 프로토콜 데이터 유닛 정렬을 갖는 마커(MPA) 프로토콜 길이 필드를 포함한다는 제1 가정에 기초하여 데이터 전송의 경계를 식별하는 수단과, 제1 가정 및 데이터 전송이 적어도 하나의 정렬된 직접 데이터 배치(DDP) 세그먼트를 포함한다는 제2 가정에 기초하여 순환 중복 검사(CRC) 값을 계산하는 수단을 포함한다.
본 발명의 제3 특징은 데이터 전송을 에러에 대하여 검사하기 위한 재전송 시도의 횟수를 제한하기 위해 컴퓨터 판독 가능한 프로그램 코드가 저장되어 있는 컴퓨터 이용 가능한 매체를 포함하는 컴퓨터 프로그램 제품에 관한 것이며, 이 프로그램 제품은 전송 제어 프로토콜(TCP) 페이로드의 최초의 2바이트가 프로토콜 데이터 유닛 정렬을 갖는 마커(MPA) 프로토콜 길이 필드를 포함한다는 제1 가정에 기초하여 데이터 전송의 경계를 식별하도록 구성된 프로그램 코드와, 제1 가정 및 데이터 전송이 적어도 하나의 정렬된 직접 데이터 배치(DDP) 세그먼트를 포함한다는 제2 가정에 기초하여 순환 중복 검사(CRC) 값을 계산하도록 구성된 프로그램 코드를 포함한다.
전술한 본 발명의 특징 및 기타 다른 특징은 본 발명의 실시예를 보다 구체적으로 설명하고 있는 이하의 상세한 설명으로부터 더욱 명확해질 것이다.
본 발명의 실시예는 동일한 구성요소에 동일한 도면부호가 부여되어 있는 첨부 도면을 참조하여 상세하게 설명될 것이다.
도 1a는 종래의 데이터 전송 환경 및 RNIC에 대한 블록도이다.
도 1b는 TCP/IP 데이터 전송 구조 상의 종래의 MPA/RDMA/DDP에 대한 블록도이다.
도 1c는 하나 이상의 DDP 세그먼트에 대한 가능한 MPA 마커 참조의 블록도이 다.
도 1d는 종래의 태그 부착 DDP 헤더의 블록도이다.
도 1e는 종래의 태그 미부착 DDP 헤더의 블록도이다.
도 1f 내지 도 1h는 다양한 종래의 RDMA 메시지 데이터 전송의 블록도이다.
도 2a는 본 발명에 따른 데이터 전송 환경 및 RNIC의 블록도이다.
도 2b는 도 2a의 RNIC의 접속 컨텍스트의 블록도이다.
도 2c는 도 2a의 RNIC의 검증 유닛의 블록도이다.
도 3은 RNIC 입력 로직(즉, InLogic) 함수의 흐름도이다.
도 4a 및 도 4b는 도 3의 InLogic에 대한 제한적인 재전송 시도 모드 실시예에 대한 흐름도이다.
도 5는 다른 실시예에 따른 접속 다운드레이딩(connection downgrading) 후의 TCP 세그먼트의 핸들링을 예시하는 블록도이다.
도 6은 도 3의 InLogic에 대한 접속 업그레이드 실시예에 대한 흐름도이다.
도 7은 순환 중복 검사(CRC) 계산 및 검증을 위한 초기 시퀀스 번호 조정 장치와 함께 사용하기 위한 MPA 요청/응답 프레임을 도시하는 도면이다.
도 8은 CRC 계산 및 검증을 위한 다른 수정된 MPA 길이 시행에 대한 흐름도이다.
도 9는 CRC 계산 및 검증을 위한 노-마커 컷스루 시행을 이용하는 InLogic의 다른 제1 실시예에 대한 흐름도이다.
도 10은 CRC 계산 및 검증을 위한 노-마커 컷스루 시행을 이용하는 InLogic 의 다른 제2 실시예에 대한 흐름도이다.
도 11은 본 발명에 따른 판독 대기열을 포함하는 RDMA 판독 및 판독 응답 메시지 데이터 전송에 대한 블록도이다.
도 12는 RNIC 출력 로직(즉, OutLogic)에 의해 처리된 메시지에 대한 작업 대기열 엘레멘트(WQE) 및 TCP 홀에 대한 블록도이다.
도 13은 본 발명에 따른 완성 대기열 엘레멘트(CQE)를 포함하는 RDMA 발송 메시지 데이터 전송에 대한 블록도이다.
도 14는 도 13의 CQE에 대한 블록도이다.
이하의 설명은 Ⅰ. 개요, Ⅱ. InLogic, Ⅲ. OutLogic, Ⅳ. 결론의 순서로 이루어진다.
Ⅰ. 개요
A. 환경
첨부 도면을 참조하면, 도 2a는 본 발명의 일실시예에 따른 데이터 전송 환경(10)의 블록도이다. 데이터 전송 환경(10)은 데이터 전송(14A)을 하나 이상의 원격 메모리 데이터 액세스(RDMA) 가능 네트워크 인터페이스 컨트롤러(RNIC)(16)를 통해 데이터 싱크(18)(즉, 피어)에 전송하는 데이터 소스(즉, 피어)를 포함하며, 데이터 싱크(18)는 데이터 전송(14B)을 수신한다. 설명을 위해, 데이터 전송을 개시하는 엔티티는 "요청자"로서 지칭될 것이고, 데이터 전송에 응답하는 엔티티는 " 응답자"로서 지칭될 것이다. 유사하게, 데이터를 전송하는 엔티티는 "송신기"로서 지칭될 것이고, 데이터 전송을 수신하는 엔티티는 "수신기"로서 지칭될 것이다. 데이터 소스(12) 및 싱크(18)의 각각은 상황에 따라 데이터의 송신기가 되거나 수신기가 되며, 또한 요청자가 되거나 응답자가 되며, "소스" 및 "싱크"라는 표시 명칭은 전송될 데이터를 유지하는 그 엔티티를 초기에 나타내기 위한 용도로만 제공된다. 이하의 설명은 위의 엔티티 중의 하나를 "소비자"(그것이 RNIC(16) 자원을 소비하므로)로 지칭할 것이며, 여기에서는 더욱 구체적인 표시 명칭은 필요없다. "목적지 버퍼"는 수신기에서 데이터를 궁극적으로 수신하는 데이터 저장부, 즉 데이터 소스(12) 또는 데이터 싱크(18)의 데이터 버퍼(50)를 지칭할 것이다. 데이터 소스(12) 및 데이터 싱크(18)는 각각 데이터 저장을 위한 데이터 퍼버(50)를 포함한다.
하드웨어를 통해, RNIC(16)는 네트워크 I/O 어댑터 등의 임의의 네트워크 인터페이스 컨트롤러 또는 iWARP 및 버브 기능을 갖는 이식(imbedded)형 컨트롤러이다. RNIC(16)는 또한 버브 인터페이스(20), 액세스 제어부(30), RNIC 입력 로직(이후, "InLogic")(32), 재조립 버퍼(34), 내부 데이터 버퍼(38), RNIC 출력 로직(이후, "OutLogic")(40), 접속 컨텍스트(42), 검증 유닛(44) 및 기타 구성요소(46)를 포함한다. 버브 인터페이스(20)는 사용자 공간 라이브러리(24) 및 커널 모듈(26)의 2가지 파트를 갖는 버브 라이브러리(22)를 포함한다. 액세스 제어(30)는 InLgic(32)에 대한 액세스를 제어하기 위한 임의의 공지된 로직 또는 추후 개발될 로직을 포함할 것이다. 재조립 버퍼(34)는 데이터 전송(14A, 14B)에 관련하여 데 이터의 일시적인 저장을 위한 임의의 메카니즘을 포함할 수도 있다. 특히, 재조립 버퍼(34)는 아래에 더욱 상세하게 설명되는 바와 같은 비정규 순서의 TCP 스트림의 일시적인 저장을 위해 흔히 사용된다. 다른 구성요소(46)는 RNIC(16)의 동작에 필요한 임의의 다른 로직, 하드웨어, 소프트웨어 등을 포함할 수도 있으며, 기재된 것 이외에는 본 명세서에서 설명되지 않는다.
도 2b를 참조하면, 접속 컨텍스트(42)는 접속-지정 데이터를 저장하기 위한 다수의 필드를 포함한다. 다른 컨텍스트 데이터(60)는 본 명세서에서 구체적으로 설명되지는 않지만 본 기술분야의 당업자에게는 인지 가능한 접속-지정 데이터를 제공한다. 본 발명에 따라, 고속(이후 "FAST") 접속 및 저속(이후 "SLOW") 접속의 2가지의 접속 유형이 정의된다. "고속" 및 "저속"이라는 용어는 정렬된 DDP 세그먼트를 전달하는 접속의 가능성을 지칭한다. 접속 유형은 접속 유형(62)으로 지칭되는 접속 컨텍스트 필드에서 식별된다. SLOW 접속은 SLOW 접속으로서 생성되거나 또는 인입 데이터의 처리 동안 RNIC(16)에 의해 다운그레이드되는 RDMA 접속에 대하여 이용될 것이며, 이에 대해서는 더욱 상세하게 후술될 것이다. 도 2b에 도시된 다른 필드는 본 명세서의 다른 부분에서의 이들과 연관된 처리에 관련하여 설명될 것이다. 도 2c를 참조하면, 검증 유닛(44)은 검증 처리를 위해 필요할 수도 있는 순환 중복 검사(CRC) 로직(64), TCP 체크섬 로직(66) 및 저장-발송 버퍼(68)를 포함한다.
B. RNIC 일반 동작
도 2a를 참조하면, 동작시, RNIC(16)는 InLogic(32)에 대한 액세스를 제어하 는 액세스 제어(30)를 통해 데이터 전송(14A)을 수신한다. 접속을 유지하기 위한 정보는 종래와 같이 접속 컨텍스트(42)의 다른 컨텍스트 데이터(60)(도 2b)에 보관된다. InLogic(32)은 데이터 전송(14A)의 인입 TCP 세그먼트를 처리하고, 수신된 TCP 세그먼트의 검증을 TCP 체크섬 로직(66)(도 2c)을 통해 수행하며, CRC 로직(64)(도 2c)를 통해 MPA CRC를 계산하며, FAST 접속 데이터 스트림과 SLOW 접속 데이터 스트림을 분리한다. 후자의 기능에 관련하여, InLogic(32)은 더욱 상세하게 후술되는 바와 같이 SLOW 접속을 통해 RNIC(16)에 의해 수신된 모든 데이터를 재조립 버퍼(34)에 보내고, FAST 접속을 다수의 상이한 방식으로 핸들링한다. FAST 접속에 관련하여, InLogic(32)이 정렬 위반(즉, TCP 헤더 다음에 DDP 헤더가 즉각적으로 후속되지 않고, DDP 세그먼트가 하나의 TCP 세그먼트에 전체적으로 포함되지 않음)을 검출하면, 그 접속은 SLOW 접속으로 다운그레이드되고, 데이터가 재조립 버퍼(34)에 보내진다. 반대로, 정렬 위반이 나타나지 않으면, InLogic(32)은 정렬된 인입 DDP 스트림을 내부 데이터 버퍼(38)에 보내고, 그 후 목적지 데이터 버퍼(50)에의 직접 배치를 위해 OutLogic(40)에 보내진다. 이와 달리, TCP 세그먼트(106)는 드롭될 수도 있으며, 확인응답(Ack)이 보내지지 않으며, 세그먼트의 재전송을 협의할 수도 있다.
OutLogic(40)은 FAST 및 SLOW 접속을 중재하며, 데이터 싱크(18)의 데이터 버퍼(50)에 대한 양측의 접속 유형 스트림의 데이터 배치를 수행한다. FAST 접속시의 정렬된 DDP 세그먼트가 목적지 버퍼에 대한 직접 배치를 위해 내부 데이터 버퍼(38)로 보내지는 상황은, 정렬된 DDP 세그먼트를 갖는 FAST 접속이 재조립 버 퍼(34)를 우회하여 OutLogic(40)에 의해 직접 배치되기 때문에, "컷스루 모드"로 지칭된다. 그러나, 양측의 접속 유형에 대해, 정규의 순서로 수신된 데이터 스트림만이 OutLogic(40)을 통해 데이터 싱크(18)에 전달된다.
Ⅱ. InLogic
도 3을 참조하여, 본 발명에 따른 InLogic(32)(도 2a)의 흐름도와 InLogic에 의한 데이터 전송(14A)의 처리가 더욱 상세하게 설명될 것이다. 전술한 바와 같이, InLogic(32)은 인입 TCP 세그먼트를 처리하고, 수신된 세그먼트의 TCP 검증을 수행하며, MPA CRC를 계산하고, FAST 접속 데이터 스트림과 SLOW 접속 데이터 스트림을 분리한다. 다른 의미로 언급되지 않을 경우, "S"가 첨부된 도면 부호는 도 2a 내지 도 2c에 도시된 구조를 지칭한다.
제1 단계 S1에서, InLogic(32)은 RNIC(16) 접속에 속하는 데이터 전송(14A)의 TCP 세그먼트(106)를 필터링하고, 수신된 세그먼트에 대한 계산된 CRC 검증(검증 유닛(44)을 통한) 결과를 갖는 패킷을 획득한다(CRC 검증은 InLogic(32) 결정 처리 이전에 행해져야만 함에 유의하기 바란다. CRC 검증은 또한, TCP 세그먼트(106)가 FAST 접속에 속하는 것으로서 식별되기 전에, TCP 체크섬 계산과 동시에 행해질 수도 있다 - 단계 S2).
단계 S2에서, InLogic(32)은 TCP 세그먼트(106)가 SLOW 접속에 속하는지의 여부를 판정한다. 이 경우, InLogic(32)은 송신기가 그 접속을 어떻게 라벨링하였는지를 판정한다. 판정 결과가 "예"인 경우, TCP 세그먼트(106)는 재조립 버퍼(34)로 보내지며, 단계 S3에서, TCP 로직은 이 세그먼트를 성공적으로 수신된 것 으로서 간주한다.
판정 결과가 "아니오"인 경우, InLogic(32)은 단계 S4에서 TCP 세그먼트(106) 길이가 설명된 MPA 세그먼트 길이보다 더 큰지의 여부를 판정한다. 즉, TCP 헤더(126)에 설명되어 있는 TCP 세그먼트(106) 길이가 MPA 길이 필드(114)에 설명된 MPA 길이보다 더 긴지의 여부가 판정된다. 판정 결과가 "예"인 경우, 이것은 TCP 세그먼트(106)가 다수의 DDP 세그먼트(112)를 포함한다는 것을 나타내며, 그 처리는 후술될 것이다. 판정 결과가 "아니오"인 경우, 이것은 TCP 세그먼트(106)가 단일 DDP 세그먼트(112 또는 112NA)를 포함한다는 것을 나타낸다.
후자의 경우, 단계 S5에서, InLogic(32)은 MPA 길이가 TCP 세그먼트(106) 길이보다 더 큰지의 여부를 판정한다. 판정 결과가 "예"인 경우, 이것은 다음의 3가지 상황 중 하나를 나타낸다: 1) 단일 DDP 세그먼트(112NA)가 TCP 세그먼트(106)에 정렬되지 않고, MPA 길이 필드로 가정되는 필드가 길이 필드가 아니거나, 2) 단일 DDP 세그먼트(112)의 개시점이 TCP 세그먼트(106)에 대해 정렬되지만, 단일 DDP 세그먼트의 길이가 TCP 세그먼트(106) 페이로드 크기를 초과하거나, 또는 3) 수신된 단일 DDP 세그먼트(112)가 TCP 세그먼트(106)에 대해 정렬되지만, 붕괴된 MPA 길이 필드(114)를 갖는 상황. 앞의 2가지 상황은 비정렬된 단일 DDP 세그먼트(112NA)가 FAST 접속시에 수신되었다는 것을 나타내고, 그러므로 그 접속은 단계 S3에서 SLOW로 다운그레이드되어야 한다. 3번째 상황은 접속 다운그레이드를 요구하지 않는다. 그러나, MPA 프레임(109)가 TCP 세그먼트(106) 길이를 초과하는 이유가 불특정성을 나타내어 식별 및 확인될 수 없기 때문에, 이러한 TCP 세그먼트(106)의 드롭(즉, 취소 및 비전송)은 권장할 수 없으며, 그 이유는 교착상태(위의 2번째 상황)에 빠질 수 있기 때문이다. 즉, 이러한 TCP 세그먼트가 비정렬 DDP 세그먼트를 실제로 운반하면, 송신기는 동일한 비정렬된 DDP 세그먼트를 재전송할 것이며, 이 동일한 비정렬된 DDP 세그먼트는 동일한 흐름에 따라서 수신기에 의해 반복적으로 드롭되어 결국 교착상태에 빠지게 될 것이다. 따라서, InLogic(32)은 단계 S3에서 TCP 세그먼트(106)를 재조립 버퍼(34)에 보내고, TCP 세그먼트가 성공적으로 수신되었다는 것을 확인하기 위해 확인응답(Ack)을 스케쥴링하며, 그 접속을 SLOW 접속으로 다운그레이드한다(즉, 도 2b의 접속 유형 필드가 FAST에서 SLOW로 전환됨). 후술하는 바와 같이, MPA 길이 필드(114)가 붕괴되면(위의 3번째 상황), 이것은 OutLogic(40)에 의해 검출되며, 그 접속은 검증 유닛(44)에 의해 검출된 바와 같은 CRC 에러로 인해 차단될 것이다. 따라서, 단계 S3에서 접속 다운그레이드는 정렬된 DDP 세그먼트(112)에서의 데이터 붕괴로 인해 FAST 접속이 영구적으로 SLOW 접속이 되게 하지는 않는다.
단계 S5에서, MPA 길이가 TCP 길이보다 더 크지 않으면, 즉 판정 결과가 "아니오"라면, 이것은 MPA 프레임(109) 길이가 TCP 세그먼트(106) 길이에 부합(일치)한다는 것을 나타낸다. InLogic(32_은 단계 S6에서 CRC 검증 결과가 이 TCP 세그먼트(106)에 대해 유효한지의 여부를 판정한다. 즉, CRC 로직(64)이 "유효" 표식을 리턴하는지의 여부를 판정한다. 판정 결과가 "예"인 경우, 이것은 단일 DDP 세그먼트(112)가 TCP 세그먼트(106) 경계에 정확하게 일치한다는 것을 나타내고(즉, 길이가 서로 동일하다), 이 세그먼트에 대해서는 데이터 붕괴가 검출되지 않는다. 그 결과, 단계 S7에서, 단일 DDP 세그먼트(112)는 수신된 TCP 세그먼트(106)를 OutLogic(40)에 의한 처리를 위해 RNIC(16)의 내부 데이터 버퍼(38)에 위치시킴으로써 "고속 경로 모드"로 처리되며, OutLogic은 수신된 TCP 세그먼트(106)를 수신기, 예컨대 데이터 싱크(18)의 목적지 데이터 버퍼(50)에 직접 위치시킨다. 또한, 확인응답(Ack)은 이 TCP 세그먼트(106)의 성공적인 수신을 확인응답하도록 스케쥴링된다.
CRC 로직(64)이 "무효" 표식을 리턴하는 경우, 즉, 단계 S6에서 판정 결과가 "아니오"인 경우, 이것은 본 발명에 따라 결정될 수 있는 5가지의 가능한 경우 중의 하나를 나타낸다. 도 1c는 5가지의 가능한 경우를 예시하며, 단계 S8 내지 S10은 InLogic(32)이 각각의 경우를 어떻게 핸들링하는지를 나타낸다. 어떠한 경우에도, 처리의 목적은 1) 비정렬된 접속이 송신기에 의해 FAST 접속으로 단정되는 경우에도, 비정렬된 접속의 중단을 방지하고, 2) FAST 접속에 속하는 정렬된 DDP 세그먼트에서의 데이터 붕괴로 인한 접속 중단의 확률을 감소시키고, 3) 반복적으로 다루어질 경우의 수를 최소치로 감소시키면서 InLogic(32)을 가능한 한 간편하게 유지하는 것이다.
단계 S8에서, InLogic(32)은, 도 1c의 경우 C에 도시된 바와 같이, 새로이 수신된 DDP 세그먼트(162)의 DDP 세그먼트 헤더(160)가 이전에 처리된 DDP 세그먼트(166)의 MPA 길이 필드(164)에 의해 참조되는지의 여부를 판정한다. 이 경우, 이전에 처리된 DDP 세그먼트(166)의 MPA 길이가 새로이 수신된 DDP 세그먼트(166)의 MPA CRC의 검증 동안에 검사되고, 그러므로 다음 세그먼트에서 DDP 세그먼 트(162)의 정확한 지점을 참조한다. 단계 S6에서, 경우 C에 대한 검증은 단일 DDP 세그먼트(162) 데이터 또는 헤더(160)가 붕괴되었다는 것을 의미한다. 새로이 수신된 세그먼트(162)의 TCP 재전송은 이 문제점을 해소한다. 따라서, 단계 S9에서, 세그먼트(106)는 드롭되고, 세그먼트 수신은 확인응답되지 않은 것으로 간주된다.
새로이 수신된 DDP 세그먼트(162)의 헤더(160)가 이전에 처리된 DDP 세그먼트(166)의 MPA 길이 필드(164)에 의해 참조되지 않으면(즉, 단계 S8에서 판정 결과가 "아니오"인 경우), InLogic(32)은 단계 S10으로 진행하여, 도 1c의 경우 B에 도시된 바와 같이, 새로이 수신된 DDP 세그먼트(162)의 헤더(160)가 새로이 수신된 DDP 세그먼트(162) 내부에 위치된 마커(168)에 의해 참조되는지의 여부, 즉 마커(168)는 새로이 수신된 DDP 세그먼트(162)의 개시점을 참조하고 있는지의 여부를 판정한다. 이 경우, 단계 S6에서의 CRC 검증은, 1) 마커(168)가 정확한 값을 운반하고, 새로이 수신된 DDP 세그먼트(162)가 붕괴된 DDP 헤더(160) 또는 데이터를 갖는다는 것을 나타내거나, 또는 2) 새로이 수신된 DDP 세그먼트(162) 내부의 마커(168)가 붕괴되었다는 것을 나타낸다. 양자의 경우, 새로이 수신된 DDP 세그먼트(162)의 재전송은 문제점을 해소한다. 따라서, 단계 S9에서, TCP 세그먼트는 드롭되고, 세그먼트 수신이 확인응답되지 않는다.
새로이 수신된 DDP 세그먼트(162) 헤더(160)가 새로이 수신된 DDP 세그먼트(162) 내부에 위치된 마커(168)에 의해 참조되지 않는다면, 즉 단계 S10에서 판정 결과가 "아니오"라면, 3가지 경우 중의 하나가 존재한다. 먼저, 도 1c의 경우 C에서 나타낸 바와 같이, 마커(168)는 새로이 수신된 DDP 세그먼트(162)에 위치되 지만, 세그먼트의 외부를 지적한다. 두 번째로, 도 1c의 경우 D에 나타낸 바와 같이, 마커(168)가 새로이 수신된 DDP 세그먼트(162)에 위치되지만, 세그먼트 내부를 지적한다. 세 번째, 도 1c의 경우 E에 나타낸 바와 같이, 새로이 수신된 DDP 세그먼트(162)에 마커가 위치되지 않는다.
경우 C, D 및 E에서, CRC 로직(64)이 개별 표식을 리턴하는 이유는 데이터 붕괴 및/또는 비정렬된 DDP 세그먼트(112NA)(도 1b)의 수신의 결과일 것이다. 이러한 세그먼트의 비제한적인 재전송은 비정렬된 DDP 세그먼트(112NA)의 경우에 교착상태에 빠질 수 있다. 잠재적인 교착상태를 방지하기 위해, InLogic(32)은 단계 S3에 나타낸 바와 같이 새로이 수신된 DDP 세그먼트(162)를 재조립 버퍼(34)에 보내고, 세그먼트의 성공적인 수신을 확인하기 위해 확인응답(Ack)를 스케쥴링하고, 그 접속을 SLOW 접속으로 다운그레이드함으로써 경우 C, D 및 E를 핸들링한다. 유효하지 않은 표식을 리턴하는 CRC 로직(64)가 정렬된 DDP 세그먼트(112)에서의 데이터 붕괴로 인한 것이라면, 이 에러는 SLOW 접속의 데이터 및 그 접속을 처리가 중단될 때에 OutLogic(40)에 의해 검출될 것이며, 이에 대해서는 후술될 것이다. 그렇지 않으면, 접속은 SLOW 접속을 지속적으로 유지할 것이다. 그러나, 추후에 설명될 제한적인 재전송 시도 모드가 이 문제점을 방지한다.
다시 도 3의 단계 S4를 참조하면, TCP 세그먼트(106) 길이가 MPA 프레임(109) 길이보다 더 큰 것으로 InLogic(32)이 판정하면, 이것은 TCP 세그먼트(106)가 복수의 DDP 세그먼트(112)를 포함한다는 것을 나타낸다. 이 경우, 단계 S11에서, CRC 로직(64) 검증 결과의 순차적인 검사는 최초의 DDP 세그먼트(112)에 서 최종의 DDP 세그먼트까지 시행된다. 모든 DDP 세그먼트(112)가 유효한 CRC를 갖는다면, 즉 판정 결과가 "예"라면, 모든 DDP 세그먼트(112)가 TCP 세그먼트(106)에 전체적으로 포함되며, 모두가 유효하고 적합하게 정렬된 DDP 세그먼트(112)가 된다. 이 경우, InLogic(32)은, 단계 S7에서, 수신된 TCP 세그먼트(106)를 OutLogic(40)에 의한 처리를 위해 RNIC(16)의 내부 데이터 버퍼(38)에 위치시킴으로써 DDP 세그먼트(112)를 고속 경로 모드로 처리하며, OutLogic은 수신된 TCP 세그먼트(106)를 목적지 데이터 버퍼, 예컨대 데이터 싱크(18)의 데이터 버퍼(50)에 위치시킨다. 또한, 이 TCP 세그먼트(106)의 성공적인 수신을 확인해주기 위해 확인응답(Ack)이 스케쥴링된다. InLogic(32)은 최초의 장애가 검출될 때에 CRC 검증 결과를 검사하는 것을 중지하며, 이에 대한 관리는 단계 S12 및 S13과 관련하여 설명된다.
단계 S12에서, InLogic(32)은 최초의 DDP 세그먼트(112)가 CRC 로직(64)에 의해 판정된 바와 같은 무효 CRC를 갖는지의 여부를 판정한다. 판정 결과가 "예"인 경우, InLogic(32)은 최초의 DDP 세그먼트(112)를 단일 DDP 세그먼트에 대한 무효 CRC 경우(단계 S8)와 유사하게 처리한다. 즉, InLogic(32)은 최초의 DDP 세그먼트(112)를 단일 DDP 세그먼트(112)처럼 무효 CRC를 가지고 취급하며, 무엇이 CRC 무효를 초래하였는지, 즉 도 1c의 경우 A 내지 경우 E 중의 어느 것이 적용되는지와, 그 경우를 어떻게 적합하게 핸들링할지를 판정하도록 진행한다.
단계 S12의 결과가 "아니오"인 경우, 즉 최초의 DDP 세그먼트(112)가 유효 CRC를 갖는 경우, InLogic(32)은 단계 S13에서 중간 또는 최종 DDP 세그먼트(112) 를 검사할 때에 CRC 무효성이 검출되었는지의 여부를 판정하도록 진행한다. 판정 결과가 "예"인 경우, CRC 무효를 초래한 DDP 세그먼트(112)의 데이터 또는 헤더가 붕괴되었다는 것을 이 에러가 나타내기 때문에, InLogic(32)(도 1)은 단계 S9로 진행한다(즉, 유효한 CRC를 갖는 이전의 DDP 세그먼트의 길이). 즉, CRC 에러는 동일한 TCP 세그먼트(106)에서 중간 또는 최종 DDP 세그먼트(112)에 대해 검출되며, 이것은 이전의 DDP 세그먼트가 유효한 CRC를 갖고, 그러므로 이전의 DDP 세그먼트의 길이가 무효 CRC를 갖는 세그먼트의 헤더를 가리킨다는 것을 의미한다. 이것은 경우 C의 설명과 부합한다(도 1c). 따라서, 경우 A에서 설명된 바와 같이, 헤더의 위치를 알게 되며, 그러므로 CRC 에러는 데이터 또는 헤더 붕괴 중의 하나에 의해 야기되었다는 것을 알려준다. 따라서, 전체 TCP 세그먼트의 재전송은 교착상태가 될 가능성없이 이 문제점을 해소하여야 한다. 단계 S9에서, TCP 세그먼트가 드롭되며, 세그먼트 수신이 확인되지 않는다.
단계 S13의 결과가 "아니오"인 경우, 즉 중간 또는 최종 DDP 세그먼트(112)가 CRC 무효를 야기하지 않는 경우, 이것은 최종 DDP 세그먼트(112)의 MPA 길이 필드(114)가 TCP 세그먼트(106) 경계를 초과한다는 것을 나타낸다. 즉, 최종 DDP 세그먼트가 TCP 세그먼트(106) 경계 외부에 있거나, 너무 길다는 것을 나타낸다. 이 경우, InLogic(32)은 이 상황을 너무 긴 단일 DDP 세그먼트(112)와 동일하게 취급한다. 특히, 단계 S3에서, InLogic(32)은 TCP 세그먼트(106)의 데이터 전송(14A)을 재조립 버퍼(34)에 보내도록 진행하고, TCP 세그먼트(106)가 성공적으로 수신되었다는 것을 확인하도록 확인응답(Ack)을 스케쥴링하며, 그 접속을 SLOW 접속으로 다운그레이드한다. 이러한 방식으로, 교착상태가 방지된다. RNIC(16)가 TCP 세그먼트(106)에 포함된 복수의 DDP 세그먼트(112) 중의 하나를 드롭하도록 결정하면, 전체 TCP 세그먼트(106)가 드롭되어, 이로써 실행이 간략화되고, 핸들링될 필요가 있는 경우의 수가 감소된다.
위에서 명확하게 설명되지는 않았지만, 순서 데이터 전송 처리 또한 전술한 InLogic(32)의 동작과 관련하여 수행될 것임을 이해하여야 한다. 예컨대, RNIC(16) 접속에 속하는 TCP 세그먼트의 필터링 및 수신된 세그먼트의 TCP/IP 검증은 TCP 체크섬 로직(66)(도 2c)을 통해 체크섬 검증을 포함하여 수행될 수 있을 것이다. 인입 TCP 세그먼트(106)의 처리 또한 MPA CRC의 계산과, CRC 로직(64)을 통한 이 CRC의 검증을 포함한다. CRC 계산 및 검증을 위한 한가지 구체적인 실시예가 아래에 추가로 설명될 것이다.
A. 제한적인 재전송 시도 모드
검출된 에러의 원인의 불확정성에 관련한 다른 실시예로서(예컨대, 이러한 상황을 낳을 수도 있는 한 가지 예시 판정인 도 3의 단계 S10에서 "아니오"), 교착상태를 방지하기 위한 재전송 시도의 횟수를 제한하고 SLOW 접속으로 불필요하게 감소되는 FAST 접속의 수를 감소시키기 위해 "제한전인 재전송 시도 모드"가 시행될 수도 있다. 구체적으로, 전술한 바와 같이, 경우 C, D 및 E는, 검출된 에러의 원인의 불확정성으로 인해, 그 에러가 DDP 세그먼트(112) 정렬의 상실이 아니라 데이터 붕괴에 의해 야기될 때에, 접속이 잠재적인 접속 중단(OutLogic(40)에 의해)으로 SLOW 접속으로 다운그레이될 수도 있다(단계 S3).
재전송 시도의 횟수를 제한하기 위해, 본 발명은 접속을 다운그레이드하기 전에 어떠한 횟수의 재전송을 허용하도록 접속 컨텍스트(42)(도 2b)에 추가의 필드를 제공한다. 구체적으로, 도 2b에 도시된 바와 같이, 접속 컨텍스트(42)는 다수의 복구 시도 필드(RecoveryAttemptNum)(292), 최종 복구 시퀀스 번호 필드(LastRecoverySN)(294), 및 최대 복구 시도 번호 필드(MaxRecoveryAttemptNum) (296)를 포함한다. RecoveryAttemptNum 필드(292)는 최종 업데이트 이후에 접속을 위해 행해진 복구 시도의 횟수를 유지하고, LastRecoverySN 필드(294)는 최종으로 개시된 복구 동작의 시퀀스 번호(SN)를 유지하며, MaxRecoveryAttemptNum 필드(296)는 접속을 다운그레이드하기 전에 InLogic(32)에 의해 수행되어야 하는 복구 시도의 최대 횟수를 정의한다.
도 4a를 참조하면, 동작시, 새로운 정규의 순서로 수신된 데이터 전송이 에러를 포함하는 것으로 InLogic(32)이 검출할 때(도 4a에 단계 S101로 통칭하여 도시됨), 즉각적으로 SLOW 접속으로 다운그레이드(도 3의 단계 S3에서)하기 보다는, InLogic(32)은 그 에러를 포함하는 데이터 전송에 대해 수행될 특정한 횟수의 재전송을 제공한다. 단계 S101이 비정렬된 DDP 세그먼트(112NA) 또는 데이터 붕괴 중의 하나에 의해 야기되는 다수의 에러 판정에 대하여 통칭적으로 나타내어져 있음을 이해하여야 한다(단계 S101은 예컨대 도 3의 단계 S5에서의 "예" 또는 도 3의 단계 S10에서의 "아니오"에 적용할 수도 있을 것이다). 단계 S102에서, InLogic은 RecoveryAttemptNum를 1씩 증가시킴으로써 이 에러-포함 데이터 전송에 대해 이러한 재전송 시도를 기록하도록 진행한다. 또한, InLogic은 이전에 저장된 시퀀스 번호와 새로이 수신된(드롭되지 않은) 데이터 전송의 시퀀스 번호 중에서 가장 큰 시퀀스 번호를 저장하기 위해 LastRecoverySN를 업데이트한다. 즉, InLogic은 적어도 하나의 이전에 수신된 에러-포함 데이터 전송과 새로이 수신된 에러-포함(드롭되지는 않은) 데이터 전송 중에서 가장 큰 시퀀스 번호를 저장하기 위해 LastRecoverySN을 업데이트한다. 새로이 수신된 에러-포함 데이터 전송은 새로이 수신된 에러-포함 데이터 전송의 시퀀스 번호를 저장된 가장 큰 시퀀스 번호에 비교함으로써 가장 큰 시퀀스 번호보다 더 큰 시퀀스 번호를 갖도록 결정된다. LastRecoverySN 기록의 중요성은 이하에서 명백하게 될 것이다.
다음으로, 단계 S103에서, InLogic(32)은 RecoveryAttemptNum(필드 292)가 MaxRecoveryAttemptNum(필드 296)를 초과하는지의 여부를 판정한다. 초과하지 않는다면, 단계 S104에서, InLogic(32)은 TCP 세그먼트(106)를 드롭하고, 성공적인 수신을 확인응답하지 않으며, 이로써 TCP 세그먼트의 재전송이 야기된다. 그 후, 처리 과정은 단계 S1(도 3)으로 되돌아 간다. TCP 세그먼트(106)가 붕괴되면, 재전송은 데이터 전송(14A)이 FAST 접속으로서 메모리에 직접 배치되도록 재전송이 이러한 붕괴를 해소하여야 한다(도 3의 단계 S7에서). 이와 달리, 처리 과정이 다른 에러 검출로 되돌아 간다면(도 3의 단계 S10에서), RecoveryAttemptNum(필드 292)는 실제로 MaxRecoveryAttemptNum(필드 296)를 초과하여 단계 S106에서 "예"로 대답할 것이다. 이 경우, InLogic(32)은 단계 S105로 진행하여, InLogic(32)이 접속을 SLOW 접속으로 다운그레이드하고, 에러-포함 데이터 전송(14A)을 재조립 버퍼(34)에 위치시키며, 이 TCP 세그먼트의 성공적인 수신을 확인하는 확인응답(Ack) 을 스케쥴링한다. 전술한 처리는 각각의 에러-포함 데이터 전송에 대해 발생한다.
도 4b는 일반적으로 데이터 붕괴가 복수의 연속적인 TCP 세그먼트에서 발생하지 않지만 비정렬된 세그먼트가 여러 개의 후속 TCP 세그먼트에 영향을 줄 수도 있다는 사실을 해소하는 제한적인 재전송 시도 모드의 또 다른 접속을 예시하고 있다. 예컨대, FAST 접속은 오랜 기간의 시간 동안, 예컨대 5시간 동안 유지될 수도 있고, 시시때때로, 예컨대 1시간에 한 번, 데이터 붕괴를 가져 CRC 검증이 실패할 수도 있을 것이다. 이러한 상황이 발생할 때, RecoveryAttemptNum(필드 292)는 에러-포함 데이터 전송(즉, 붕괴된 세그먼트)이 드롭될 때마다 증가될 것이다. 이 처리 과정은 상이한 세그먼트가 상이한 기간의 시간에서의 데이터 붕괴로 인해 드롭되는 상황을 해소하며, 약간(가능하게는 1회)의 재전송 동작 후에, 이들 세그먼트가 성공적으로 수신되어 메모리에 위치된다. 따라서, 이들 세그먼트에 대한 복구 동작은 성공적으로 완료되고, 복구되는 데이터 붕괴 경우, 즉 새로운 에러 세그먼트의 수신으로 인해 새로운 복구 모드에 진입하는 시점이 카운트되지 않는다.
제한적인 재전송 시도 모드로부터 벗어나기 위해, 새로이 수신된 정규 순서의 데이터 전송의 TCP 세그먼트 시퀀스 번호(SN)(즉, InOrderTCPSegmentSN)가 LastRecoverySN(도 2b의 필드 294)보다 더 큰지의 여부에 관한 판정이 단계 S105에서 이루어진다. 즉, FAST 접속에 속하는 각각의 새로이 수신된 정규 순서의 TCP 세그먼트의 시퀀스 번호가 하나 이상의 이전에 수신된 에러-포함 데이터 전송으로부터 선택된 저장된 가장 큰 시퀀스 번호에 비교된다(더 큰 SN을 갖는 비정규 순서의 세그먼트의 수신은 에러 복구가 완료되었다는 것을 의미하지 않는다). 그러나, 복구가 완료되었다는 한 가지 표식은 복구 모드에 진입된 세그먼트 후에 전송된 TCP 세그먼트가 수신된다는 것이다. 이 상황은 InOrderTCPSegmentSN를 LastRecoverySN과 비교함으로써 판정될 수 있다. 이 판정은 실제적으로 이 접속을 위해 수신된 TCP 세그먼트의 어떠한 처리 단계에서도 이루어질 수 있다. 예컨대, 도 3의 단계 S9 후에, 또는 도 4a의 단계 S102 이전에 이루어질 수 있다. 정규 순서의 세그먼트 SN이 LastRecoverySN 보다 더 클 때, 즉 새로운 TCP 세그먼트가 수신되어 단계 S105에서 "예"로 판정될 때, 단계 S106에서, RecoveryAttemptNum(도 2b의 필드 292)가 리셋되어 제로로 설정된다. 위의 예와 관련하여, 단계 S105는 오랜 기간의 시간, 예컨대 5시간 후에(즉, RecoveryAttemptNum 가 MaxRecoveryAttemptNum 를 초과하기 때문에) FAST 접속의 SLOW 접속으로의 불필요한 다운그레이딩을 방지하며, 여기서 붕괴된 세그먼트는 데이터 붕괴로 인해 드롭되며, 그리고나서 송신기가 세그먼트를 재전송한 후에, 성공적으로 수신되어 정렬된 세그먼트로서 처리된다. 단계 S105에서 판정 결과가 "아니오"인 경우 또는 단계 S106 후에, 세그먼트 처리는 통상적인 단계, 예컨대 도 3의 단계 S1로 진행한다.
전술한 처리를 이용하면, 허용된 재전송의 횟수는 MaxRecoveryAttemptNum 필드(296)를 설정함으로써 사용자 정의될 수 있다. 제한적인 재전송 시도 모드가 도 3의 단계 S10에 관련한 에러 검출 및 도 4a와 도 4b에 관련하여 설명되었지만, 제한적인 재전송 시도 모드는 단계 S10의 에러 검출의 바로 다음에 적용 가능하다는 점에 유의하기 바라며, 이에 대해서는 추가로 후술될 것이다. 제한적인 재전송 시 도 모드 또한 아래에 설명되는 "D. TCP 재전송 처리를 가속화" 부분과 함께 사용하는 것이 장점을 나타내며, "TCP 재전송 처리를 가속화"는 세그먼트가 ULP 고려로 인해 드롭될 때에 중간 복제 확인응답을 발송한다.
B. 접속 다운그레이딩
이하에서는, 도 5를 참조하여, 하나 이상의 비정규 순서로 수신된 DDP 세그먼트(112)가 고속 경로 모드에서 목적지 데이터 버퍼(50)에 위치된 후에 접속이 다운그레이드되는(도 3의 단계 S3) 특유의 상황의 핸들링에 대한 설명이 제공될 것이다. 도 5에 도시된 바와 같이, 4개의 TCP 세그먼트 라벨 패킷(Pkt)은 비정규의 순서로, 즉 3, 4, 1 및 2의 순서로 수신된다. 접속이 SLOW 접속으로 다운그레이드될 때, 다운그레이딩의 순간에 수신된 모든 데이터는 재조립 버퍼(34)에 위치되고, 정규의 순서로, 즉 1, 2, 3 및 4의 순서로 재조립된다. 이 경우, TCP 프로토콜에 따르면, InLogic(32)은 이들 세그먼트가 수신되는 레코드를 유지한다.
드물기는 하지만, 세그먼트, 예컨대 Pkt#3(빗금 부분)가 목적지 데이터 버퍼(50)에 직접 위치되는 상황이 발생할 수도 있다. 이 상황은, InLogic(32)이 모든 데이터가 수신된 것으로 가정하는 경우에도, 패킷3(Pkt#3)을 정상적으로 유지할 재조립 버퍼(34)의 지점이 "불필요 데이터", 즉 갭 또는 홀로 채워지도록 할 것이다. 정정되지 않은 채로 처리가 지속되도록 허용되면, OutLogic(40)이 재조립 버퍼(34)를 목적지 데이터 버퍼(50)로 전환할 때, 고속 경로 모드시에 먼저 전송되는 패킷3(Pkt#3)은 "불필요한 데이터"로 과기입될 것이며, 이것은 데이터를 붕괴시킬 것이다.
하드웨어 복잡도를 증가시키지 않고 이 문제점을 해소하기 위해, 다른 실시예에서는, InLogic(32)이 TCP 로직에게 FAST 접속일 때에 비정규 순서로 수신된 세그먼트(즉, 도 5의 Pkt#3)를 잊도록 지시한다. 구체적으로, InLogic(32)은 단계 S3(도 3)에서의 SLOW 접속으로의 다운그레이드시에 비정규 순서로 위치된 데이터 전송을 위해 TCP 홀을 소거하도록 구성되며, 이들 패킷이 수신되는 송신기에 대한 수신 보고를 중단시킨다(SACK 옵션). 그 결과, 송신기는 목적지 데이터 버퍼(50)에 비정규 순서로 직접 위치되는 이들 세그먼트, 즉 Pkt#3를 포함하는 모든 확인응답되지 않은 데이터를 재전송한다. 재전송된 데이터가 수신될 때에는, 이 데이터는 재조립 버퍼(34)에 기입되고, OutLogic(40)이 재조립 버퍼(34)로부터 데이터를 전송할 때에는, 임의의 비정규 순서로 직접 배치된 세그먼트가 목적지 데이터 버퍼(50)에 과기입된다. 이 기능은 RNIC(16)이 이 접속에서 목적지 데이터 버퍼(50)에 비정규 순서로 위치되는 세그먼트를 "드롭"한다는 것을 의미한다. 이러한 방식은 재조립 버퍼(34)에서의 "갭(gap)을 두고 있는" 비정규 순서의 스트림의 경우를 제거하며, 이러한 동작을 야기할 조건이 드물기 때문에 가시적인 성능 저하를 초래하지는 못한다.
C. 접속 업그레이드
또 다른 실시예로서, 본 발명은 도 6에 예시된 바와 같은 접속 업그레이드 과정을 포함할 것이다. 전술한 고속 경로 모드 방식의 목적은 정렬된 DDP 세그먼트(112)를 운반하는 접속에 대해 재조립 버퍼(34)를 우회하도록 하기 위한 것이다. 그러나, FAST 접속에서도, 데이터 소스(12) 또는 중간 네트워크 기기는 간헐적인 비정렬된 DDP 세그먼트(112NA)를 생성할 수 있으며, 이것은 FAST 접속이 전술한 기술에 따라 SLOW 접속으로 다운그레이드되도록 한다. 간헐적인 동작은 예컨대 TCP 재전송 동안의 최대 세그먼트 크기(MSS) 변경에 의해 또는 다른 산발적인 시나리오에 의해 야기될 수 있다.
도 6에 도시된 바와 같이, 이러한 상황으로부터 복구하기 위해, 본 발명은 예컨대 단계 S3(도 3)에서의 이전의 다운그레이드 후에 SLOW 접속에서 FAST 접속으로이 접속 업그레이드를 제공할 수도 있다. 업그레이드를 도모하기 위해, 다수의 상황이 제공되어야 한다. 다른 실시예의 제1 단계 S31에서, InLogic(32)은 재조립 버퍼(34)가 공백 상태인지의 여부를 판정한다. 재조립 버퍼가 공백 상태가 아니라면, 업그레이드가 발생하지 않는다(단계 S32). 재조립 버퍼가 공백 상태라면, 단계 S33에서, InLogic(32)은 정렬된 DDP 세그먼트(112)가 수신되고 있는지의 여부를 판정한다. 정렬된 DDP 세그먼트가 수신되지 않는다면, 업그레이드가 발생하지 않는다(단계 S32). 정렬된 DDP 세그먼트가 수신되고 있다면, 단계 S34에서, InLogic(32)은 접속이 송신기, 예컨대 데이터 소스(12)에 의해 FAST 접속으로서 시작되었는지의 여부를 판정한다. 판정 결과가 "아니오"인 경우에는 업그레이드가 발생하지 않는다(단계 S32). 판정 결과가 "예"인 경우, 단계 S35에서, 접속이 FAST 접속으로 업그레이드된다.
D. TCP 재전송 처리를 가속화
또 다른 실시예는 TCP 세그먼트(106)가 수신되지만 예컨대 붕괴, DDP 세그먼트의 무효 CRC 등의 RDMA 또는 ULP 고려사항 때문에 드롭되는 상황을 해소한다. 전술한 과정에 따르면, TCP 세그먼트(106)가 수신되어 TCP 체크섬을 통과하지만 그 세그먼트를 보호하는 TCP Ack를 발송(즉, 도 3의 단계 S9)하지 않고 InLogic(32)에 의해 드롭되는 상황이 다수 존재한다. 종래의 과정은 이들 패킷의 재전송 시도를 야기할 것이다. 구체적으로, 기본적인 방식(소위 "Reno 프로토콜")에서, TCP 송신기는 3개의 복제된 확인응답(Ack)(즉, 비정규 순서로 수신된 데이터의 시퀀스 번호를 앞서지 않는 Ack)을 획득할 때에 "고속 재전송" 모드를 개시한다. 예컨대, 2개의 TCP 세그먼트 A 및 B가 있고 세그먼트 B가 TCP 순서에서 세그먼트 A를 후속하는 것으로 가정하면, 세그먼트 A가 드롭된 경우, 수신기는 세그먼트 B를 수신할 때에만 복제 Ack를 발송할 것이다 이 복제 Ack는 "세그먼트 A를 대기하고 있지만 다른 세그먼트가 수신됨", 즉 세그먼트 B가 수신되고 있음을 나타낼 것이다. Reno 프로토콜 하의 "고속 재전송" 모드에서, 송신기는 하나의 세그먼트를 발송하고, 또 다른 패킷을 재전송하기 위해 또 다른 3개의 복제 Ack를 대기한다. 더욱 진보된 방식(소위 "New-Reno 프로토콜" 등의)은 그 "고속 복구" 모드에서의 각각의 수신된 복제본에 대한 세그먼트의 재전송을 허용한다. 이 처리 후의 로직이 하나의 세그먼트를 네트워크로부터 출발시키면, 송신기는 또 다른 패킷을 네트워크에 보낼 것이다.
재전송을 용이하게 하기 위해, 본 발명의 다른 실시예에 따르면, InLogic(32)은 TCP에 의해 유효한 것으로 판정되고 상위 계층 프로토콜(ULP) 결정(예컨대, 도 3의 단계 S9에서의)에 기초하여 TCP에 의해 드롭되는 수신된 TCP 세그먼트를 보호하는 제1 복제 TCP 확인응답(Ack)을 생성하며, 복제 TCP Ack를 전송한 다. ULP는 전술한 바와 같이 MPA 프로토콜, DDP 프로토콜 및 RDMA 프로토콜 중의 하나 이상을 포함할 것이다. 제1 복제 TCP Ack는 TCP 세그먼트가 정규 순서인지 또는 비정규 순서인지의 여부에 상관없이 그리고 다음의 정규 순서의 TCP 세그먼트가 수신되지 않아도 TCP 세그먼트에 대해 생성된다. InLogic(32)은 또한 다음의 비정규 순서로 수신된 TCP 세그먼트를 보호하는 제2 복제 TCP 확인응답(Ack)을 생성하여 제2 복제 TCP Ack를 전송할 수도 있다.
이러한 전술한 처리는 다음의 정규 순서의 세그먼트(예컨대, 위의 예에서는 세그먼트 B)가 수신되지 않더라도 복제 Ack(예컨대, 위의 예에서는 세그먼트 A)의 생성을 의미하며, 전술한 재전송 규칙하에서는 송신기를 고속 경로 모드에 재진입하기 위한 처리를 가속화하여야 한다. 보다 구체적으로, 세그먼트 B가 수신되지 않는 경우에도, 송신기는 유효 TCP 세그먼트인 세그먼트 A가 수신되고 ULP 고려사항으로 인해 드롭된다는 것을 알 것이다. 그 결과, 추가의 복제 Ack는 송신기가 재전송 과정을 더 일찍 개시하도록 하고, 여기에서 다수의 복제 Ack가 재전송 개시 전에 수신되어야 한다. 이 방법은 TCP 세그먼트(106)가 ULP에 성공적으로 전달되고 ULP 고려사항(무효 CRC)으로 인해 드롭되기 때문에 TCP 원칙을 위배하지 않는다. 따라서, 패킷은 IP 프로토콜에 의해 드롭되거나 기록되지 않는다. 이 방법은 RNIC(16)가 도 4a에 관련하여 개략 설명된 바와 같은 제한적인 재전송 시도 모드를 구현할 때에, 즉 Ack가 단계 S103에서 발송될 때에 특히 유용하다.
E. CRC 계산 및 검증
인입 이더넷 프레임에 대한 종래의 처리는 필터링 처리로 개시한다. 필터링의 목적은 유효한 이더넷 프레임을 무효한 이더넷 프레임으로부터 분리하는데 있다. "무효 프레임"은 붕괴된 프레임이 아니라 예컨대 MAC 어드레스에 기초한 MAC 필터링-프레임 선택, VLAD 태그에 기초한 가상 근거리 통신망(VLAN) 필터링-프레임 선택 등과 같이 RNIC(16)에 의해 수신되지 않아야 한다. RNIC(16)에 인입되도록 허용되는 유효 프레임은 상이한 유형으로 분리된다. 이들 유형 중의 하나는 TCP 세그먼트이다. 필터링 처리는 전체 이더넷 프레임의 저장-발송 처리를 수행할 필요없이 작동 중에 행해진다.
TCP 세그먼트 처리의 다음 단계는 TCP 세그먼트 계산 및 검증이다. 체크섬 계산은, 전송시의 값을 계산하고, 데이터 블록의 이진값을 사용하고, 일부 알고리즘을 저장하며, 그 결과를 수신시에 동일한 방식으로 계산된 값과 비교하기 위한 데이터와 함께 저장함으로써, 에러없이 송신되는지의 여부를 판정한다. 체크섬 계산 및 검증은 전체 TCP 세그먼트 페이로드를 커버하기 때문에 전체 TCP 세그먼트의 저장-발송 처리를 필요로 한다. 종래에는, 순환 중복 검사(CRC)의 계산 및 검증은 통상적으로 TCP 체크섬 검증에 후속한다. 즉, 접속이 RDMA 접속으로 인식된 후 그리고 DDP 세그먼트의 경계가 이전의 DDP 세그먼트의 길이 또는 MPA 마커 중의 하나를 이용하여 검출된 후에 이루어진다. CRC 계산 및 검증은, 메시지를 고정 분할기에 의해 분할되는, 피제수(dividend)로서 사용된 소정의 길이로 분할함으로써, 데이터가 정확하게 송신되었는지를 판단한다. 계산의 나머지는 수신기에 의해 행해진 동일한 계산과 비교하기 위해 메시지에 첨부된다. CRC 계산 및 검증은 또한 전체 DDP 세그먼트의 저장-발송을 요구하여, 레이턴시를 증가시키고 저장을 위해 대형의 데이터 버퍼를 필요로 하게 된다. CRC 계산의 한 가지 요건은 선행의 DDP 세그먼트의 길이를 이용하거나 또는 MPA 마커(110)(도 1b)를 이용하여 결정되는 DDP 세그먼트 경계를 알아야 한다는 것이다. 마커를 기반으로 하는 결정은 다수의 예외 처리 및 코너 경우로 인해 매우 복잡하게 된다. 부분적으로 수신된 DDP 세그먼트의 CRC 계산 또한 복잡한 처리이다.
전술한 문제점을 해소하기 위해, 도 2c에 도시된 바와 같이, 본 발명은 동일한 저장-발송 버퍼(68)를 이용한 TCP 체크섬 로직(66)을 통한 TCP 체크섬 계산 및 검증과 동시에 CRC 로직(64)을 통한 CRC 계산 및 검증을 수행한다. 또한, 본 발명은 DDP 세그먼트 경계를 즉각적으로 위치확인하여 DDP 세그먼트 CRC를 계산 및 검증하지 못한다. 오히려, 본 발명은 CRC를 계산하고 그 후 DDP 경계를 결정함으로써 동작의 순서를 전환한다. 이러한 전환을 만들기 위해, CRC 로직(64)은 각각의 TCP 세그먼트(세그먼트가 RDMA 접속에 속하는 것으로 알려지기 전에)가 정렬된 DDP 세그먼트로 개시하는 것으로 가정한다. 또한, 본 발명은 TCP 페이로드(도 1b)의 최초의 2바이트가 MPA 프레임의 MPA 길이 필드(114)(도 1b)인 것으로 가정한다. 이 길이는 그 후 DDP 세그먼트 경계를 식별하고 그 세그먼트에 대한 CRC를 계산하기 위해 사용된다. 검증 유닛(44)은, TCP 세그먼트(106)의 최초의 가능한 DDP 세그먼트(112)의 경계를 식별한 후, TCP 세그먼트 페이로드(127)의 그 부분에 대한 체크섬 계산과 동시에 그 DDP 세그먼트에 대한 CRC를 계산 및 검증하고, 그 후 동일한 TCP 세그먼트(106)에 포함된 다음의 잠재적인 DDP 세그먼트(112)(존재하는 경우)로 진행한다. TCP 세그먼트(106)에서 발견된 각각의 "잠재적인" DDP 세그먼트에 대해, CRC 검증 결과는 유효하거나, 무효하거나, 또는 너무 긴 것으로 될 것이다. CRC 검증의 결과는 도 3과 관련하여 전술한 바와 같이 사용하기 위해 저장된다.
전술한 바와 같이 CRC를 실제적으로 계산하기 위해, TCP 세그먼트(106)의 페이로드가 처리될 때, InLogic(32)은 MPA 마커(110)가 TCP 세그먼트(106) 내의 어디에 있는지를 알 필요가 있다. 도 1b에 관련하여 전술한 바와 같이, MPA 마커(110)는 TCP 세그먼트(106)에서 매 512 바이트마다 위치되며, 최초의 MPA 마커는 TCP 헤더(126)(도 1b)의 초기 시퀀스 번호로부터 512 바이트 떨어져 있으며, 이 초기 시퀀스 번호는 접속 컨텍스트(42)의 StartNum 필드(248)(도 2b)로서 저장된다. 불행히도, 각각의 MPA 마커(110)의 평가는 StartNum 필드(248)(도 2b)에 대한 위치를 보여주지 못한다. 또한, MPA 마커(110)는 CRC 데이터(116)에 의해 보호되지만, MPA 길이 필드(114)에 포함되지 않으며, MPA 길이 필드는 MPA 프레임의 페이로드만을 포함한다. 따라서, MPA 마커(110)를 식별하기 위해, RNIC(16)는 StartNum 필드(248)(도 2b)를 알 필요가 있으며, 이것은 접속 컨텍스트(42)로부터 호출되어야 한다. 불행히도, 접속 컨텍스트(42)를 판독하는 것은 이러한 접속 컨텍스트의 판독이 처리 과정에서 매우 일찍 발생하고 패킷 처리를 차단하거나 유지하기 때문에 TCP 처리 동안에 시행하기에는 매우 불편하다.
접속 컨텍스트(42) 호출을 감소하거나 제거하기 위해, 본 발명은 DDP 세그먼트(112) 길이의 정확한 계산을 허용하는 4가지 대안을 제공하며, 이 DDP 세그먼트(112)의 정확한 계산은 그 세그먼트의 MPA CRC를 계산하여 검증하는데 요구된다. 이들 옵션은 다음 절에서 설명된다.
1. 접속 컨텍스트 프리페치 방법
DDP 세그먼트(112) 길이를 정확하게 계산하기 위한 제1 실시예는 StartNum 필드(248)(도 2b)로서 저장된 초기 시퀀스 번호의 접속 컨텍스트(42) 프리페치를 구현하는 단계를 포함한다. 여기에서는 MPA 사양에 대한 변경이 없는 것으로 전제된다. 현재의 MPA 사양은 TCP 세그먼트(106) 내의 MPA 마커(110)의 위치를 식별하기 위해 초기 시퀀스 번호(StartNum)를 알 필요가 있다. 초기 시퀀스 번호는 접속에 따라 변화하고 접속 구축 시간에 협의되는 TCP 접속 속성이다. 따라서, StartNum(248)(도 2b)는 피어 접속 기반으로 유지된다. MPA 마커(110)의 위치를 식별하기 위해, CRC 로직(64)(도 2c)은 특정 세그먼트의 시퀀스 번호(SeqtNum) 및 StartNum(SeqNum-StartNum) mod 512의 나머지가 0이라는 것을 검사한다. 즉, 각각의 TCP 헤더가 그 페이로드의 최초의 바이트의 시퀀스 번호를 운반하기 때문에, CRC 로직(64)은 특정의 세그먼트의 시퀀스 번호 및 StartNum(248) 간의 차를 취하고 그리고나서 이 위치로부터 개시함으로써 마커를 탐색할 장소를 결정하고, 매 512 바이트마다 마커를 위치확인할 수 있다. MPA 사양은 전술한 마커 검출 방법을 정의한다. 이러한 방식으로, TCP 체크섬 검증이 수행되기 전에 해쉬 룩업(TCP 튜플(tuple)에 기초한) 및 접속 컨텍스트(42) 프리페치가 수행될 수 있다. 이것은 정상적인 접속 컨텍스트(42) 호출 흐름이다. RNIC(16)이 접속 컨텍스트(42)를 취하고자 한다면, 먼저 이 컨텍스트가 위치되어 있는 곳을 알아내거나 접속 ID를 획득할 필요가 있다. TCP 세그먼트(106) 헤더는 TCP 튜플(IP 어드레스(소스 및 목적 지) 및 TCP 포트(소스 및 목적지))를 운반한다. 튜플은 해쉬 함수에 대한 입력이다. 해쉬 함수의 출력은 접속 ID가 된다. 물론, 상이한 튜플에 대해 동일한 접속 ID가 발생할 수도 있으며, 이것은 "충돌"로 지칭된다. 충돌을 핸들링하기 위해, RNIC(16)는 접속 컨텍스트(42)를 판독하고, 접속 컨텍스트(42) 내의 튜플을 이 패킷 내의 튜플로 검사하며, 일치하지 않는다면, RNIC(16)는 다음 접속 컨텍스트(42)에 대한 포인터를 취득한다. RNIC(16)는 일치하는 튜플을 찾아내거나 또는 세그먼트가 임의의 공지 접속에 속하지 않는 세그먼트로서 인식될 때까지 튜플 검사를 지속한다. 이 처리에 의해 MPA 마커(110)가 TCP 스트림에 위치될 수 있게 된다. 그 결과, CRC 계산 및 검증은 TCP 체크섬 검증과 동시에 수행될 수 있다.
2. 초기 시퀀스 번호 협의 방법
제2 실시예에서, MPA 사양에 대해 다수의 변경을 가함으로써 접속 컨텍스트 호출없이도 DDP 세그먼트 길이를 정확하게 계산할 수 있다. 먼저, MPA 사양에서의 MPA 마커(110) 배치의 정의가 변경된다. 전술한 접속 컨텍스트 프리페치 방법의 한 가지 단점은 TCP 세그먼트(106) 내의 MPA 프레임(109)의 경계를 식별하기 위해 해쉬 탐색 및 접속 컨텍스트(42) 프리페치를 행할 필요가 있다는 점이다. 이러한 단점을 해소하기 위해, 본 발명은 매 512 바이트마다 초기 시퀀스 번호(SN)(StartNum 248)(전술한 SN-StartNum mod 512 처리를 필요로 함)로 개시하지 않고 매 512 바이트마다 MPA 마커(110)를 위치시킨다. 이러한 양상으로, MPA 마커(110) 위치가 MPA 마커(110)를 위치확인하기 위한 시퀀 번호 mod 512 처리에 의해 판정될 수 있고, 접속 컨텍스트(42) 호출이 요구되지 않는다.
본 실시예에 따른 MPA 사양에 대한 두 번째 변경은 하나의 마커가 2개의 DDP 세그먼트(112) 사이에서 분기되는 상황, 즉 초기 시퀀스 번호가 워드 정렬되지 않는 상황을 방지하도록 작용한다. 그 결과, 시퀀스 번호 mod 512 처리는 표준 TCP 구현이 초기 SN로 하여금 랜덤하게 생성된 바이트-정렬된 값을 갖도록 하기 때문에 모든 환경에서 작동하지 않을 수도 있다. 즉, 초기 시퀀스 번호가 워드 정렬되는지의 여부는 RNIC(16)에 의해 제어 가능하지 않다. 그 결과, 소정 접속에 대한 TCP 스트림은 반드시 MPA 마커(110)로 개시할 필요가 없을 것이다. 따라서, CRC 로직(64)이 시퀀스 번호 mod 512 처리를 사용함으로써 마커(110)의 위치를 찾아낸다면, 수용 가능하지 않은 바이트 정렬된 지점에 위치된 마커를 취할 수 있을 것이다. 이러한 상황을 방지하기 위해, 본 발명은 MPA 협의 단계 동안에 교환된 MPA 프레임, 즉 소위 "MPA 요청/응답 프레임"에 패딩(padding)을 추가하여, 이 프레임이 워드 정렬된 RDMA 모드로 이동할 때에 RDMA 접속의 초기 SN을 구성한다. 즉, 도 7에 도시된 바와 같이, 워드 정렬된 초기 SN 워드를 구성하는데 요구된 바이트의 수를 포함하는 TCP 세그먼트(106)의 MPA 요청/응답 프레임(152)에 보정 계수(correction factor)(150)가 삽입된다. 보정 계수(150)의 정확한 위치는 도시된 바와 같이 될 필요는 없다는 것을 이해하여야 한다. 이러한 방식으로, CRC 로직(64)은 접속 컨텍스트 프리페치없이 TCP 스트림에서의 MPA 마커(110)의 정확한 위치를 획득하기 위해 시퀀스 번호 mod 512 처리를 구현할 것이다. MPA 사향의 전술한 수정을 이용하면, 본 발명은 접속 컨텍스트(42)를 프리페치하지 않고서도 MPA 마커(110)의 위치를 확인할 수 있고 MPA 세그먼트의 길이를 적절하게 계산할 수 있 다.
3. MPA 길이 필드 수정 방법
접속 컨텍스트 프리페치없이 DDP 세그먼트(112) 길이를 정확하게 계산하기 위한 제3 실시예에서, MPA 사양에서 MPA 길이 필드(114)의 정의가 변경된다. 통상적으로, MPA 길이 필드(114)는 MPA 계층에 의해 추가된 마커(110), 패딩(121)(도 1b) 및 CRC 데이터(116)를 제외한 각각의 MPA 프레임(109)의 ULP 페이로드의 길이를 운반하도록 정의된다. 불행히도, 이 정보는 TCP 세그먼트(106)에 의해 제공된 정보를 이용하여 MPA 프레임 경계의 위치확인을 허용하지 않는다. 이러한 문제점을 해소하기 위해, 본 실시예에 따라, MPA 사양에서의 MPA 길이에 대한 정의가, MPA 길이 필드(114)의 최상위 비트(MSB), ULP 페이로드(118) 길이, MPA 마커(110), CRC 데이터(116), MPA 길이 필드(114)의 2개의 최하위 비트(LSB), 및 패딩(121) 내의 유효 비트를 포함하는, 전체 MPA 프레임(109)의 길이를 특정하도록 변경되지 않는다.
이와 같이 수정된 정의는 그 MPA 프레임에 이식된 모든 MPA 마커(110)를 위치확인하지 않고서도 MPA 길이 필드(114)를 이용하여 MPA 프레임(109)의 검출을 가능하게 한다. MPA 계층 프로토콜은 마커(110), CRC 데이터(116) 및 패딩(121)을 분리하며, ULP(DDP 계층)에 ULP 페이로드 길이를 제공한다.
도 8을 참조하면, MPA 길이에 대한 이러한 정의를 이용하여, CRC 로직(64)은 다음의 처리에 의해 MPA 프레임(109)의 경계를 위치확인한다. 단계 S100에서, MPA 프레임(109)의 최초의 워드가 제로와 동일한지의 여부를 판정한다. 판정 결과가 " 예"라면, InLogic(32)(도 2a)은 단계 S102에서 다음 워드로부터 MPA 길이 필드(114)를 판독한다. 이것은 마커(110)가 2개의 MPA 프레임(109) 사이에 위치할 때의 경우이다. 이 상황에서, MPA 길이 필드(114)는 단계 S104에서 나타낸 바와 같이 다음 워드에 위치된다. 단계 S100에서의 판정 결과가 "아니오"이면, 이 워드는 MPA 길이 필드(114)를 유지한다. 단계 S106에서, MPA 길이는 MPA 프레임(109)을 덮는 CRC 데이터(116)의 위치를 탐색하기 위해 사용된다. 전술한 처리는 그 후 TCP 세그먼트(106)에 이식된 다른 MPA 프레임(109)을 위치확인하기 위해 반복된다. 본 실시예는 접속 컨텍스트(42)로부터의 어떠한 추가의 정보 없이도 MPA 프레임(109) 경계의 위치확인을 가능하게 한다.
4. 노-마커 컷스루 구현
제4 실시예에서, 아래에 후술되는 바와 같이 CRC 계산 및 검증에 관련하여 노-마커 컷스루 실시가 사용된다. DDP 세그먼트 길이를 정확하게 계산하기 위한 전술한 3가지의 실시예의 단점은 각각의 실시예가 MPA 사양의 수정 또는 접속 컨텍스트(42) 프리페치를 요구한다는 것이다. 본 실시예는 도달하는 MPA 프레임의 CRC를 계산하기 위해 접속 컨텍스트(42)를 프리페치하지 않고서도 그리고 MPA 사양에 대한 어떠한 추가의 변경 없이도 인입 세그먼트의 컷스루 처리를 구현한다. 또한, 본 실시예는 MPA 마커를 사용하지 않고서도 비정규 순서의 직접 데이터 배치를 가능하게 한다. 본 실시예는 부분적으로는 MPA 사양의 최근에 갱신된 버젼에 따라 소정 접속을 위한 '노-마커' 옵션을 협의하기 위한 수신기의 성능에 기초한다. 구체적으로, 갱신된 MPA 사양은 MPA 수신기로 하여금 소정 접속을 위해 마커를 사용 할지의 여부를 결정할 수 있도록 하며, 발송기는 수신기의 결정을 존중해야 한다. 본 실시예는 접속 컨텍스트(42)를 프리페치하지 않고서도 TCP 체크섬 계산과 동시에 CRC 계산이 가능하도록 하기 위해 검증 유닛(44) 로직을 변경한다.
이것은 CRC 계산을 갖는 경우에 대해 설명된 것과 정확하게 동일하게 행해진다. 즉, 본 발명은 TCP 세그먼트가 정렬 DDP 세그먼트와 함께 개시하고, CRC의 위치를 탐색하기 위해 MPA 길이 필드를 사용하고, 그 후 CRC를 계산 및 검증하는 것으로 가정한다. 그러나, 본 실시예가 갖는 차이점은 DDP 세그먼트 길이, 즉 MPA 헤더의 소정 MPA 길이 필드를 계산할 때에 마커를 고려할 필요가 없다는 것이다.
도 9를 참조하면, 본 실시예의 제1 변형에 관련한 InLogic(32) 기능을 예시하는 흐름도가 도시되어 있다. InLogic 기능(32)의 대부분은 도 3과 관련하여 전술된 기능과 거의 유사하다. 도시를 명료하게 하기 위해, InLogic(32) 기능이 도 3과 관련하여 전술된 기능과 거의 유사한 곳에서는 단계가 반복되고 있으며, 점선의 박스로 표시되어 있다.
갱신된 MPA 사양 하에서, 수신기는 접속 초기화 시에 특별한 접속에 대해 '노-마커' 옵션을 수행한다. 도 9에 도시된 바와 같이, 본 실시예에서는, 단계 S201에서, InLogic(32)이 인입 TCP 세그먼트(106)가 마커(110)를 포함하는지의 여부를 판정한다. 판정 결과가 "예"이면, InLogic(32)은 도 3에서와 같은 처리로 진행하고, 일부 다른 방법의 CRC 계산 및 검증이 전술한 바와 같이 사용될 것이다. 판정 결과가 "아니오"이면, 단계 S202에서, 인입 MPA 프레임(109)은, 접속 컨텍스트(42)를 프리페치하지 않고서도, TCP 체크섬 로직(66)과 동일한 저장-발송 버 퍼(68)를 이용하여 작동 중에 계산 및 검증된 자신의 CRC를 갖는다. 도 3에서와 같은 단계 S2 및 S3에서의 접속이 SLOW 접속인지의 여부에 관한 판정이 완료될 것이다. CRC 검증의 결과는 다음 중의 하나가 될 수 있다: 1) MPA 프레임(109)의 길이가 TCP 세그먼트(106)의 길이에 부합하고, MPA 프레임(109)이 유효한 MPA CRC를 가지며, 2) MPA 프레임(109)의 길이가 TCP 세그먼트(106)의 길이에 부합하지만, MPA 프레임(109)이 무효한 CRC를 가지며, 3) MPA 프레임(109)의 길이가 TCP 세그먼트의 길이를 초과하며, 4) MPA 프레임(109)의 길이가 TCP 세그먼트(106)의 길이보다 더 작다.
경우 1)에서, InLogic(32) 기능은 도 3의 단계 S4 내지 S7과 거의 유사하다. 즉, MPA 프레임(109)이 TCP 세그먼트(106)와 동일한 길이를 가지며(도 3의 단계 S4 및 S5), 유효한 MPA CRC를 운반하는(단계 S6) 경우에, 프레임은 유효한 MPA 프레임인 것으로 간주되고, 내부 데이터 버퍼(38)를 통한 추가의 처리를 위해서는 OutLogic(40)으로 보내지고, 고속 경로 모드 시에는 목적지 데이터 버퍼(50)로 보내진다.
경우 2)에서, MPA 프레임(109)가 TCP 세그먼트(106)와 동일한 길이를 갖지만(도 3의 단계 S4 및 S5), 무효한 CRC를 갖는(도 3의 단계 S6) 경우, InLogic(32)은 도 3과 관련하여 설명된 것과는 상이하게 기능한다. 구체적으로, 수신된 MPA 프레임(109)이 MPA 마커(110)를 포함하지 못하므로, 복구를 위해 마커 관련 정보가 이용될 수 없다(도 3의 단계 S10에서와 같이). 이것은 해소될 필요가 있는 다음의 2가지 경우, 즉 경우 A와 경우 B만을 갖는다. 경우 A에서, MPA 프레임(109)이 이 전에 수신된 세그먼트(그리고 검증된) MPA 프레임(도 3의 단계 S8에서 결정된 바와 같은)의 길이에 의해 참조되며, 경우 B에서는, MPA 프레임(109)이 붕괴될 수 있거나, 정렬되지 못하게 될 수 있다. 이 양자의 경우, 수신된 TCP 세그먼트(106)는 드롭되고(도 3의 단계 S9), 수신이 확인되지 않는다. 이 경우, 도 4와 관련하여 설명된 제한적인 전송 시도 모드는 그 TCP 세그먼트(106)의 드롭으로부터 복구하기 위해 실시될 수 있으며, 이것은 발송자로 하여금 드롭된 TCP 세그먼트(106)를 재전송하여 임의의 잠재적인 데이터 붕괴를 해소할 수 있도록 한다. MPA 프레임(109)이 TCP 세그먼트(106)에 대해 정렬되지 않는다면, 제한적인 재전송 시도 모드는 전술한 바와 같이 접속이 SLOW 모드로 다운그레이드되어 종료할 것이다.
경우 3)에서, MPA 프레임(109)의 길이가 TCP 세그먼트(106)의 길이를 초과하는 경우(도 3의 단계 S5), MPA 프레임(109)이 TCP 세그먼트(106)에 대해 정렬되지 않거나, 또는 길이가 붕괴된다. 이 경우, 수신된 TCP 세그먼트(106)가 드롭되고(도 3의 단계 S9), TCP는 수신을 확인응답하지 못한다. 이 경우, 다시, 도 4와 관련하여 설명된 제한적인 재전송 시도 모드가 그 TCP 세그먼트(106)의 붕괴를 복구하기 위해 시행될 것이며, 이로써 발송자가 드롭된 TCP 세그먼트를 재전송하여 임의의 잠재적인 데이터 붕괴를 해소할 수 있게 된다. 다시, MPA 프레임(109)이 TCP 세그먼트(106)에 대해 정렬되지 않는다면, 제한적인 재전송 시도 모드는 전술한 바와 같이 접속이 SLOW 접속으로 다운그레이드되어 종료할 것이다.
경우 4)에서, MPA 프레임(109)의 길이가 TCP 세그먼트(106)의 길이보다 더 작거나(도 3의 단계 S4), TCP 세그먼트(106)가 다수의 MPA 프레임(109)을 운반하는 경우(발송자가 패킹 옵션을 실행), InLogic(32)은 수신된 TCP 세그먼트(106)에 이식된 모든 DDP 세그먼트(112)의 CRC를 순차적으로 검사한다(도 3의 단계 S11∼S13). 모든 DDP 세그먼트(112)가 유효한 CRC를 갖는다면, InLogic(32)은 그 TCP 세그먼트(106)의 수신을 승인하고, 모든 MPA 프레임은 고속 경로 모드 시에 추가의 처리를 위해 보내진다(도 3의 단계 S7). DDP 세그먼트(112) 중의 하나가 무효한 CRC를 갖거나, 최종의 세그먼트가 TCP 세그먼트에 전체적으로 포함되지 않는다면(도 3의 단계 S12 및 S13), 전체적인 TCP 세그먼트가 드롭되고(도 3의 단계 S9), InLogic(32)은 그 TCP 세그먼트의 수신을 확인응답하지 못한다. 전술한 바와 같이, 도 4와 관련하여 설명된 제한적인 재전송 시도 모드는 그 TCP 세그먼트(106)의 드롭을 복구하기 위해 시행될 것이며, 이로써 발송자가 드롭된 TCP 세그먼트를 재전송하여 임의의 잠재적인 데이터 붕괴를 해소한다. MPA 프레임(109)이 TCP 세그먼트(106)에 대해 정렬되지 않는다면, 제한적인 재전송 시도 모드는 전술한 바와 같이 접속이 SLOW 접속으로 다운그레이드되어 종료할 것이다.
도 10을 참조하면, 본 실시예에 관련한 InLogic(32) 기능을 예시하고 제한적인 재전송 시도 모드 및 TCP 재전송 가속화의 특징을 포함하는 또 다른 흐름도가 도시되어 있다. 도 9와는 달리, InLogic(32) 기능은 도 3에 비해 상당히 간략화되어 있다. 도시를 명료하게 하기 위해, InLogic(32) 기능이 도 3에 관련하여 설명된 기능과 거의 유사한 곳에서는, 단계가 반복되며 점선 박스로 나타내어져 있다.
도 10에서, 단계 S151 내지 S153은 도 3의 단계 S1 내지 S3과 거의 동일하다. 단계 S154에서, InLogic(32)은 CRC 검증이 통과하였는지의 여부를 판정한다. 이 평가는, DDP 세그먼트마다에 대한 표식을 제공하는 대신에, CRC 로직(54)이 수신된 TCP 세그먼트에서의 모든 DDP 세그먼트의 CRC 검증의 성공 또는 실패를 나타내는 CRC 검증 통과 비트를 제공한다는 점에서 도 3에서의 단계 S4와는 상이하다. 이 비트는 CRC 검증이 수신된 TCP 세그먼트에 포함된 모든 DDP 세그먼트에 대해 통과된 경우에는 설정되고, CRC 검증이 그 세그먼트 중의 하나에 대해 실패하였거나, 최종의 세그먼트가 너무 긴 경우에는 소거된다. 판정 결과가 "아니오"라면, InLogic(32)은 단계 S155로 진행하여, RecoveryAttemptNum(도 2b의 필드 292)가 MaxRecoveryAttemptNum(도 2b의 필드 296)를 초과하는지의 여부에 대한 판정이 이루어진다. 판정 결과가 "예"라면, InLogic은 단계 S153으로 진행하여, DDP 세그먼트가 재조립 버퍼(34)에 위치되고, Ack가 발송되며, 접속이 SLOW 접속으로 다운그레이드된다(FAST 접속인 경우에). 단계 S155에서의 판정 결과가 "아니오"이면, 단계 S156에서, TCP 세그먼트(106)가 드롭되며, 확인응답이 스케쥴링되지 않는다. 또한, RecoveryAttemptNum(도 2b의 필드 292)가 1씩 증가되고, LastRecoverySN(도 2b의 필드 294)가 갱신된다.
단계 S154로 복귀하여, 판정 결과가 "예"인 경우, InLogic(32)은 단계 S157로 진행하여, 새로이 수신된 정규 순서의 데이터 전송의 시퀀스 번호(In-order SN)가 LastRecoverySN(도 1b의 필드 294)보다 더 큰지의 여부가 판정된다. 판정 결과가 "예"라면, 단계 S158에서, InLogic(32)은 RecoveryAttemptNum(도 1b의 필드 292)를 소거하여 제로로 설정한다. 단계 S157에서의 판정 결과가 "아니오"인 경우, 또는 단계 S158을 후속하여, 단계 S159에서, 세그먼트는 그 세그먼트를 목적지 데이터 버퍼(50)에 위치시킴으로써 "고속 경로 모드"로 처리된다. 단계 S159는 또한 TCP 재전송 가속화 옵션과 관련하여 전술된 바와 같이 복제 Ack의 시행을 포함할 것이다.
전술된 도 10의 실시예는 본 발명의 컷스루 모드에 더하여, MPA 마커를 사용하지 않고서 제한적인 재전송 시도 모드 및 TCP 재전송 가속화 옵션을 시행한다.
Ⅲ. OutLogic
OutLogic(40)(도 2a)은 RDMA 메시지 마다에 대해 정보를 유지하지 않고서도 RDMA 메시지의 정규 순서의 전달을 수행한다. 1) 발송 메시지를 제외한 모든 RDMA 메시지에 관련한 상황, 그리고 2) RDMA 발송 메시지에 관련한 상황의 2가지 상황이 다루어질 것이다.
도 1f 내지 도 1h를 참조하여, OutLogic(40)(도 2a)의 동작이 설명될 것이다. OutLogic은 전술한 바와 같이 고속 경로 모드 시에 위치되는 내부 데이터 버퍼(38)(도 2a)로부터의 정렬된 DDP 세그먼트(220)를 처리하며, 수신기의 데이터 버퍼로의 정렬된 DDP 세그먼트의 데이터 배치 및 전달을 시행한다. 본 명세서에서 사용된 바와 같이, "배치"라는 표현은 데이터를 버퍼에 실제로 집어넣는 처리를 지칭하고, "전달"이라는 표현은 데이터 전송의 완료를 확인해주는 처리를 지칭한다. "배치"가 세그먼트와 메시지 모두에 대해 적용될 수 있는 한편, "전달"은 메시지에만 적용된다. RDMA 프로토콜 하에서, 정렬된 DDP 세그먼트는 비정규 순서의 형태로 배치될 것이지만, 정렬된 DDP 세그먼트의 전부가 정규 순서로 배치될 때까지 전달은 발생하지 않는다. 예컨대, 3개의 정렬된 DDP 세그먼트 1, 2 및 3에 대해, 세 그먼트 2 및 3이 세그먼트 1없이 먼저 배치되는 경우, 세그먼트 1이 배치될 때까지 전달이 발생하지 못한다.
A. 배치
배치와 관련하여, OutLogic(40)은 후술되는 바와 같이 RDMA 판독 메시지에 관한 것을 제외하고는 RDMA 메시지의 종래의 배치를 제공한다.
태그 부착된 DDP 세그먼트와 관련하여, 예컨대, 도 1d를 다시 참조하면, RDMA 프로토콜에 따라, 태그 부착된 DDP 세그먼트의 헤더(124)는 수신기의 이전에 등록된 메모리 영역(예컨대, 도 1g의 메모리 영역 232)의 어드레스를 운반한다. 앞에서 나타낸 바와 같이, 이 어드레스는 메모리 영역/윈도우(예컨대, RDMA 기입 메시지를 위한 도 1g의 메모리 영역(232))에 놓여 있는 목적지 버퍼를 나타내는 개시 태그(STag), 이 영역/윈도우에서의 타겟 오프셋(TO), 및 트랜잭션 길이(세그먼트 페이로드)를 포함한다. 이 경우, 데이터 배치는, 접속 컨텍스트(42)(도 2a)로부터의 임의의 추가 정보를 검색하지 않고서도, OutLogic(40)에 의해 종래의 방식으로 시행된다. STag 및 TO가 목적지 데이터 버퍼를 기술하는 메모리 영역의 물리적인 버퍼의 리스트로 해석되는 종래의 어드레스 해독 및 보호(ATP) 처리는 OutLogic(40)에 의한 데이터 배치를 선행한다.
RDMA 판독 메시지와 같은 태그 미부착 DDP 세그먼트와 관련하여, 도 1h를 참조하면, RDMA 프로토콜은 현재의 인입 판독 요청(222)의 최대 횟수를 정의하며, 이 횟수는 협의 시에 교환된다. 각각의 RDMA 판독 메시지(204)는 단일의 DDP 세그먼트(222)를 소비한다. RNIC(16)가 RDMA 판독 메시지(204)를 수신할 때, RNIC(16)는 RDMA 판독 응답 WQE(216RR)를 판독 대기열(214)에 포스팅한다. 또 다른 예에서, 도 1f를 참조하면, 각각의 발송 메시지(200)가 응답기의 수신 대기열(RQ)(212), 예컨대 데이터 싱크(18)(도 2a)에 위치된다. 전술한 바와 같이, 각각의 수신 대기열(RO)(212)은 제어 명령어가 위치되는 버퍼이며, 페이로드가 위치되는 WQE(216R)를 포함한다. 각각의 WQE(216R)은 소비자에 의해 포스팅된 수신 WR(208R)을 기술하는 제어 정보를 유지한다. 각각의 WQE(216R)은 또한 그 WR(208R)에 포스팅된 소비자 버퍼를 나타내준다. 이들 버퍼는 페이로드를 위치시키기 위해 사용된다. 따라서, 각각의 메시지(200)는 WQE(216R)를 소비한다.
도 11을 참조하면, 도 1h와 유사한 RDMA 판독 메시지(204) 및 RDMA 판독 응답(206)의 표현이 도시되어 있다. 그러나, 본 발명에 따르면, 판독 대기열(414)은 순환 버퍼로서 시행된 특수한 작업 대기열(WQ)로서 제공되며, 이 순환 버퍼의 각각의 엔트리는 전송 로직에 의해 생성될 필요가 있는 RDMA 판독 응답을 기술하는 WQE(216RR)이다. 이로써, 각각의 인입 RDMA 판독 요청에 대하여 판독 대기열(414)에서 널리 알려진 위치, 즉 WQE(216RR)이 있으므로, 비정규 순서의 RDMA 판독 요청(222)의 용이하고 효율적인 배치가 가능하게 된다. 예컨대, RDMA 판독 메시지 #3이 수신되고, RDMA 판독 메시지 #2가 상실될 때, RDMA 판독 메시지 #3이 배치된다. 이러한 배치는 EDMA 판독 요청 메시지(222), 즉 요청자측에서의 판독 WR(208R)의 포스팅으로 인해 발송된 메시지의 수신 시에 행해진다. 판독 대기열(414)에서의 WQE(216RR)의 위치는 RDMA 판독 메시지 헤더(124)(도 1d) 내의 MSN에 의해 식별된다.
B. 전달
RDMA 프로토콜은 비정규 순서의 데이터 배치를 허용하지만, 정규 순서의 전달을 요구한다. 따라서, 종래의 시행에서는 메모리에 대해 배치(전체적으로 또는 부분적으로)되지만 아직 전달되지 않은 각각의 메시지에 대한 정보를 유지할 필요가 있다. 그러나, 단일 TCP 세그먼트의 상실은 목적지 버퍼에 배치될 다수의 비정규 순서의 RDMA 메시지의 수신을 야기할 수 있으며, 손실 세그먼트가 재전송되어 메모리에 대해 성공적으로 배치될 때까지는 종료되지 않는다. 종래의 환경 하에서, 특정한 수의 후속 메시지만이 비정규 순서의 스트림이 수신된 후에 저장될 수 있도록 비정규 순서의 스트림을 저장하기 위해서는 제한된 자원이 이용 가능하다.
그러나, 본 발명에 따르면, 각각의 전달되지 않은 RDMA 메시지에 대한 일부 정보를 유지하고 지원된 비정규 순서의 수신 메시지의 수를 제한하는 대신, 제한되지 않은 수의 전달되지 않은 RDMA 메시지가 단위 TCP 홀을 기반으로 하여 정보를 저장함으로써 지원된다. "TCP 홀"이라는 용어는 비정규 순서의 TCP 세그먼트의 수신의 결과로서 TCP 스트림에 생성된 공백을 지칭한다.
도 12를 참조하면, 백색 블록은 TCP 홀(130A∼130C)을 형성하는 상실 TCP 세그먼트(400)를 나타내고, 음영의 회색 블록(402)은 연속적으로 수신된 TCP 스트림을 나타낸다. 단위 TCP 홀(130A∼130C) 정보는 접속 컨텍스트(42)(도 2b)에 저장된다. 제한된 수의 지원된 TCP 홀(130A∼130C)은 TCP 프로토콜 실시에 따른 특성이다. 구체적으로, TCP 프로토콜은 일반적으로 지원된 TCP 홀(130A∼130C)의 수를 예컨대, 1, 2 또는 3개의 홀로 제한한다. 통상적으로, 제한된 수의 TCP 홀(130A∼ 130C)의 지원은, 비정규 순서의 TCP 세그먼트가 도달할 때, 새로운 TCP 홀을 개방하면, 이 세그먼트가 TCP 로직에 의해 드롭된다는 것을 의미한다. 도 12는 3-TCP 홀 실시를 예시하고 있다. 이 경우, 새로운 세그먼트가 가장 아래의 TCP 홀(130C) 후, 즉 2개의 가장 아래의 상실 세그먼트(400) 후에 도달하면, 이 세그먼트는 지원되지 않은 제4의 홀을 "개방"할 것이다. 그 결과, 그 세그먼트는 드롭될 것이다.
이러한 상황을 해소하기 위해, 본 발명은 비정규 순서의 메시지/세그먼트의 트래킹이 아닌 접속 컨텍스트(42)(도 2a 및 도 2b)를 통해 TCP 홀(130)(도 12)의 트래킹을 시행한다. 구체적으로, 도 2b에 도시된 바와 같이, 본 발명은 완료된 RDMA 판독 요청을 카운트하기 위한 PendingReadResponseNum 필드(300), 완료된 발송 메시지를 카운트하기 위한 CompletedSendNum 필드(302), 및 완료된 RDMA 판독 응답을 카운트하기 위한 CompletedReadResponseNum 필드(306)를 저장한다. 본 기술분야에 익숙한 사람이라면 이해하고 있는 바와 같이, 각각의 홀에 대해서는 다른 필드가 요구될 것이며, 이에 대한 설명은 설명의 간략화를 위해 생략한다. 이러한 방식은 완료 및 정규 순서의 전달을 대기하는 제한되지 않은 수의 비정규 순서로 수신된 RDMA 메시지를 가능하게 한다. 이 방식은 어떠한 제한없이 수신 대기열(212) 및 발송 대기열(210)에 의해 완성 대기열(240)(도 1f 내지 도 1h)을 공유하는 성능을 제한하지 못한다. 이하에서는 특정한 유형의 메시지의 핸들링에 대해 설명할 것이다.
먼저, RDMA 기입 메시지(202)(도 1g)의 전달이 응답기에 대한 어떠한 보고를 야기하지 못하거나, 조작의 본질 때문에 다른 하드웨어 로직에 대한 어떠한 통보도 야기하지 못할 것임을 이해하여야 한다. 따라서, 이러한 유형의 RDMA 메시지와 관련하여서는 아무런 전달 사항도 존재하지 않는다.
두 번째로, 도 11을 참조하면, RDMA 판독 응답 메시지(206)에 대하여, 이 동작은 현재의 RDMA 판독 메시지(204)의 완료를 제공한다. 이 경우, TCP 홀(130)마다 다수의 완료된 RDMA 판독 응답 메시지(206)를 포함하는 접속 컨텍스트(42)에 CompletedReadResponseNum 필드(306)(도 2b)를 저장함으로써, 현재의 RDMA 판독 작업 요청(208R)을 완료하기에 충분한 정보가 요청자의 완료 핸들링 로직에 제공된다.
RDMA 판독 요청에 대해, WQE(216RR) 포스트의 동작은 2가지 단계, 즉 판독 대기열(414)에 대한 WQE(216RR)의 배치와, 이 WQE가 처리될 수 있다는 것을 RNIC(16)에 알려주기 위한 통보(즉, 초인종을 울림)를 포함한다. WQE(216RR)의 배치는 비정규 순서로 행해질 수 있다. 그러나, 전술한 바와 같이, WQE 처리(및 초인종을 울림)의 개시는 RDMA 순서 룰에 따라야 한다. 즉, RDMA 프로토콜은 어떠한 종류의 모든 사전 전송된 RDMA 메시지가 완료될 때까지 인입 RDMA 판독 메시지(204)의 처리에 대한 지연을 요구한다. 그러므로, 초인종을 울림, 즉 통보는 모든 정규 순서의 선행 RDMA 판독 메시지(204)가 완료될 때까지 지연되어야 한다. 단일의 통보는 여러 개의 WQE(216RR)의 포스팅을 나타낼 수 있다.
전술한 문제점을 해소하기 위해, 본 발명에 따른 RNIC(16)는, 접속 컨텍스트(42)(PendingReadResponseNum 필드 300(도 2b))에, 각각의 TCP 홀(130)(도 1b)에 대한 통보를 대기하는 포스팅된 RDMA 판독 응답 WQE(216RR)의 수를 저장한다. TCP 홀(130)이 폐쇄될 때, RNIC(16)은 PendingReadResponseNum WQE(216RR)의 포스팅을 판독 대기열(214)에 확인해주기 위해 초인종을 울린다(통보한다). 이것은 모든 선행 판독 메시지(204)가 완료되었고, RNIC(16)가 포스팅된 판독 응답 WQE(216RR)의 처리를 개시할 수 있다는 것을 나타낸다.
도 13을 참조하면, RDMA 발송 메시지(500)는 특유의 상황을 표현한다. 구체적으로, 완료된 발송 메시지의 전달은 CQE(542)를 CQ(540)에 배치하는 것을 포함한다. CQE(542)는 완료된 메시지를 기술하는 정보(예컨대, 길이, 검증 STag 등)를 운반한다. 이 정보는 메시지에 특정되는 정보이며, 따라서 각각의 현재 발송 메시지(500)에 대해 유지되어야 한다. CQ(540)가 전술한 바와 같이 여러 개의 발송 대기열(510) 및 수신 대기열(512)에 의해 공유될 수 있기 때문에, RNIC(16)는 발송 메시지(500)가 완료되기 전에는 CQE(542)를 배치할 수 없다(수신된 판독 작업 요청(508R)에서의 RDMA 판독 응답 WQE(508RR)의 배치와 유사하게).
추가의 RNIC 자원을 소비하지 않고 또한 조정 가능한 시행을 제공하지 않고서도 이러한 상황을 해소하기 위해, 본 발명에 따른 OutLogic(40)은 CQE(542)에 포함될 필요가 있는 모든 정보를 그 발송 메시지(500)에 의해 소비된 WQE(516R)에 배치한다. 이 정보는 그 후 Poll-For-Completion 요청 시에 버브 인터페이스(20)(도 2a)에 의해 WQE(516R)로부터 재생된다. RNIC(16)는 TCP 홀(130) 마다의 완료된 발송 메시지(500)의 수(CompletedSendNum 필드 302 내의)를 접속 컨텍스트(42)에 유지하도록 요구하며, 이것은 대응하는 TCP 홀이 폐쇄될 때에 CQE(542)를 CQ(540)에 대해 포스팅하기 위해 사용된다. TCP 홀(130)이 폐쇄될 때, RNIC(16)는 CQE(542) 를 CQ(540)에 배치한다. 배치될 CQE(542)의 수는 이 홀에 대해 카운트된 완료된 발송 메시지(500)의 수와 동일하다. 이 방식은 2N개의 기입 동작을 수반하며, 여기서 N은 완료된 발송 메시지(500)의 수이다.
RDMA 방송 메시지(500)의 전달과 관련하여 전술된 방식의 한 가지 단점은 RNIC(16)에 의해 수행된 기입 동작의 수를 2배로 한다는 점이다. 즉, 각각의 완료된 발송 메시지(500)에 대해 WQE(516R)에 대한 한 번의 기입과 CQE(542)에 대한 한 번의 기입이 존재한다. 이러한 상황을 해소하기 위해, 도 4에 도시된 바와 같이, 본 발명의 다른 실시예에 따라, CQE(542)의 내용은 특정 CQE(542)가 완료하는 WQE(516R)의 기준 카운터(544)를 운반하도록 변경된다. 기준 카운터(544)는 소정의 TCP 홀(130)에 대해 완료된 발송 메시지(500)의 수로 RNIC(16)에 의해 초기화된다. 각각의 Poll-For-Completion 동작에 대해, 버브 인터페이스(20)는 기준 카운터(544)를 감소시키고, 카운터가 제로로 되는 경우에만 CQ(540)로부터 CQE(542)를 제거한다. 또한, RNIC(16)는 완료를 대기하는 발송 메시지(500)의 임계치(M)보다 더 큰 경우에만 WQE(516S)를 갱신한다. M은 구성 가능한 파라미터로, 현재의 인입 발송 메시지(500)에 대한 정보를 유지하기 위해 할당된 내부 자원의 양을 나타낸다. M이 제로와 동일하다면, 임의의 비정규 순서로 수신된 발송 메시지(500)는 WQE(516R)의 갱신을 수반한다(정규 순서로 수신된 발송 메시지(500)에 대해서는 갱신이 요구되지 않는다).
본 실시예는 2가지 종류의 CQE(542)를 정의하는 과정과, CQE가 CQE의 몸체에 모든 완료 데이터를 운반하는 것인지, 아니면 하나 이상의 RDMA 발송 메시지에 연 관된 WQE(516R)에 저장된 완료 정보의 나머지로 완료 데이터의 일부를 운반하는 것인지의 여부를 나타내기 위해 인디케이터(546)에 CQE(542)를 제공하는 과정을 포함한다. 본 실시예는 기입 동작의 수를 N+1로 감소시키며, 여기서 N은 TCP 홀(130)이 폐쇄되기 전에 계류하고 있는 완료된 발송 메시지(500)의 수이다.
Ⅳ. 결론
전술한 설명에서, 전술한 방법의 단계들은 특정의 사용자 컴퓨터, 즉 본 발명의 하나 이상의 기능적인 태스크를 수행하기 위한 특수한 하드웨어를 포함하고 있는 유한 상태 기기에 의해 수행되는 것이 바람직하다는 것을 이해할 수 있을 것이다. 그러나, 이러한 단계들은 또한 메모리에 저장된 프로그램 제품의 명령을 실행하는 CPU 등의 프로세서에 의해 수행될 수도 있다. 본 명세서에 설명된 다양한 기기, 모듈, 메카니즘 및 시스템은 하드웨어, 소프트웨어, 또는 하드웨어와 소프트웨어의 조합에 의해 실현될 수 있으며, 도시된 것 이외의 것으로 구분될 수 있다. 이들은 본 명세서에 설명된 방법을 수행하기 위해 적합화된 어떠한 유형의 컴퓨터 시스템 또는 장치에 의해서도 구현될 수 있다. 하드웨어와 소프트웨어의 대표적인 조합은 로딩되어 실행될 시에 컴퓨터 시스템이 본 명세서에 개시된 방법을 실행하도록 컴퓨터 시스템을 제어하는 컴퓨터 프로그램을 갖는 범용의 컴퓨터 시스템이 될 수 있다. 본 발명은 또한 본 명세서에 설명된 기능 및 방법의 구현을 가능하게 하는 모든 특징을 포함하고, 컴퓨터 시스템에 로딩될 시에 이러한 방법 및 기능을 수행할 수 있는 컴퓨터 프로그램 제품에 이식될 수도 있다. 본 명세서의 문맥에서 컴퓨터 프로그램, 소프트웨어 프로그램, 프로그램 제품 또는 소프트웨어는, 정보 처리 기능을 갖는 시스템으로 하여금, (a) 또 다른 랭귀지, 코드 또는 노테이션으로의 변환, 및/또는 (b) 상이한 재료 형태로의 재생의 특정 기능을 직접 또는 그 후에 수행하도록 하기 위한 명령어 세트의 임의의 랭귀지, 코드 또는 노테이션으로의 표현을 의미한다.
본 발명이 특정의 실시예에 관련하여 설명되었지만, 본 발명의 기술분야에 익숙한 사람에 의해 다수의 변형 및 수정이 가능할 것이다. 따라서, 전술한 바와 같은 본 발명의 실시예는 예시를 위한 것으로, 본 발명을 제한하려는 것은 아니다. 첨부된 청구범위에 한정된 바와 같은 본 발명의 정신 및 기술사상으로부터 일탈하지 않고서도 다양한 변경이 이루어질 수 있다. 구체적으로, 전술한 단계의 순서는 어떠한 환경 또는 본 발명의 사상에서 벗어나지 않은 상이한 세트의 단계에 의해 제공된 기능에 있어서 변경될 수 있다.
본 발명의 데이터 전송을 검사하는 방법 및 시스템은 통신 프로토콜을 하드웨어로 구현하는데 유용하며, RDMA 가능 네트워크 인터페이스 컨트롤러에 대해 특히 유용하다.
Claims (34)
- 데이터 전송의 에러를 검사하는 방법에 있어서,상기 데이터 전송이 적어도 하나의 정렬된 직접 데이터 배치(DDP) 세그먼트를 포함한다고 가정하는 단계와,전송 제어 프로토콜(TCP) 페이로드의 최초의 2바이트가 프로토콜 데이터 유닛 정렬을 갖는 마커(MPA) 프로토콜 프레임의 길이 필드를 포함한다는 가정에 기초하여 상기 데이터 전송의 경계를 식별하는 단계와,상기의 가정들에 기초하여 순환 중복 검사(CRC) 값을 계산하고 TCP 체크섬 값을 계산하는 단계를 포함하되,상기 CRC 값의 계산은 상기 TCP 체크섬 값의 계산과 동시에 행해지는데이터 전송 에러 검사 방법.
- 데이터 전송의 에러를 검사하기 위해 재전송 시도 횟수를 제한하기 위한 컴퓨터 판독가능한 프로그램이 기록되어 있는 컴퓨터 사용가능한 기록매체로서,상기 프로그램은,전송 제어 프로토콜(TCP) 페이로드의 최초의 2바이트가 프로토콜 데이터 유닛 정렬을 갖는 마커(MPA) 프로토콜 길이 필드를 포함한다는 제 1 가정에 기초하여 상기 데이터 전송의 경계를 식별하도록 구성된 프로그램 코드와,상기 제 1 가정 및 상기 데이터 전송이 적어도 하나의 정렬된 직접 데이터 배치(DDP) 세그먼트를 포함한다는 제 2 가정에 기초하여 순환 중복 검사(CRC) 값을 계산하도록 구성된 프로그램 코드와,상기 CRC 값을 계산하는 동시에 TCP 체크섬 값을 계산하도록 구성된 프로그램 코드를 포함하는컴퓨터 사용가능한 기록매체.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 데이터 전송의 에러를 검사하는 시스템에 있어서,전송 제어 프로토콜(TCP) 페이로드의 최초의 2바이트가 프로토콜 데이터 유닛 정렬을 갖는 마커(MPA) 프로토콜 길이 필드를 포함한다는 제 1 가정에 기초하여 상기 데이터 전송의 경계를 식별하는 수단과,상기 제 1 가정 및 상기 데이터 전송이 적어도 하나의 정렬된 직접 데이터 배치(DDP) 세그먼트를 포함한다는 제 2 가정에 기초하여 순환 중복 검사(CRC) 값을 계산하는 수단을 포함하되,상기 계산 수단은 또한 TCP 체크섬 값을 계산하고,상기 계산 수단은 상기 CRC 값 및 상기 TCP 체크섬 값을 동시에 계산하며,상기 데이터 전송은 전체 MPA 프레임을 포함하는 MPA 길이 필드를 포함하고, 상기 전체 MPA 프레임은 상기 MPA 길이 필드의 14개의 최상위 비트(MSB)와, 상위 계층 프로토콜(ULP) 페이로드 길이와, 모든 MPA 마커와, CRC 데이터와, 상기 MPA 길이 필드의 2개의 최하위 비트(LSB)와, MPA 패딩내의 임의의 유효 비트를 포함하는데이터 전송 에러 검사 시스템.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 데이터 전송을 처리하기 위한 네트워크 인터페이스 컨트롤러(NIC)에 있어서,재조립(reassembly)을 위해 상기 데이터 전송을 저장하는 제1 저장 수단과,목적지 버퍼로의 직접 데이터 배치를 위해 상기 데이터 전송을 저장하는 제2 저장 수단과,제1 유형과 제2 유형 중의 하나로서 표시되는 상기 데이터 전송을 수신하는 수단과,상기 데이터 전송에 대하여 제 1 항의 방법에서와 같이 순환 중복 검사(CRC)를 계산하는 수단 - 상기 CRC는 유효, 무효 중 하나임 - 과,c1) 상기 데이터 전송을 드롭하고, 수신을 확인응답하지 않는 동작, c2) 상기 데이터 전송을 NIC의 재조립 버퍼에 배치하는 동작, c3) 목적지 버퍼로의 직접 데이터 배치를 위해 상기 데이터 전송을 상기 NIC의 내부 버퍼에 배치하는 동작 중의 하나를 실행하는 수단을 포함하는네트워크 인터페이스 컨트롤러.
- 삭제
- 제 17 항에 있어서,상기 데이터 전송이 단일의 직접 데이터 배치(DDP) 세그먼트를 포함하는지 또는 다수의 직접 데이터 배치 세그먼트를 포함하는지를 판정하는 수단을 더 포함하는네트워크 인터페이스 컨트롤러.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 제 17 항에 있어서,상기 실행 수단이 상기 c2) 동작을 실행할 때에는 상기 데이터 전송의 유형을 제1 유형으로 설정하는 수단을 더 포함하는네트워크 인터페이스 컨트롤러.
- 제 17 항에 있어서,상기 실행 수단이 상기 c3) 동작을 실행할 시에는 접속 컨텍스트 내의 TCP 홀 정보를 소거하고, 비정규 순서(out-of-order)의 데이터 전송에 대한 수신 보고를 중단시키는 수단을 더 포함하는네트워크 인터페이스 컨트롤러.
- 삭제
- 삭제
- 제 17 항에 있어서,에러를 포함하는 각각의 데이터 전송에 대해 재전송 시도의 횟수를 저장하는 제3 저장 수단과,가장 큰 시퀀스 번호를 저장하는 제4 저장 수단을 더 포함하는네트워크 인터페이스 컨트롤러.
- 제 32 항에 있어서,CRC가 상기 데이터 전송에 대해 무효이고, 상기 데이터 전송이 새로이 수신된 에러-포함 데이터 전송임을 나타내는 경우에,상기 실행 수단은, 상기 재전송 시도의 횟수가 그 데이터 전송에 대한 최대 재전송 시도 횟수를 초과하는 경우에는, 상기 새로이 수신된 에러-포함 데이터 전송에 대해 상기 c2) 동작을 실행하며,상기 실행 수단은, 상기 재전송 시도의 횟수가 그 데이터 전송에 대한 최대 재전송 시도 횟수를 초과하지 않는 경우에는, 상기 새로이 수신된 에러-포함 데이터 전송에 대해 상기 c1) 동작을 수행하며,상기 네트워크 인터페이스 컨트롤러는상기 실행 수단이 상기 c1) 동작을 실행하는 경우에는 상기 새로이 수신된 에러-포함 데이터 전송에 대한 재전송 시도의 횟수를 1씩 증가시키는 수단; 및상기 실행 수단이 상기 c1) 동작을 실행하는 경우에는 적어도 하나의 이전에 수신된 에러-포함 데이터 전송과 상기 새로이 수신된 에러-포함 데이터 전송 중의 가장 큰 시퀀스 번호를 갖도록 상기 제4 저장 수단을 갱신하는 수단을 더 포함하는네트워크 인터페이스 컨트롤러.
- 제 32 항에 있어서,상기 CRC가 정규 순서(in-order)의 데이터 전송에 대해 유효하고, 상기 정규 순서의 데이터 전송의 시퀀스 번호가 저장된 가장 큰 시퀀스 번호보다 더 큰 경우에는, 재전송 시도의 횟수를 재설정하는 수단을 더 포함하며,상기 실행 수단은,a) 상기 CRC가 정규 순서의 데이터 전송에 대해 유효하며, 상기 정규 순서의 데이터 전송의 시퀀스 번호가 저장된 가장 큰 시퀀스 번호보다 더 크지 않는 경우 및 b) 상기 재설정 수단이 재전송 시도의 횟수를 재설정하는 경우에,상기 c3) 동작을 실행하는네트워크 인터페이스 컨트롤러.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/733,588 US7383483B2 (en) | 2003-12-11 | 2003-12-11 | Data transfer error checking |
US10/733,588 | 2003-12-11 | ||
US10/733,734 US20050129039A1 (en) | 2003-12-11 | 2003-12-11 | RDMA network interface controller with cut-through implementation for aligned DDP segments |
US10/733,734 | 2003-12-11 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20060123274A KR20060123274A (ko) | 2006-12-01 |
KR100974155B1 true KR100974155B1 (ko) | 2010-08-04 |
Family
ID=34713901
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020067011283A KR100974155B1 (ko) | 2003-12-11 | 2004-12-08 | 데이터 전송 에러 검사 방법 및 시스템과 네트워크인터페이스 컨트롤러 |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP1692707B1 (ko) |
JP (2) | JP4755596B2 (ko) |
KR (1) | KR100974155B1 (ko) |
CA (1) | CA2548085C (ko) |
WO (1) | WO2005060594A2 (ko) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101753605B (zh) * | 2008-12-02 | 2012-08-08 | 北大方正集团有限公司 | 一种数据验证方法及一种服务器 |
US9037753B2 (en) | 2013-08-29 | 2015-05-19 | International Business Machines Corporation | Automatic pinning and unpinning of virtual pages for remote direct memory access |
US9213576B2 (en) | 2014-01-31 | 2015-12-15 | Google Inc. | Efficient resource utilization in data centers |
CA3040597C (en) * | 2014-11-11 | 2023-03-07 | Samsung Electronics Co., Ltd. | Receiving apparatus and receiving method |
EP3219080B1 (en) | 2014-11-11 | 2023-02-15 | Samsung Electronics Co., Ltd. | Transmitting apparatus, receiving apparatus and controlling method thereof |
KR101581614B1 (ko) * | 2014-12-24 | 2015-12-31 | 한국산업기술대학교산학협력단 | 스마트 클램프 미터와의 통신 단절 탐지 장치 및 통신 단절 탐지의 운용 방법 |
JP2019159735A (ja) * | 2018-03-13 | 2019-09-19 | 日本電気株式会社 | コントローラおよびデータ転送方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030172342A1 (en) | 2002-03-08 | 2003-09-11 | Uri Elzur | System and method for identifying upper layer protocol message boundaries |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE69427924T2 (de) * | 1994-01-03 | 2002-04-11 | Norton-Lambert Corp., Santa Barbara | Datenübertragungsverfahren und -vorrichtung, die hash-zahlen verwenden |
US6226680B1 (en) * | 1997-10-14 | 2001-05-01 | Alacritech, Inc. | Intelligent network interface system method for protocol processing |
US6256307B1 (en) * | 1998-03-27 | 2001-07-03 | Hewlett-Packard Co. | Local area network receive filter |
US8019901B2 (en) * | 2000-09-29 | 2011-09-13 | Alacritech, Inc. | Intelligent network storage interface system |
JP3509095B2 (ja) * | 2001-03-30 | 2004-03-22 | 日本電気株式会社 | 可変長フレーム同期装置、及び、可変長フレーム多重伝送装置 |
US7543037B2 (en) * | 2003-12-02 | 2009-06-02 | International Business Machines Corporation | RDMA completion and retransmit system and method |
US7177941B2 (en) * | 2003-12-11 | 2007-02-13 | International Business Machines Corporation | Increasing TCP re-transmission process speed |
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 |
US10217283B2 (en) * | 2015-12-17 | 2019-02-26 | Google Llc | Navigation through multidimensional images spaces |
-
2004
- 2004-12-08 CA CA2548085A patent/CA2548085C/en active Active
- 2004-12-08 EP EP04813260A patent/EP1692707B1/en active Active
- 2004-12-08 WO PCT/US2004/040919 patent/WO2005060594A2/en active Application Filing
- 2004-12-08 JP JP2006543925A patent/JP4755596B2/ja not_active Expired - Fee Related
- 2004-12-08 KR KR1020067011283A patent/KR100974155B1/ko not_active IP Right Cessation
-
2011
- 2011-03-11 JP JP2011053884A patent/JP4979823B2/ja not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030172342A1 (en) | 2002-03-08 | 2003-09-11 | Uri Elzur | System and method for identifying upper layer protocol message boundaries |
Also Published As
Publication number | Publication date |
---|---|
EP1692707B1 (en) | 2013-02-27 |
JP2007537616A (ja) | 2007-12-20 |
JP4755596B2 (ja) | 2011-08-24 |
WO2005060594A3 (en) | 2007-03-01 |
JP2011176835A (ja) | 2011-09-08 |
EP1692707A2 (en) | 2006-08-23 |
WO2005060594A2 (en) | 2005-07-07 |
KR20060123274A (ko) | 2006-12-01 |
JP4979823B2 (ja) | 2012-07-18 |
EP1692707A4 (en) | 2011-04-20 |
CA2548085C (en) | 2014-04-29 |
CA2548085A1 (en) | 2005-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100850254B1 (ko) | 순서가 어긋난 RDMA Send 메시지들의 전달에관련한 기입 연산들 수의 감소 | |
JP4583383B2 (ja) | Tcp再送信プロセス速度の向上方法 | |
US7383483B2 (en) | Data transfer error checking | |
US7243284B2 (en) | Limiting number of retransmission attempts for data transfer via network interface controller | |
US7912979B2 (en) | In-order delivery of plurality of RDMA messages | |
US20050129039A1 (en) | RDMA network interface controller with cut-through implementation for aligned DDP segments | |
JP4921569B2 (ja) | オフロードユニットを使用したtcp接続のためのデータ処理 | |
US20060212563A1 (en) | Split socket send queue apparatus and method with efficient queue flow control, retransmission and sack support mechanisms | |
JP4979823B2 (ja) | データ転送エラー検査 |
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 | ||
LAPS | Lapse due to unpaid annual fee |