KR20060112178A - Lwio 프로토콜 - Google Patents

Lwio 프로토콜 Download PDF

Info

Publication number
KR20060112178A
KR20060112178A KR1020057007528A KR20057007528A KR20060112178A KR 20060112178 A KR20060112178 A KR 20060112178A KR 1020057007528 A KR1020057007528 A KR 1020057007528A KR 20057007528 A KR20057007528 A KR 20057007528A KR 20060112178 A KR20060112178 A KR 20060112178A
Authority
KR
South Korea
Prior art keywords
server
client
computer
request
rdma
Prior art date
Application number
KR1020057007528A
Other languages
English (en)
Other versions
KR101084897B1 (ko
Inventor
아메드 에이치. 모하메드
안쏘니 에프. 보엘름
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20060112178A publication Critical patent/KR20060112178A/ko
Application granted granted Critical
Publication of KR101084897B1 publication Critical patent/KR101084897B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/10Streamlined, light-weight or high-speed protocols, e.g. express transfer protocol [XTP] or byte stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/26Special purpose or proprietary protocols or architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)
  • Information Transfer Systems (AREA)
  • Bus Control (AREA)

Abstract

RDMA-가능한 네트워크 접속들을 사용해, I/O 처리를 제1 컴퓨터로부터 제2 컴퓨터로 오프로딩하는 방법 및 시스템이 개시되어 있다. 본 방법 및 시스템은 LWIO(lightweight input/output) 프로토콜 방식으로 RDMA 접속을 통해 제2 컴퓨터상의 서버로 통신하는 제1 컴퓨터상의 클라이언트를 포함한다. 프로토콜은 일반적으로 I/O 처리 단계가 수반되는 네트워크 발견 단계를 포함한다. 발견 단계 동안, 클라이언트 및 서버는, 공유되는 RDMA-가능한 제공자들에 대한 최소 리스트를 판정한다. I/O 처리 단계 동안, 클라이언트는 상호-인증된 RDMA 채널을 통해 오프로딩하기 위한 I/O 요구들을 제2 머신으로 포스트한다. I/O 모델은, 판독 연산들은 RDMA를 사용해 구현되고 기록 연산들은 보통의 전송들을 사용해 구현되는 비대칭이다. 판독 및 기록 요구들은 폴링 모드 및 인터럽트 모드로 완결될 수 있다. 버퍼들은 크레딧 메커니즘 방식으로 관리된다.
클라이언트, 서버, RDMA, LWIO, 기록, 판독, 비대칭, 프로토콜

Description

