1. 개요
도 1a를 참조하면, 종래의 데이터 전송 환경(1)의 블럭도가 도시된다. 데이터 전송 환경(1)은 하나 이상의 원격 메모리 데이터 액세스(RDMA) 인에이블드 네트워크 인터페이스 제어기(들)(RNIC)(4)을 통해, 데이터 전송(3B)을 수신하는 데이터 싱크(sink)(5)(즉, 피어)에, 데이터 전송(3A)을 송신하는 데이터 소스(2)(즉, 피어)를 포함한다. RNIC(4)는 그 중에서도 특히(아래에서 더욱 설명됨), 재조립(reassembly) 버퍼(6)를 포함한다. 네트워킹 통신 속도는 초 당 10 메가비트(Mbps)에서 100 Mbps를 거쳐 초 당 1 기가비트(Gbps)로 최근에 상당히 증가되었으며, 이제는 10 Gbps 범위의 속도에 가까워지고 있다. 그러나, 통신 대역폭 증가는 이제, 중앙 처리 장치(CPU)가 데이터를 효율적으로 처리할 수 있는 속도를 앞지르기 시작하고 있어서, 서버 프로세서, 예를 들어 RNIC(4)에서 병목현상을 초래한 다. 예를 들어, 일반적인 1 Gbps 네트워크 접속은 완전히 이용되는 경우에 2 GHz CPU의 큰 부담이 될 수 있다. 특히, 이와 같은 CPU는 네트워크 카드에서 나오는 데이터로부터의 로우-레벨 전송 제어 프로토콜(TCP) 처리를 다루는 것만으로 자신의 처리 능력의 거의 절반을 확장할 수 있다.
이러한 문제를 해결하는 한가지 방법은 전송 제어 및 인터넷 프로토콜(TCP/IP) 스택을, CPU에 의해 처리될 소프트웨어로서 구현하기 보다는 하드웨어 유한 상태 기계(FSM : Finite State Machine)로 구현하는 것이었다. 이 방법은 연속적인(back-to-back) 짧은 패킷의 유선(wire) 속도 처리를 초래하는 매우 빠른 패킷 처리를 고려한다. 또한, 이 방법은 저렴한 비용으로 매우 간결하고(compact) 강력한 해결책을 제시한다. 불행히도, TCP/IP 스택은 소프트웨어로의 구현을 위해 정의되고 개발되었기 때문에, 하드웨어로의 TCP/IP 스택의 생성은 광범위한 새로운 문제를 초래하게 된다. 예를 들어, 발생된 문제는 하드웨어 FSM으로 소프트웨어 기반의 프로토콜을 구현하고 개선된 성능을 달성하는 방법에 관한 문제, 더 빠른 상위 계층 프로토콜(ULP) 구현을 제공하기 위해 ULP(예를 들어, 응용 프로토콜)에 대한 유익하고 효율적인 인터페이스를 설계하는 방법에 관한 문제, 및 스케일-업(scale-up) 구현에서의 새로운 병목현상을 방지하는 방법에 관한 문제를 포함한다.
이러한 새로운 문제들에 대처하기 위해, 새로운 통신 계층은 종래의 ULP와 TCP/IP 스택 사이에 놓이도록 개발되었다. 불행히도, TCP/IP 스택 상에 배치된 프로토콜은, 지연(latency)을 추가하고 상당한 CPU 및 메모리 자원을 소모하는 간접 데이터 배치를 위해 ULP가 버퍼를 제공해야 하기 때문에, 전형적으로 다수의 복사 동작을 요구한다. 복사 동작의 수를 줄이기 위해, iWARP라고 칭해지는 새로운 프로토콜의 슈트(suite)가 개발되었다.
2. 프로토콜
도 1b를 참조하여, iWARP를 포함하는 다양한 프로토콜 및 데이터 전송 포맷 구조의 간단한 개요가 이제 설명될 것이다. 알 수 있는 바와 같이, 각각의 데이터 전송은 데이터 전송에 관련된 상이한 기능을 각각 제공하는 다수의 상이한 프로토콜에 관련된 정보를 포함할 수 있다. 예를 들어, 도 1b에 도시된 바와 같이, 이더넷 프로토콜(100)은 IEEE 표준 802.3에 의해 정의된 바와 같은 LAN(Local Area Network) 액세스를 제공하고; 인터넷 프로토콜(IP)(102)은 필요한 네트워크 라우팅 정보를 추가하며; 전송 제어 프로토콜(TCP)(104)은 외향(outbound) TCP 세그먼트(106)를 스케쥴링하여 전달 보증을 충족시키며; 프로토콜 데이터 유닛을 갖는 마커 얼라인먼트[Marker with Protocol data unit(PDU) Alignment: MPA] 프로토콜(108)은 DDP 세그먼트(112)(하나만 도시되었지만 스트림일 수 있음)를 가로질러 고정된 간격으로(즉, 매 512 바이트마다) 후방 MPA 마커(들)(110)을 포함하는 MPA 프레임(109)을 제공하고, 또한 길이 필드(114) 및 순환 용장 검사(cyclic redundancy checking: CRC) 필드(116)를 각각의 MPA 프레임(109)에 추가한다. 또한, 직접 데이터 배치(DDP) 프로토콜(102)은 외향 메시지를 하나 이상의 DDP 세그먼트(112)로 분할하고, 하나 이상의 DDP 세그먼트(112)를 하나의 DDP 메시지(113)로 재조립하며; 원격 데이터 메모리 액세스(RDMA) 프로토콜(122)은 DDP 메시지로/ 에서 RDMA 기입, 판독, 송신을 변환시킨다. 명확하게 하기 위해 하나의 DDP 세그먼트(112)만이 도시되었지만, 다수의 DDP 세그먼트(112)가 각각의 TCP 세그먼트(106) 내에 제공될 수 있다는 것을 알기 바란다.
RDMA 프로토콜(122)을 특별히 주시하면, RDMA 컨소시엄에 의해 개발된 이 프로토콜은 메모리 보호 의미론을 유지하면서, 메모리 버스 대역폭 및 중앙 처리 장치(CPU) 처리 부하에 관한 최소한의 요구로, 한 컴퓨터가 다른 컴퓨터의 메모리 내에 정보를 직접 배치할 수 있게 함으로써 데이터 복사 동작의 제거 및 지연의 감소를 가능하게 한다. TCP/IP를 통한 RDMA는 프로세서 및 메모리 상의 오버헤드 부담을 감소시킴으로써 데이터 센터 내의 더욱 효율적이고 크기조정 가능한(scalable) 컴퓨팅 및 데이터 전송을 약속하는데, 이것은 프로세서 자원이 사용자 애플리케이션과 같은 다른 작업에 이용가능하게 하여, 기반구조 이용도를 개선시킨다. 이 경우에, 네트워크가 더욱 효율적으로 됨에 따라, 애플리케이션은 더욱 크고 더욱 비싼 시스템에서의 집중화 작업과 대조적으로 네트워크 전반에서 태스크를 공유함으로써 더욱 잘 크기조정할 수 있다. RDMA 기능으로, 송신기는 이더넷 바이트 스트림이 수신기에서 비순서적(out-of-order) 모드로 더욱 용이하게 디코딩되고 실행될 수 있도록 이더넷 바이트 스트림 상에 헤더를 두기 위해 프레이밍(framing)을 사용할 수 있어서, 특히 인터넷 소형 컴퓨터 시스템 인터페이스(iSCSI) 및 기타 저장장치 트래픽 유형의 경우에 성능을 향상시킬 것이다. RDMA에 의해 제공된 다른 장점은 보다 적은 상호접속 유형을 통해 데이터 센터 내에 기능들을 모을 수 있는 능력이다. 보다 적은 상호접속을 통해 기능들을 모음으로써, 결과적으로 얻어진 기반구 조는 덜 복잡하고, 관리하기가 더욱 용이하며, 구조적 용장성의 기회를 제공하여, 시스템 복원력을 개선시킨다.
DDP 프로토콜을 특별히 주시하면, 이 프로토콜은 데이터가 중간 버퍼없이 상위 계층 프로토콜(ULP)의 수신 버퍼 내로 직접 배치될 수 있는 메카니즘을 도입한다. DDP는 내향(inbound) TCP 세그먼트를 처리할 때 RDMA 인에이블드 네트워크 인터페이스 제어기(RNIC)에 의해 실행된 (재조립 버퍼로/로부터의) 추가 복사를 감소시키고, 몇몇 경우에는 그것을 제거한다.
3. 도전과제
하드웨어 설정시에 RDMA 및 DDP를 갖는 TCP/IP의 효율적인 구현에 직면하는 한가지 도전과제는 표준 TCP/IP 오프-로드(off-load) 엔진(TOE) 구현이 복사 동작을 증가시키는 순서없이 수신된 TCP 스트림들을 배열하기 위해 수신 로직 내에 재조립 버퍼를 포함하는 것이다. 부가적으로, 수신기의 데이터 버퍼로의 직접 데이터 배치가 완료되게 하기 위해, RNIC는 각각의 도달하는 TCP 세그먼트 페이로드(127)에 대해 수신지 버퍼를 위치시킬 수 있어야 된다. 결과적으로, 모든 TCP 세그먼트들은 그들이 순서적이고 수신지 버퍼가 위치될 수 있다는 것을 확실하게 하기 위해 재조립 버퍼에 저장된다. 이 문제에 대처하기 위해, iWARP 스펙(specification)은 작성된 DDP 세그먼트가 TCP 세그먼트에 "얼라인(align)"될 수 있는 방식으로 RDMA 메시지의 세그먼트화를 실행하도록 전송 RNIC에 강력하게 권장한다. 그럼에도 불구하고, 비얼라인 DDP 세그먼트들은, 특히 데이터 전송이 많은 교환을 통해 행해지는 경우에, 종종 피할 수 없다.
도 1b를 참조하면, "얼라인먼트"는 TCP 헤더(126)가 DDP 세그먼트(112)의 바로 앞에 오고(즉, MPA 헤더가 TCP 헤더 다음에 오고, 그 다음에 DDP 헤더가 옴), DDP 세그먼트(112)가 하나의 TCP 세그먼트(106)에 완전히 포함된다는 것을 의미한다. 더욱 구체적으로, 각 TCP 세그먼트(106)는 TCP 헤더(126) 및 TCP 페이로드/TCP 데이터(127)를 포함한다. "TCP 홀(hole)"(130)은 TCP 데이터 스트림 내의 빠진 TCP 세그먼트(들)이다. MPA 마커(110)는 무순서 TCP 세그먼트(106)가 수신될 때, 및 TCP 세그먼트(106) 내의 MPA 프레임(109)이 TCP 세그먼트(106)와 얼라인되는지, 얼라인되지 않는지 수신기가 알고 싶어할 때 데이터를 제공한다. 각 마커(110)는 특정 접속의 초기 순서 번호에서 시작하여, TCP 스트림 내에서 동일한 간격(512 바이트)으로 배치되고, 이동하는 MPA 프레임(109)의 DDP/RDMA 헤더(124)를 가리킨다. 제1 순서 식별 번호는 제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들 사이에 있을 수 있는 중간-박스에 의한 재세그먼트화로 인해, 또는 작동중 최대 세그먼트 크기(MSS)의 감소로 인해 생길 수 있다. 송신기 RNIC가 DDP 세그먼트화를 변경(TCP 스트림 내의 DDP 헤더의 위치 를 변경)할 수 없기 때문에, 재전송 동작은 더 큰 MSS를 갖는 원래의 DDP 세그먼트 작성에도 불구하고 새로운 감소된 MSS를 요구할 수 있다. 어떤 경우든, 복사 동작의 증가는 속도와 효율을 감소시킨다. 따라서, 비얼라인된 DDP 세그먼트 배치 및 전달과 다른 형태로, 얼라인된 DDP 세그먼트 배치 및 전달을 처리하는 방식이 본 기술 분야에 필요하다.
비얼라인된 DDP 세그먼트(112NA) 처리와 관계가 있는 새로운 도전과제는 비얼라인먼트를 야기하는 원인을 판정하기가 종종 어렵다는 사실에 의해 생겨난다. 예를 들어, 단일의 비얼라인된 DDP 세그먼트(112NA)는 2개 이상의 TCP 세그먼트(106)들 사이에서 분할될 수 있고, 그들 중 하나는 도달하고, 다른 하나는 도달하지 않을 수 있다. 그 외에, 몇몇 DDP 세그먼트(112NA)가 MPA 마커(110)들 사이에 속하거나, 헤더가 빠지거나, 또는 세그먼트 테일(tail)이 빠질 수 있는 경우 등이 있다(후자의 경우에는, 세그먼트를 부분적으로 배치하고, 나머지 부분 도달시에 그 나머지 부분을 배치하는 곳을 알기 위한 소정의 정보를 유지할 필요가 있을 수 있다). 후자의 경우와 관련하여, 도 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 세그먼트들의 상이한 처리조작을 제공하는 임의의 해결책은 비얼라인먼트를 야기할 수 있는 다양한 상황에 대처할 수 있어야 된다.
4. DDP/RDMA 동작 흐름
도 1d-1h를 참조하여, 나중의 설명을 위해 DDP/RDMA 동작 흐름의 간단한 개요가 지금 설명될 것이다. DDP 프로토콜(120)(도 1b)을 특별히 주시하면, DDP는 태그가 지정된 메시지 및 태그가 지정되지 않은 메시지라고 하는 2가지 유형의 메시지를 제공한다. 도 1d를 참조하면, "태그가 지정된 메시지"에서, 각각의 DDP 세그먼트(112)(도 1b)는 데이터가 직접 배치될 수 있는 수신기 상의 수신지 버퍼 내의 메모리 영역/윈도우[예를 들어, 도 1g의 메모리 영역(232)]를 식별하는 DDP/RDMA 헤더(124) 내의 조종 태그(steering tag: STag), 이 영역/윈도우 내의 타겟 오프셋(TO), 및 세그먼트 페이로드(payload)(도시되지 않음)를 갖고 있다. 이 경우에, 수신지 버퍼의 이용도는 Stag를 통해 "광고"된다. 도 1e를 참조하면, "태그가 지정 되지 않은 메시지"는 원격 송신기가 수신기에서의 버퍼를 몰라서, 적절한 버퍼를 결정하기 위해 수신기에 의해 사용될 수 있는 큐 ID(QN), 메시지 순서 번호(MSN) 및 메시지 오프셋(MO)을 갖는 메시지를 송신하는 것이다.
도 1f-1h를 참조하면, RDMA 프로토콜은 4가지 유형의 메시지: 송신(200), 기입(202), 판독(204) 및 판독 응답(206)을 정의한다. 도 1a로 돌아가면, 동사(verb) 인터페이스(7)는 RNIC(4)를 소비기(consumer)에 제공하고; RNIC(4) 자원을 할당 및 해제하고, 작업 요청(WR)(208)을 RNIC(4)에 포스트(post)하는 방법을 포함한다. 동사 인터페이스(7)는 보통, 2개의 부분; 즉, 사용자 공간 소비기용으로 사용되는 사용자 공간 라이브러리(9A) 및 커널(kernel) 공간 소비기용으로 사용되는 커널 모듈(9B)을 갖는 동사 라이브러리(8)에 의해 구현된다. 동사 인터페이스(7)는 RNIC(4) 하드웨어 및 펌웨어와 함께 동작하는 RNIC 전용 소프트웨어이다. 동사 인터페이스(7)[동사 라이브러리(8)], 하드웨어 및 펌웨어로 구현되어야 하는 것에 관한 엄격한 정의는 없다. 동사 인터페이스(7)는 RNIC(4) 서비스를 소비기에 제공하는 단일 패키지로서 간주될 수 있으므로, 소비기는 주로 2가지 유형의 동작; 즉, RNIC(4) 자원의 관리(할당 및 해제), 및 RNIC(4)로의 작업 요청(들)의 포스팅을 실행할 수 있다. RNIC(4) 자원 관리의 예로는 큐 쌍 할당 및 해제, 완료 큐(이후, "CQ") 할당 및 해제, 또는 메모리 영역 할당 및 해제가 있다. 이러한 관리 태스크들은 아래에 더욱 상세하게 설명될 것이다.
도 1f-1h에 도시된 바와 같이, 소비기는 작업 요청(208)이 포스트되는 큐 쌍을 할당한다. "큐 쌍"(이후, "QP")은 TCP 접속과 관련되고, 각 큐에 대한 포스팅 메카니즘(도시되지 않음)뿐만 아니라 한 쌍의 작업 큐(예를 들어, 송신 및 수신)(210, 212)를 포함한다. 각각의 작업 큐(210, 212)는 각각의 작업 큐 요소(WQE)가 하나의 작업 요청(WR)(208)을 기술하는 소정의 제어 정보를 보유하고 소비기 버퍼를 나타내는(또는 가리키는) WQE(216)의 리스트이다. 소비기는 동사 인터페이스(7)(도 1a) 및 RNIC(4)(도 1a)를 얻기 위해 작업 요청(WR)(208)을 작업 큐(210, 212)에 포스트하여, 포스트된 작업 요청(WR)(208)을 실행한다. 또한, 판독 큐(214)(도 1h) 및 작업 큐 요소(WQE)(216)와 같이 소비기가 직접 상호작용하지 못하는 QP를 구성할 수 있는 자원이 있다.
WQE(216)에 의해 보유될 수 있는 전형적인 정보로는 소비기 작업 요청(WR) 유형[즉, 송신 WR(208S)의 경우에는 RDMA 송신, RDMA 기입, RDMA 판독 등일 수 있고, 수신 WR(208R)의 경우에는 RDMA 수신만 될 수 있음], 및 전송하기 위해 데이터를 전달하거나, 또는 수신된 데이터에 대한 위치를 나타내는 소비기 버퍼의 설명이 있다. WQE(216)는 항상 단일 RDMA 메시지를 기술하고/그 메시지에 대응한다. 예를 들어, 소비기가 RDMA 기입 유형의 송신 작업 요청(WR)(208S)을 포스트할 때, 동사 라이브러리(8)(도 1a)는 RDMA 기입 메시지를 사용하여 데이터가 획득되어 응답기에 보내질 필요가 있는 소비기 버퍼를 기술하는 WQE(216S)를 작성한다. 다른 예에서는, 수신 작업 요청(WR)(208R)(도 1f)이 존재한다. 이 경우에, 동사 라이브러리(8)(도 1a)는 수신된 송신 메시지(200)의 페이로드를 배치하기 위해 사용될 소비기 버퍼를 보유하는 수신 큐(RQ)에 WQE(216R)를 추가한다.
동사 라이브러리(8)(도 1a)는 새로운 WQE(216)를 송신 큐(SQ)(210) 또는 수 신 큐(RQ)(212)에 추가할 때, 새로운 WQE(216)가 송신 큐(SQ)/수신 큐(RQ)에 각각 추가되었다는 것을 RNIC(4)(도 1a)에 통지한다(여기에서는 "초인종을 울린다"라고 한다). 이 "초인종 울림" 동작은 일반적으로, RNIC 하드웨어에 의해 검출되고 디코딩되는 RNIC 메모리 공간으로의 기입이다. 따라서, 초인종 울림은 특정된 SQ/RQ에 대해 각각 행해야 할 필요가 있는 새로운 작업이 있다는 것을 RNIC에 통지한다.
RNIC(4)(도 1a)는 계류중인(포스트된) WQE(216)를 갖는 송신 큐(SQ)의 리스트를 보유한다. 또한, RNIC는 그러한 송신 큐(SQ)들(210) 사이를 중재하고, 잇따라서 그들을 서비스한다. RNIC(4)는 서비스하기 위한 송신 큐(SQ)(210)를 골라내면, 서비스하기 위한 다음 WQE(216)를 판독하고(WQE들은 소비기에 의해 포스트된 순서로 RNIC에 의해 처리되고), 요청된 RDMA 메시지에 속하는 하나 이상의 DDP 세그먼트(220)를 생성한다.
특정 유형의 RDMA 메시지의 처리는 도 1f-1h를 참조하여 이제 설명될 것이다. 도 1f에 도시된 바와 같이, RNIC(요청기)는 특정 송신 큐(SQ)(210S)를 서비스하는 것을 선택한다. 그 RNIC는 송신 큐(SQ)(210S)로부터 WQE(216S)를 판독한다. 이 WQE(216S)가 RDMA 송신 요청에 대응하면, RNIC는 송신 메시지를 생성하고, 이 메시지를 피어 RNIC(응답기)에 송신한다. 생성된 메시지는, 예를 들어 3개의 DDP 세그먼트(220)를 포함할 수 있다. RNIC(응답기)는 송신 메시지를 수신할 때, 수신 큐(RQ)(212)로부터 WQE(216R)를 판독하고, 수신된 DDP 세그먼트(220)의 페이로드를, 그 WQE(216R)에 의해 참조된 소비기 버퍼(즉, 응답기 Rx buff)(230)에 배치한다. 송신 메시지(200)가 순서대로 수신되면, RNIC는 수신 큐(RQ)(212)로부터 제1 미사용 WQE(216R)를 골라낸다. WQE(216R)는 소비기에 의해 포스트된 순서로 요청 큐(RQ)(212) 내에 연쇄적으로 연결된다. 태그 비지정 DDP 메시지와 관련하여, 송신 메시지(200)는 동일한 DDP 큐에 속하는 각각의 송신된 DDP 메시지(220)를 갖는 송신기에 의해 1로 초기화되고 단조 증가되는 메시지 순서 번호(MSN)(도 1e)를 갖고 있다. (태그 지정된 메시지는 RDMA 기입 메시지와 관련하여 아래에 설명될 것이다.) DDP 큐는 DDP 헤더 내의 큐 번호(QN)(도 1e)에 의해 식별된다. RDMA 프로토콜은 3개의 DDP 큐: 즉, 내향 RDMA 송신용의 QN #0, 내향 RDMA 판독 요청용의 QN #1, 및 내향 종료용의 QN #2를 정의한다. 따라서, 송신 메시지(200)가 비순서적으로 도달할 때, RNIC(4)는 그 송신 메시지(200)에 대응하는 WQE(216R)를 찾기 위해 그 메시지의 MSN을 사용할 수 있다. 하나의 수신된 송신 메시지(200)는 수신 큐(RQ)(212)로부터 하나의 WQE(216R)를 소비한다. 포스트된 WQE의 부족, 또는 WQE 버퍼의 길이를 초과하는 메시지 데이터 길이는 심각한 에러로 간주되어, 접속 종료를 초래한다.
도 1g와 도 1h를 참조하여, 태그 지정된 동작을 사용하는 RDMA 기입 메시지(202), 및 RDMA 판독 메시지(204)의 부분이 이제 설명될 것이다. 태그 지정된 동작을 사용하기 위해, 소비기는 메모리 영역(232)을 등록할 필요가 있다. 메모리 영역(232)은 수신기 상의 현재 사용중인(pinned) 메모리의 가상적으로 연속된 청크, 즉 도 1g에서의 응답기이다. 메모리 영역(232)은 그것의 개시 가상 주소(VA), 길이, 액세스 허가, 및 그 메모리 영역(232)과 관련된 물리적 페이지의 리스트에 의해 설명된다. 메모리 영역(232) 등록의 결과로서, 소비기는 그 등록된 메모리 영 역(232)을 액세스하기 위해 사용될 수 있는 조종 태그(STag)를 다시 수신한다. 원격 소비기(예를 들어, 도 1g에서의 요청기)에 의한 메모리 영역(232)의 액세스는 로컬 소비기(예를 들어, 도 1g에서의 응답기)와의 어떤 상호작용도 없이 RNIC(4)에 의해 실행된다. 소비기는 원격 메모리(232)를 액세스하고 싶을 때, 각각 RDMA 기입 또는 RDMA 판독 유형의 송신 작업 요청(WR)(208W 또는 208R)(도 1h)을 포스트한다. 동사 라이브러리(8)(도 1a)는 대응하는 WQE[216W(도 1g) 또는 216R(도 1h)]를 각각 송신 큐(SQ)(210W 또는 210R)에 추가하고, RNIC(4)에 통지한다. 접속이 조정을 확보하면, RNIC(16)는 WQE(216W 또는 216R)를 판독하고, 각각 RDMA 기입 메시지(202) 또는 RDMA 판독 메시지(204)를 생성한다.
RDMA 기입 메시지(202)를 특별히 주시하면, 도 1g에 도시된 바와 같이, RDMA 기입 메시지(202)는 RNIC(4)에 의해 수신되고, RNIC는 등록된 메시지 영역(232)을 찾기 위해 (그 메시지에 속하는) DDP 세그먼트의 헤더 내의 STag와 TO(도 1d) 및 길이를 사용하며, RDMA 기입 메시지(202)의 페이로드를 메모리(232)에 배치한다. 수신기 소프트웨어 또는 CPU(즉, 도시된 바와 같은 응답기)는 데이터 배치 동작에 관련되지 않고, 이 동작이 발생했다는 것을 알아차리지 못한다.
RDMA 판독 메시지(204)를 특별히 주시하면, 도 1h에 도시된 바와 같이, 메시지가 RNIC(4)(도 1a)에 의해 수신될 때, RNIC는 RDMA 판독 응답 메시지(206)를 생성하고, 그것을 다시 원격 호스트, 즉 도시된 바와 같은 요청기에 보낸다. 이 경우에, 수신 큐는 판독 큐(214)라 칭해진다. RDMA 판독 응답(206)의 생성은 또한, 이 동작이 발생했다는 것을 알아차리지 못하는 로컬 소비기(즉, 응답기)와 관련없이 실행된다. RDMA 판독 응답(206)이 수신될 때, RNIC(4)(도 1a)는 RDMA 기입 메시지(204)를 처리하는 것과 유사하게 이 메시지를 처리한다. 즉, RNIC는 요청기측 상의 메모리 영역(232)에 기입한다.
소비기 작업 요청 이외에, RNIC(4)(도 1a)는 또한 도 1f-1h에 도시된 바와 같이, 이들 요청의 완료에 대해 소비기에 통지한다. 완료 통지는 [동사 라이브러리(8)에 의해 제공된 전용 기능을 통해] 소비기에 의해 할당되는 다른 RNIC 자원인 완료 큐(240)를 사용함으로써 행해진다. 완료 큐(240)는 완료 큐 요소(CQE)(242)를 포함한다. CQE(242)는 소비기 작업 요청(WR)(208S, 208W, 208RR)의 완료 보고시에 RNIC(4)(도 1a)에 의해 완료 큐(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) 완료시에 송신 큐(SQ)(210)와 관련된 관련 완료 큐(CQ)(240)에 완료 큐 요소(CQE)(242)를 배치한다. 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)의 배치를 완료할 때, 그 수신 큐(RQ)(212)와 관련된 완료 큐(CQ)(240)에 완료 큐 요소(CQE)(242)를 배치한다.
상기 설명에 비추어보아, 비얼라인된 DDP 세그먼트 배치 및 전달과 다르게, 얼라인된 DDP 세그먼트 배치 및 전달을 처리하는 방식이 본 기술 분야에 필요하다.
다음은 단지 구성상의 이유로, I. 개요, Ⅱ. InLogic, Ⅲ. OutLogic, 및 Ⅳ. 결론의 형태로 설명된다.
I. 개요
A. 환경
첨부 도면을 참조하면, 도 2a는 본 발명의 한 실시예에 따른 데이터 전송 환경(10)의 블럭도이다. 데이터 전송 환경(10)은 하나 이상의 원격 메모리 데이터 액세스(RDMA) 인에이블드 네트워크 인터페이스 제어기(들)(RNIC)(16)을 통해, 데이터 전송(14B)을 수신하는 데이터 싱크(sink)(18)(즉, 피어)에, 데이터 전송(14A)을 송신하는 데이터 소스(12)(즉, 피어)를 포함한다. 설명을 위해, 데이터 전송을 시작하는 엔티티는 여기에서 "요청기"로 칭해지고, 데이터 전송에 응답하는 엔티티는 여기에서 "응답기"로 칭해질 것이다. 이와 유사하게, 데이터를 송신하는 엔티티는 여기에서 "송신기"로 칭해지고, 데이터 전송을 수신하는 엔티티는 여기에서 "수신기"로 칭해질 것이다. 데이터 소스(12) 및 싱크(18)의 각각은 서로 다른 시간에, 데이터의 송신기 또는 수신기, 또는 요청기 또는 응답기일 수 있고, "소스" 및 "싱크"라는 표시는 전송될 데이터를 보유하는 그 엔티티를 처음에 나타내기 위해서만 제공된다. 다음 설명은 또한, 더욱 구체적인 표시가 필요없는 경우에 상기 엔티티들 중의 하나를 [RNIC(16) 자원의 소비를 위한] "소비기(consumer)"로 칭할 수 있다. "수신지 버퍼"는 수신기에서 데이터를 마지막으로 수신하는 데이터 저장장치, 즉 데이터 소스(12) 또는 데이터 싱크(18)의 데이터 버퍼(50)를 나타낼 수 있다. 데이터 소스(12) 및 데이터 싱크(18)는 각각 데이터 저장을 위한 데이터 버퍼(50)를 포함한다.
하드웨어와 관련하여, RNIC(16)는 iWARP 및 동사 기능을 갖는 네트워크 I/O 어댑터 또는 내장된 제어기와 같은 임의의 네트워크 인터페이스 제어기이다. RNIC(16)는 또한 동사 인터페이스(20), 액세스 제어(30), RNIC 입력 로직(이후, "InLogic")(32), 재조립 버퍼(34), 내부 데이터 버퍼(38), RNIC 출력 로직(이후, "OutLogic")(40), 접속 문맥(42), 검증 유닛(44) 및 기타 컴포넌트(46)를 포함한다. 동사 인터페이스(20)는 동작을 실행하기 위해 RNIC(16) 하드웨어와 RNIC 드라이버(도시되지 않음)의 결합을 통해 구현된 바와 같은 소비기에 대한 RNIC(16)의 표현이다. 동사 인터페이스(20)는 2개의 부분, 즉 사용자 공간 라이브러리(24) 및 커널 모듈(26)을 갖는 동사 라이브러리(22)를 포함한다. 액세스 제어(30)는 InLogic(32)으로의 액세스를 제어하기 위한 임의의 지금 알려져 있거나 나중에 개발되는 로직을 포함할 수 있다. 재조립 버퍼(34)는 데이터 전송(14A, 14B)에 관련된 데이터의 임시 저장을 위한 임의의 메카니즘을 포함할 수 있다. 특히, 재조립 버퍼(34)는 더욱 상세하게 후술되는 바와 같이, 비순서적인 TCP 스트림의 임시 저장을 위해 보통 사용된다. 기타 컴포넌트(46)는 RNIC(16)의 동작에 필요하지만 여기에서는 달리 설명되지 않는 임의의 기타 로직, 하드웨어, 소프트웨어 등을 포함할 수 있다.
도 2b를 참조하면, 접속 문맥(42)은 접속 전용 데이터를 저장하는 다수의 필 드를 포함한다. 기타 문맥 데이터(60)는 여기에서 달리 설명되지 않지만 본 기술 분야에 숙련된 기술자가 알 수 있는 접속 전용 데이터를 제공한다. 본 발명에 따르면, 2개의 접속 유형, 즉 고속(이후, "FAST") 접속 및 저속(이후, "SLOW") 접속이 정의된다. "고속" 및 "저속"이라는 용어는 접속의, 얼라인된 DDP 세그먼트를 전달할 가능성을 나타낸다. 접속 유형은 접속 유형(62)이라고 하는 접속 문맥 필드에서 식별된다. SLOW 접속은 더욱 상세하게 후술하는 바와 같이, SLOW 접속으로서 만들어졌거나, 또는 내향 데이터의 처리 도중에 RNIC(16)에 의해 다운그레이드된 RDMA 접속을 위해 사용될 수 있다. 도 2b에 도시된 그외 다른 필드는 이 명세서의 다른 부분에서 관련 처리와 관련하여 설명될 것이다. 도 2c를 참조하면, 검증 유닛(44)은 검증 처리에 필요할 수 있는, 순환 용장 검사(CRC) 로직(64), TCP 체크섬(checksum) 로직(66) 및 저장-전송 버퍼(68)를 포함한다.
B. RNIC 일반 동작
도 2a로 돌아가면, 동작시, RNIC(16)는 InLogic(32)으로의 액세스를 제어하는 액세스 제어를 통해 데이터 전송(14A)을 수신한다. 접속을 유지하는 정보는 종래에서처럼, 접속 문맥(42)의 기타 문맥 데이터(60)(도 2b) 내에 보유된다. InLogic(32)은 데이터 전송(14A) 내의 내향 TCP 세그먼트를 처리하고, TCP 체크섬 로직(66)(도 2c)을 통해, 수신된 TCP 세그먼트의 검증을 실행하며, 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)은 수신지 데이터 버퍼(50)로의 직접 배치를 위해, 얼라인된 내향 DDP 스트림을 내부 데이터 버퍼(38)로 향하게 한 다음에 OutLogic(40)으로 향하게 한다. 대안적으로, TCP 세그먼트(106)는 드롭될 수 있고, 아무런 긍정응답(Ack)도 보내지지 않으므로, 세그먼트의 재전송을 필요로 한다.
OutLogic(40)은 FAST와 SLOW 접속 사이를 중재하고, 데이터 싱크(18)의 데이터 버퍼(50)에 대해 2가지 접속 유형 스트림의 데이터 배치를 실행한다. FAST 접속 상의 얼라인된 DDP 세그먼트가 수신지 버퍼로의 직접 배치를 위해 내부 데이터 버퍼(38)로 향하게 되는 상황은 얼라인된 DDP 세그먼트를 갖는 FAST 접속이 재조립 버퍼(34)를 우회하여 OutLogic(40)에 의해 직접 배치되기 때문에 "컷-스루(cut-through) 모드" 라 칭해진다. 그러나, 2가지 접속 유형에 대해, 순서대로 수신된 데이터 스트림만이 OutLogic(40)을 통해 데이터 싱크(18)로 전달된다.
Ⅱ. InLogic
도 3과 관련하여, 본 발명에 따른 InLogic(32)(도 2a)의 흐름도 및 그것의 데이터 전송(14A)의 처리가 더욱 상세하게 설명될 것이다. 전술한 바와 같이, InLogic(32)은 내향 TCP 세그먼트를 처리하고, 수신된 세그먼트의 TCP 검증을 실행 하며, MPA CRC를 계산하고, SLOW 접속 데이터 스트림으로부터 FAST 접속 데이터 스트림을 분리한다. 달리 언급되지 않는 한, "S"가 붙지 않는 참조 번호는 도 2a-2c에 도시된 구조를 나타낸다.
제1 단계 S1에서, InLogic(32)은 RNIC(16) 접속에 속하는 데이터 전송(14A)의 TCP 세그먼트(106)를 필터링하고, 수신된 세그먼트에 대해 [검증 유닛(44)을 통해] 계산된 CRC 검증 결과를 갖는 패킷을 획득한다. [CRC 검증은 InLogic(32) 판정 처리 이전에 행해져야 된다는 것을 알기바란다. CRC 검증은 또한, TCP 세그먼트(106)가 FAST 접속에 속하는 것으로서 식별(단계 S2)되기 전에, TCP 체크섬 계산과 동시에 행해질 수 있다.]
단계 S2에서, InLogic(32)은 TCP 세그먼트(106)가 SLOW 접속에 속하는 지의 여부를 판정한다. 이 경우에, InLogic(32)은 송신기가 어떤 식으로 접속을 분류했는지 판정한다. 예(YES)이면, TCP 세그먼트(106)는 재조립 버퍼(34)로 향하게 되고, TCP 로직은 이 세그먼트가 성공적으로 수신된 것으로 간주한다(단계 S3).
아니오(NO)이면, 단계 S4에서, InLogic(32)은 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) 길이보다 긴지 아닌지 판정한다. 예이면, 이것은 다음 세가지 상황 중의 하나를 나타낸다: 1) 단일 DDP 세그먼트(112NA)가 TCP 세그먼트(106)에 얼라인되지 않고, MPA 길이 필드로 추정된 필드가 길이 필드가 아닌 상황; 2) 단일 DDP 세그먼트(112)의 처음이 TCP 세그먼트(106)에 얼라인되지만, 단일 DDP 세그먼트의 길이가 TCP 세그먼트(106) 페이로드 크기를 초과하는 상황; 또는 3) 수신된 단일 DDP 세그먼트(112)가 TCP 세그먼트(106)에 얼라인되지만, 손상된 MPA 길이 필드(114)를 갖는 상황. 처음의 두 경우(1 및 2)는 비얼라인된 단일 DDP 세그먼트(112NA)가 FAST 접속 상에서 수신되었고, 따라서 접속은 SLOW 접속으로 다운그레이드되어야 한다는 것을 나타낸다(단계 S3). 세번째 경우(3)는 접속 다운그레이드를 요구하지 않는다. 그러나, MPA 프레임(109) 길이가 TCP 세그먼트(106) 길이를 초과하는 이유가 식별되고 확인될 수 없기 때문에, 그러한 TCP 세그먼트(106)의 드롭(즉, 취소 및 비-전송)은 교착 상태[상기 경우(2)]를 초래할 수 있기 때문에 적당하지 않다. 즉, 그러한 TCP 세그먼트가 정말로 비얼라인된 DDP 세그먼트를 전달했다면, 송신기는 동일한 흐름을 따라, 교착상태를 초래하는 수신기에 의해 반복적으로 드롭될 수 있는 동일한 비얼라인된 DDP 세그먼트를 재전송할 것이다. 따라서, 단계 S3에서, InLogic(32)은 TCP 세그먼트(106)의 데이터 전송을 재조립 버퍼(34)로 향하게 하고, TCP 세그먼트(106)가 성공적으로 수신되었다는 것을 확인하도록 Ack를 스케쥴링하며, 접속을 SLOW 접속으로 다운그레이드한다[즉, 도 2b의 접속 유형 필드(62)가 FAST로부터 SLOW로 전환된다]. 후술되는 바와 같이, MPA 길이 필드(114)가 손상 되면[상기 경우(3)], 이것은 OutLogic(40)에 의해 검출되고, 접속은 검증 유닛(44)에 의해 검출된 CRC 에러로 인해 종료될 수 있다. 그러므로, 단계 S3에서, 접속 다운그레이드는 얼라인된 DDP 세그먼트(112) 내의 데이터 손상으로 인해 FAST 접속이 영구적으로 SLOW 접속으로 되지 않게 할 수 있다.
단계 S5로 돌아가서, MPA 길이가 TCP 길이보다 크지 않으면, 즉 아니오이면, 이것은 MPA 프레임(109) 길이가 TCP 세그먼트(106) 길이와 맞다(동일하다)는 것을 나타낸다. 단계 S6에서, InLogic(32)은 CRC 검증 결과가 이 TCP 세그먼트(106)에 대해 유효한 지의 여부를 판정한다. 즉, CRC 로직(64)이 "유효" 표시를 되돌려 보냈는 지의 여부를 판정한다. 예이면, 이것은 단일 DDP 세그먼트(112)가 TCP세그먼트(106) 경계에 꼭 맞고(즉, 길이가 서로 동일하고), 이 세그먼트에 대해 어떤 데이터 손상도 검출되지 않았다는 것을 나타낸다. 결과적으로, 단계 S7에서, 단일 DDP 세그먼트(112)는 수신된 TCP 세그먼트(106)를 수신기, 예를 들어 데이터 싱크(18)의 수신지 데이터 버퍼(50)에 직접 배치하는 OutLogic(40)에 의한 처리를 위해, 수신된 TCP 세그먼트(106)를 RNIC(16)의 내부 데이터 버퍼(38)에 배치함으로써 "고속 경로 모드"로 처리된다. 또한, Ack는 이 TCP 세그먼트(106)의 성공적 수신을 확인하도록 스케쥴링된다.
CRC 로직(64)이 "무효" 표시를 돌려 보내면, 즉 단계 S6에서 아니오이면, 이것은 본 발명에 따라 판정될 수 있는 다섯 가지 가능한 경우 중의 하나가 존재한다는 것을 나타낸다. 도 1c는 다섯가지 가능한 경우를 도시한 것으로, 단계 S8-S10은 InLogic(32)이 각각의 경우를 어떤 식으로 처리하는 지를 나타낸다. 어떤 경우든, 처리의 목적은 1) 비얼라인된 접속이 송신기에 의해 FAST 접속으로 선언되었더라도, 이 비얼라인된 접속의 종료를 방지하기 위한 것; 2) FAST 접속에 속하는 얼라인된 DDP 세그먼트 내의 데이터 손상으로 인한 접속 종료 가능성을 줄이기 위한 것; 및 3) 따로따로 최소한도로 취급될 경우의 수를 줄이면서 가능한 한 단순하게 InLogic(32)을 유지하기 위한 것이다.
단계 S8에서, InLogic(32)은 도 1c에 A의 경우로 도시된 바와 같이, 새로 수신된 DDP 세그먼트(162)의 DDP 세그먼트 헤더(160)가 이전에 처리된 DDP 세그먼트(166)의 MPA 길이 필드(164)에 의해 참조되었는 지의 여부를 판정한다. 이 경우에, 이전에 처리된 DDP 세그먼트(166)의 MPA 길이는 새로 수신된 DDP 세그먼트(162)의 MPR CRC의 검증동안에 검사되었으므로, 다음 세그먼트 내의 DDP 헤더(160)의 정확한 위치를 나타낸다. 단계 S6에서, A의 경우에 대한 CRC 무효는 단일 DDP 세그먼트(162) 데이터 또는 헤더(106)가 손상되어 있다는 것을 의미한다. 새로 수신된 세그먼트(162)의 TCP 재전송은 이 문제를 해결한다. 따라서, 단계 S9에서, TCP 세그먼트(106)는 드롭되고, 세그먼트 수신은 확인되지 않은 것으로 간주된다.
새로 수신된 DDP 세그먼트(162) 헤더(160)가 이전에 처리된 DDP 세그먼트(166)의 MPA 길이 필드(164)에 의해 참조되지 않으면(즉, 단계 S8에서 아니오이면), 단계 S10에서, InLogic(32)은 도 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에서 아니오이면, 세가지 경우 중의 한가지가 존재한다. 첫번째, 도 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로 돌아가서, InLogic(32)이 TCP 세그먼트(106) 길이가 MPA 프레임(109) 길이보다 더 큰 것으로 판정하면, 이것은 TCP 세그먼트(106)가 다수의 DDP 세그먼트(112)를 포함한다는 것을 나타낸다. 이 경우에, 단계 S11에서, CRC 로직(64) 검증 결과의 순차적인 검사는 처음부터 마지막 DDP 세그먼트(112)까지 행해진다. 모든 DDP 세그먼트(112)가 유효 CRC를 가지면, 즉, 예이면, 모든 DDP 세그먼트(112)는 TCP 세그먼트(106) 내에 완전히 포함되고, 적절하게 얼라인된 DDP 세그먼트(112)는 모두 유효하다. 이 경우에, 단계 S7에서, InLogic(32)은 수신된 TCP 세그먼트(106)를 수신지 데이터 버퍼, 예를 들어 데이터 싱크(18)의 데이터 버퍼(50)에 배치하는 OutLogic(40)에 의한 처리를 위해, 수신된 TCP 세그먼트(106)를 RNIC(16)의 내부 데이터 버퍼(38)에 배치함으로써 고속 경로 모드에서 DDP 세그먼트(112)를 처리한다. 또한, Ack는 이 TCP 세그먼트(106)의 성공적 수신을 확인하도록 스케쥴링된다. InLogic(32)은 첫번째 실패가 검출되었을 때, CRC 검증 결과를 검사하는 것을 정지하며, 그것의 관리는 단계 S12-S13과 관련하여 설명된다.
단계 S12에서, InLogic(32)은 제1 DDP 세그먼트(112)가 CRC 로직(64)에 의해 판정된 바와 같이 무효 CRC를 가졌는지 판정한다. 예이면, InLogic(32)은 단일 DDP 세그먼트에 대한 무효 CRC 경우와 유사하게 제1 DDP 세그먼트(112)를 처리한다(단계 S8). 즉, InLogic(32)은 무효 CRC를 갖는 제1 DDP 세그먼트(112)를 단일 DDP 세그먼트(112)로서 취급하고, 무엇이 CRC 무효를 야기했는지, 즉 도 1c의 A-E의 경우 중에 어떤 경우를 적용할지와 그 경우를 어떻게 적절하게 다룰지 판정하는 처리를 한다.
단계 S12가 아니오로 되면, 즉 제1 DDP 세그먼트(112)가 유효 CRC를 가졌으면, InLogic(32)은 단계 S13에서 중간 또는 최종 DDP 세그먼트(112)를 검사할 때 CRC 무효가 검출되었는지 판정하는 처리를 한다. 예이면, InLogic(32)(도 1)은 CRC 무효를 야기한 DDP 세그먼트(112)의 데이터 또는 헤더(즉, 유효 CRC를 갖는 이전의 DDP 세그먼트의 길이)가 손상되었다는 것을 이 에러가 나타내기 때문에, 단계 S9로 진행한다. 즉, CRC 에러는 동일한 TCP 세그먼트(106) 내의 중간 또는 최종 DDP 세그먼트(112) 상에 검출되었는데, 이것은 이전의 DDP 세그먼트가 유효 CRC를 가졌으므로, 이전의 DDP 세그먼트의 길이가 무효 CRC를 갖는 세그먼트의 헤더를 가리킨다는 것을 의미한다. 이것은 A 경우(도 1c)의 설명과 일치한다. 그러므로, A의 경우에서 설명된 바와 같이, 헤더의 위치는 알려지므로, CRC 에러는 데이터 또는 헤더 손상에 의해 야기된 것으로 알려진다. 따라서, 전체 TCP 세그먼트의 재전송은 교착상태 시나리오의 아무런 위험없이 이 문제를 해결할 것이다. 단계 S9에서, TCP 세그먼트는 드롭되고, 세그먼트 수신은 확인되지 않는다.
단계 S13이 아니오로 되면, 즉, 중간 또는 최종 DDP 세그먼트(112)가 CRC 무 효를 야기하지 않았으면, 이것은 최종 DDP 세그먼트(112)의 MPA 길이 필드(114)가 TCP 세그먼트(106) 경계를 초과한다, 즉 최종 DDP 세그먼트가 TCP 세그먼트(106) 경계의 밖에 있거나, 너무 길다는 것을 나타낸다. 이 경우에, InLogic(32)은 너무 긴 단일 DDP 세그먼트(112)와 동일한 상황을 다룬다. 특히, InLogic(32)은 단계 S3에서, 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)(도 2c)을 통한 이 CRC의 검증을 포함할 수 있다. CRC 계산 및 검증에 대한 한가지 특정 실시예는 더욱 상세하게 후술될 것이다.
A. 제한된 재전송 시도 모드
검출된 에러의 원인 불명(예를 들어, 그러한 상황을 초래할 수 있는 하나의 예시적인 판정인 도 3의 단계 S10에서의 아니오)과 관련된 대안적인 실시예로서, " 제한된 재전송 시도 모드"는 교착상태를 방지하고 SLOW 접속으로 불필요하게 감소되는 FAST 접속의 수를 줄이기 위해 재전송 시도의 수를 제한하도록 구현될 수 있다. 특히, 전술한 바와 같이, C, D 및 E의 경우는 검출된 에러의 원인 불명으로 인해, DDP 세그먼트(112) 얼라인먼트의 손실이 없고, 데이터 손상에 의해 에러가 야기되었을 때 [OutLogic(40)에 의해] 잠재적으로 접속이 종료되는 SLOW 접속으로 접속이 다운그레이드될 수 있다(단계 S3).
재전송 시도의 수를 제한하기 위해, 본 발명은 접속을 다운그레이드하기 전에 소정 수의 재전송을 가능하게 하기 위해 추가 필드를 접속 문맥(42)(도 2b)에 제공한다. 특히, 도 2b에 도시된 바와 같이, 접속 문맥(42)은 다수의 회복 시도 필드(RecoveryAttemptsNum)(292), 최종 회복 순서 번호 필드(LastRecoverySN)(294) 및 최대 회복 시도 수 필드(MaxRecoveryAttemptsNum)(296)를 포함하는 한 세트의 필드(290)를 포함한다. RecoveryAttemptsNum 필드(292)는 최종 갱신 이후로 접속을 위해 행해진 회복 시도의 수를 유지하고; LastRecoverySN 필드(294)는 마지막으로 시작된 회복 동작의 순서 번호(SN)를 유지하며; MaxRecoveryAttemptsNum 필드(296)는 접속을 다운그레이드하기 전에 InLogic(32)에 의해 행해져야 되는 최대 회복 시도의 수를 정의한다.
도 4a를 참조하면, 동작시, 새로운 순서로 수신된 데이터 전송이 (일반적으로 도 4a에서 단계 S101로 도시된) 에러를 포함한다는 것을 InLogic(32)이 검출할 때, (도 3의 단계 S3에서) 접속을 SLOW 접속으로 바로 다운그레이드하는 것보다는 오히려, InLogic(32)은 그 에러가 포함된 데이터 전송에 대해 행해질 확실한 재전 송 수를 제공한다. 단계 S101은 비얼라인된 DDP 세그먼트(112NA) 또는 데이터 손상에 의해 야기되는 다수의 에러 판정에 일반적이라는 것을 알기 바란다(단계 S101은 예를 들어, 도 3의 단계 S5에서 예이거나 도 3의 단계 S10에서 아니오인 경우에 적용할 수 있다). 단계 S102에서, InLogic은 1씩 증가하는 RecoveryAttemptsNum에 의해 이 에러가 포함된 데이터 전송을 위해 이 전송 시도를 기록하는 처리를 한다. 또한, InLogic은 이전에 거기에 저장된 순서 번호와 새로 수신된(하지만 드롭된) 데이터 전송의 순서 번호 사이의 가장 큰 순서 번호를 저장하기 위해 LastRecoverySN을 갱신한다. 즉, InLogic은 최소한 하나의 이전에 수신된 에러-포함 데이터 전송과 새로 수신된 에러-포함(하지만 드롭된) 데이터 전송 사이의 가장 큰 순서 번호를 저장하기 위해 LastRecoverySN을 갱신한다. 새로 수신된 에러-포함 데이터 전송은 새로 수신된 에러-포함 데이터 전송의 순서 번호를 저장된 가장 큰 순서 번호와 비교함으로써 가장 큰 순서 번호보다 큰 순서 번호를 갖도록 결정된다. LastRecoverySN 기록의 중요성은 아래에서 명백해질 것이다.
다음에, 단계 S103에서, InLogic(32)은 RecoveryAttemptsNum[필드(292)]가 MaxRecoveryAttemptsNum[필드(296)]를 초과하는지 판정한다. 아니오이면, 단계 S104에서, InLogic(32)은 TCP 세그먼트(106)를 드롭하고 성공적 수신을 확인하지 않는데, 이것은 TCP 세그먼트의 재전송의 원인이 된다. 그 다음, 처리는 단계 S1(도 3)로 되돌아간다. TCP 세그먼트(106)가 손상되었으면, 재전송은 데이터 전송(14A)이 (도 3의 단계 S7에서) FAST 접속으로 메모리에 직접 배치되도록 손상을 치료해야 한다. 대안적으로, 처리가 다른 에러 검출(예를 들어, 도 3의 단계 S10) 을 계속 보고하면, RecoveryAttemptsNum[필드(292)]는 결국 MaxRecoveryAttemptsNum[필드(296)]를 초과할 것이고, 단계 S106에서 예로 되게 할 것이다. 이 경우에, InLogic(32)은 단계 S105로 진행하여, InLogic(32)이 접속을 SLOW 접속으로 다운그레이드하고, 에러-포함 데이터 전송(14A)을 재조립 버퍼(34)에 배치하며, 이 TCP 세그먼트의 성공적 수신을 확인하는 Ack를 스케쥴링한다. 상기 프로세스는 각각의 에러-포함 데이터 전송마다 발생한다.
도 4b는 데이터 손상이 보통 다수의 연속적인 TCP 세그먼트에서는 발생하지 않지만, 비얼라인된 세그먼트가 몇개의 후속 TCP 세그먼트에 영향을 줄 수 있다는 사실에 대처하는 제한된 재전송 시도 모드의 다른 요소를 나타낸 것이다. 예를 들어, FAST 접속은 긴 기간동안, 예를 들어, 5시간 동안 유지될 수 있고, 때때로, 예를 들어 한시간에 한번, CRC 검증이 실패로 되게 할 데이터 손상을 가질 수도 있다. 이러한 일이 발생할 때, RecoveryAttemptsNum[필드(292)]는 에러-포함 데이터 전송(즉, 손상된 세그먼트)이 드롭될 때마다 증가될 수 있다. 이 프로세스는 서로 다른 세그먼트가 서로 다른 기간에 데이터 손상으로 드롭되는 상황에 대처하고, 몇몇(대개는 하나)의 재전송 동작 후에, 이들 세그먼트는 성공적으로 수신되고, 메모리에 배치된다. 따라서, 이들 세그먼트를 위한 회복 동작은 성공적으로 완료되었고, 회복된 데이터 손상의 경우들은, 즉 새로운 에러 세그먼트의 수신으로 인해 새로운 회복 모드로 들어갈 때는, 카운트되지 않는다.
제한된 재전송 시도 모드로부터 빠져나가기 위해, 새로 수신된 순서적인 데이터 전송(즉, InOrderTCPSegmentSN)의 TCP 세그먼트 순서 번호(SN)가 LastRecovery 순서 번호(SN)[도 2b에서의 필드(294)]보다 큰 지의 여부에 관한 판정은 단계 105에서 행해진다. 즉, FAST 접속에 속하는 각각의 새로 수신된 순서적인 TCP 세그먼트의 순서 번호는 하나 이상의 이전에 수신된 에러-포함 데이터 전송으로부터 선택된 저장된 가장 큰 순서 번호와 비교된다. (더 큰 SN을 갖는 비순서적인 세그먼트의 수신은 에러 회복이 완료되었다는 것을 의미하는 것이 아니라는 것을 알기 바란다.) 그러나, 회복이 완료되는 한 표시기는 회복 모드로의 엔트리를 야기한 세그먼트 후에 전송된 TCP 세그먼트가 수신된다는 것이다. 이 상황은 InOrderTCPSegmentSN을 LastRecoverySN과 비교함으로써 판정될 수 있다. 이 판정은 이 접속을 위해 수신된 TCP 세그먼트의 실제로 임의의 처리 단계에서 행해질 수 있다. 예를 들어, 도 3의 단계 S9 이후, 또는 도 4a의 단계 102 이전이다. 순서적인 세그먼트 SN이 LastRecoverySN보다 클 때, 즉 새로운 TCP 세그먼트가 수신되고, 단계 S105에서 예가 판정될 때, 단계 S106에서, RecoveryAttemptsNum[도 2b에서의 필드(292)]는 리셋, 즉 0으로 설정된다. 상기 예와 관련하여, 단계 S105는 긴 기간, 예를 들어 5시간 이후에 (즉, RecoveryAttemptsNum이 MaxRecoveryAttemptsNum을 초과하기 때문에) SLOW 접속으로의 FAST 접속의 불필요한 다운그레이딩을 방지하는데, 드롭된 세그먼트는 데이터 손상으로 인해 드롭되었고, 그 다음 송신기가 세그먼트를 재전송한 후에, 얼라인된 세그먼트로서 성공적으로 수신되어 처리되었다. 단계 S105에서 아니오인 경우 또는 단계 S106 이후에, 세그먼트 처리는 평소대로, 예를 들어 도 3의 단계 S1과 같이 진행된다.
상기 처리를 사용하면, 허용된 재전송의 수는 MaxRecoveryAttemptsNum 필 드(296)의 설정에 의해 사용자 정의될 수 있다. 제한된 재전송 시도 모드가 도 4a-4b와 관련하여 설명되고, 도 3의 단계 S10에 관한 에러 검출과 관련하여 설명되었지만, 제한된 재전송 시도 모드는 아래에 더욱 설명되는 바와 같이, 단계 S10의 에러 검출 바로 이후로 적용될 수 있다는 것을 알기 바란다. 제한된 재전송 시도 모드는 또한, 세그먼트가 ULP 고려사항으로 인해 드롭되었을 때 즉시 복제 Ack를 보내는, 후술된 D 부분의 TCP 재전송 처리 속도의 증가와 함께 사용하는 것이 유리하다는 것을 알기 바란다.
B. 접속 다운그레이딩
도 5를 참조하면, 하나 이상의 비순서적으로 수신된 DDP 세그먼트(112)가 고속 경로 모드에서 수신지 데이터 버퍼(50)에 배치된 후에 접속이 다운그레이드되는 (도3의 단계 S3) 유일한 상황의 처리조작에 관해 이제 설명될 것이다. 도 5에 도시된 바와 같이, 4개의 TCP 세그먼트 표시된 패킷(Pkt)은 비순서적으로, 즉, 3, 4, 1 및 2의 순서로 수신된다. 접속이 SLOW 접속으로 다운그레이드될 때, 다운그레이딩 순간부터 수신된 모든 데이터는 재조립 버퍼(34)에 배치되고, 순서적으로, 즉 Pkt 1, 2, 3 및 4와 같이 재조립된다. 이 경우에, TCP 프로토콜을 따라, InLogic(32)은 그러한 세그먼트들이 수신되었다는 기록을 유지한다.
드물긴 하지만, 세그먼트(들), 예를 들어 Pkt #3(어두운 부분)이 수신지 데이터 버퍼(50)에 바로 배치되는 상황이 발생할 수 있다. 이러한 상황은 InLogic(32)이 모든 데이터가 수신되었다고 추정한다 하더라도, 재조립 버퍼(34) 내의 위치가 '불필요한(garbage)' 데이터, 즉 갭 또는 홀로 채워져 있는 패킷 3(Pkt #3)을 통상적으로 갖고 있을수 있게 한다. 처리가 계속 수정될 수 없게 되면, OutLogic(40)이 재조립 버퍼(34)를 수신지 데이터 버퍼(50)에 전송할 때, 고속 경로 모드 상에서 보다 일찍 전송되었던 패킷 3(Pkt #3)은 '불필요한' 데이터로 덮어 쓰여질 것이고, 이것은 데이터를 손상시킬 것이다.
하드웨어 복잡도를 추가하지 않고 이 문제를 해결하기 위해, 대안적인 실시예에서, InLogic(32)은 접속이 FAST 접속이었을 때 비순서적으로 수신된 세그먼트(즉, 도 5의 Pkt #3)에 대해 잊어버리도록 TCP 로직에 명령한다. 특히, InLogic(32)은 단계 S3(도 3)에서 접속을 SLOW 접속으로 다운그레이드할 때 비순서적으로 배치된 데이터 전송을 위한 TCP 홀을 소거하도록 구성되고, 이들 패킷이 수신된 송신기로의 수신 보고(SACK 옵션)를 정지한다. 결과적으로, 송신기는 수신지 데이터 버퍼(50)에 비순서적으로 직접 배치된 세그먼트(들), 즉 Pkt #3을 포함하는 모든 응답없는 데이터를 재전송한다. 재전송된 데이터는 수신될 때, 재조립 버퍼(34)에 기입되고, 임의의 비순서적으로 직접 배치된 세그먼트들은 OutLogic(40)이 재조립 버퍼(34)로부터 데이터를 전송할 때 수신지 데이터 버퍼(50)에서 덮어 쓰여진다. 이 기능은 RNIC(16)가 이와 관련하여 수신지 데이터 버퍼(50)에 비순서적으로 배치된 세그먼트를 '드롭'한다는 것을 사실상 의미한다. 그러한 방법은 재조립 버퍼(34) 내의 '갭이 있는' 순서적 스트림의 경우를 제거해서, 그러한 동작을 초래할 수 있는 드문 조건으로 인한 가시적인 성능 저하를 야기하지 않는다.
C. 접속 업그레이드
다른 대안적인 실시예로서, 본 발명은 도 6에 도시된 바와 같은 접속 업그레 이드 절차를 포함할 수 있다. 전술한 고속 경로 모드의 목적은 얼라인 DDP 세그먼트(112)를 전달하는 접속을 위해 재조립 버퍼(34)의 바이패스를 허용하기 위한 것이다. 그러나, FAST 접속에서조차, 데이터 소스(12) 또는 중간 네트워크 장치는 간헐적인 비얼라인된 DDP 세그먼트를 생성할 수 있는데, 이것은 전술한 기술에 따라 FAST 접속이 SLOW 접속으로 다운그레이드되게 한다. 간헐적인 동작은, 예를 들어 TCP 재전송 동안의 최대 세그먼트 크기(MSS) 변경, 또는 그외 다른 산발적인 시나리오에 의해 야기될 수 있다.
도 6에 도시된 바와 같이, 이 상황으로부터 회복하기 위해, 본 발명은 또한, 예를 들어 단계 S3(도 3)에서, 보다 이른 다운그레이드 후에 SLOW 접속에서 FAST 접속으로의 접속 업그레이드를 제공할 수 있다. 업그레이드를 수용하기 위해서는, 여러 상황이 있어야 된다. 대안적인 실시예의 제1 단계 S31에서, InLogic(32)은 재조립 버퍼(34)가 비었는지 판정한다. 아니오이면, 업그레이드가 발생하지 않는다(단계 S32). 단계 S31에서 예가 판정되면, 단계 S33에서, InLogic(32)은 얼라인된 DDP 세그먼트(112)가 수신되고 있는지 판정한다. 아니오이면, 업그레이드가 발생하지 않는다(단계 S32). 단계 S33에서 예가 판정되면, 단계 S34에서, InLogic(32)은 접속이 송신기, 예를 들어 데이터 소스(12)에 의해 FAST 접속으로 시작되었는지 판정한다. 단계 S24에서 아니오가 판정되면, 업그레이드가 발생하지 않는다(단계 S32). 단계 S34에서 예가 판정되면, 접속은 FAST 접속으로 업그레이드된다(단계 S35).
D. TCP 재전송 처리의 속도 상승
다른 대안적인 실시예는 TCP 세그먼트(106)가 수신되지만, RDMA 또는 ULP 고려사항, 예컨대 손상, DDP 세그먼트의 무효 CRC 등등으로 인해 드롭되는 상황에 대처한다. 전술한 절차에 따르면, TCP 세그먼트(106)가 수신되고 TCP 체크섬을 보냈지만, 세그먼트를 커버하는 TCP Ack를 송신하지 않고 InLogic(32)에 의해 드롭되는 경우(즉, 도 3의 단계 S9)가 여러번 있다. 이 때, 종래의 절차는 그들 패킷의 재전송을 시도하려고 했다. 특히, 기본 방식(소위, "Reno 프로토콜")에서, TCP 송신기는 3개의 복제된 Ack(즉, 순서대로 수신된 순서 번호를 증가시키지 않는 Ack)를 얻을 때 '고속 재전송' 모드를 시작한다. 예를 들어, 2개의 TCP 세그먼트 A와 B가 있는데, TCP 순서로 세그먼트 A가 세그먼트 B의 다음에 온다고 하자. 세그먼트 A가 드롭되면, 수신기는 세그먼트 B를 수신할 때만 복제 Ack를 보낼 수 있다. 이 복제 Ack는 "나는 세그먼트 A를 기다리고 있지만, 다른 세그먼트, 즉 세그먼트 B를 수신했다"는 것을 나타낼 수 있다. Reno 프로토콜 하의 '고속 재전송' 모드에서, 송신기는 하나의 세그먼트를 보낸 다음에, 다른 패킷을 재전송하기 위해 다른 3개의 복제 Ack를 기다린다. ("새로운-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)가 아직 수신되지 않았을 지라도 (예를 들어, 상기 예에서 세그먼트 A에 대한) 복제 Ack의 생성을 효과적으로 할 것이므로, 전술한 재전송 규칙 하에서 송신기가 고속 경로 모드로 재진입하는 처리의 속도를 증가시킬 수 있다. 더욱 구체적으로, 세그먼트 B가 수신되지 않은 경우라도, 송신기는 유효 TCP 세그먼트인 세그먼트 A가 ULP 고려사항으로 인해 수신되어 드롭되었다는 것을 알 수 있다. 결과적으로, 추가 복제 Ack는 재전송이 시작되기 전에 다수의 복제 Ack가 수신되어야 하는 경우에 송신기가 더 빨리 재전송 절차를 시작하게 한다. 이 방법은 TCP 세그먼트(106)가 ULP에 성공적으로 도달되었고, ULP 고려사항(무효 CRC)으로 인해 드롭되었기 때문에, TCP 원칙을 위반하지 않는다. 그러므로, 패킷은 IP 프로토콜에 의해 드롭 또는 재순서화되지 않았다. 이 방법은 RNIC(16)가 도 4a와 관련하여 개략적으로 나타낸 바와 같은 제한된 재전송 시도 모드를 구현할 때, 즉 단계 S103에서 Ack가 보내질 때, 특히 유익하다.
E. CRC 계산 및 검증
착신 이더넷 프레임의 종래의 처리는 필터링 프로세스에서 시작한다. 필터링하는 목적은 유효 이더넷 프레임을 무효 이더넷 프레임으로부터 분리하기 위한 것이다. "무효 프레임"은 손상된 프레임이 아니라, RNIC(16)에 의해, 예를 들어 MAC 필터링-MAC 주소에 기초한 프레임 선택, 가상 구내 정보 통신망(VLAN) 필터링-VLAD 태그에 기초한 프레임 선택 등에 의해 수신되지 않아야 되는 프레임이다. RNIC(6)로 들어가도록 허용된 유효 프레임은 또한 상이한 유형으로 분리된다. 이들 유형 중의 하나는 TCP 세그먼트이다. 필터링 프로세스는 전체 이더넷 프레임의 저장-전송 처리를 조금도 실행할 필요없이, 실행중에 행해진다.
TCP 세그먼트 처리의 다음 단계는 TCP 체크섬 계산 및 검증이다. 체크섬 계산은 소정의 알고리즘을 사용하여 통상적으로 데이터 블럭 내의 이진 값을 사용하는 송신시의 값을 계산하고, 수신시와 동일한 방식으로 계산된 값과 비교하기 위해 결과를 데이터와 함께 저장함으로써, 데이터가 에러없이 전송되었는지 판정한다. 체크섬 계산 및 검증은 전체 TCP 세그먼트가 전체 TCP 세그먼트 페이로드를 커버하기 때문에 전체 TCP 세그먼트의 저장-전송 처리를 필요로 한다. 종래, 순환 용장 검사(CRC)의 계산 및 검증은 통상적으로 TCP 체크섬 검증의 다음에 오는데, 즉 접속이 RDMA 접속으로 인식된 다음, 및 DDP 세그먼트의 경계가 이전의 DDP 세그먼트 또는 MPA 마커의 길이를 사용하여 검출된 다음이다. CRC 계산 및 검증은 피제수로서 사용된, 즉 고정된 제수에 의해 나누어지는, 메시지를 선정된 길이로 나눔으로써 데이터가 정확하게 전송되었는지 판정한다. 계산의 나머지는 수신기에 의해 행 해진 동일한 계산과의 비교를 위해 메시지에 첨부된다. CRC 계산 및 검증은 또한 전체 DDP 세그먼트의 저장-전송을 필요로 하는데, 이것은 지연을 증가시키고, 저장을 위해 큰 데이터 버퍼를 필요로 한다. CRC 계산의 한가지 요구사항은 이전의 DDP 세그먼트의 길이를 사용하거나 MPA 마커(도 1b)를 사용하여 판정되는 DDP 세그먼트 경계를 아는 것이다. 마커 기반의 판정은 다수의 예외 및 난처한 경우로 인해 매우 복잡해진다. 부분적으로 수신된 DDP 세그먼트의 CRC 계산도 또한 복잡한 프로세스이다.
상기 문제들에 대처하기 위해, 도 2c에 도시된 바와 같이, 본 발명은 동일한 저장-전송 버퍼(68)를 사용하여 TCP 체크섬 로직(66)을 통한 TCP 체크섬 계산 및 검증과 동시에 CRC 로직(64)을 통한 CRC 계산 및 검증을 실행한다. 또한, 본 발명은 DDP 세그먼트 경계의 위치를 바로 찾지 않고, 이때 DDP 세그먼트 CRC를 계산하고 검증한다. 오히려, 본 발명은 CRC를 계산하고 나중에 DDP 경계를 판정함으로써 동작의 순서를 변경한다. 이러한 변경을 하기 위해, CRC 로직(64)은 (세그먼트가 RDMA 접속에 속한다는 것이 알려지기 전에) 각 TCP 세그먼트가 얼라인된 DDP 세그먼트에서 시작하는 것으로 가정한다. 또한, 본 발명은 처음의 2바이트의 TCP 페이로드(127)(도 1b)가 MPA 프레임의 MPA 길이 필드(114)(도 1b)라고 가정한다. 이 길이는 DDP 세그먼트 경계를 식별하고 그 세그먼트에 대한 CRC를 계산하기 위해 다음에 사용된다. 검증 유닛(44)은 TCP 세그먼트(106) 내의 처음의 가능한 DDP 세그먼트(112)의 경계를 식별한 후에, 그 DDP 세그먼트에 대한 CRC를 TCP 세그먼트 페이로드(127)의 그 부분에 대한 체크섬 계산과 동시에 계산하고 검증한 다음에, 동일 한 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 바이트마다 떨어져 배치되고, 제1 MPA 마커는 접속 문맥(42)의 StartNum 필드(248)(도 2b)로서 저장되는 TCP 헤더(126)(도 1b) 내의 초기 순서 번호로부터 512 바이트에 있다. 불행히도, 각 MPA 마커(110)의 평가는 StartNum(248)(도 2b)과 관련된 자신의 위치를 드러내지 않는다. 또한, MPA 마커(110)는 CRC 데이터(116)에 의해 커버되지만, MPA 프레임의 페이로드만을 포함하는 MPA 길이 필드(114) 내에 포함되지 않는다. 따라서, MPA 마커(110)를 식별하기 위해, RNIC(16)는 접속 문맥(42)으로부터 페치되어야 하는 StartNum(248)(도 2b)을 알 필요가 있다. 불행히도, 접속 문맥(42)의 판독은 처리시에 매우 빨리 발생하고, 패킷 처리를 중단시키거나 정지시키기 때문에, TCP 처리 동안에 행하기가 매우 불편하다.
접속 문맥(42) 페칭을 줄이거나 없애기 위해, 본 발명은 DDP 세그먼트의 MPA CRC를 계산하고 검증하기 위해 요구되는 DDP 세그먼트(112) 길이의 정확한 계산을 가능하게 하는 4가지 대안을 제시한다.
1. 접속 문맥 프리페치(prefetch) 방법
DDP 세그먼트(112) 길이를 정확하게 계산하는 제1의 대안적인 실시예는 StartNum 필드(248)(도 2b)로서 저장된 초기 순서 번호의 접속 문맥(42) 프리페치를 구현하는 것을 포함한다. 여기에서는 MPA 스펙에 대한 어떤 변경도 제안되지 않는다. 현재의 MPA 스펙은 TCP 세그먼트(106) 내의 MPA 마커(110)의 위치를 식별하기 위해 초기 순서 번호(StartNum)의 지식을 요구한다. 초기 순서 번호는 접속마다 변하는 TCP 접속 속성이고, 접속 설정시에 절충된다. 그러므로, StartNum(248)(도 2b)은 각 접속별로 유지된다. MPA 마커(110)의 위치를 식별하기 위해, CRC 로직(64)(도 2c)은 특정 세그먼트의 순서 번호(SeqNum) 및 StartNum의 나머지 (SeqNum - StartNum) 모드(512)가 제로(0)인지 검사한다. 즉, 각각의 TCP 세그먼트(106) 헤더가 자신의 페이로드의 제1 바이트의 순서 번호를 갖고 있기 때문에, CRC 로직(64)은 특정 세그먼트의 순서 번호와 StartNum(248) 사이의 차를 구함으로써 마커를 찾는 곳을 결정한 다음에, 이 위치에서부터 시작하여 512 바이트마다 마커를 위치시킬 수 있다. MPA 스펙은 전술한 마커 검출 방법을 정의한다. 이러한 방식으로, [TCP 투플(tuple)에 기초한] 해시 룩업(Hash lookup) 및 접속 문맥(42) 프리페치는 TCP 체크섬 검증이 실행되기 전에 실행될 수 있다. 이것은 정상 접속 문맥(42) 페치 흐름이다. RNIC(16)는 접속 문맥(42)을 획득하고 싶으면, 먼저 이 문맥이 위치한 곳을 알아내거나 접속 ID를 획득할 필요가 있다. TCP 세그먼트(106) 헤더는 TCP 투플[IP 주소(소스 및 수신지) 및 TCP 포트(소스 및 수신지)]를 갖고 있다. 투플은 해시 함수로의 입력이다. 해시 함수의 출력은 접속 ID이다. 물론, 상 이한 투플에 대한 동일한 접속 ID는 "충돌"이라고 하는 결과를 초래할 수 있다. 충돌을 조정하기 위해, RNIC(16)는 접속 문맥(42)을 판독하고, 접속 문맥(42) 내의 투플을 패킷 내의 투플과 대조하여, 일치하지 않으면, RNIC(16)가 다음 접속 문맥(42)에 대한 포인트를 얻는다. RNIC(16)는 일치하는 것을 찾을 때까지, 또는 세그먼트가 임의의 공지된 접속에 속하지 않는 것으로 인식될 때까지, 투플을 계속 검사한다. 이 프로세스는 TCP 스트림 내의 MPA 마커(110)의 위치를 알 수 있게 한다. 결과적으로, CRC 계산 및 검증은 TCP 체크섬 검증과 동시에 실행될 수 있다.
2. 초기 순서 번호 절충 방법
제2의 대안적인 실시예에서, 정확하게 DDP 세그먼트 길이를 계산하는 것은 MPA 스펙에 다수의 변경을 가함으로써 접속 문맥 페칭없이 가능하다. 먼저, MPA 스펙 내의 MPA 마커(110) 배치의 정의가 변경된다. 전술한 접속 문맥 프리페치 방법의 한가지 단점은 TCP 세그먼트(106) 내의 MPA 프레임(109)의 경계를 식별하기 위해 해시 룩업 및 접속 문맥(42) 프리페치를 실행할 필요가 있다는 것이다. 이것을 방지하기 위해, 본 발명은 초기 순서 번호(SN)[StartNum(248)으로서 저장됨]에서 시작한 512 바이트마다가 아니라, 512 바이트마다 MPA 마커(110)를 배치한다(이것은 전술한 SN-StartNum 모드(512) 처리를 필요로 한다). 이러한 형태로, MPA 마커(110) 위치는 MPA 마커(110)를 위치시키기 위한 순서 번호 모드(512) 프로세스에 의해 결정될 수 있고, 접속 문맥(42) 페치는 요구되지 않는다.
이 실시예에 따른 MPA 스펙에 대한 제2 변경은 하나의 마커가 2개의 DDP 세그먼트(112)로 분할되는, 즉 초기 순서 번호가 워드-얼라인되지 않는 상황을 방지 하는 작용을 한다. 결과적으로, 순서 번호 모드(512) 프로세스는 표준 TCP 구현이 랜덤하게 생성된 바이트-얼라인된 값을 초기 SN이 가질 수 있게 하기 때문에 모든 상황에서 행해질 수는 없다. 즉, 초기 순서 번호가 워드-얼라인되는 지의 여부는 RNIC(16)에 의해 제어불가능하다. 결과적으로, 주어진 접속에 대한 TCP 스트림은 반드시 MPA 마커(110)에서 시작할 필요는 없다. 따라서, CRC 로직(64)이 순서 번호 모드(512) 프로세스만을 사용하여 마커(110)의 위치를 선택한다면, CRC 로직(64)은 받아들일 수 없는 바이트 얼라인된 위치에 배치된 마커를 획득할 지도 모른다. 이러한 상황을 피하기 위해, 본 발명은 워드-얼라인된 RDMA 모드로 이동할 때 RDMA 접속의 초기 SN을 작성하기 위해, 소위 "MPA 요청/응답 프레임"이라고 하는, MPA 절충 단계 동안에 교환된 MPA 프레임에 패딩(padding)을 추가한다. 즉, 도 7에 도시된 바와 같이, 수정 팩터(factor)(150)는 워드-얼라인된 초기 SN을 작성하는데 필요한 바이트의 수를 포함하는 TCP 세그먼트(106)의 MPA 요청/응답 프레임(152)으로 삽입된다. 수정 팩터(150)의 정확한 위치는 도시된 바와 같이 될 필요는 없다는 것을 알기 바란다. 이러한 방식으로, CRC 로직(64)은 접속 문맥 페치없이 TCP 스트림 내의 MPA 마커(110)의 정확한 위치를 얻기 위한 순서 번호 모드(512)를 구현할 수 있다. MPA 스펙의 전술한 변경을 사용하여, 본 발명은 MPA 마커(110)를 위치시킬 수 있고, 접속 문맥(42)을 프리페치하지 않고 MPA 세그먼트의 길이를 적절하게 계산할 수 있다.
3. MPA 길이 필드 변경 방법.
접속 문맥 페칭없이 DDP 세그먼트(112) 길이를 정확하게 계산하는 제3의 대 안적인 실시예에서는, MPA 길이 필드(114)의 정의가 MPA 스펙에서 변경된다. 종래, MPA 길이 필드(114)는 MPA 계층에 의해 추가된, 각 MPA 프레임(109)의 ULP 페이로드의 길이, 배제 마커(110), 패딩(121)(도 1b) 및 CRC 데이터(116)를 포함하도록 정의된다. 불행히도, 이 정보로는 TCP 세그먼트(106)에 의해 제공된 정보를 사용하여 MPA 프레임 경계의 위치를 알 수 없다. 이것에 대처하기 위해, 대안적인 실시예에 따르면, MPA 스펙 내의 MPA 길이의 정의는 MPA 길이 필드(114)의 14개의 최상위 비트(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 페이로드 길이를 갖는 ULP(DDP 계층)를 제공한다.
도 8을 참조하면, MPA 길이의 이 정의를 사용하여, CRC 로직(64)은 다음과 같은 프로세스에 의해 MPA 프레임(109)의 경계의 위치를 알아낸다: 단계 S100에서, CRC 로직(64)은 MPA 프레임(109)의 제1 워드가 0과 같은지 판정한다. 예이면, InLogic(32)(도 2a)은 다음 워드로부터 MPA 길이 필드(114)를 판독한다(단계 S102). 이것은 마커(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를 계산하고 검증하는 것으로 한다. 그러나, 이 실시예가 갖는 차이점은 MPA 헤더의 MPA 길이 필드가 주어지면, DDP 세그먼트 길이를 계산할 때 마커를 고려할 필요가 없다는 것이다.
도 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)은 TCP 체크섬 로직(66)과 동일한 저장-전송 버퍼(68)를 사용하여, 하지만 접속 문맥(42)을 페치하지 않고, 실행중에 계산되고 검증된 자신의 CRC를 갖는다. 접속이 SLOW 접속인지 여부의 판정 또한 완료될 수 있다(도 3에서와 같은 단계 S2 및 S3). 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의 경우: MPA 프레임(109)이 (도 3의 단계 S8에서 판정된 바와 같이) 이전에 수신된 세그먼트(및 검증된) MPA 프레임(109)의 길이에 의해 표시되는 때이고; B의 경우: 그 밖의 모든 경우이다. A의 경우에, MAP 프레임(109)은 손상되고, 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)를 가질 수 있는[송신기가 패킹(packing) 옵션을 실행하는] 경우, 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와 대조적으로, 기능은 도 3에 비해 훨씬 더 간단해진다. 명확하게 하기 위해, InLogic(32) 기능이 도 3과 관련하여 전술한 것과 거의 유사한 경우에, 단계들은 반복되었고, 점선 박스로 도시되었다.
도 10에서, 단계 S151-S153은 도 3의 단계 S1-S3과 거의 동일하다. 단계 S154에서, InLogic(32)은 CRC 검증을 통과했는지 판정한다. 이 평가는 DDP 세그먼트 당 표시를 제공하는 대신에, CRC 로직(54)이 수신된 TCP 세그먼트 내의 모든 DDP 세그먼트의 CRC 검증의 성공 또는 실패를 나타내는 CRCValidationPassed 비트를 제공한다는 점에서 도 3의 단계 S4와 다르다. 이 비트는 수신된 TCP 세그먼트 내에 포함된 모든 DDP 세그먼트에 대해 CRC 검증이 통과한 경우에 설정되고, CRC 검증이 세그먼트들 중의 하나에 대해 실패했거나, 최종(전용) 세그먼트가 너무 긴 경우에 소거된다. 아니오이면, InLogic(32)은 단계 S155로 진행하여, RecoveryAttemptsNum[도 2b의 필드(292)]가 MaxRecoveryAttemptsNum[도 2b의 필드(296)]보다 큰 지의 여부에 관한 판정이 이루어진다. 예이면, InLogic은 단계 S153으로 진행하여, DDP 세그먼트가 재조립 버퍼(34)에 배치되고, Ack가 송신되며, 접속이 (FAST 접속이었으면) SLOW 접속으로 다운그레이드된다. 단계 S155에서 아니오이면, 단계 S156에서, TCP 세그먼트(106)는 드롭되고, 확인이 스케쥴링되지 않는다. 또한, RecoveryAttemptNum[도 2b의 필드(292)]은 1씩 증가되고, LastRecoverySN[도 2b의 필드(294)]은 갱신된다.
단계 S154로 돌아가서, 판정이 예로 되면, InLogic(32)은 단계 S157에서, 새로 수신된 순서적 데이터 전송의 순서 번호(순서적 SN)가 LastRecoverySN[도 1b의 필드(294)]보다 큰 지의 여부를 판정하는 처리를 한다. 예이면, 단계 S158에서, InLogic(32)은 RecoveryAttemptsNum[도 1b의 필드(292)]을 소거하고, 즉 0으로 설정한다. 단계 S157에서 아니오이면, 또는 단계 S158에 후속하여, 단계 S159에서, 세그먼트는 세그먼트를 수신지 데이터 버퍼(50)에 배치함으로써 "고속 경로 모드" 상에서 처리된다. 단계 S159는 또한 RCP 재전송 속도증가 옵션과 관련하여 전술한 바와 같이, 복제 Ack의 구현을 포함할 수 있다.
전술한 도 10의 실시예는 본 발명의 컷-스루 모드 외에도, 제한된 재전송 시도 모드 및 TCP 재전송 속도 상승 옵션을 MPA 마커의 사용없이 구현한다.
Ⅲ. OutLogic
OutLogic(40)(도 2a)은 RDMA 메시지마다 정보를 유지하지 않고 RDMA 메시지 들의 순서적 전달을 실행한다. 처리되는 2가지 상황이 있다: 1) 송신 메시지를 제외한 모든 RDMA 메시지에 대한 경우, 및 2) RDMA 송신 메시지에 대한 경우.
도 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 세그먼트(22)를 소비한다. RNIC(16)는 RDMA 판독 메시지(204)를 수신하면, RDMA 판독 응답 WQE(216RR)를 판독 큐(214)에 포스트한다. 다른 예에서, 도 1f를 참조하면, 각각의 송신 메시지(200)는 응답기, 즉 데이터 싱크(18)(도 2a)의 수신 큐(RQ)(212)에 배치된다. 전술한 바와 같이, 각각의 수신 큐(RQ)(212)는 제어 명령어가 배치되는 버퍼이고, 페이로드가 배치되는 WQE(216R)를 포함한다. 수신 큐(RQ)(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이 배치된다. 이 배치는 RDMA 판독 요청 메시지(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) 뒤에 도달하면, 이 세그먼트는 지원되지 않는 네번째 홀을 "개방"할 것이다. 결과적으로, 그 세그먼트는 드롭될 것이다.
이러한 상황에 대처하기 위해, 본 발명은 비순서적 메시지/세그먼트의 추적보다 오히려, 접속 문맥(42)(도 2a 및 2B)을 통해 TCP 홀(130)(도 12)의 추적을 구현한다. 특히, 도 2b에 도시된 바와 같이, 본 발명은 완료된 RDMA 판독 요청을 카운트하기 위한 PendingReadResponseNum 필드(300), 완료된 송신 메시지를 카운트하 기 위한 CompletedSendsNum 필드(302), 및 완료된 RDMA 판독 응답을 카운트하기 위한 CompletedReadResponseNum 필드(306)를 저장한다. 본 기술 분야에 숙련된 기술자들이 알 수 있는 바와 같이, 그 밖의 다른 필드가 각 홀에 요구될 수 있는데, 간결하게 하기 위해 그에 관한 설명은 하지 않겠다. 이 방법은 무제한 수의 비순서적으로 수신된 RDMA 메시지가 완료 및 순서적 전달을 기다릴 수 있게 한다. 이 방법은 아무런 제한없이 수신(212) 및 송신(210) 큐 둘다에 의해 완료 큐(240)(도 1f-1h)를 공유하는 능력을 제한하지 않는다. 특정 유형의 메시지를 처리조작하는 것에 관한 상세는 이제 설명될 것이다.
첫째, RDMA 기입 메시지(202)(도 1g)의 전달은 동작의 특성 때문에 응답기로의 어떤 보고나, 다른 하드웨어 로직으로의 어떤 통지도 초래하지 않는다는 것을 알기 바란다. 따라서, 이러한 유형 RDMA 메시지에 관한 전달 사항은 하나도 없다.
둘째, 도 11로 돌아가면, RDMA 판독 응답 메시지(206)와 관련하여, 이 동작은 계류중인 RDMA 판독 메시지(204)의 완료를 나타낸다. 이 경우에, 다수의 완료된 RDMA 판독 응답 메시지(206)의 각 TCP 홀(130)을 포함하는 접속 문맥(42) 내의 CompletedReadResponseNum 필드(306)(도 2b)의 저장은 계류중인 RDMA 판독 작업 요청(208R)을 완료하기에 충분한 정보를 요청기의 완료 처리 로직에 제공하기에 충분하다. TCP 홀이 닫히면, 이 홀과 관련된 완료된 RDMA 판독 응답의 수는 계류중인 RDMA 판독 작업 요청(208R)의 완료를 나타내기 위해 요청기의 완료 처리 로직에 보고된다.
RDMA 판독 요청과 관련하여, WQE(216RR) 포스트의 동작은 두 단계: 즉, 판독 큐(414)로의 WQE(216RR)의 배치, 및 RNIC(16)에게 이 WQE가 처리될 수 있다는 것을 알려주는 통지, 즉 초인종 울림을 포함한다. 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)는 판독 큐(214)로의 PendingReadResponseNum WQE(216RR)의 포스팅을 확인하기 위해 초인종을 울린다(통지한다). 이것은 모든 이전의 판독 메시지(204)가 완료되었고, RNIC(16)가 포스트된 판독 응답 WQE(216RR)의 처리를 시작할 수 있다는 것을 나타낸다.
도 13을 참조하면, RDMA 송신 메시지(500)는 유일한 상황을 나타낸다. 특히, 완료된 송신 메시지의 전달은 CQ(540)로의 CQE(542)의 배치를 포함한다. CQE(542)는 완료된 메시지를 설명하는 정보(예를 들어, 길이, 무효 STag 등)를 갖고 있다. 이 정보는 메시지 특정 정보이므로, 각각의 계류중인 송신 메시지(500)마다 유지되어야 한다. RNIC(16)는 앞에 나타낸 바와 같이, CQ(540)가 몇개의 송신(510) 및 수 신(512) 큐에 의해 공유될 수 있기 때문에, [수신된 판독 작업 요청(508R) 내의 RDMA 판독 응답 WQE(508RR)의 배치와 유사하게] 송신 메시지(500)가 완료되기 전에 CQE(542)를 배치할 수 없다.
추가 RNIC 자원을 소비하지 않고, 크기조정 가능한 구현을 제공하여, 이 문제를 해결하기 위해, 본 발명에 따른 OutLogic(40)은 CQE(542) 내에 포함될 필요가 있는 모든 정보를 그 송신 메시지(500)에 의해 소비된 WQE(516R)에 배치한다. 그 다음, 이 정보는 완료를 위한 폴(Poll-For-Completion) 요청시에 동사 라이브러리(20)(도 2a)에 의해 WQE(516R)로부터 검색된다. RNIC(16)는 대응하는 TCP 홀이 닫힐 때, CQE(542)를 CQ(540)에 포스트하기 위해 사용되는 접속 문맥(42) 내의 각 TCP 홀(130)마다 [CompletedSendsNum 필드(302) 내에] 완료된 송신 메시지(500)의 수를 유지할 필요가 있다. TCP 홀(130)이 닫히면, RNIC(16)는 CQE(542)를 CQ(540)에 배치한다. 배치될 CQE(542)의 수는 이 홀에 대해 카운트된 완료 송신 메시지(500)의 수와 같다. 이 방법은 2N 기입 동작을 수반하는데, N은 완료된 송신 메시지(500)의 수이다.
RDMA 송신 메시지(500)의 전달과 관련하여 앞에서 제시된 방법의 한가지 단점은 RNIC(16)에 의해 실행된 기입 동작의 수를 두배로 한다는 것이다. 즉, 각각의 완료된 송신 메시지(500)에 대해 WQE(516R)로의 하나의 기입이 있고, CQE(542)의 하나의 기입이 있다. 이 문제에 대처하기 위해, 도 14에 도시된 바와 같이, 본 발명의 대안적인 실시예에 따르면, CQE(542)의 내용은 특정 CQE(542)가 완료하는 WQE(516R)의 참조 카운터(544)를 갖도록 변경된다. 참조 카운터(544)는 주어진 TCP 홀(130)에 대해 완료된 송신 메시지(500)의 수로 RNIC(16)에 의해 초기화된다. 동사 라이브러리(20)는 각각의 완료를 위한 폴 동작마다, 참조 카운터(544)를 감소시키고, 카운터가 0이 되는 경우에만 CQ(540)로부터 CQE(542)를 제거한다. 또한, RNIC(16)는 WQE(516S)가 완료를 기다리는 미결 송신 메시지(500)를 임계치(M)보다 크게 유지하는 경우에만 WQE(516S)를 갱신한다. M은 구성가능한 파라미터로서, 계류중인 내향 송신 메시지(500)를 위한 정보를 유지하기 위해 할당된 내부 자원의 양을 나타낸다. M이 0이면, 임의의 비순서적으로 수신된 송신 메시지(500)는 WQE(516R)의 갱신을 필요로 한다[순서적으로 수신된 송신 메시지(500)에 대해서는 갱신을 필요로 하지 않는다].
이 실시예는 또한, 2종류의 CQE(542)를 정의하는 것, 및 CQE가 CQE의 보디(body) 내에 모든 완료 데이터를 갖고 있는 것인지, 아니면 하나 이상의 RDMA 송신 메시지와 관련된 WQE(516R) 내에 저장된 완료 정보의 나머지를 갖는 완료 데이터의 일부를 갖고 있는 것인지 나타내기 위해 CQE(542)에 표시기(546)를 제공하는 것을 포함한다. 이 대안적인 실시예는 기입 동작의 수를 N+1로 감소시키는데, N은 TCP 홀(130)이 닫히기 전에 계류중이던 완료 송신 메시지(500)의 수이다.
Ⅳ. 결론
앞의 설명에서, 방법의 단계들은 본 발명의 하나 이상의 기능적 태스크를 실행하기 위한 특수 하드웨어를 포함하는 전용 컴퓨터, 즉 유한 상태 기계에 의해 양호하게 실행된다는 것을 알 수 있을 것이다. 그러나, 방법의 단계들은 또한 메모리 내에 저장된 프로그램 제품의 명령어를 실행하는 CPU와 같은 프로세서에 의해 실행 될 수 있다. 여기에서 설명된 다양한 장치, 모듈, 메카니즘 및 시스템은 하드웨어, 소프트웨어, 또는 하드웨어와 소프트웨어의 조합에 의해 실현될 수 있고, 도시된 것과 다르게 구분될 수 있다는 것을 알 수 있을 것이다. 그것들은 임의의 유형의 컴퓨터 시스템, 또는 여기에서 설명된 방법을 실행하도록 적응된 또는 다른 장치에 의해 구현될 수 있다. 하드웨어와 소프트웨어의 전형적인 조합은 로드되어 실행될 때, 여기에서 설명된 방법을 실행하도록 컴퓨터 시스템을 제어하는 컴퓨터 프로그램을 갖는 범용 컴퓨터 시스템일 수 있다. 본 발명은 또한, 여기에서 설명된 방법 및 특징의 구현을 가능하게 하는 모든 특징을 포함하고, 컴퓨터 시스템에 로드될 때, 이들 방법 및 기능을 실행할 수 있는 컴퓨터 프로그램 제품에 내장될 수 있다. 이러한 맥락에서 컴퓨터 프로그램, 소프트웨어 프로그램, 프로그램, 프로그램 제품, 또는 소프트웨어는 정보 처리 능력을 갖는 시스템이 특정 기능을 바로, 또는 (a) 다른 언어, 코드 또는 표기로의 변환 후; 및/또는 (b) 상이한 자료형으로의 재생 후에 실행하게 하도록 되어 있는 명령어 세트의 소정의 언어, 코드 또는 표기로 된 소정의 표현을 의미한다.
본 발명은 전술한 특정 실시예와 관련하여 설명되었지만, 다수의 대안, 변경 및 변형이 본 기술 분야에 숙련된 기술자들에게 명백할 것이라는 것은 자명하다. 따라서, 전술한 본 발명의 실시예는 예시적인 것이지, 제한하고자 하는 것은 아니다. 다음의 청구범위에 정의된 본 발명의 정신 및 범위를 벗어나지 않고서 다양한 변경이 이루어질 수 있다. 특히, 단계들의 설명된 순서는 상이한 세트의 단계들에 의해 제공된 기능 또는 소정의 상황에서, 본 발명의 범위를 벗어나지 않고서 변경 될 수 있다.