LWIO 프로토콜 {LIGHTWEIGHT INPUT/OUTPUT PROTOCOL}
본 발명은 일반적으로 원격 파일 액세스 시스템들 및 방법들에 관한 것으로서, 보다 구체적으로는, RDMA(Remote Direct Memory Access)를 사용해 입/출력 처리를 오프로딩(offloading)하는 기술들에 관한 것이다.
컴퓨팅 환경에서는, 일반적으로, 불충분한 CPU 리소스들을 보존하는 것이 바람직하다. 애플리케이션 서버 노드들의 네트워크들과 같은, 이러한 일부 환경들의 경우, 이러한 보존이 특히 중요하다. 네트워크들이 점점 더 고속화됨에 따라, 패킷들을 처리하고 I/O 연산들을 수행하는 CPU 수요는 점점 더 증가하므로, 애플리케이션 수행은 점점 더 느려진다. 이것은, 데이터베이스들과 같이 본래부터 I/O-집약적인 애플리케이션들(I/O intensive applications)에 특히 불리하다.
이 문제를 해결하기 위한 한가지 접근은 과도한 I/O 및 네트워크 처리를 CPU로부터 오프로딩하는 것이다. NFS 또는 SMB/CIFS와 같이 분산형 파일 시스템들 및 전송 프로토콜들을 사용하는 네트워크 환경에서는, 로컬 머신으로부터의 I/O 요구들을 원격 머신으로 전송할 수 있다. 그러나, 로컬 머신이 이와 같은 접근들을 사용해 반드시 상당한 처리 절약을 실현할 수 있는 것은 아니다.
단일 머신 상황에서는, I/O 태스크들을 DMA(direct memory access) 컨트롤러 로 오프로딩하는 것에 의해, I/O 처리 부하들이 경감될 수 있다. RDMA 기술은, 복수의 네트워크형 컴퓨터들을 위해 좀더 최근에-개발된 DMA의 확장이다. RDMA로 인해, 데이터는, 소스나 수신지 머신(destination machine)의 CPU 및 오퍼레이팅 시스템과 무관하게, RDMA-가능한 NIC들(RDMA-capable network interface cards)이 장착된 2개 통신 머신들상의 메모리 버퍼들 사이에서 이동될 수 있다. I/O 처리를 원격 머신으로 오프로딩하는데 RDMA가 사용될 수 있으므로, 로컬 머신은 애플리케이션들을 위해 CPU 사이클들을 재요구할 수 있다. RDMA는, VIA(Virtual Interface Architecture), InfiniBand, 및 iWarp와 같은, 고속, 고대역 상호접속 기술들에 이용되어 왔다. 이러한 상호접속들은 특히, 데이터 센터 또는 다른 로컬 파일-공유 환경내에서 서버 노드들의 클러스터들간에 높은-신뢰 수준의 네트워크 접속들을 제공하기 위해 설계되었다.
로컬 오프로딩 노드와 원격 머신간의 통신을 정의하는 프로토콜들은, RDMA 기술과 관련된 능력들이 완전히 이용되며 그들의 이점들이 효과적으로 실현되도록 설계되어야 한다. 따라서, 본 발명의 LWIO(lightweight input/output) 프로토콜에 대한 필요성이 존재한다.
발명의 요약
본 발명의 일 태양에 따르면, 제1 컴퓨터로부터의 I/O 태스크를 제2 컴퓨터로 오프로딩하는 시스템이 제공된다. 본 시스템은, 제1 컴퓨터에서 실행 중인 클라이언트 및 제2 컴퓨터에서 실행 중인 서버를 포함한다. 본 시스템은, 제1 컴퓨터와 제2 컴퓨터를 링크하는 하나 이상의 RDMA 채널들을 더 포함한다. 클라이언트 와 서버는, 네트워크 발견 단계 및 I/O 처리 단계를 포함하는 LWIO 프로토콜에 따라 통신한다. LWIO 프로토콜은, 제2 프로토콜의 보안 및 인증 기반 구조를 강화하는, SMB/CIFS와 같은, 다른 네트워크 프로토콜과 함께 사용된다. 좀더 양호한 보안 모델을 제공하기 위해, 프로토콜의 I/O 모델은, 판독은 RDMA를 사용해 구현되는 한편, 기록은 전송 연산들(send operations)을 사용해 구현되는, 비대칭이다.
본 발명의 다른 태양에 따르면, 제1 컴퓨터로부터의 I/O 태스크를 제2 컴퓨터에 오프로딩하는 방법이 제공된다. 본 방법은, 2개 컴퓨터들에 공통적인 RDMA-가능한 통신 장치들을 이용하며 LWIO 클라이언트-서버 프로토콜과 관련이 있다. 프로토콜은 일반적으로 I/O 처리 단계가 수반되는 발견 단계를 포함한다. 발견 단계 동안, 클라이언트 및 서버는 공유되는 RDMA-가능한 제공자들(shared RDMA-capable providers)의 최소 리스트를 판정한다. I/O 처리 단계 동안, 클라이언트는 오프로딩을 위한 I/O 요구들을 제2 머신으로 포스트한다.
발견 단계 동안, 클라이언트는 먼저, 서버로부터 서버 요구 리줌 키(server request resume key)를 획득한다. 그 다음, 클라이언트는, 제1 머신상의 RDMA-가능한 제공자들의 리스트를 포함하는 교섭 요구를 전송할, 서버로의 파이프를 개방한다. 서버는, 제1 머신상의 제공자들과 매칭되는, 제2 머신상의 이용가능한 제공자들의 리스트를 포함하는 교섭 응답을 파이프를 통해 전송한다. 그 다음, 클라이언트는 공유되는 제공자들을 통해 서버로의 RDMA 접속을 생성한다. 클라이언트와 서버는 새로운 접속을 상호 인증한다. 그 다음, 클라이언트는 서버에 의해 사용될 하나 이상의 파일들을 등록한다.
I/O 처리 요구 메시지들은 폐쇄 메시지, 취소 메시지, 판독 메시지, 기록 메시지, 벡터형 판독 메시지, 및 벡터형 기록 메시지를 포함한다. 본 프로토콜은 보안을 위한 비대칭적인 I/O 모델에 특징이 있다. 판독 데이터는 RDMA 기록 연산들을 사용해 클라이언트로 전송되는 한편, 기록은 보통의 전송을 사용해 완결된다. 판독 및 기록 요구들은, 클라이언트에 의해, 폴링 모드 또는 인터럽트 모드의 서버에 의해 완결될 것인지 특정될 수 있다. 완결이 폴링 모드가 아니어야 한다고 클라이언트가 지시한다면, 서버는, 상태 블록을 RDMA 전송 방식으로 제1 컴퓨터로 전송하는 것에 의해 I/O 처리 요구를 완결짓는다. 완결이 폴링 모드여야 한다고 클라이언트가 지시한다면, 클라이언트는, 인터럽트 요구 메시지 방식으로 I/O가 완결될 때 서버에 의해 웨이크업(wakeup)될 것을 요구할 수 있다.
본 발명의 또 다른 태양에 따르면, I/O 오프로딩 프로토콜에서의 버퍼 관리 방법이 제공된다. 본 방법은, 버퍼 크레딧 메커니즘(buffer credit mechanism)의 사용과 관련이 있다. 서버-클라이언트 크레딧 트랜잭션(server-client credit transaction)은, 서버에 의해 개시되고 완결되는 세방향 핸드쉐이크(three-way handshake)를 포함한다. 서버는, 크레딧들의 개수로 설정되어 있는 정보 필드를 포함하는 델타 크레딧 메시지를 클라이언트로 전송한다. 이 숫자가 음수(-N)이면, 클라이언트는 N개 크레딧들을 포기해야 한다.
본 발명의 또 다른 태양은, 컴퓨터-판독가능 매체상에 컴퓨터 프로그램 제품들 및 데이터 구조들로서 구현되어 있는 상술한 특징들을 포함한다.
첨부된 청구항들이 본 발명의 특징들을 상세하게 설명하긴 하지만, 본 발명의 목적들 및 이점들과 함께, 본 발명은 첨부된 도면들을 참조하는 다음의 상세한 설명으로부터 가장 잘 이해될 수 있다.
도 1은, 본 발명의 태양들이 통합될 수 있는, RDMA 전송 방식으로 통신할 수 있는 2개 컴퓨터들과 관련된 예시적인 클라이언트-서버 컴퓨팅 환경을 대략적으로 도시하는 도면이다.
도 2는 본 발명의 일 실시예에 따른 LWIO 프로토콜의 발견 단계에서 취해지는 초기 단계들을 대략적으로 도시하는 흐름도이다.
도 3은 본 발명의 일 실시예에 따른 예시적인 서버 요구 리줌 키 표현을 대략적으로 도시하는 도면이다.
도 4A는 본 발명의 일 실시예에 따른 예시적인 클라이언트 교섭 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 4B는 본 발명의 일 실시예에 따른 예시적인 서버 교섭 응답 표현을 대략적으로 도시하는 도면이다.
도 5는 본 발명의 일 실시예에 따른 LWIO 프로토콜의 발견 단계에서 취해지는 추가적인 단계들을 대략적으로 도시하는 흐름도이다.
도 6A는 본 발명의 일 실시예에 따른 예시적인 클라이언트 인증 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 6B는 본 발명의 일 실시예에 따른 예시적인 서버 인증 응답 표현을 대략적으로 도시하는 도면이다.
도 6C는, 본 발명의 일 실시예에 따른, 인증을 완결짓는 예시적인 서버 상태 응답 표현을 대략적으로 도시하는 도면이다.
도 7A는 본 발명의 일 실시예에 따른 예시적인 클라이언트 파일 등록 메시지 표현을 대략적으로 도시하는 도면이다.
도 7B는, 본 발명의 일 실시예에 따른, 파일 등록을 완결짓는 예시적인 서버 상태 응답 표현을 대략적으로 도시하는 도면이다.
도 8은, 본 발명의 일 실시예에 따라, 폴링 모드 및 넌폴링 모드에서의 I/O 요구 완결에 대해 취해지는 단계들을 대략적으로 도시하는 흐름도이다.
도 9A는 본 발명의 일 실시예에 따른 예시적인 클라이언트 인터럽트 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 9B는, 본 발명의 일 실시예에 따른, 인터럽트 요구를 완결짓는 예시적인 서버 상태 응답 표현을 대략적으로 도시하는 도면이다.
도 10은, 본 발명의 일 실시예에 따른, 서버-클라이언트 크레딧 트랜잭션에 대해 취해지는 단계들을 대략적으로 도시하는 흐름도이다.
도 11A는 본 발명의 일 실시예에 따른 예시적인 서버 델타 크레딧 메시지 표현을 대략적으로 도시하는 도면이다.
도 11B는 본 발명의 일 실시예에 따른 예시적인 클라이언트-대-서버 크레딧 메시지 표현을 대략적으로 도시하는 도면이다.
도 11C는, 본 발명의 일 실시예에 따른, 클라이언트-서버 크레딧 트랜잭션을 완결짓는 예시적인 서버 상태 응답 표현을 대략적으로 도시하는 도면이다.
도 12A는 본 발명의 일 실시예에 따른 예시적인 클라이언트 폐쇄 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 12B는, 본 발명의 일 실시예에 따른, 폐쇄 요구를 완결짓는 예시적인 서버 상태 응답 표현을 대략적으로 도시하는 도면이다.
도 13A는 본 발명의 일 실시예에 따른 예시적인 클라이언트 취소 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 13B는, 본 발명의 일 실시예에 따른, 취소 요구를 완결짓는 예시적인 서버 상태 응답 표현을 대략적으로 도시하는 도면이다.
도 14A는, 본 발명의 일 실시예에 따른, 넌폴링 모드인 경우의 예시적인 클라이언트 판독 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 14B는, 본 발명의 일 실시예에 따른, 넌폴링 모드인 경우에서 판독 요구를 완결짓는 예시적인 서버 상태 응답 표현을 대략적으로 도시하는 도면이다.
도 14C는, 본 발명의 일 실시예에 따른, 폴링 모드인 경우의 예시적인 클라이언트 판독 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 14D는, 본 발명의 일 실시예에 따른, 폴링 모드인 경우에서 판독 요구를 완결짓는 예시적인 서버 I/O 상태 블록 표현을 대략적으로 도시하는 도면이다.
도 15A는, 본 발명의 일 실시예에 따른, 넌폴링 모드인 경우의 예시적인 클라이언트 기록 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 15B는, 본 발명의 일 실시예에 따른, 넌폴링 모드인 경우에서 기록 요구를 완결짓는 예시적인 서버 상태 응답 표현을 대략적으로 도시하는 도면이다.
도 15C는, 본 발명의 일 실시예에 따른, 폴링 모드인 경우의 예시적인 클라이언트 기록 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 15D는, 본 발명의 일 실시예에 따른, 폴링 모드인 경우에서 기록 요구를 완결짓는 예시적인 서버 I/O 상태 블록 표현을 대략적으로 도시하는 도면이다.
도 16A는, 본 발명의 일 실시예에 따른, 넌폴링 모드인 경우의 예시적인 클라이언트 벡터형 판독 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 16B는, 본 발명의 일 실시예에 따른, 넌폴링 모드인 경우에서 벡터형 판독 요구를 완결짓는 예시적인 서버 상태 응답 표현을 대략적으로 도시하는 도면이다.
도 16C는, 본 발명의 일 실시예에 따른, 폴링 모드인 경우의 예시적인 클라이언트 벡터형 판독 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 16D는, 본 발명의 일 실시예에 따른, 폴링 모드인 경우에서 벡터형 판독 요구를 완결짓는 예시적인 서버 I/O 상태 블록 표현을 대략적으로 도시하는 도면이다.
도 17A는, 본 발명의 일 실시예에 따른, 넌폴링 모드, 비축약형인 경우(non-collapsed case)의 예시적인 클라이언트 벡터형 기록 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 17B는, 본 발명의 일 실시예에 따른, 넌폴링 모드, 축약형인 경우의 예시적인 클라이언트 벡터형 기록 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 17C는, 본 발명의 일 실시예에 따른, 폴링 모드, 축약형인 경우의 예시적 인 클라이언트 벡터형 기록 요구 메시지 표현을 대략적으로 도시하는 도면이다.
도 17D는, 본 발명의 일 실시예에 따른, 넌폴링 모드인 경우에서 벡터형 기록 요구를 완결짓는 예시적인 서버 상태 응답 표현을 대략적으로 도시하는 도면이다.
도 17E는, 본 발명의 일 실시예에 따른, 폴링 모드인 경우에서 벡터형 기록 요구를 완결짓는 예시적인 서버 I/O 상태 블록 표현을 대략적으로 도시하는 도면이다.
도 1 내지 도 17E를 참조하여, 본 발명의 소정 실시예들을 후술한다. 그러나, 당업자들은, 이들 도면들에 대해 여기에서 제시된 상세한 설명이 예시적인 목적을 위한 것이며 본 발명은 이들 실시예들을 초과하여 확장된다는 것을 알 수 있다.
도 1은, 본 발명의 태양들이 통합될 수 있는 대표적인 네트워크형 클라이언트/서버 환경의 소정 특징들을 대략적으로 도시하는 개략도이다. 도 1에는, 호스트 A(101) 및 호스트 B(121)로 표시되어 있는 2개의 컴퓨터 머신들이 도시되어 있다. 상이한 많은 유형들 및 용도들의 컴퓨터들과 관련된 환경에서 본 발명이 실시될 수도 있지만, 하나의 대표적인 상황으로서, 호스트 A(101)는, 데이터베이스 서버와 같은, I/O-집약적인 작업을 담당하는 애플리케이션 서버 머신으로서 동작한다.
호스트 A(101) 및 호스트 B(201) 각각은, 하나의 머신으로부터 다른 머신으 로의 네트워크형 데이터 통신을 가능하게 하는 다수의 NIC들(109, 111, 113, 133, 135, 137)을 포함한다. 이러한 NIC들 중에서, 109, 111, 135, 137 NIC들은 RDMA 데이터 전송을 허용한다. 도시된 바와 같이, 2개의 호스트들(101, 121) 사이에는 비-RDMA 네트워크 링크(119) 및 RDMA 채널(117)이 존재한다.
호스트 A(101)상에서 실행되는 것은, 커널-모드 I/O 판독/기록 서비스들(105)과 상호작용하는 I/O 태스크들의 처리를 담당하는 애플리케이션과 관련되어 있는 LWIO 클라이언트 애플리케이션(103)이다. LWIO 클라이언트(103)는 호스트 A(101)로부터의 I/O 처리를 호스트 B(201)로 오프로딩하는데 사용된다. 호스트 B(201)상에서는 LWIO 서버(123)가 실행 중이다. 여기에서 설명된 LWIO 프로토콜에 따르면, LWIO 클라이언트(103)는 LWIO 서버(123)와 통신한다. LWIO 클라이언트(103) 및 LWIO 서버(123)는 포스트된 버퍼들(107, 127)을 사용해, 파일-관련 데이터가 RDMA 채널 접속(117)을 통해 직접적으로 전송될 수 있게 한다. LWIO 프로토콜 메시지들에 의해, 판독 및 기록 태스크들은 호스트 B(121)로 오프로딩된다. 서버(123)는 I/O 요구들을, 하드 디스크(131)에 대한 인터페이스로서 기능하는 파일 시스템(129)으로 전달한다.
통상적으로, 2 종류의 메시지들이 RDMA 접속(117)과 관련되어 있다. 제1 유형은, 수신지 머신에서 인터럽트를 생성하는, 통상적인 네트워크 송/수신이다. 제2 유형은, 원격 머신상의 메모리 공간이, 원격 CPU의 지원없이 그리고 그에 따라 인터럽트를 생성할 필요없이, 액세스되는 RDMA 판독/기록이다. 원격 CPU는, RDMA를 위해 노출되어 있지만 통상적으로 RDMA 연산이 수행될 시기는 알 수 없는 메모 리 영역들을 판정한다.
여기에 설명되어 있는 본 발명의 일 실시예에서, LWIO 프로토콜은, 다른 프로토콜의 기존의 보안 및 인증 기반 구조를 이용하기 위해, SMB 또는 CIFS와 같은, 다른 네트워크 프로토콜과 함께 사용된다. 이것은, LWIO 프로토콜의 오버헤드(overhead)를 최소화하는데 도움이 된다. 도 1에 도시되어 있는 바와 같이, 호스트 B(121)상의 LWIO 서버(123)는 SMB 서버(125) 상부에서 연산한다. (나타내지 않은) SMB 클라이언트도 마찬가지로 호스트 A(101)상에서 실행되며 LWIO 클라이언트 애플리케이션(103)과 상호작용한다.
LWIO 프로토콜은, I/O 단계들에 수반되는 발견 단계의 2개 단계들을 포함한다. 여기에서 설명한 실시예들과 관련된 데이터 구조들의 경우, 데이터 사이즈들은 다음과 같다.
BYTE 무부호형 8-비트 정수
CHAR 8-비트 아스키 문자
UNIT16 무부호형 16-비트 정수
UNIT32 무부호형 32-비트 정수
UNIT64 무부호형 64-비트 정수
INT16 부호형 16-비트 정수
INT32 부호형 32-비트 정수
INT64 부호형 64-비트 정수
WCHAR 16-비트 유니코드 문자
PVOID32 32-비트 포인터
PVOID64 64-비트 포인터
도 2는 본 발명에 대한 실시예의 LWIO 프로토콜의 발견 단계에서 취해지는 단계들을 도시한다. LWIO 서버가 실행 중인 호스트에 대해, 단계 201에서는, LWIO 서버가 그 호스트 머신상에서 실행 중인 SMB/CIFS 서버에 등록한다. 이 등록에 따라, 단계 203에서는, SMB/CIFS 서버가 원격 호스트상에서 실행 중인 SMB/CIFS 클라이언트에 LWIO 서버가 이용가능하다는 것을 통지한다. 단계 205에서는, LWIO 클라이언트가 서버 요구 리줌 키를 요구한다. 리줌 키는, 본 출원과 양수인이 동일하며, 2003년 10월 24일에 출원된, 여기에서 그 전체를 참조하고 있는, "Method and Systems for Accessing a File(Resume Key)"라는 명칭의 미국 특허출원 제 ________호에 개시되어 있는 인증 메커니즘이다.
단계 207에서, LWIO 서버는 서버 요구 리줌 키를 클라이언트로 역전달한다. 본 발명의 실시예에서, 서버 요구 리줌 키는 다음의 구조를 가진다.
Figure 112005022629369-PCT00001
도 3은 서버 요구 리줌 키(219)의 예시적인 표현을 제공한다. ResumeKey(221), Timestamp(223), 및 Pid(225)가 서버상에서 생성되는데 이들은 클 라이언트에 대해 불투명하다. Context(229)는, LWIO 클라이언트에 의해 서버와 접촉하는데 사용되는 UNC 이름을 포함하는 어레이이다. ContextLength(227)는 Context(229)의 바이트 수이다.
네트워크 발견
클라이언트 애플리케이션이 서버 요구 리줌 키(219)를 수신했을 때, 클라이언트 애플리케이션은 Context 필드(229)로부터 서버 UNC 이름을 검색한다. 도 2로 돌아가면, 단계 209에서, 클라이언트는 LWIO 서버로의 파이프를 개방한다. 파이프는, 다음에서 추가적으로 설명하는 방식으로, 네트워크에서 이용가능한 RDMA-가능한 장치들을 자동적으로 발견하는데 사용된다. 이것은 본 발명의 중요하고 유용한 특징인데, ARP와 같은 어드레스 결정 메커니즘들이 VIA 네트워크들 및 유사 네트워크들에는 일반적으로 빠져 있다.
클라이언트는, LWIO 프로토콜에 사용할 수 있는 RDMA-가능한 장치들("제공자들")의 리스트를 위해 서버를 후속 조회한다. 조회는, 클라이언트가 구성하여, 단계 211에서, 새롭게-개방된 파이프를 통해 서버로 전송하는 교섭 요구의 방식으로 실현된다. 본 발명의 실시예에서, 교섭 요구는 다음의 구조를 가진다.
Figure 112005022629369-PCT00002
도 4A는 본 발명에 대한 실시예에서의 교섭 요구 패킷(231)에 대한 예시적 표현을 제공한다. 교섭 요구는 제어 헤더(233), 고정-길이의 유니코드 클라이언트 이름 필드(235), 키로서 사용되는 클라이언트 UUID(237), 응답을 수신하기 위한 로컬 버퍼 사이즈(239), 및 제공자들의 리스트를 포함한다. 제어 헤더(233)에는, ProtocolId 'LWIO'(243)가 헤더의 첫번째 4개 바이트로서 저장되어 있다.
RevId(245)는 현재 정의값 0x1001, LWIO_REV_ID를 보유한다. Opcode(247)는 현재 정의값 0xfe, LWIO_CONTROL_OPCODE_NEGOTIATE를 보유한다. Length(249)는, 연산 코드-특정 데이터 모두를 포함하는, 서버로 전송될 완전 패킷의 바이트 사이즈이다.
ClientName(235)은 서버에 의해 클라이언트를 식별하는데 사용된다. Key(237)는, 후술하는 바와 같이, 후속적인 네트워크-특정의 인증 절차에 사용된다. ResponseLength(239)는, 후술하는 바와 같이, 서버로부터 교섭 요구를 수신하기 위한 버퍼의 사이즈이다. ProviderCounter(251)는 클라이언트 머신과 관련되어 있으며 클라이언트가 그에 관해 서버에 통지하고 있는 제공자들의 개수가다. 제공자 리스트(241)는 ProviderCounter 제공자들의 리스트를 담고 있다.
제공자 리스트(241)의 요소로서, Name(253)은 제공자의 이름이다. 호환형 네트워크들의 검출을 위해, 클라이언트와 서버는 동일한 제공자에 대해 동일한 이름을 사용하는 것이 바람직할 것이다. InstanceCounter(255)는 특정 제공자 유형의 장치 수이다. 인스턴스 테이블(257)은 네트워크/변별기 쌍들의 테이블인데, 네트워크/변별기(discriminator) 쌍은, 장치-특정 방식으로, 원격 접속을 형성하는 방법을 설명하는 기능을 한다. HostAddressLen(259)은 네트워크-특정의 호스트 어드레스(263) 길이이다. DiscriminatorLen(261)은 네트워크-특정의 변별기(265) 길이이다. 이러한 길이 필드들에 수반되는 것은 HostAddressLen 바이트의 호스트 어드레스(263) 및 DiscriminatorLen 바이트의 변별기(265)이다.
도 2로 돌아가면, 클라이언트의 제공자 리스트를 가진 교섭 요구를 수신했으므로, 단계 213에서, 서버는, 서버가 가진 RDMA-가능 장치들 중 어떤 장치가 클라이언트와 공통인지를 판정한다. 단계 215에서, 서버는 파이프를 통해, 공유되는 제공자들의 리스트를 포함하는 교섭 응답을 클라이언트로 전송한다. 본 발명의 실시예에서, 교섭 응답은 다음의 구조를 가진다.
Figure 112005022629369-PCT00003
도 4B는 본 발명에 대한 실시예에서의 교섭 응답(267)에 대한 예시적 표현을 제공한다. 제어 헤더(269)는, Length(271)가 이제는 응답 메시지(267)의 사이즈를 반영한다는 점을 제외하면, 교섭 요구에서와 동일하다. SrvName(273)은 서버의 이름을 보유한다. Key(275)는 클라이언트에 의한 사용을 위해 서버에 의해 생성된 GUID이다. 다음에서 부연하는 바와 같이, 클라이언트는 공통적인 통신 장치들 중 하나를 사용하는 새로운 접속을 통한 인증 요구로 Key를 서버로 역전송한다. ProviderCounter(277)는 제공자 리스트(279)의 제공자 수이다. 제공자 리스트(279)는 서버와 클라이언트에 공통인 제공자들의 리스트를 포함한다. 클라이언트가 이들 제공자들에 실제로 접속할 수 있다는 보장은 없다.
도 2로 돌아가면, 이 시점에서는, 서버와 클라이언트가 통신 장치 정보를 공유하고 있으며 공통 제공자들의 최소 리스트가 판정되어 있는 상태이다. 단계 217에서는, 클라이언트가 하나 이상의 공유 장치들을 통해 LWIO 서버에 대한 하나 이상의 RDMA 접속들을 생성한다. 본 발명의 일 실시예에서는, 여기에 설명되어 있는 바와 같이, 클라이언트-대-서버 통신을 위해 다음의 연산 코드들이 정의된다.
Figure 112005022629369-PCT00004
다음의 정의된 플래그들은 클라이언트-대-서버 통신에서 변경자로서 사용된다.
Figure 112005022629369-PCT00005
LWIO 프로토콜에서의 대응되는 클라이언트-대-서버 메시지들은 공통적인 헤더 구조에 특징이 있다. 공통적인 헤더는 본 발명의 실시예에서 다음의 포맷을 가진다.
Figure 112005022629369-PCT00006
접속 인증
도 5는, LWIO 프로토콜의 나머지 초기 단계 동안, 본 발명에 대한 실시예에서의 클라이언트 및 서버에 의해 취해진 단계들을 도시한다. 단계 601에서는, 클라이언트가, 상술한 바와 같이, 공유되는 통신 장치를 통해 서버로의 접속을 확립한다. 클라이언트와 서버는 이제 새로운 접속을 상호 인증한다. 단계 603에서는, 클라이언트가 인증 요구 메시지(LWIO_OPCODE_AUTH)를 서버로 전송한다. 서버-측 및 클라이언트-측에서의 위장을 방지하기 위해 인증이 수행된다. 인증이 적절한 시간에 완결되지 않으면, 접속은 종료된다.
도 6A는, 본 발명에 대한 실시예에서의 클라이언트 인증 요구 메시지에 대한 예시적 표현을 제공한다. 인증 메시지(617)는 LWIO_AUTH_PARAMS 구조(621)가 수반되는 공통 헤더(619)를 포함한다. 헤더(619)에서, Length(623)는 서버로 전송된 바이트 수(공통 헤더(619)의 사이즈 + LWIO_AUTH_PARAMS(621)의 사이즈)로 설정된다. Opcode(625)는 LWIO_OPCODE_AUTH(0x6)로 설정된다. Flags(627)는 LWIO_HDR_FLAG_INTERRUPT로 설정된다. Cookie(629)는, 여기의 그리고 다른 클라이언트 프로토콜 메시지들에서, 클라이언트에 의해 선택된 값으로 설정되며 서버 응답시에 역전송된다. Cookie 값은 통상적으로 요구를 서버 응답과 매칭시키는데 사용된다. DataVa(631)는, 서버가 서버 인증 파라미터들을 RDMA해야 할 어드레스로 설정된다. DataMh(633)는 DataVa(631)와 관련된 RDMA 메모리 핸들을 보유한다.
본 발명의 실시예에서, LWIO_AUTH_PARAMS 구조는 다음의 포맷을 가진다.
Figure 112005022629369-PCT00007
인증 메시지(617)에서, LWIO_AUTH_PARAMS(621)은 패킷의 두번째 부분을 형성한다. Magic(635)은 'LWIO'로 설정된다. RevId(637)는 LWIO_REV_ID로 설정된다. Endian(639)은 (ULONG_PTR)의 사이즈로 설정된다. 페이지사이즈(PageSize; 641)는 CPU 페이지 사이즈(32-비트 머신의 경우 4k 그리고 64-비트 머신의 경우 8k)로 설정된다. BaseSequence(643)는 0으로 설정된다. MaxRdmaWindowSize(645)는, 클라이언트가 RDMA 전송시에 수용할 수 있는 최대 바이트 수로 설정하려는 것으로, 도시된 실시예에서는 64k로 설정되어 있다. MaxSendBufferSize(647)는, 한번의 요구로 클라이언트가 서버로 전송할 수 있는 바이트 수로 설정하려는 것으로, 도시된 실시예에서는 1k로 설정되어 있다. MaxRecvBufferSize(649)는, 클라이언트가 서버 로부터 데이터를 수신하기 위해 포스트한 바이트 수로 설정하려는 것으로, 도시된 실시예에서는 16 바이트로 설정되어 있다. HeaderSize(651)는 LWIO 제어 헤더(619)의 바이트 수로 설정된다. Credits(652)은, 클라이언트가 갖고자 하는 버퍼 크레딧들의 초기 개수로 설정된다. 크레딧들의 용도는 다음에서 부연된다. 서버는 클라이언트의 요구를 충족시킬 수도 그렇지 않을 수도 있다. RdmaReadSupported(653)는, 클라이언트가 RDMA 판독 연산들을 지원하지 않으면 0으로 설정되고, 클라이언트가 RDMA 판독을 지원하면 1로 설정된다.
LWIO_AUTH_PARAMS 구조의 일부는 하나 이상의 옵션들의 세트이다. 옵션들은 인증을 좀더 융통성있게 하는데 사용된다. 각 옵션은, 옵션들의 리스트를 종료하는 널 옵션(null option)으로 기능하는, 옵션 코드만을 갖는 리스트의 마지막 옵션, LWIO_AUTH_OPTION_END를 제외하면, 옵션 코드, 길이, 및 데이터를 가진다. 실시예의 인증 메시지에서, 클라이언트는 서버로, Key(LWIO_AUTH_OPTION_KEY) 및 Signature(LWIO_AUTH_OPTION_SIGNATURE) 옵션들을 전송한다. Key(655)는 교섭 응답에서 서버에 의해 사전에 리턴된 키로 설정된다. Signature(657)는 서명을 차단하는 LWIO_AUTH_PARAMS(621)의 MD5 서명이다.
도 5로 돌아가면, 단계 605에서는, 인증 메시지로 전송된 Key가 파이프를 통해 교섭 응답으로 리턴된 키와 매칭되면, 서버는 인증 응답으로서, 8-바이트의 SessionId, 클라이언트에 의한 인증 메시지에서 제공된 DataVa 및 관련된 DataMh 메모리 핸들까지 포함하는 LWIO_AUTH_PARAMS 구조를 클라이언트로 RDMA한다. 단계 607에서는, 서버가 LWIO_MSG_STATUS_RESPONSE를 전송해 인증을 완결짓는다.
도 6B는 본 발명에 대한 실시예에서 서버에 의해 리턴된 LWIO_AUTH_PARAMS 구조(659)에 대한 예시적 표현을 제공한다. Magic(661)은 'LWIO'로 설정된다. RevId(663)는 LWIO_REV_ID로 설정된다. Endian(665)는 (ULONG_PTR)의 사이즈로 설정된다. 페이지사이즈(PageSize; 667)는 CPU 페이지 사이즈로 설정된다. BaseSequense(669)는 (클라이언트 BaseSequence + 1)로 설정하려는 것이다. MaxRdmaWindowSize(671)는, 클라이언트가 RDMA 전송시에 수용할 수 있는 최대 바이트 수로 설정하려는 것으로, 도시된 실시예에서는 512k로 설정되어 있다. MaxSendBufferSize(673)는, 서버가 한번의 응답으로 클라이언트로 전송하는 바이트 수로 설정하려는 것으로, 도시된 실시예에서는 16바이트로 설정되어 있다. MaxRecvBufferSize(675)는, 서버가 클라이언트로부터 데이터를 수신하기 위해 사전-포스트한 바이트 수로 설정하려는 것으로, 도시된 실시예에서는 8k로 설정되어 있다. HeaderSize(677)는 공통 헤더의 바이트 수로 설정된다. Credits(679)은, 서버가 클라이언트에 대해 이용할 수 있는 크레딧들의 초기 개수로 설정된다. RdmaReadSupported(681)는, 서버가 RDMA 판독을 지원하지 않으면 0으로 설정되고, 서버가 RDMA 판독을 지원하면 1로 설정된다. 서버는, Key(LWIO_AUTH_OPTION_KEY)(683), SessionId(LWIO_AUTH_OPTION_SESSION_ID)(685), 및 Signature(LWIO_AUTH_OPTION_SIGNATURE)(687) 옵션들을 전송한다. Key(683)는, 클라이언트가 교섭 요구로 사전에 전송한 Key로 설정된다. SessionId(685) 값은, 후술하는 바와 같이, 클라이언트에 의해 클라이언트 파일들을 서버에 등록하는데 사용된다. Signature(687)는 Signature을 차단하는 LWIO_AUTH_PARAMS의 MD5 서명 이다.
본 발명의 실시예에서, LWIO_MSG_STATUS_RESPONSE 구조는 다음의 포맷을 가진다.
Figure 112005022629369-PCT00008
도 6C는 본 발명의 실시예에서 인증을 완결짓기 위해 서버에 의해 리턴된 LWIO_MSG_STATUS_RESPONSE(689)에 대한 예시적 표현을 제공한다. Cookie(691)는, 클라이언트에 의해 인증 메시지의 헤더에 설정된 쿠키 값으로 설정된다. Information(693)은 LWIO_AUTH_PARAMS의 바이트 수 + 8바이트로 설정된다. Status(695)는 (성공을 의미하는) 0x0 또는 ("액세스 거부"를 의미하는) 0xC0000022로 설정된다.
파일 등록
도 5로 돌아가면, 단계 609에서는, 새로운 접속이 클라이언트와 서버에 의해 상호 인증되었을 때, 클라이언트는 서버에 사용하기 위한 파일들을 등록하기 시작한다. 클라이언트가 서버에 사용하기 위한 파일을 등록하기 전에는, 파일에 대한 파일 연산들이 링크를 통해 처리되지 않는다.
도 7A는, 본 발명의 실시예에서 클라이언트에 의해 서버로 전송된 파일 등록 메시지에 대한 예시적 표현을 제공한다. 등록 메시지(701)는, LWIO_FID_PARAMS 구 조(705)가 수반되는 공통 헤더(703)를 포함한다. Length(707)는 서버로 전송된 바이트 수(공통 헤더(703)의 사이즈 + LWIO_FID_PARAMS(705)의 사이즈)로 설정된다. Opcode(709)는 LWIO_OPCODE_REGISTER(0x7)로 설정된다. Flags(711)는 LWIO_HDR_FLAG_INTERRUPT로 설정된다. 여기의 클라이언트 메시지 및 후속 클라이언트 메시지들에서, Credits(713)은 클라이언트상에 계류 중인 I/O 요구들의 수로 설정된다. Credits 필드는 더 많은 크레딧들을 접속에 할당하기 위한 서버로의 힌트로서 기능하므로, 다음에서 부연하는 바와 같이, 추가적인 미결의 I/O 요구들(additional outstanding I/O requests)을 허용한다. 미결의 클라이언트 요구 수는 언제나 "Credits" 값을 초과할 수 없다. 이전과 같이, Cookie(715)는 클라이언트-특정 값으로 설정된다.
본 발명의 실시예에서, LWIO_FID_PARAMS 구조는 다음의 포맷을 가진다.
Figure 112005022629369-PCT00009
파일 등록 메시지(701)의 LWIO_FID_PARAMS(705)에서, ResumeKey(717)는, 초기의 파일 액세스 채널을 통해 리턴된 서버 요구 리줌 키로 설정된다. SessionId(719)는, 접속 인증 단계 동안 서버에 의해 리턴된 SessionId로 설정된다. FlagsAndAttributes(721)는 처음에 파일을 개방하는데 사용된 Win32 Create Flags로 설정된다.
도 5로 돌아가면, 단계 611에서, 서버는 파일 등록을 완결짓기 위한 LWIO_MSG_STATUS_RESPONSE로 응답한다. 도 7B는 본 발명의 실시예에서 서버에 의해 전송된 LWIO_MSG_STATUS_RESPONSE(723)에 대한 예시적 표현을 제공한다. Information(725)은, I/O 요구들을 전송할 때 사용될 Fid(File ID)로 설정된다. Status(727)는 (성공의) 0x0 또는 실패시 다른 NTSTATUS 코드로 설정된다. Cookie(729)는, 클라이언트가 파일 등록 메시지의 헤더에서 설정한 쿠키 값으로 설정된다.
I/O 처리
이 시점에서는, 접속들이 확립되고 파일들이 등록되었으므로, LWIO 프로토콜의 I/O 처리 단계가 시작된다. LWIO 프로토콜의 실시예들에 대한 한가지 중요한 특징은 기록 및 판독을 위한 비대칭 I/O 모델이다. 판독 연산들은 RDMA를 사용해 구현되는 한편, 기록은 전송 연산들을 사용해 구현된다. 좀더 양호한 보안 모델을 제공하기 위해, 기록은 RDMA를 사용해 구현되지 않는다. 서버가 RDMA를 위해 NIC를 통해 자신의 어드레스 공간을 노출시키면, 악의적 클라이언트에 의해 이용될 수 있는 데이터 손상의 취약성(data corruption vulnerability)을 발생시킨다. 이러한 상황에서, 악의적 클라이언트는, 반복적으로, 소정 서버의 가상 어드레스에 대한 RDMA 기록 연산들을 발행한다. 서버 어드레스 공간이 한정적이고 어떤 시점에서는 서버가 가상 어드레스들을 재사용해야 하므로, 악의적 클라이언트는 결국 상이한 접속을 위해 동일한 가상 어드레스를 사용하는 서버를 추적하여, 상이한 클라이언트와 관련될 수 있는 서버 버퍼에 데이터가 기록되게 한다. LWIO 프로토콜의 비대칭 I/O 모델은 이러한 가능성에 대비한다. 이러한 특징이 LWIO 프로토콜과, DAFS와 같은, 다른 RDMA-기반의 파일 전송 프로토콜들과의 주된 차이점이다.
도 5로 돌아가면, 단계 613에서, 클라이언트는 I/O 처리 요구들을 포스트하기 시작한다. I/O 요구들의 서버-대-클라이언트 완결들은 넌폴링 모드이거나 폴링-모드이다. 넌폴링 모드에서는, I/O 완결들이, 일반적인 송/수신 메시지들을 사용하는, 인터럽트-기반이다. 폴링 모드에서는, I/O 완결들이 RDMA를 사용하며 인터럽트-기반이 아니다.
도 8의 흐름도는, LWIO 서버의 일반적인 관점에서, 폴링 모드 또는 넌폴링 모드에서 I/O 요구를 완결짓는 것에 대해 본 발명의 실시예에서 취해지는 단계들을 대략적으로 도시한다. 클라이언트 I/O 요구는, 서버가 (CPU를 인터럽트하는) 포스트-전송 을 역전송해야 하는지 아니면 RDMA 메시지를 역전송해야 하는지를 특정한다. 단계 801에서, 서버는, 클라이언트 I/O 요구 메시지의 공통 헤더에서 LWIO_HDR_FLAG_INTERRUPT 플래그가 설정될 것인지를 판정한다. 이 플래그가 설정되면, 단계 803에서, 서버는 보통의 전송을 사용하는 LWIO_MSG_STATUS_RESPONSE 방식으로 클라이언트 요구를 완결짓는다. LWIO_HDR_FLAG_INTERRUPT 플래그가 설정되지 않으면(폴링 모드), 서버는, 단계 805에서 지시된 바와 같이, LWIO_IO_STATUS_BLOCK을 클라이언트로 RDMA하는 것에 의해, 클라이언트 요구를 완결짓는다.
폴링 모드에서의 클라이언트 웨이크업
폴링 모드에서, 클라이언트는, 서버로부터의 I/O 완결을 대기하는 동안 슬립(sleep)하기를 원할 수 있다. 이 경우, 완결은 RDMA 방식으로 클라이언트로 전송 되므로, 완결되었다는 것을 클라이언트에게 통지하기 위해 클라이언트를 웨이크업하는 메커니즘이 필요하다. 클라이언트가 웨이크업 되기를 원한다면, 클라이언트는, 도 8의 단계 807에서 서버에 의해 수신된 인터럽트 요구 (LWIO_OPCODE_INTERRUPT) 메시지를 서버로 전송한다. 인터럽트 요구를 수신하는 서버는, 서버에서 I/O 요구가 완결될 때까지 응답을 전송하지 않을 것이다(단계 809). 완결은, 클라이언트를 인터럽트하는 보통의 전송 방식으로 단계 811에서 클라이언트로 전송된다. 하나의 인터럽트 메시지만이 소정 클라이언트 접속에 대해 미결일 수 있다.
도 9A는 본 발명의 실시예에서 클라이언트에 의해 서버로 전송되는 인터럽트 요구 메시지에 대한 예시적 표현을 제공한다. 메시지는 공통 헤더(815)를 포함한다. Opcode(817)는 LWIO_OPCODE_REGISTER(0x7)로 설정된다. Flags(819)는 (LWIO_HDR_FLAG_INTERRUPT|LWIO_HDR_FLAG_CONTROL)(0x80)로 설정된다. Credits(821)은 클라이언트상에 계류 중인 I/O 요구들의 수로 설정되고, Cookie(823)는 클라이언트-특정 값으로 설정된다.
서버는, 또 하나의 I/O 요구가 처리된 후에 인터럽트 요구 메시지에 응답한다. 도 9B는 본 발명의 실시예에서 서버에 의해 전송된 LWIO_MSG_STATUS_RESPONSE 메시지(825)에 대한 예시적 표현을 제공한다. Information(829)은 0으로 설정된다. Status(831)는 (성공의)(0x0)으로 또는 실패의 경우 다른 NTSTATUS 코드로 설정된다. Cookie(827)는 클라이언트에 의해 전송된 인터럽트 요구 헤더의 Cookie 값으로 설정된다.
크레딧들
상술한 바와 같이, 모든 클라이언트-대-서버 I/O 요구들은 헤더에 크레딧 필드를 포함한다. 크레딧 필드는, 클라이언트가 서버로 전송하고자 하는 미결 I/O 요구들의 수에 관한, 서버로의 힌트이다. 크레딧들을 관리하는 것은 서버의 책임이다. 크레딧들은 버퍼들이 흘러 넘치는 문제(problem of flushing buffers)에 대한 새로운 해결책을 제공한다. 클라이언트가 현재 N개의 크레딧들을 갖고 있다면, 서버가 클라이언트로 크레딧 메시지를 전송하기 위해서는 N+1개의 수신 버퍼들을 포스트해야 한다. 서버는 언제나 클라이언트 접속을 따라 단 하나의 미결 크레딧 요구를 가진다. 크레딧 메시지들은 항상 인터럽트 모드로 전송된다.
크레딧 트랜잭션은 클라이언트와 서버간의 서버-개시형 세방향 핸드쉐이크를 포함한다. 도 10은, 본 발명에 대한 실시예에서의 크레딧 트랜잭션을 포함하는 단계들을 대략적으로 도시한다. 단계 1001에서, 서버는 클라이언트 접속을 따라 델타 크레딧 요구 메시지를 전송한다.
도 11A는 본 발명에 대한 실시예에서의 서버 델타 크레딧 메시지에 대한 예시적 표현을 제공한다. 이 메시지는 LWIO_MSG_STATUS_RESPONSE(1011)의 형태를 취한다. 크레딧은 버퍼에 대응된다. Information(1015)은, 클라이언트가 포기해야 하는 크레딧 수(음수) 또는 서버가 클라이언트의 사용을 위해 새롭게 할당한 크레딧(추가 버퍼) 수(양수)로 설정된다. Status(1017)은 LWIO_NOTIFY_CREDIT(0x1)로 설정된다. Cookie(1013)는 0으로 설정된다.
도 10으로 돌아가면, 클라이언트는 서버로부터 크레딧 메시지를 수신한다. 클라이언트는, 동일한 접속의 서버에 LWIO_OPCODE_CREDIT 메시지로 응답해야 한다. 이 메시지는, 단일 크레딧의 해제를 의미하거나 클라이언트가 사용했던 새롭게-할당된 크레딧 수에 대한 서버로의 통지를 의미한다. 서버 크레딧 메시지의 Information 필드가 음수(-N)를 포함하면(단계 1003), 클라이언트는, 단계 1005로서 지시된 바와 같이, N개의 LWIO_OPCODE_CREDIT 메시지들(포기해야 하는 크레딧 각각에 대해 하나씩)을 전송한다. Information 필드가 양이면, 클라이언트는, 단계 1007로서 지시된 바와 같이, 단 하나의 LWIO_OPCODE_CREDIT 메시지를 전송한다.
도 11b는 본 발명의 일 실시예에서 클라이언트에 의해 전송된 LWIO_OPCODE_CREDIT 메시지에 대한 예시적 표현을 제공한다. LWIO_OPCODE_CREDIT 메시지(1019)는 공통 헤더(1021)를 포함한다. Opcode(1023)는 LWIO_OPCODE_CREDIT(0x7)로 설정된다. Flags(1025)는 LWIO_HDR_FLAG_INTERRUPT(0x80)으로 설정된다. Credits(1027)은 클라이언트상에 계류 중인 I/O 요구들의 수로 설정된다. Cookie(1031)는 클라이언트-특정 값으로 설정된다. 클라이언트가 양의 델타 크레딧 메시지를 수신했다면, Offset(1029)의 상위 32개 비트들은, 클라이언트가 사용하지 않은, 서버에 의해 할당된 크레딧 수로 설정된다. 일단 클라이언트가 이 필드에서 0보다 큰 값을 리턴한다면, 서버는 보통, 하나 이상의 음의 업데이트가 전송될 때까지, 또 다른 양의 업데이트 메시지를 전송하지 않는다. 통상적으로, 클라이언트는 0을 리턴한다.
상술한 바와 같이, 클라이언트가 음(-N)의 델타 크레딧 메시지를 수신했다면, 클라이언트는, 포기하는 각각의 크레딧에 대해 하나씩, N개의 크레딧 메시지들 을 서버로 전송해야 한다. 따라서, 이 경우, Offset(1029)의 상위 32개 비트들은 -N, -(N-1), ..., -1로 설정된다. 서버가 Offset(1029)의 상위 32개 비트들이 -1로 설정된 클라이언트 크레딧 메시지를 수신할 경우, 서버는, 클라이언트가 서버 크레딧 메시지의 처리를 마쳤으며 새로운 크레딧 메시지들을 수신할 수 있다고 가정한다.
도 10으로 돌아가면, 서버는, 단계 1009로서 지시된 바와 같이, LWIO_MSG_STATUS_RESPONSE 메시지를 클라이언트로 전송하는 것에 의해, 세방향 핸드쉐이크를 완결짓는다. 도 11C는 본 발명의 실시예에서 서버에 의해 전송된 LWIO_MSG_STATUS_RESPONSE(1033)에 대한 예시적 표현을 제공한다. Information(1037)은 0으로 설정된다. 클라이언트에 의해 전송된 LWIO_OPCODE_CREDIT 메시지에 대한 헤더에서의 Offset에 대한 상위 32개 비트들이 0 이상이었다면, Status(1039)는 성공을 의미하는 0x0으로 설정된다. Offset의 상위 32개 비트들이 음수로 설정되어 있었다면, 서버는, 클라이언트가 크레딧을 폐기할 수 있도록 하기 위해, Status(1039)를 LWIO_CREDIT_NOTIFY로 설정한다. Cookie(1035)는 클라이언트에 의해 LWIO_OPCODE_CREDIT 메시지의 공통 헤더에 설정된 Cookie 값으로 설정된다.
폐쇄
폐쇄 메시지는, 등록 단계 동안에 교환된 특정 Fid에 대한 I/O 처리를 중단하는데 사용된다. 서버가 응답하고 나면, Fid가 되풀이될 때까지 어떠한 새로운 요구들도 실패할 것이다. 도 12A는 본 발명의 실시예에서 클라이언트에 의해 전송 된 폐쇄 메시지에 대한 예시적 표현을 제공한다. 폐쇄 메시지(1041)는 공통 헤더(1043)를 포함한다. Opcode(1045)는 LWIO_OPCODE_CLOSE(0x7)로 설정된다. Flags(1047)는 LWIO_HDR_FLAG_INTERRUPT(0x80)로 설정된다. Credits(1049)은 클라이언트상에 계류 중인 I/O 요구들의 수로 설정된다. Cookie(1053)는 클라이언트-특정 값으로 설정된다. Fid(1051)는, 폐쇄될 파일의 File Id로 설정된다.
서버는 LWIO_MSG_STATUS_RESPONSE로 응답한다. 도 12B는 본 발명의 실시예에서 서버에 의해 리턴된 폐쇄 완결 LWIO_MSG_STATUS_RESPONSE(1055)에 대한 예시적 표현을 제공한다. Information(1059)은 0으로 설정된다. Status(1061)는, 성공을 지시하는 0으로 설정된다. Cookie(1057)는, 클라이언트 폐쇄 요구에서 설정된 Cookie 값으로 설정된다.
취소
취소 메시지는, 등록 단계 동안에 교환된 특정 Fid에 대한 I/O 처리를 중단하는데 사용된다. 취소가 발행될 때, 서버는 요구를 완결짓는다. 그러나, 취소될 수 없는 I/O 요구들은 여전히 서버에서 진행될 수 있다. 도 13A는 본 발명의 실시예에서 클라이언트에 의해 전송된 취소 메시지에 대한 예시적 표현을 제공한다. 취소 메시지(1063)는 공통 헤더(1065)를 포함한다. Opcode(1067)는 LWIO_OPCODE_CANCEL(0x7)로 설정된다. Flags(1069)는 LWIO_HDR_FLAG_INTERRUPT(0x80)로 설정된다. Credits(1071)은 클라이언트상에 계류 중인 I/O 요구들의 수로 설정된다. Cookie(1075)는 클라이언트-특정 값으로 설정된다. Fid(1073)는, 취소가 발행 중인 File Id로 설정된다.
서버는 LWIO_MSG_STATUS_RESPONSE 메시지로 취소를 완결짓는다. 도 13B는 본 발명의 실시예에서 서버에 의해 리턴된 취소 완결 LWIO_MSG_STATUS_RESPONSE(1077)에 대한 예시적 표현을 제공한다. Information(1081)은 0으로 설정된다. Status(1083)는, 성공을 지시하는 0으로 설정된다. Cookie(1079)는, 클라이언트 취소 요구에서 설정된 Cookie 값으로 설정된다.
판독 메시지는, 등록 단계 동안에 교환된 특정 Fid로부터 데이터를 획득하는데 사용된다. 1 킬로바이트 미만의 판독 요구의 경우, 사용자 버퍼가 NIC로 등록되지 않으면, 데이터는 사전-등록된 내부 버퍼로 수신되고, 서버로부터 데이터가 수신된 후 사용자 버퍼로 복사된다. 이것은, 작은 사용자 버퍼들을 등록하는 것보다는 소량의 데이터를 복사하는 것이 훨씬 효율적이기 때문이다. 대량 판독의 경우에는, 사용자 버퍼가 등록되며 데이터는 RDMA 기록 방식을 통해 직접적으로 수신된다. 한번의 판독 요구에 따라 판독되는 데이터량은 서버의 MaxRdmaWindowSize에 의해 한정된다.
도 14A 내지 도 14C는 본 발명의 실시예에서 클라이언트에 의해 전송된 판독 메시지에 대한 예시적 표현을 제공하는데, 도 14A는 비폴링의 경우이고 도 14C는 폴링의 경우이다. 판독 메시지(1401)는 공통 헤더(1403)를 포함한다. Length(1405)는 관련 파일로부터 판독될 바이트 수로 설정된다. Opcode(1407)는 LWIO_OPCODE_READ(0x0)로 설정된다. Offset(1417)은, 파일 판독이 시작되는 바이트 위치로 설정된다. Marker(1413)는 0xFF로 설정된다. Flags(1409, 1427)는 폴 링의 경우에 0x0(1427)으로 설정되고 비폴링의 경우에는 LWIO_HDR_FLAG_INTERRUPT(0x80)(1409)으로 설정된다. Credits(1411)은 클라이언트상에서 계류 중인 I/O 요구들의 수로 설정된다. Fid(1415)는, I/O를 발행하는 File Id로 설정된다. DataVa(1419)는, 판독 데이터가 RDMA될 어드레스로 설정되고, DataMh(1421)는 관련된 메모리 핸들로 설정된다.
비폴링의 경우, ImmediateCookie(1423) 및 Cookie(1425)는 클라이언트-특정 값들로 설정된다. 이 경우, 서버는 보통의 전송 방식에 의한 LWIO_MSG_STATUS_RESPONSE로, 또는 판독이 성공적이라면 즉시 데이터를 사용한 RDMA로 판독 요구를 완결지을 수 있다. 따라서, RDMA 기록의 즉시 데이터는 판독 요구의 ImmediateCookie 값으로 설정된다. 폴링의 경우, IosVa(1431)는, 서버 응답 상태(LWIO_IO_STATUS_BLOCK)이 RDMA되는 위치로 설정되고, IosMh(1429)는 관련된 메모리 핸들로 설정된다.
비폴링의 경우, 서버는 먼저 판독 데이터를 RDMA한다. 그 다음, 서버는 LWIO_MSG_STATUS_RESPONSE로 응답할 수 있거나, 판독 데이터 RDMA로 즉시 데이터를 전송할 수 있는데, 이 경우, 즉시 데이터는 판독 요구의 ImmediateCookie 값으로 설정된다. 도 14B는 본 발명의 실시예인 비폴링의 경우에서 서버에 의해 리턴된 LWIO_MSG_STATUS_RESPONSE(1433)에 대한 예시적 표현을 제공한다.
Information(1437)은 판독될 바이트 수로 설정된다. Status(1439)는 성공을 지시하는 0으로 또는 실패를 지시하는 다른 NTSTATUS 코드로 설정된다. Cookie(1435)는 클라이언트에 의해 판독 메시지의 헤더에 설정된 Cookie 값으로 설 정된다.
폴링의 경우, 서버는 먼저 판독 데이터를 RDMA한다. 그 다음, 서버는 LWIO_IO_STATUS_BLOCK을 클라이언트로 RDMA한다. 도 14D는 본 발명의 실시예에서 서버에 의해 리턴된 LWIO_IO_STATUS_BLOCK(1441)에 대한 예시적 표현을 제공한다. Information(1443)은 판독될 바이트 수로 설정된다. Status(1445)는 성공을 지시하는 0으로 또는 실패를 지시하는 다른 NTSTATUS로 설정된다.
기록
기록 메시지는, 등록 단계 동안에 교환된 특정 Fid로 데이터를 배치하는데 사용된다. 모든 기록 데이터는 보통의 전송 연산들을 사용해 전송된다. 기록되는 데이터량은 서버의 MaxRecvBufferSize에 의해 한정된다. 클라이언트가 이것보다 많은 데이터를 전송하면, 접속은 종료된다.
도 15A 내지 도 15C는 본 발명의 실시예에서 클라이언트에 의해 전송된 기록 메시지에 대한 예시적 표현을 제공하는데, 도 15A는 비폴링의 경우이고 도 15C는 폴링의 경우이다. 기록 메시지(1501)는 공통 헤더(1503)를 포함한다. Length(1505)는 기록될 데이터의 바이트 수로 설정된다. Opcode(1507)는 LWIO_OPCODE_WRITE(0x1)로 설정된다. Offset(1517)은, 파일 데이터 기록이 시작되는 바이트 위치로 설정된다. Flags(1509, 1529)는 폴링의 경우에 0x0(1529)으로 설정되고 비폴링의 경우에는 LWIO_HDR_FLAG_INTERRUPT(0x80)(1509)으로 설정된다. Marker(1513)는 0xFF로 설정된다. Credits(1511)은 클라이언트상에서 계류 중인 I/O 요구들의 수로 설정된다. Fid(1515)는, I/O를 발행하는 File Id로 설정된다. 기록될 데이터(1527) 바로 다음에는 기록 메시지의 공통 헤더(1503)가 수반된다.
비폴링의 경우, Cookie(1525)는 클라이언트-특정 값으로 설정된다. 폴링의 경우, IosVa(1533)는, 서버 응답 상태(LWIO_IO_STATUS_BLOCK)가 RDMA되는 위치로 설정되고, IosMh(1531)는 관련된 메모리 핸들로 설정된다.
비폴링의 경우, 서버는 LWIO_MSG_STATUS_RESPONSE로 기록 메시지에 응답한다. 도 15B는 본 발명의 실시예에서 서버에 의해 리턴된 LWIO_MSG_STATUS_RESPONSE(1535)에 대한 예시적 표현을 제공한다. Information(1539)은 기록된 바이트 수로 설정된다. Status(1541)는 성공을 지시하는 0으로 또는 실패를 지시하는 다른 NTSTATUS 코드로 설정된다. Cookie(1537)는 클라이언트에 의해 기록 메시지의 헤더에 설정된 Cookie 값으로 설정된다. 폴링의 경우, 서버는 LWIO_IO_STATUS_BLOCK를 RDMA한다. 도 15D는 본 발명의 실시예에서 서버에 의해 리턴된 LWIO_IO_STATUS_BLOCK(1543)에 대한 예시적 표현을 제공한다. Information(1545)은 기록된 바이트 수로 설정된다. Status(1547)는 성공을 지시하는 0으로 또는 실패를 지시하는 다른 NTSTATUS로 설정된다.
벡터형 판독
벡터형 판독은, 등록 단계 동안에 교환된 특정 Fid로부터 데이터를 획득하고 페이지 근간의 데이터를 요구자측의 복수개 세그먼트들로 분산시키는데 사용된다. 판독된 모든 데이터는, 판독 세그먼트 각각에 대해 서버로부터의 한번의 RDMA 기록이 대응되는, RDMA 기록 방식으로 요구자에게 전송된다. 디스크로부터 판독되는 데이터는 연속적이다. 판독 데이터량은, 한번의 요구로 설명될 수 있는 수신 페이 지들의 최대 개수에 의해 한정된다. 이 한도는 서버의 MaxRecvBufferSize를 (LWIO_RDMA_REGION)의 사이즈로 나눈 값이다. LWIO_RDMA_REGION의 구조는 다음과 같다.
도 16A 내지 도 16C는 본 발명의 실시예에서 클라이언트에 의해 전송된 벡터형 판독 메시지에 대한 예시적 표현을 제공하는데, 도 16A는 비폴링의 경우이고 도 16C는 폴링의 경우이다. 판독 메시지(1601)는 하나 이상의 LWIO_RDMA_REGION 세그먼트들(1605, 1607)이 수반되는 공통 헤더(1603)를 포함한다. 헤더(1603)에서, Length(1609)는 파일로부터 판독될 데이터의 바이트 수로 설정된다. Opcode(1611)는 LWIO_OPCODE_VEC_READ(0x2)로 설정된다. Offset(1621)은, 파일 데이터 판독이 시작되는 바이트 위치로 설정된다. Flags(1613, 1631)는 폴링의 경우에 0x0(1631)으로 설정되고 비폴링의 경우에는 LWIO_HDR_FLAG_INTERRUPT(0x80)(1613)으로 설정된다. Marker(1617)는 0xFF로 설정된다. Credits(1615)은 클라이언트상에서 계류 중인 I/O 요구들의 수로 설정된다. Fid(1619)는, I/O를 발행하는 File Id로 설정된다. NumPages(1623)는, 공통 헤더(1603)에 수반되는 LWIO_RDMA_REGION들의 수로 설정된다. 페이지사이즈(PageSize; 1625)는 바이트의 로컬 페이지 사이즈로 설정된다.
비폴링의 경우, ImmeadiateCookie(1627) 및 Cookie(1629)는 클라이언트-특정 값들로 설정된다. 이 경우, 서버는 보통의 전송 방식에 의한 LWIO_MSG_STATUS_RESPONSE로, 또는 판독이 성공적이라면 즉시 데이터를 사용한 RDMA로 벡터형 판독 요구를 완결지을 수 있다. 따라서, RDMA 기록의 즉시 데이터 는 판독 요구의 ImmediateCookie(1627) 값으로 설정된다. 폴링의 경우, IosVa(1635)는, 서버 응답 상태(LWIO_IO_STATUS_BLOCK)이 RDMA되는 위치로 설정되고, IosMh(1633)는 관련된 메모리 핸들로 설정된다.
공통 헤더(1603) 바로 다음에는, 요구의 길이를 커버하기 위한 충분한 개수의 LWIO_RDMA_REGION 세그먼트들(1605, 1607)이 수반된다. 중간의 모든 세그먼트들은 한 페이지 사이즈여야 한다. 마지막 세그먼트는 페이지보다 작을 수 있지만, 백엔드 디스크 섹터 사이즈의 배수여야 한다. 본 발명의 실시예에서, LWIO_RDMA_REGION은 다음의 포맷을 가진다.
Figure 112005022629369-PCT00010
제1 LWIO_RDMA_REGION은 판독된 제1 페이지사이즈(PageSize) 바이트에 대응되고, 제2 LWIO_RDMA_REGION은 판독된 제2 페이지사이즈(PageSize) 바이트에 대응되는 식이다. DataVa(1637)는, 판독 데이터가 배치될 페이지의 시작을 표시하는 위치로 설정된다. DataMh(1639)는 DataVa(1637)의 메모리 핸들로 설정된다. Length(1641)는, Length가 더 작을 수는 있지만 백엔드 디스크 섹터 사이즈의 배수여야 하는 마지막 영역을 제외한 모든 영역들에 대한 페이지사이즈(PageSize; 1625)로 설정된다.
비폴링의 경우, 서버는 먼저 판독 데이터를 RDMA한다. 그 다음, 서버는 LWIO_MSG_STATUS_RESPONSE로 응답할 수 있거나, 판독 데이터 RDMA로 즉시 데이터를 전송할 수 있는데, 이 경우, 즉시 데이터는 판독 요구의 ImmediateCookie 값으로 설정된다. 도 16B는 본 발명의 실시예인 비폴링의 경우에서 서버에 의해 리턴된 LWIO_MSG_STATUS_RESPONSE(1643)에 대한 예시적 표현을 제공한다. Information(1647)은 판독된 바이트 수로 설정된다. Status(1649)는 성공을 지시하는 0으로 또는 실패를 지시하는 다른 NTSTATUS로 설정된다. Cookie(1645)는 클라이언트에 의해 벡터형 판독 메시지의 헤더에 설정된 Cookie 값으로 설정된다.
폴링의 경우, 서버는 먼저 판독 데이터를 RDMA한 다음, 서버는 LWIO_IO_STATUS_BLOCK을 RDMA한다. 도 16D는 본 발명의 실시예에서 서버에 의해 리턴된 LWIO_IO_STATUS_BLOCK(1651)에 대한 예시적 표현을 제공한다. Information(1653)은 판독된 바이트 수로 설정된다. Status(1655)는 성공을 지시하는 0으로 또는 실패를 지시하는 다른 NTSTATUS로 설정된다.
벡터형 기록
벡터형 기록 메시지는, 등록 단계 동안에 교환된 특정 Fid로의 모아 쓰기를 수행하는데 사용된다. 모든 기록 데이터는 보통의 전송 연산들을 사용해 전송된다. 기록되는 데이터량은 서버의 MaxRecvBufferSize에 의해 한정된다. 클라이언트가 이것보다 많은 데이터를 전송하면, 접속은 종료된다.
도 17A 내지 도 17C는 본 발명의 실시예에서 클라이언트에 의해 전송된 벡터형 기록 메시지에 대한 예시적 표현을 제공하는데, 도 17A는 비폴링, 비축약형의 경우를 나타내고, 도 17B는 비폴링, 축약형의 경우를 나타내며, 도 17C는 폴링, 축약형의 경우를 나타낸다.
기록 메시지(1701)는, 바로 뒤에 기록될 데이터(1705)가 수반되는 공통 헤더(1703)를 포함한다. 공통 헤더(1703)에서, Length(1707)는 기록 중인 데이터의 바이트 수로 설정된다. Opcode(1709)는 LWIO_OPCODE_WRITE(0x3)로 설정된다. Offset(1719)은, 파일 데이터의 기록이 시작되는 바이트 위치로 설정된다. Marker(1715)는 0xFF로 설정된다. Credits(1713)은 클라이언트상에서 계류 중인 I/O 요구들의 수로 설정된다. Fid(1717)는, I/O를 발행하는 File Id로 설정된다.
Flags(1711, 1721, 1727)는, 폴링을 지시하는 0x0(1727)으로 설정되거나, 그렇지 않으면 LWIO_HDR_FLAG_INTERRUPT(0x80)(1711)으로 설정된다. 후자의 경우, 플래그들은, 기록의 모든 페이지들이 동일한 데이터를 포함한다는 것을 지시하여 단 하나의 데이터 페이지만이 전송되게 하는 LWIO_HDR_FLAG_COLLAPSE(1721)를 포함할 수도 있다. 이것은 불필요한 데이터의 전송을 최소화하기 위한 최적화이다. LWIO_HDR_FLAG_COLLAPSE는, 등록된 파일 플래그들이 FILE_NO_INTERMEDIATE_BUFFERING(0x8)을 포함하며 인증 단계 동안에 교환된 페이지사이즈들이 서로 짝수배일 경우에만 사용될 수 있다. 축약형 I/O의 경우, NumPages(1723)는 I/O에 의해 확장된 데이터의 페이지 수로 설정된다. 마지막 페이지는 Length 파라미터로 인해 일부일 수 있다. PageSize(1725)는 바이트의 로컬 페이지 사이즈로 설정된다. 폴링의 경우에, IosVa(1731)는, 서버 응답 상태(LWIO_IO_STATUS_BLOCK)가 RDMA될 위치로 설정된다. IosMh(1729)는 관련된 메모리 핸들이다.
비폴링의 경우, 비축약형 및 축약형 I/O 모두에 대해, 서버는 LWIO_MSG_STATUS_RESPONSE로 기록 메시지에 응답한다.
도 17D는 본 발명의 실시예에서 서버에 의해 리턴된 LWIO_MSG_STATUS_RESPONSE(1733)에 대한 예시적 표현을 제공한다. Information(1737)은 기록된 바이트 수로 설정된다. Status(1739)는 성공을 지시하는 0으로 또는 실패를 지시하는 다른 NTSTATUS로 설정된다. Cookie(1735)는 클라이언트에 의해 기록 메시지의 헤더에 설정된 Cookie 값으로 설정된다.
폴링의 경우, 비축약형 및 축약형 I/O 모두에 대해,서버는 LWIO_IO_STATUS_BLOCK를 RDMA한다. 도 17E는 본 발명의 실시예에서 서버에 의해 리턴된 LWIO_IO_STATUS_BLOCK(1741)에 대한 예시적 표현을 제공한다. Information(1743)은 기록된 바이트 수로 설정된다. Status(1745)는 성공을 지시하는 0으로 또는 실패를 지시하는 다른 NTSTATUS로 설정된다.
결론
본 발명의 예시적 실시예들을 도시하고 설명하였지만, 본 발명을 벗어나지 않으면서 다양한 변화들이 이루어질 수 있다는 것을 알 수 있다. 마찬가지로, 여기에 설명된 어떠한 프로세스 단계들도 동일한 결과를 실현하기 위해 다른 단계들과 교환될 수 있다. 또한, 상술한 예시적 실시예들은 개시되어 있는 정확한 형태로 본 발명을 총망라하거나 한정하려는 것이 아니다. 오히려, 본 발명의 정신 및 범위 내에 해당되는 모든 변형들, 다른 구성들, 및 등가물들을 커버하려는 것이다.

Claims (24)

  1. 입/출력(I/O) 태스크를 제1 컴퓨터로부터 제2 컴퓨터로 오프로딩하는 시스템으로서,
    상기 제1 컴퓨터상에서 실행 중인 클라이언트와,
    상기 제2 컴퓨터상에서 실행 중인 서버와,
    네트워크 발견 단계 및 I/O 처리 단계를 포함하는 프로토콜에 따라 통신하는 상기 제1 컴퓨터와 상기 제2 컴퓨터를 링크하는 하나 이상의 RDMA 채널
    을 포함하는 시스템.
  2. 제1 항에 있어서,
    상기 I/O 처리 단계에서, 판독 연산은 RDMA를 이용하여 구현되고 기록 연산은 전송 연산을 이용하여 구현되는 시스템.
  3. 제1 항에 있어서,
    상기 프로토콜은 제2 네트워크 프로토콜과 함께 사용되는 시스템.
  4. 제3 항에 있어서,
    상기 제2 프로토콜은 SMB인 시스템.
  5. 제3 항에 있어서,
    상기 제2 프로토콜은 CIFS인 시스템.
  6. 입/출력(I/O) 태스크를 제1 컴퓨터로부터 제2 컴퓨터로 오프로딩하는 시스템으로서,
    네트워크 발견 단계 및 I/O 처리 단계를 포함하는 프로토콜에 따라 통신하는 상기 제1 컴퓨터와 상기 제2 컴퓨터를 링크하는 하나 이상의 RDMA 채널을 구비하는 시스템에 사용하기 위한 컴퓨터 프로그램 제품을 포함하는 컴퓨터-실행가능 명령어 및 컴퓨터-판독가능 데이터를 저장하는 컴퓨터-판독가능 매체.
  7. 입/출력(I/O) 태스크를 제1 컴퓨터로부터 제2 컴퓨터로 오프로딩하는 방법으로서,
    상기 제1 컴퓨터상의 클라이언트 및 상기 제2 컴퓨터상의 서버에 의해, 하나 이상의 공유되는 RDMA-가능한 제공자를 발견하는 단계와,
    상기 제2 컴퓨터상의 서버에 의한 완결을 위해, 상기 클라이언트에 의해 I/O 처리 요구를 포스트(post)하는 단계
    를 포함하는 오프로딩 방법.
  8. 제7 항에 있어서,
    상기 하나 이상의 공유되는 RDMA-가능한 제공자를 발견하는 단계는,
    상기 클라이언트에 의해 상기 서버로부터 서버 요구 리줌 키를 획득하는 단계와,
    상기 클라이언트에 의해 상기 서버로의 파이프를 개방하는 단계와,
    상기 클라이언트에 의해 상기 파이프를 통해 교섭 요구를 전송하는 단계와,
    상기 서버에 의해 상기 파이프를 통해 공통 제공자의 최소 리스트를 포함하는 교섭 응답을 전송하는 단계를 더 포함하는 오프로딩 방법.
  9. 제7 항에 있어서,
    상기 클라이언트에 의해, 공유되는 RDMA-가능한 제공자를 통해 상기 서버로의 RDMA 접속을 생성하는 단계와,
    상기 클라이언트 및 상기 서버에 의해 상기 RDMA 접속을 인증하는 단계를 더 포함하는 오프로딩 방법.
  10. 제9 항에 있어서,
    상기 클라이언트에 의해 상기 RDMA 접속을 통해 상기 서버에 사용하기 위한 하나 이상의 파일들을 등록하는 단계를 더 포함하는 오프로딩 방법.
  11. 제10 항에 있어서,
    상기 하나 이상의 파일들을 등록하는 단계는,
    상기 클라이언트에 의해 상기 서버로 파일 등록 메시지를 전송하는 단계와,
    상기 서버에 의해 상기 클라이언트로 파일 등록 완결 메시지를 전송하는 단계를 포함하는 오프로딩 방법.
  12. 제 9 항에 있어서,
    상기 RDMA 접속을 인증하는 단계는,
    상기 클라이언트에 의해 키를 포함하는 인증 요구 메시지를 상기 서버로 전송하는 단계와,
    상기 키가 상기 서버에 의해 상기 클라이언트로 전송된 선행 키와 매칭되면, 상기 서버에 의해 상기 클라이언트로 인증 응답 메시지를 전송하는 단계를 더 포함하는 오프로딩 방법.
  13. 제12 항에 있어서,
    상기 선행 키는 상기 서버에 의해 상기 클라이언트로 전송된 교섭 응답 메시지에 포함된 키인 오프로딩 방법.
  14. 제12 항에 있어서,
    상기 서버에 의해 상기 클라이언트로, 상기 인증하는 단계를 완결짓기 위한 상태 응답 메시지를 전송하는 단계를 더 포함하는 오프로딩 방법.
  15. 제7 항에 있어서,
    상기 I/O 처리 요구를 포스트하는 단계는, 상기 클라이언트에 의해, (a) 폐쇄 요구, (b) 취소 요구, (c) 판독 요구, (d) 기록 요구, (e) 벡터형 판독 요구, 및 (f) 벡터형 기록 요구 중 하나를 전송하는 단계를 포함하는 오프로딩 방법.
  16. 제15 항에 있어서,
    상기 서버에 의해, RDMA 기록 연산들을 사용하는 데이터를 전송하는 것에 의해, 상기 판독 요구 및 상기 벡터형 판독 요구를 완결짓는 단계와,
    상기 서버에 의해, 보통의 전송 연산들을 사용하는 데이터를 전송하는 것에 의해, 상기 기록 요구 및 상기 벡터형 기록 요구를 완결짓는 단계를 더 포함하는 오프로딩 방법.
  17. 제15 항에 있어서,
    상기 벡터형 기록 요구는 상기 요구의 헤더에 축약형 플래그를 포함하는 오프로딩 방법.
  18. 제7 항에 있어서,
    상기 I/O 처리 요구를 포스트하는 단계는, 상기 서버에 의한 완결이 폴링 모드이어야 하는지 여부를 지시하는 단계를 더 포함하는 오프로딩 방법.
  19. 제18 항에 있어서,
    상기 완결이 폴링 모드이어야 하는지의 여부를 지시하는 단계는, 상기 I/O 처리 요구에 대한 헤더의 인터럽트 플래그를 설정하는 것에 의해, 상기 완결이 폴링 모드가 아니어야 한다는 것을 지시하는 단계를 포함하는 오프로딩 방법.
  20. 제18 항에 있어서,
    상기 클라이언트가 상기 완결이 폴링 모드가 아니어야 한다는 것을 지시한다면, 상기 서버에 의해, 상기 제1 컴퓨터로 RDMA 전송 방식으로 상태 블록을 전송하는 것에 의해, 상기 I/O 처리 요구를 완결짓는 단계를 더 포함하는 오프로딩 방법.
  21. 제18 항에 있어서,
    상기 클라이언트가 상기 완결이 폴링 모드이어야 한다고 지시하고, 상기 클라이언트가 인터럽트 요구 메시지를 상기 서버로 전송했다면, 상기 서버에 의해 상기 클라이언트로, 보통의 전송 방식으로 인터럽트 응답 메시지를 전송하는 단게를 더 포함하는 오프로딩 방법.
  22. 제 7 항에 있어서,
    상기 I/O 처리 요구를 포스트하는 단계는, 상기 요구에 대한 헤더의 다수 크레딧들을 특정하는 단계를 더 포함하는 오프로딩 방법.
  23. 입/출력(I/O) 태스크를 제1 컴퓨터로부터 제2 컴퓨터로 오프로딩하는 방법을 구현하기 위한 컴퓨터-실행가능 명령어들을 저장하는 컴퓨터-판독가능 매체로서,
    상기 방법은,
    상기 제1 컴퓨터상의 클라이언트 및 상기 제2 컴퓨터상의 서버에 의해, 하나 이상의 공유되는 RDMA-가능한 제공자들을 발견하는 단계와,
    상기 클라이언트에 의해, 상기 제2 컴퓨터상의 서버에 의해 완결을 위해 I/O 처리 요구를 포스트하는 단계
    를 포함하는 컴퓨터-판독가능 매체.
  24. 입/출력 오프로드 프로토콜에서 버퍼들을 관리하는 방법으로서,
    서버에 의해 클라이언트로, 크레딧들의 개수로 설정된 정보 필드를 포함하는 델타 크레딧 메시지를 전송하는 단계 - 상기 개수가 음수(-N)이면, 상기 서버는 상기 클라이언트에 N개의 크레딧들을 폐기할 것을 요구함 - 와,
    상기 크레딧들의 개수가 음수(-N)이면 상기 클라이언트에 의해 상기 서버로 N개의 크레딧 메시지들을 전송하고, 음수가 아니라면 상기 클라이언트에 의해 상기 서버로 하나의 크레딧 메시지를 전송하는 단계와,
    상기 클라이언트에 의해 전송된 각각의 크레딧 메시지에 대해, 상기 서버에 의해 상기 클라이언트로 상태 응답 메시지를 전송하는 단계를 포함하는 버퍼 관리 방법.
KR1020057007528A 2003-12-31 2004-07-26 Lwio 프로토콜 KR101084897B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/749,959 US7698361B2 (en) 2003-12-31 2003-12-31 Lightweight input/output protocol
US10/749,959 2003-12-31
PCT/US2004/024026 WO2005067430A2 (en) 2003-12-31 2004-07-26 Lightweight input/output protocol

Publications (2)

Publication Number Publication Date
KR20060112178A true KR20060112178A (ko) 2006-10-31
KR101084897B1 KR101084897B1 (ko) 2011-11-17

Family

ID=34701133

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057007528A KR101084897B1 (ko) 2003-12-31 2004-07-26 Lwio 프로토콜

Country Status (17)

Country Link
US (2) US7698361B2 (ko)
EP (1) EP1700264A4 (ko)
JP (1) JP4564970B2 (ko)
KR (1) KR101084897B1 (ko)
CN (1) CN101375263B (ko)
AU (1) AU2004279182B2 (ko)
BR (1) BRPI0406413A (ko)
CA (1) CA2501521A1 (ko)
IL (1) IL168595A (ko)
MX (1) MXPA05006638A (ko)
MY (2) MY158076A (ko)
NO (1) NO20052054L (ko)
NZ (2) NZ540173A (ko)
RU (2) RU2388039C2 (ko)
TW (2) TW200522630A (ko)
WO (1) WO2005067430A2 (ko)
ZA (1) ZA200503161B (ko)

Families Citing this family (58)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7529778B1 (en) 2001-12-12 2009-05-05 Microsoft Corporation System and method for providing access to consistent point-in-time file versions
US7698361B2 (en) * 2003-12-31 2010-04-13 Microsoft Corporation Lightweight input/output protocol
US7617256B2 (en) * 2004-07-19 2009-11-10 Microsoft Corporation Remote file updates through remote protocol
US20060168094A1 (en) * 2005-01-21 2006-07-27 International Business Machines Corporation DIRECT ACCESS OF SCSI BUFFER WITH RDMA ATP MECHANISM BY iSCSI TARGET AND/OR INITIATOR
US8316129B2 (en) 2005-05-25 2012-11-20 Microsoft Corporation Data communication coordination with sequence numbers
US7549037B1 (en) * 2005-09-01 2009-06-16 Symantec Operating Corporation Efficient off-host backup of a file set clone
US8151116B2 (en) * 2006-06-09 2012-04-03 Brigham Young University Multi-channel user authentication apparatus system and method
ATE545248T1 (de) * 2006-07-27 2012-02-15 Contextream Ltd Verteiltes edge-netzwerk
US7836143B2 (en) 2007-04-25 2010-11-16 International Business Machines Corporation Message communications of particular message types between compute nodes using DMA shadow buffers
US8325633B2 (en) 2007-04-26 2012-12-04 International Business Machines Corporation Remote direct memory access
US7827024B2 (en) 2007-05-09 2010-11-02 International Business Machines Corporation Low latency, high bandwidth data communications between compute nodes in a parallel computer
US7966618B2 (en) * 2007-05-29 2011-06-21 International Business Machines Corporation Controlling data transfers from an origin compute node to a target compute node
US8037213B2 (en) 2007-05-30 2011-10-11 International Business Machines Corporation Replenishing data descriptors in a DMA injection FIFO buffer
US7921428B2 (en) 2007-06-18 2011-04-05 International Business Machines Corporation Multi-registration of software library resources
US8018951B2 (en) 2007-07-12 2011-09-13 International Business Machines Corporation Pacing a data transfer operation between compute nodes on a parallel computer
US8478834B2 (en) 2007-07-12 2013-07-02 International Business Machines Corporation Low latency, high bandwidth data communications between compute nodes in a parallel computer
US7805546B2 (en) * 2007-07-27 2010-09-28 International Business Machines Corporation Chaining direct memory access data transfer operations for compute nodes in a parallel computer
US8959172B2 (en) 2007-07-27 2015-02-17 International Business Machines Corporation Self-pacing direct memory access data transfer operations for compute nodes in a parallel computer
US8929372B2 (en) * 2007-10-30 2015-01-06 Contextream Ltd. Grid router
US8467295B2 (en) 2008-08-21 2013-06-18 Contextream Ltd. System and methods for distributed quality of service enforcement
IT1391040B1 (it) * 2008-10-01 2011-10-27 St Microelectronics Srl Procedimento per eseguire operazioni in reti di comunicazione, rete di comunicazione e prodotto informatico relativi
US8521821B2 (en) * 2009-03-17 2013-08-27 Brigham Young University Encrypted email based upon trusted overlays
US8949453B2 (en) 2010-11-30 2015-02-03 International Business Machines Corporation Data communications in a parallel active messaging interface of a parallel computer
US8806030B2 (en) * 2010-12-06 2014-08-12 Microsoft Corporation Multichannel connections in file system sessions
US8631277B2 (en) 2010-12-10 2014-01-14 Microsoft Corporation Providing transparent failover in a file system
US9146765B2 (en) 2011-03-11 2015-09-29 Microsoft Technology Licensing, Llc Virtual disk storage techniques
FR2973185B1 (fr) * 2011-03-22 2013-03-29 Sagem Defense Securite Procede et dispositif de connexion a un reseau de haute securite
US9331955B2 (en) * 2011-06-29 2016-05-03 Microsoft Technology Licensing, Llc Transporting operations of arbitrary size over remote direct memory access
US8856582B2 (en) 2011-06-30 2014-10-07 Microsoft Corporation Transparent failover
US8949328B2 (en) 2011-07-13 2015-02-03 International Business Machines Corporation Performing collective operations in a distributed processing system
US20130067095A1 (en) 2011-09-09 2013-03-14 Microsoft Corporation Smb2 scaleout
US8788579B2 (en) 2011-09-09 2014-07-22 Microsoft Corporation Clustered client failover
KR20140065009A (ko) 2011-10-27 2014-05-28 후아웨이 테크놀러지 컴퍼니 리미티드 데이터 고속 분배 방법 및 장치
US8930962B2 (en) 2012-02-22 2015-01-06 International Business Machines Corporation Processing unexpected messages at a compute node of a parallel computer
CN102708062A (zh) * 2012-04-10 2012-10-03 深圳市佳信捷电子有限公司 基于数据块的多媒体存储方法和装置
US9111081B2 (en) 2012-06-26 2015-08-18 International Business Machines Corporation Remote direct memory access authentication of a device
US9251201B2 (en) * 2012-12-14 2016-02-02 Microsoft Technology Licensing, Llc Compatibly extending offload token size
US9986028B2 (en) * 2013-07-08 2018-05-29 Intel Corporation Techniques to replicate data between storage servers
AU2013245529A1 (en) * 2013-10-18 2015-05-07 Cisco Technology, Inc. Network Interface
US20150326684A1 (en) * 2014-05-07 2015-11-12 Diablo Technologies Inc. System and method of accessing and controlling a co-processor and/or input/output device via remote direct memory access
CN104202391B (zh) * 2014-08-28 2018-09-25 浪潮(北京)电子信息产业有限公司 共享系统地址空间的非紧耦合系统间的rdma通信方法
RU2599937C1 (ru) * 2015-03-26 2016-10-20 Общество с ограниченной ответственностью "Научно-производственное предприятие "Цифровые решения" Способ предотвращения сбоев в локальной компьютерной сети, вызванных возникновением неправильно настроенных узлов
US9952797B2 (en) 2015-07-31 2018-04-24 Netapp, Inc. Systems, methods and devices for addressing data blocks in mass storage filing systems
US10257273B2 (en) * 2015-07-31 2019-04-09 Netapp, Inc. Systems, methods and devices for RDMA read/write operations
RU2638781C2 (ru) * 2016-09-29 2017-12-15 Общество с ограниченной ответственностью "ГРЭК" Способ организации прямого доступа в память при передаче информации между физическими объектами
JP2019016101A (ja) * 2017-07-05 2019-01-31 富士通株式会社 情報処理システム、情報処理装置、および情報処理システムの制御方法
US10523675B2 (en) * 2017-11-08 2019-12-31 Ca, Inc. Remote direct memory access authorization
RU2714219C1 (ru) 2018-09-14 2020-02-13 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования передачи операций ввода/вывода
RU2718215C2 (ru) 2018-09-14 2020-03-31 Общество С Ограниченной Ответственностью "Яндекс" Система обработки данных и способ обнаружения затора в системе обработки данных
RU2731321C2 (ru) 2018-09-14 2020-09-01 Общество С Ограниченной Ответственностью "Яндекс" Способ определения потенциальной неисправности запоминающего устройства
RU2721235C2 (ru) 2018-10-09 2020-05-18 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для маршрутизации и выполнения транзакций
RU2714602C1 (ru) 2018-10-09 2020-02-18 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для обработки данных
RU2711348C1 (ru) 2018-10-15 2020-01-16 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для обработки запросов в распределенной базе данных
CN109377778B (zh) * 2018-11-15 2021-04-06 浪潮集团有限公司 一种基于多路rdma和v2x的协同自动驾驶系统及方法
RU2714373C1 (ru) 2018-12-13 2020-02-14 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования выполнения операций ввода/вывода
RU2749649C2 (ru) 2018-12-21 2021-06-16 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для планирования обработки операций ввода/вывода
RU2720951C1 (ru) 2018-12-29 2020-05-15 Общество С Ограниченной Ответственностью "Яндекс" Способ и распределенная компьютерная система для обработки данных
RU2746042C1 (ru) 2019-02-06 2021-04-06 Общество С Ограниченной Ответственностью "Яндекс" Способ и система для передачи сообщения

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10612A (en) * 1854-03-07 Seaman
WO1995003586A1 (en) * 1993-07-21 1995-02-02 Persistence Software, Inc. Method and apparatus for generation of code for mapping relational data to objects
US6014681A (en) * 1997-07-15 2000-01-11 Microsoft Corporation Method for saving a document using a background save thread
US6226680B1 (en) * 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US6219761B1 (en) * 1998-05-06 2001-04-17 International Business Machines Corporation Load/store assist engine
US6356863B1 (en) * 1998-09-08 2002-03-12 Metaphorics Llc Virtual network file server
EP1232450A2 (en) * 1999-09-29 2002-08-21 Cyberset Technologies, Inc. Method and apparatus for an active file system
US6718370B1 (en) * 2000-03-31 2004-04-06 Intel Corporation Completion queue management mechanism and method for checking on multiple completion queues and processing completion events
US7103626B1 (en) * 2000-05-24 2006-09-05 Hewlett-Packard Development, L.P. Partitioning in distributed computer system
JP4192416B2 (ja) * 2000-06-08 2008-12-10 株式会社日立製作所 計算機システムおよびそのデータ転送方法
US7313614B2 (en) * 2000-11-02 2007-12-25 Sun Microsystems, Inc. Switching system
WO2002037225A2 (en) 2000-11-02 2002-05-10 Pirus Networks Switching system
US6891635B2 (en) * 2000-11-30 2005-05-10 International Business Machines Corporation System and method for advertisements in web-based printing
US6976174B2 (en) * 2001-01-04 2005-12-13 Troika Networks, Inc. Secure multiprotocol interface
US6898638B2 (en) * 2001-01-11 2005-05-24 International Business Machines Corporation Method and apparatus for grouping data for transfer according to recipient buffer size
US6748502B2 (en) * 2001-01-12 2004-06-08 Hitachi, Ltd. Virtual volume storage
US6898740B2 (en) * 2001-01-25 2005-05-24 Hewlett-Packard Development Company, L.P. Computer system having configurable core logic chipset for connection to a fault-tolerant accelerated graphics port bus and peripheral component interconnect bus
US7401126B2 (en) * 2001-03-23 2008-07-15 Neteffect, Inc. Transaction switch and network interface adapter incorporating same
US20020144037A1 (en) * 2001-03-29 2002-10-03 Bennett Joseph A. Data fetching mechanism and method for fetching data
US8051212B2 (en) * 2001-04-11 2011-11-01 Mellanox Technologies Ltd. Network interface adapter with shared data send resources
US20020184362A1 (en) * 2001-05-31 2002-12-05 International Business Machines Corporation System and method for extending server security through monitored load management
US6832297B2 (en) * 2001-08-09 2004-12-14 International Business Machines Corporation Method and apparatus for managing data in a distributed buffer system
WO2003019393A1 (en) * 2001-08-24 2003-03-06 Intel Corporation A general intput/output architecture, protocol and related methods to implement flow control
US6895590B2 (en) * 2001-09-26 2005-05-17 Intel Corporation Method and system enabling both legacy and new applications to access an InfiniBand fabric via a socket API
US20030065856A1 (en) * 2001-10-03 2003-04-03 Mellanox Technologies Ltd. Network adapter with multiple event queues
US20030145230A1 (en) * 2002-01-31 2003-07-31 Huimin Chiu System for exchanging data utilizing remote direct memory access
US8005966B2 (en) * 2002-06-11 2011-08-23 Pandya Ashish A Data processing system using internet protocols
US20040003069A1 (en) * 2002-06-28 2004-01-01 Broadcom Corporation Selective early drop method and system
US6760793B2 (en) * 2002-07-29 2004-07-06 Isys Technologies, Inc. Transaction credit control for serial I/O systems
US7107385B2 (en) * 2002-08-09 2006-09-12 Network Appliance, Inc. Storage virtualization by layering virtual disk objects on a file system
US7051140B2 (en) * 2002-11-13 2006-05-23 International Business Machines Corporation Connector that enables aggregation of independent system resources across PCI/PCI-X bus and interlocked method for aggregating independent system resources across PCI/PCI-X bus
US7366092B2 (en) * 2003-10-14 2008-04-29 Broadcom Corporation Hash and route hardware with parallel routing scheme
US7457861B1 (en) * 2003-12-05 2008-11-25 Unisys Corporation Optimizing virtual interface architecture (VIA) on multiprocessor servers and physically independent consolidated NICs
US6996070B2 (en) * 2003-12-05 2006-02-07 Alacritech, Inc. TCP/IP offload device with reduced sequential processing
US8549170B2 (en) * 2003-12-19 2013-10-01 Nvidia Corporation Retransmission system and method for a transport offload engine
US20050137966A1 (en) * 2003-12-19 2005-06-23 Munguia Peter R. Flow control credit synchronization
US7698361B2 (en) * 2003-12-31 2010-04-13 Microsoft Corporation Lightweight input/output protocol

Also Published As

Publication number Publication date
EP1700264A4 (en) 2011-06-15
JP2007527057A (ja) 2007-09-20
TW201240413A (en) 2012-10-01
AU2004279182A1 (en) 2005-07-14
NO20052054L (no) 2005-06-10
AU2004279182B2 (en) 2010-03-11
NZ580159A (en) 2011-01-28
TW200522630A (en) 2005-07-01
RU2388039C2 (ru) 2010-04-27
CN101375263A (zh) 2009-02-25
MY158076A (en) 2016-08-30
WO2005067430A2 (en) 2005-07-28
ZA200503161B (en) 2008-01-30
RU2009109685A (ru) 2010-09-27
WO2005067430A3 (en) 2008-04-24
US20050198113A1 (en) 2005-09-08
US7698361B2 (en) 2010-04-13
IL168595A (en) 2011-02-28
JP4564970B2 (ja) 2010-10-20
MY143575A (en) 2011-05-31
NZ540173A (en) 2009-11-27
RU2005120695A (ru) 2006-01-20
NO20052054D0 (no) 2005-04-26
CN101375263B (zh) 2012-06-20
KR101084897B1 (ko) 2011-11-17
BRPI0406413A (pt) 2005-10-04
MXPA05006638A (es) 2006-02-22
CA2501521A1 (en) 2005-06-30
EP1700264A2 (en) 2006-09-13
US20100161855A1 (en) 2010-06-24

Similar Documents

Publication Publication Date Title
KR101084897B1 (ko) Lwio 프로토콜
US10165051B2 (en) High performance IP processor using RDMA
EP2317732B1 (en) Data communication protocol
KR101036751B1 (ko) 데이터 통신 프로토콜
US8180928B2 (en) Method and system for supporting read operations with CRC for iSCSI and iSCSI chimney
EP1759317B1 (en) Method and system for supporting read operations for iscsi and iscsi chimney
US7895344B2 (en) Method and apparatus for remote management
Neeser et al. SoftRDMA: Implementing iWARP over TCP kernel sockets
KR101130475B1 (ko) 데이터 통신 프로토콜

Legal Events

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