KR102047142B1 - 원격 직접 메모리 액세스를 통한 임의 사이즈의 전송 기법 - Google Patents

원격 직접 메모리 액세스를 통한 임의 사이즈의 전송 기법 Download PDF

Info

Publication number
KR102047142B1
KR102047142B1 KR1020137034797A KR20137034797A KR102047142B1 KR 102047142 B1 KR102047142 B1 KR 102047142B1 KR 1020137034797 A KR1020137034797 A KR 1020137034797A KR 20137034797 A KR20137034797 A KR 20137034797A KR 102047142 B1 KR102047142 B1 KR 102047142B1
Authority
KR
South Korea
Prior art keywords
packet
data
field
server
negotiation request
Prior art date
Application number
KR1020137034797A
Other languages
English (en)
Other versions
KR20140034872A (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 KR20140034872A publication Critical patent/KR20140034872A/ko
Application granted granted Critical
Publication of KR102047142B1 publication Critical patent/KR102047142B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/1824Distributed file systems implemented using Network-attached Storage [NAS] architecture
    • G06F16/183Provision of network file services by network file servers, e.g. by using NFS, CIFS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/12Arrangements for detecting or preventing errors in the information received by using return channel
    • H04L1/16Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
    • H04L1/18Automatic repetition systems, e.g. Van Duuren systems
    • H04L1/1829Arrangements specially adapted for the receiver end
    • H04L1/1835Buffer management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/39Credit based
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/70Admission control; Resource allocation
    • H04L47/72Admission control; Resource allocation using reservation actions during connection setup
    • H04L47/722Admission control; Resource allocation using reservation actions during connection setup at the destination endpoint, e.g. reservation of terminal resources or buffer space
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9057Arrangements for supporting packet reassembly or resequencing
    • 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]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/54Store-and-forward switching systems 
    • H04L12/56Packet switching systems
    • H04L12/5601Transfer mode dependent, e.g. ATM
    • H04L2012/5603Access techniques

Abstract

여기에 기술된 실시예들은 일반적으로 데이터 오퍼레이션을 구현하기 위한 프로토콜, 예컨대 RDMA 전송들의 상부에 있는 SMB의 버전에 관한 것이다. 실시예들에서 시스템과 방법들은 RDMA 연결을 협상하고 협상된 통신을 이용하여 SMB2 데이터를 전송하기 위해 새 메시지들을 특정하는 프로토콜 정의를 이용한다. 새 프로토콜 메시지는 메시지 사이즈, 메시지들의 개수, 및 RDMA를 통해 SMB2 데이터를 보내기 위한 다른 정보를 결정하기 위해 새로운 헤더 정보를 포함할 수 있다. 헤더 정보는 RDMA 및 SMB2 사이에서 메시지 사이즈 요건들의 차이를 조정하는 데 사용된다. SMB 다이렉트 프로토콜은 SMB2 데이터가 여러 개의 개별 RDMA 메시지들로 분할될 수 있게 하여, 이후 수신자가 그 RDMA 메시지들을 단일 SMB2 요청이나 SMB2 응답 안에 논리적으로 연결시킬 수 있다. SMB 다이렉트 프로토콜은 또한, 효율적 RDMA 직접 배치를 통해 애플리케이션 데이터를 전송하고 전송이 완료될 때 애플리케이션 데이터의 이용 가능성을 신호하게 할 수 있다.

Description

원격 직접 메모리 액세스를 통한 임의 사이즈의 전송 기법{TRANSPORTING OPERATIONS OF ARBITRARY SIZE OVER REMOTE DIRECT MEMORY ACCESS}
서버 메시지 블록(Server Message Block(SMB))이나 그들의 버전들, 예컨대 SMB2와 같은 파일 액세스 프로토콜들은 네트워크 상의 노드들 사이의 파일들 및 각종 통신에 대한 공유 액세스를 제공하는 데 주로 사용되는 애플리케이션 계층 네트워크 프로토콜들로서 동작할 수 있다. 역사적으로, SMB나 SMB2가 전송 제어 프로토콜(TCP) 전송들 및 전통적 네트워크 인프라 상에서 동작하였다. SMB2는 범용 원격 파일 액세스를 위한 프로토콜로서 매우 성공적이었지만, SMB2는 고 처리량 및 저 레이턴시(대기시간) 파일 입출력이 요구되는 원격 파일 액세스를 위해서는 널리 채택되지 못하였다.
원격 직접 메모리 액세스(Remote Direct Memory Access(RDMA))는 한 컴퓨터의 메모리로부터 다른 컴퓨터의 운영체제 개입 없이 다른 컴퓨터의 메모리로의 직접 메모리 액세스이다. 이러한 직접 전송은 네트워크를 통한 고 처리량, 저 레이턴시 데이터 전송을 가능하게 하며, 이것은 특히 성능이 중요한 배치들에서 유용하다. 애플리케이션이 RDMA 읽기나 쓰기 요청을 수행할 때, 애플리케이션 데이터는 중앙 처리부(CPU)(또는 단순히 프로세서라 칭함)나 전송 시의 운영체제를 개입시키지 않는 RDMA 가능 네트워크 어댑터들을 사용하여 소스 메모리 버퍼로부터 목적지 메모리 버퍼로 직접 전달된다. 이러한 RDMA 전송들은 레이턴시를 줄이고 고속 메시지 전송을 가능하게 한다. 공교롭게도 RDMA의 이점들은 SMB2를 사용하는 시스템들에 의해 활용되고 있지 못하는데, 이는 SMB2가 RDMA를 이용하여 동작하지 않았기 때문이다.
이 발명의 배경 부분에서 특정 문제들이 다루어졌지만, 본 개시는 어떤 식으로든 그러한 특정 문제들을 해결하는 데 국한되는 것으로 의도되지 않는다.
실시예들은 일반적으로 RDMA 전송들 최상부의 SMB2 동작들(또는 SMB 동작들의 다른 버전이나 예컨대 파일 액세스 프로토콜 동작들)과 같은 데이터 오퍼레이션들을 구현하기 위한 프로토콜 및 프로세싱에 관한 것이다. 실시예들에서, 프로토콜 정의가 RDMA 연결의 협상 및 예컨대 협상된 연결을 이용하여 SMB2를 전송하기 위한 새 메시지들을 특정한다. 일 실시예에서 RDMA 전송들 최상부의 SMB2를 구현하기 위한 프로토콜은 SMB 다이렉트 프로토콜이다. 그러나, 다른 실시예들은 다른 SMB 프로토콜들, SMB 프로토콜 버전들 또는 본 개시의 사상과 범위로부터 벗어나지 않은 기타 데이터 오퍼레이션 프로토콜들을 제공한다. 일 실시예에 따르면, 새 SMB 다이렉트 메시지는 비한정적으로 이하의 것들 중 하나 이상을 포함할 수 있는 새 헤더 정보를 포함할 수 있다: CreditsRequested, CreditsGranted, Flags, Reserved, RemainingDataLength, DataOffset, 및 DataLength. 헤더 정보는 RDMA 전송들이 수신자에 의해서만 고정된 사이즈의 메시지들을 수신하는 것을 지원하기 때문에 사용되며, SMB2 메시지 사이즈는 약 100 바이트에서 백만 바이트를 넘는 아주 큰 메시지들까지 넓게 가변될 수 있다. SMB2 프로토콜은 RMDA 기능의 존재를 인식하도록 수정되고, SMB 다이렉트 프로토콜은 RDMA 메시지들의 고정 사이즈 제한과 SMB2 메시징에 고유한 불확정 사이즈 둘 모두를 수용하기 위해 여러 개의 개별 RDMA 메시지들이 단일 요청이나 응답 안에 논리적으로 연결될 수 있게 하기 위해 새 계층을 네트워킹 스택에 추가한다. SMB2 프로토콜에 대한 변경 및 SMB 다이렉트 프로토콜의 추가는 피어(peer)들의 메모리들 사이에서 데이터의 직접 전송을 가능하게 한다. 실시예에서 SMB2 서버는 데이터의 직접 배치를 수행하기 위해 RDMA를 이용하여 클라이언트의 메모리에 대한 읽고 쓰기를 할 수 있다. 서버는 SMB2 읽기를 완료하기 위해 클라이언트에 대한 RDMA 쓰기를 수행하고 SMB2 쓰기를 완료하기 위해 RDMA 읽기를 수행한다. SMB 다이렉트 프로토콜은 피어들의 메모리들 간 SMB/SMB2 데이터의 직접 전송을 가능하게 하지만, 실시예들에 따라 다른 프로토콜들에 적응될 수 있다. 실시예들에 따르면, SMB 다이렉트 프로토콜의 양방향 피어-투-피어 특성은 수많은 유형의 데이터 전송 동작들에 적합하다.
RDMA 전송들은 또한, 다시 말해 수신자에 의해서만 고정되는 값을 가지고 어느 때에나 처리될 수 있는 메시지들의 개수를 제한한다. 이러한 RDMA 요건에 부합하기 위해, 실시예들은 피어들이 서로 상호 피어에 의해 요청되고 부여된 수치들인 "크레딧들(credits)"을 발송자가 수신자에게 보낼 수 있는 RDMA 메시지들의 개수를 특정하는 프로토콜 헤더 안에 할당하거나 교환하도록 제공한다. 크레딧들은 동적이며 각각의 피어에 의해 독립적으로 관리된다. SMB2 교환을 수행하기 위해 충분한 크레딧들을 관리하고 이용 가능하게 하는 규칙들이 여기 개시된 실시예들에서 프로토콜로서 정의된다.
실시예들에서 독립적인 양방향 크레딧들의 제공은 각각의 피어가 명백한 협상이나 수신 피어에 의한 사전 지식 및 동의 없이 요청 및 응답을 보내는 것을 가능하게 할 수 있다. RDMA와 관련된 순차 발송들은 RDMA 프로세싱 시의 에러 유발 없이, 그리고 그러한 상태들이 일어날 때 덜 효율적으로 협상된 전송들에 의존하지 않고, 예기치 않게 큰 메시지들의 교환을 가능하게 할 수 있다.
실시예들에 따라, 추가 메시지들이 프로토콜 버전 및 기타 파라미터들의 협상을 위해 사용될 수 있다. 협상 요청 메시지는 예컨대, CreditsRequested, Reserved, MinVersion, MaxVersion, OutboundSendSize, MaxInboundSendSize 등에 대한 필드들을 포함할 수 있다. 이어서 요청 메시지에 대한 응답을 통해 보내지는 협상 응답은 예컨대, CreditsRequested, CreditsGranted, Version, Reserved, Status, OutboundSendSize, InboundSendSize 등에 대한 필드들을 포함할 수 있다. 이러한 파라미터들은 프로토콜의 기능들, 자원들의 단대단 최적화 및 추후 개선되는 버전들과의 호환성에 대한 협상을 지원한다.
본 요약은 이하의 상세한 설명에 자세히 기술되는 개념들의 발췌를 간략한 형식으로 소개하기 위해 제공된다. 본 요약은 청구된 발명 대상의 주요하고 필수적 특징을 확인하도록 의도되거나 어떤 식으로든 청구된 발명 대상의 범위를 한정하는 데 사용되도록 의도된 것이 아니다.
본 개시의 실시예들은 유사 참조부호들이 유사 항목들을 나타내는 첨부 도면들을 참조하여 보다 용이하게 기술될 수 있다.
도 1은 본 개시의 실시예들에 따라 RDMA를 통해 SMB2 메시지들을 교환하기 위한 환경 또는 시스템의 예시적인 논리적 표현을 도시한다.
도 2a는 본 개시의 실시예들에 따라 RDMA를 통해 SMB2 메시지들을 보내기 위한 클라이언트 시스템의 예시적인 논리적 표현을 도시한다.
도 2b는 본 개시의 실시예들에 따라 RDMA를 통해 SMB2 메시지들을 수신하기 위한 서버 시스템의 예시적인 논리적 표현을 도시한다.
도 3a-3e는 본 개시의 실시예들에 따라 SMB2 메시지들을 이용하여 RDMA를 통해 데이터를 교환할 때 송수신되는 메시지들에 대한 논리적 표현들을 도시한다.
도 4는 본 개시의 실시예들에 따라 SMB2를 이용하여 RDMA를 통해 통신을 협상하는 프로세스의 동작 특성들을 도시한 흐름도를 예시한다.
도 5a-5d는 본 개시의 실시예들에 따라 SMB2를 이용하여 RDMA를 통해 데이터를 교환하는 프로세스의 동작 특성들을 도시한 흐름도를 예시한다.
도 6은 본 개시의 실시예들에 따라 RDMA 직접 데이터 전송을 이용하여 데이터를 교환하는 프로세스의 동작 특성들을 도시한 흐름도를 예시한다.
도 7은 본 개시의 실시예들이 구현될 수 있는 예시적 컴퓨팅 시스템을 도시한다.
본 개시는 지금부터 특정 실시예들이 도시된 첨부 도면들을 참조하여 보다 충분하게 예시적 실시예들을 기술할 것이다. 그러나, 다른 양태들이 많은 다양한 형식들로 구현될 수 있으며, 본 개시에 특정 실시예들을 포함시키는 것이 그러한 양태들을 본 명세서에 기술된 실시예들로 한정하는 것으로 해석되지 않아야 한다. 그보다, 도면에 도시된 실시예들은 철저하고 완벽하며 당업자에게 의도한 범위를 충분히 전달하는 개시를 제공하기 위해 포함되는 것이다. 선택적 구성요소들이나 동작들을 보이기 위해 파선이 사용될 수 있다.
실시예들은 일반적으로 RDMA 연결을 통해 SMB2 데이터를 교환하기 위한 시스템, 방법 및 프로토콜에 관한 것이다. RDMA는 데이터 전송 시 이점을 제공한다. 예를 들어, RDMA는 한 메모리에서 다른 장치나 시스템의 메모리로의 전송을 수행한다. 이러한 전송은 프로세서를 개입시키지 않으며, 그에 따라 데이터 전송 시 수반되는 오버헤드를 줄인다. 또한, 전송 관리 시 프로세서의 개입 없이 RDMA는 보다 적은 클록 사이클을 통해 데이터를 전송한다. 따라서 RDMA는 저 레이턴시 고 대역폭 연결을 제공한다.
일반적으로 SMB2와 같은 SMB의 버전은 네트워크 상의 노드들 사이에서 파일들 및 기타 통신들에 대한 공유된 액세스를 제공하는 데 사용되는 애플리케이션 계층 네트워크 프로토콜이다. 따라서, SMB 및 SMB2는 파일 액세스 동작 프로토콜들의 예들이다. SMB2는 클라이언트(들) 및 서버(들) 사이의 메시지 교환에서 데이터의 전송을 가능하게 한다. 이 명세서의 일부 실시예들에 대한 설명은 SMB2를 참조한다. 그러나, 다른 실시예들에서는 본 개시의 사상 및 범위로부터 벗어나지 않으면서 어떤 버전의 SMB나 기타 파일 액세스 동작 프로토콜이라도 사용될 수 있다.
일반적으로 동작의 차이들로 인해, SMB2(또는 SMB)는 데이터를 전송하는 데 있어 현재 RDMA를 통해 동작하지 않으며 대신 TCP를 이용한다. 본 실시예들은 RDMA 가능 네트워크 프로토콜을 통해 SMB2 메시지들을 교환하기 위한 시스템 및 프로토콜들을 생성한다. 첫째, 집합적으로 피어들이라 불릴 수 있는 클라이언트 및/또는 서버가 SMB2의 요소를 이용하여 서로의 기능들이나 능력들을 발견한다. 일 실시예에서 클라이언트에 의해 서버에 대한 정보를 요구하는 요청이 보내진다. 응답하는 서버는 서버가 가진 네트워크 인터페이스 카드들(NIC들)의 개수, NIC들을 위한 인터넷 프로토콜(IP) 어드레스, NIC들의 속도, NIC들이 RDMA 가능하지 여부 및/또는 가능하다면 IP 어드레스에 대한 정보와 함께 응답할 수 있다. 실시예들에서 요청한 클라이언트는 서버와 어떻게 인터페이스할지를 결정하기 위해 이 정보를 이용할 수 있다.
서버가 RDMA 가능하면, 본 개시의 실시예들에 따라 RDMA 가능 클라이언트는 이제 그 서버와 RDMA 연결을 협상할 수 있다. 실시예들에서 RDMA 인터페이스라 불리는 새로운 인터페이스는 RDMA 가능 네트워크 어댑터 및 다른 시스템 구성요소들(SMB 클라이언트 포함) 사이의 인터페이스이다. 또한, 새로운 모듈이 SMB 다이렉트 클라이언트/서버라 불리는 스택에 추가된다. 먼저, 가능하게는 기능 요청에 응하여 SMB 다이렉트 클라이언트가 다른 피어로부터 메시지를 수신하기 위해 메모리 버퍼의 적어도 일부를 예약함으로써 수신을 사전 포스팅(pre-post)한다. 그런 다음 SMB 다이렉트 클라이언트는 SMB 다이렉트 협상 요청 패킷을 보낼 수 있다. SMB 다이렉트 협상 요청은 피어들 사이에 SMB 다이렉트 연결을 설정하는 프로세스를 시작한다. 실시예들에 따르면, SMB 다이렉트 협상 요청은 RDMA 연결이 어떻게 기능할지를 규정하는 하나 이상의 필드들을 포함한다.
실시예들에서, SMB 다이렉트 협상 요청의 일부는 "크레딧들"에 대한 요청이다. 크레딧들은 수신하는 피어의 메모리 버퍼 내 공간의 할당치이다. RDMA가 한 메모리에서 다른 메모리로 직접 전송하기 때문에, 수신하는 피어는 송신하는 피어가 전송된 데이터를 배치할 수 있는 메모리 버퍼 내 공간을 예약한다. 메모리 버퍼들은 블록 단위(가령, 1Kbyte 블록 단위)로 할당된다. 실시예들에서, SMB 다이렉트 연결이 설정된 후 블록 사이즈가 변경되지 않는다는 점에서 할당치들이 세팅된다. 다른 실시예들에서 블록 사이즈가 변경될 수 있는 경우 할당치들은 세팅되지 않는다. 할당치들이 세팅되는 경우, 메모리 버퍼에 대한 어떠한 전송이든 그 블록 사이즈를 초과할 수 없을 것이다. 블록 사이즈보다 큰 사이즈를 가진 SMB2 데이터를 전송하기 위해, 발송자는 메모리 버퍼의 둘 이상의 할당치 안에 저장되는 둘 이상의 패킷들을 발송한다. 메모리 할당치들을 예약하기 위해, 보내는 피어가 크레딧들을 요청하며, 이때 요청되는 크레딧들의 개수는 내부 정책에 의해 관리될 수 있으며 메시지 구성에 의해 반드시 영향을 받는 것은 아니다. 각각의 크레딧은 메모리 버퍼의 어느 블록을 나타내며, 따라서 요청자가 다른 피어에게 보낼 수 있는 메시지를 나타낸다.
본 개시의 실시예들에서 서버는 응답, 예컨대 SMB 다이렉트 협상 응답을 요청자에게 보낼 수 있다. 이러한 SMB 다이렉트 협상 응답은 또한, RDMA 연결을 정의하는 다양한 필드들을 포함한다. 요청에 응하여, SMB 다이렉트 협상 응답은 다수의 크레딧들을 클라이언트에 제공한다. 또한 SMB 다이렉트 협상 응답은 클라이언트의 메모리 버퍼 내 할당치를 예약하는 크레딧들을 요구할 수도 있다. 실시예들에서 SMB 다이렉트 협상 요청 및 SMB 다이렉트 협상 응답의 교환이 RDMA 연결을 설정한다. 그런 다음 SMB2 데이터가 그 연결을 통해 교환될 수 있다.
실시예들에 따르면 RDMA 연결을 통한 SMB2의 교환은 적어도 하나의 패킷 전송을 포함한다. 전송된 SMB2 데이터가 블록 사이즈보다 작으면, SMB 다이렉트 데이터 전송 패킷이라 불리는 하나의 패킷만이 전송될 수 있다. 그러나 전송될 SMB2 데이터가 블록 사이즈보다 크면, 일 실시예에 따라 둘 이상의 SMB 다이렉트 데이터 전송 패킷들이 전송될 수 있다. RDMA는 패킷들의 순차화된 수신을 가능하게 한다. 따라서 통신을 통해 수신된 제2패킷이 제1수신 패킷 바로 뒤에 배치될 것이다. 이러한 RDMA의 이점을 이용하기 위해, SMB 다이렉트 데이터 전송 패킷들은 전송될 SMB2 데이터의 총량 및 현재의 패킷 뒤에 얼마나 많은 데이터가 전송되도록 남아 있는지를 알리기 위한 필드들을 포함한다. 이런 식으로 SMB 다이렉트 피어들은 SMB 전송이 완료되는 때를 판단할 수 있으며, SMB2 데이터가 다시 모아질 수 있다. 그에 따라, SMB 다이렉트 프로토콜은 실시예들에서, RDMA를 통한 SMB2 데이터 전송과 관련된 문제를 극복하면서 저 레이턴시 및 저 오버헤드를 가지고 SMB2 데이터의 빠른 전송을 제공한다.
여기 개시된 실시예들에 따라 RDMA 연결을 통한 SMB2 데이터 교환을 위한 예시적 논리 환경 또는 시스템(100)이 도 1에 도시된다. 연결 피어들(클라이언트(102) 및 서버(106)라고도 칭함)(102 및 106)은 네트워크(104)를 통해 RDMA NIC들(RNIC들)(108a 및 108b) 사이의 RDMA 연결을 거쳐 SMB2 데이터를 이동할 수 있다. 연결 피어는 예컨대 도 7과 관련하여 기술된 바와 같은 어떤 컴퓨터 시스템일 수 있다. 연결 피어들은 도 1에서 클라이언트/애플리케이션 서버(102) 및 파일 서버(106)로서 도시된다. 그러나, 이러한 피어들은 예로서만 제공되는 것이다. 모든 타입의 클라이언트(들)이나 서버(들)이 실시예들 안에서 연결 피어로서 기능할 수 있다. 따라서, RDMA 연결들이 예컨대 여러 클라이언트들, 여러 서버들, 서버 팜(들), 서버 클러스터(들), 메시지 서버(들) 사이나, 클라이언트(들) 및 서버(들) 사이에 있을 수 있다. 클라이언트/애플리케이션 서버(102) 및 파일 서버(106)는 여기 개시된 실시예들의 가르침을 이해하기 위한 목적의 예들로서만 제공된다.
SMB2 데이터가 네트워크(104)를 통해 이동될 때, 네트워크(104)는 예컨대 도 7과 관련하여 기술된 것과 같은 것일 수 있다. 네트워크(104)는 개별적인 단일 네트워크들로서 도시되지만 당업자에 의해 일반적으로 이해되는 어떤 유형의 네트워크라도 될 수 있다. 일 실시예에 따르면, 네트워크는 글로벌 네트워크(가령, 인터넷이나 월드 와이드 웹, 즉 줄여서 "Web")일 수 있다. 그것은 LAN(local area network), 예컨대 인트라넷이나 WAN(wide area network)일 수도 있다. 실시예들에 따르면, 네트워크(104)를 통한 통신은 하나 이상의 표준 패킷 기반 포맷들, 가령 H.323, IP, 이더넷 및/또는 ATM에 따라 발생한다.
또한 실시예들에서 RNIC(108)(a 및/또는 b)는 어떤 네트워크 인터페이스 카드, 네트워크 어댑터 및/또는 RDMA를 지원하는 네트워크 인터페이스 제어기일 수 있다. RNIC들을 제공하는 여러 판매자들이 존재한다. 예컨대 iWARP 또는 InfiniBand는 RDMA를 지원하는 네트워크 프로토콜들이다. RNIC들은 메모리(110a)에서 메모리(110b)까지 그리고 그 반대로 데이터의 직접 전송을 허용하는 RDMA를 지원할 수 있다. 이러한 데이터 전송들은 프로세서(112a 또는 112b)의 감독을 요하거나 포함하지 않는다. 따라서, 본 개시의 실시예들에 따르면, RDMA 전송들은 고 대역폭, 저 레이턴시 및 저 오버헤드이다. 프로세서들(112) 및 메모리들(110)은 예컨대 도 7과 관련하여 기술된 것과 같은 것일 수 있다.
도 1은 RDMA를 통한 SMB2 데이터 교환에 대한 일반적인 환경을 도시한 것인 반면, 도 2a는 여기 개시된 실시예들에 따라 RDMA 연결을 통해 SMB2 데이터를 송신 또는 수신하기 위한 예시적 피어(102)를 도시한다. 이 예에서 피어(102)는 클라이언트 및/또는 애플리케이션 서버이다. 클라이언트(102)의 다양한 구성요소들은 본 개시의 실시예들에 따라 소프트웨어 및/또는 하드웨어를 포함할 수 있다. 그러나, 예시의 목적으로, 그러한 구성요소들은 이제부터 소프트웨어 모듈들로서 기술될 것이다. 실시예들에서 클라이언트(102)는 비한정적으로 커널(202a), 적어도 하나의 사용자 애플리케이션(220), 메모리 버퍼(222a), 하나 이상의 타이머들(224a) 및/또는 하나 이상의 설정들(226a) 중 하나 이상을 포함한다. 실시예들에서 "커널"은 운영체제의 핵심으로, 그 안에서 메모리, 파일들 및 주변 기기들이 관리되고, 애플리케이션들이 트리거 및 시동되고 시스템 자원들이 할당된다.
실시예들에서 커널(202a)은 비한정적으로 WIN32® 파일 애플리케이션 프로그래밍 인터페이스(API)나 등가물(204), SMB2 모듈(SMB2 클라이언트(208)로서 도시됨), SMB 다이렉트 모듈(SMB 다이렉트 클라이언트(214a)로서 보여짐) 및 RDMA 인터페이스(216a) 중 하나 이상을 포함할 수 있다. SMB 다이렉트 모듈 및 RDMA 인터페이스(216a)는 여기에 기술된 방법 및 프로세스를 수행하기 위해 도입된다. 모듈, 구성요소 및/또는 인터페이스들은 다음과 같이 기술될 것이다.
실시예들에서 WIN32® 파일 API(204)는 커널(202a) 및 하나 이상의 사용자 애플리케이션들(220) 사이의 인터페이스일 수 있다. 예시적 일 실시예에서 WIN32® 파일 API(204)는 마이크로소프트 윈도우즈® 운영체제에서 이용 가능한 API들의 집합이다. 거의 모든 윈도우즈® 프로그램들은 기능들을 수행하기 위해 윈도우즈® API와 상호동작한다. WIN32® 파일 API(204)의 실시예들은 예컨대 파일 시스템, 장치 및/또는 에러 처리와 같이 윈도우즈® 시스템이 이용 가능한 자원들에 대한 액세스를 제공한다. WIN32® 파일 API(204)는 실시예들에 따라 커널에 추가적인 기능에 대한 액세스를 제공할 수 있다. 실시예들에서 WIN32® 파일 API(204)는 또한, 시스템이 다양한 네트워크 기능들을 이용하고 원격 액세스를 가능하게 하는 기본 파일 액세스 기능들을 이용하는 원격 파일들에 대한 액션을 수행할 수 있게 한다.
실시예들에서 SMB2 클라이언트(208)는 SMB2 서버(212b)에 의해 제공되는 인터페이스들 및 애플리케이션들 사이의 통신을 관리한다. 장치들이 운영체제와 매치하지 않을 수 있는 속도로 동작할 수 있기 때문에, 운영체제 및 장치 드라이버 간 통신은 기본적으로 I/O 요청 패킷들(IPvP들)을 통해 수행된다. 그 패킷들은 네트워크 패킷들이나 예컨대 윈도우즈® 메시지 패킷들과 유사하다. 패킷들은 운영체제(들)로부터 특정 드라이버들로, 그리고 하나의 드라이버에서 다른 드라이버로 전달된다. 실시예들에서 SMB2 클라이언트(208)는 I/O 요청들을 네트워크 자원들에 재지정하고 네트워크를 통해 통신을 수행할 SMB 메시지들을 구성할 수 있다. SMB2 클라이언트(208)는 SMB 패킷들이나 데이터를 RDMA를 통해 교환하기 위해 SMB 패킷들을 SMB 다이렉트 클라이언트(214a)로 전송한다. 마찬가지로, SMB2 서버(212b) 역시, 일 실시예에 따라 SMB2 클라이언트(208)로부터 서버의 저장부까지 파일 요청들을 보내기 위해 IRP들을 사용할 수 있다.
실시예들에서 SMB 다이렉트 모듈(214)은 커널(202) 안의 SMB 다이렉트 네트워크 제공자 인터페이스(NPI)로부터 생성된 인스턴스이다. SMB 다이렉트 모듈(214)은 API(SMB 다이렉트 NPI라고도 칭함)를 SMB2 클라이언트 및 SMB2 서버 모듈에 드러낸다. SMB2 클라이언트/서버 모듈들은 SMB 다이렉트 연결을 통해 데이터를 송수신하라고 요청하기 위해 이러한 SMB 다이렉트 NPI를 이용한다. SMB 다이렉트 모듈(214)은 실시예들에 따라, SMB 다이렉트 프로토콜을 구현하며 SMB2 클라이언트/서버 모듈들 및 기본 RDMA 인터페이스 사이에 자리한다. SMB 다이렉트 NPI는 SMB 다이렉트 프로토콜을 이행한다. SMB 다이렉트 NPI는 다른 무엇보다, SMB 다이렉트 연결들을 생성 및 파기하고, SMB 다이렉트 연결들을 통해 데이터를 송수신하고, 메모리를 등록/등록해제하고, SMB 다이렉트 연결을 통해 피어로부터/로의 RDMA 읽기/쓰기 데이터 오퍼레이션들을 수행하고, SMB 다이렉트 연결이 피어에 의해 연결해제될 때 통지를 수신하고, SMB 다이렉트 연결을 통해 전송할 SMB2 패킷들을 집결/집결해제할 수 있다. 이러한 작업들을 수행하기 위해, RDMA 프로토콜에 의해 저장된 것과 같이 메모리 버퍼들(222)로부터 SMB2 데이터의 송수신을 관리할 수 있는 SMB 다이렉트 모듈(214)이 생성된다. 따라서, SMB 다이렉트 모듈(214)은 단순히 SMB2 데이터에서 RDMA로, 그리고 다시 RDMA에서 SMB2로 데이터를 변환한다. SMB 다이렉트 모듈(214)은 본 개시의 실시예들의 동작들을 실행하기 위해 다른 새로운 모듈인 RDMA 인터페이스(216)와 통신한다.
실시예들에 따르면 SMB 다이렉트 모듈(214)은 여러 함수들을 수행한다. SMB DirectReceiveEvent 콜백(callback) 함수는 SMB2 클라이언트(208)나 SMB2 서버(212b)에 메시지가 SMB 다이렉트 종단에 도착하였음을 통지한다. SMB DirectDisconnectEvent 이벤트 콜백 함수는 SMB2 클라이언트(28)나 SMB2 서버(212b)에 종단 상의 연결이 해제되었다는 것을 통지한다. SMB DirectAcceptEvent 이벤트 콜백 함수는 SMB2 서버(212b)에 리스닝(listening) 종단 상의 새로운(incoming) 연결이 허용되었다는 것을 통지한다. SMB DirectListen 함수는 주어진 로컬 어드레스 상의 새로운 연결들에 대해 주의를 기울이는 리스너(listener) 종단을 생성한다. SMB DirectCloseEndpoint 함수는 종단을 닫고 모든 관련 자원들을 자유롭게 한다. SMB DirectConnect 함수는 종단을 원격 SMB 다이렉트 전송 어드레스에 연결한다. SMB DirectDisconnect 함수는 종단을 원격 SMB 다이렉트 전송 어드레스로부터 연결 해제한다. SMB DirectSend 함수는 데이터의 버퍼를 원격 SMB 다이렉트 피어로 전송한다. SMB DirectRegisterMemory 함수는 SMB2 클라이언트(208)가 RDMA 읽기/쓰기 동작들에서 사용할 메모리 버퍼들을 등록할 수 있게 한다. SMB DirectUnregisterMemory 함수는 SMB DirectRegisterMemory API를 통해 앞서 등록되었던 메모리 버퍼들을 등록 해제한다. SMB DirectRdmaRead 함수는 RDMA가 종단이 연결된 원격 피어의 메모리로부터 직접 데이터를 읽게 한다. SMB DirectRdmaWrite 함수는 RDMA가 종단이 연결된 원격 피어의 메모리 안에 직접 데이터를 쓰게 한다. 이 함수들 및 그 동작이 도 6과 연계하여 설명될 것이다.
일 실시예에서 RDMA 인터페이스(216)는 RNIC들의 판매자 고유 RDMA 기능과 인터페이스하기 위한 새 인터페이스이다. RDMA 인터페이스(216)는 RDMA 장치의 함수들에 대한 액세스를 제공할 수 있다. RDMA 장치의 함수들은 SMB 다이렉트 패킷들을 수신할 포트에 주의를 기울이는 것을 포함하고 SMB2 데이터를 SMB 다이렉트 모듈(214)로 제공할 수 있다. 일 실시예에서 RDMA 장치는 RDMA 연결을 통해 통신을 관리할 커널 모드 RDMA 모듈을 포함할 수 있다. 또한 RDMA 장치는 RDMA 메시지들을 전송하는 포트를 액세스하고 귀 기울이기 위해 RDMA 액세스 계층 및 익스텐션들을 포함할 수 있다. 실시예들에 따라 프록시 드라이버는 RNIC의 하드웨어 드라이버와 인터페이스 할 수 있다.
실시예들에서 사용자 애플리케이션(220)은 사용자에 대해 프로세서에 의해 실행되는 어떤 소프트웨어나 다른 소프트웨어일 수 있다. 사용자 애플리케이션들(220)의 예들은 웹 브라우저들, 이메일 등을 포함한다. 이러한 사용자 애플리케이션들(220)은 특히, 파일 서버(106)와 같은 원격 저장 위치들로부터 데이터를 수신 및 송신하기 위해 커널(202a)과 인터페이스한다.
일 실시예에서 메모리 버퍼(222)는 도 7과 관련하여 기술된 바와 같은 어떤 타입의 메모리일 수 있다. 메모리 버퍼(222)는 메시지들 안에 포함되는 SMB 다이렉트 메시지들 및/또는 SMB2 데이터를 수신하는데 사용될 수 있으며, 나가는 SMB 다이렉트 메시지들을 그러한 메시지들의 전송 전에 스테이징하는 데 사용될 수 있다. 따라서 실시예들에 따라, 메모리 버퍼(222)는 이후 설명되는 바와 같이 블록들로 분할될 수 있다.
실시예들에서, 타이머들(224)은 소정 시간부터 0까지 카운트 다운할 수 있는 클록들의 집합이다. 따라서, 타이머들(224)은 프로세서에 의해 실행되는 클록 함수 및 저장된 데이터를 나타낸다. 타이머(224)의 만료는 RDMA 인터페이스 내에서나 SMB 다이렉트 모듈(214)과 하나 이상의 함수들을 유발시킬 수 있다. 다른 실시예들에서, 타이머들은 0부터 문턱치까지 카운트하거나 어떤 다른 타입의 카운팅을 수행할 수 있다. 타이머들 중 일부는 SendCreditGrantTimer를 포함할 수 있으며, 이것은 SendCreditCount가 0에 도달할 때 시작되어 타이머들의 섹션(224)에서 동작하는 타이머이다. 원격으로 연결된 피어는 이 타이머가 만료될 때까지 추가적인 전송 크레딧들을 부여해야 한다. SendCreditGrantTimer는 또한 클라이언트/서버가 피어가 그 추가적 전송 크레딧들을 부여할 때까지 기다리는 시간의 정도를 규정할 수 있다. 클라이언트/서버가 SendCreditsCount의 값이 0이기 때문에 피어로 패킷을 전송할 수 없다는 것을 발견할 때, 실시예들에 따라 클라이언트/서버는 소정 초가 지나면 만료될 타이머를 세팅한다. 전송 크레딧이 이용 가능하게 되기 전에 타이머가 만료되면, 클라이언트/서버는 연결을 해제한다. 일 실시예에서 아이들(idle) 연결 타이머는 클라이언트/서버가 피어가 패킷을 전송할 때까지 기다리는 시간의 정도를 규정한다. 마지막 소정 초가 지나 피어로부터 아무 패킷들도 수신되지 못했다면, 클라이언트/서버는 피어로 킵얼라이브(keep alive) 요청을 보내고 KeepAliveResponse 타이머를 세팅한다. 본 개시의 실시예들에 따르면, KeepAliveResponse 타이머의 만료 전에 아무 응답도 수신되지 않으면, 연결은 해제된다.
본 개시의 실시예들에 따라 SMB 다이렉트 연결을 통한 어떤 SMB 다이렉트 데이터 전송을 위한 KEEPALIVE REQUESTED 플래그가 또한 세팅될 수 있다. 일 실시예에서 KEEPALIVE REQUESTED 플래그는 발송자가 수신자가 여전히 연결되어 반응한다는 것을 알도록 하기 위해 수신 피어에게 가능하면 빨리 발송자에게 응답하라는 요청이다. 하나 이상의 시스템들은 메시지 교환 없이 연결을 타임 아웃하도록 시도할 수 있다. 따라서 KEEPALIVE REQUESTED 플래그를 가진 메시지는 연결을 유지할 수 있다. 다른 대안적 실시예들에서 KEEPALIVE REQUESTED 플래그가 세팅된 메시지는 크레딧들을 요청하거나 수신하는 데 사용될 수 있다.
일 실시예에서, 설정(226) 저장부는 RDMA를 통해 SMB 메시지들을 교환하는 것과 관련된 데이터를 저장하고 회수한다. 설정들(226)은 도 7과 관련하여 기술된 바와 같이 임의 유형의 메모리나 저장 장치들 안에 저장될 수 있다. 일례로서, 설정들은 세팅된 후 얼마만큼의 초 후에 크레딧 보급 타이머가 만료되는지, 피어가 다른 피어로부터 수신할 수 있는 최대 크기의 SMB 다이렉트 데이터 전송 패킷이 무엇인가, 또는 피어가 다른 피어에게 부여할 전송 크레딧들의 개수에 대한 한계치는 얼마인가 등을 포함할 수 있다.
실시예들에서 SMB 다이렉트 종단 구조는 SMB 다이렉트 종단을 나타내는 불투명 구조일 수 있다. SMB 다이렉트 종단은 기능에 있어서 예컨대 네트워크 소켓과 유사하다. SMB2 클라이언트(208)나 SMB2 서버(212b)는 일 실시예에 따라 직접적으로 그러나 SMB 다이렉트 모듈(214)을 통해 이 구조의 멤버들을 액세스할 수 있다. SMB 다이렉트 종단 구조는 여러 동작들에 대한 데이터를 포함할 수 있다. MwReleaseList는 원격 연결된 피어로 다시 공개될 수 있는 메모리 창들의 리스트이다. 이 메모리 창들은 완료된 RDMA 읽기/쓰기와 관련된다. ReceiveCreditCount는 원격 연결된 피어에게 부여되어야 하는 수신 크레딧들의 개수이다. 종단의 호스트는 그 종단에 걸려 있는 적어도 그 개수의 수신들을 가질 수 있다. SendCreditCount는 종단의 호스트가 현재 가진 전송 크레딧들의 개수이다. 원격 연결된 피어는 그들의 종단에 걸려 있는 적어도 그 개수의 수신들을 가질 수 있다. PendingRdmaReadCount는 이 종단에서 개시되었지만 아직 완료되지 않은 RDMA 읽기 동작들의 개수이다. PendingRdmaReadLimit는 종단에 동시에 걸려 있을 수 있는 RDMA 읽기 동작들의 최대 개수이다. DeferredlnitiatorOpQueue는 실시예들에서, 발부된 종단 자원들이 현재 이용 가능하지 않기 때문에 유예된 개시자 동작들의 큐이다. NdkQp는 수신 및 개시자 요청 큐들을 나타내는 큐 페어 오브젝트(queue pair object)이다. NdkReceiveCq는 NDK 수신 완료 큐이다. 수신 요청 완료들이 이 큐에 큐잉된다. NdkReceiveQueueCapacity는 종단에 동시에 걸려 있을 수 있는 수신 요청들의 최대 개수이다. NdklnitiatorCq는 NDK 개시자 완료 큐이다. 예를 들어, 전송, 결합, 고속-등록, 읽기, 쓰기 및 무효화 요청 완료들이 이 큐에 큐잉된다. 실시예들에서 NdklnitiatorQueueCapacity는 종단에 동시에 걸려 있을 수 있는 전송, 결합, 고속-등록, 읽기, 쓰기 및 무효화 요청들의 최대 개수이다.
도 2b는 여기 개시된 실시예들에 따라 RDMA 연결을 통해 SMB2 데이터를 송신하거나 수신하기 위한 예시적 피어(106)를 도시한다. 이 예에서 피어(106)는 파일 서버이다. 파일 서버(106)의 다양한 구성요소들에는 소프트웨어 및/또는 하드웨어가 포함될 수 있다. 실시예들은 구성요소들을 소프트웨어 모듈들로서 기술하지만, 다른 실시예들은 다른 타입들의 모듈들을 제공한다. 실시예들에서 파일 서버(106)는 비한정적으로 커널(202b), NTFS(232), 메모리 버퍼(222b), 하나 이상의 타이머들(224b) 및/또는 하나 이상의 설정들(226b) 중 하나 이상을 포함한다. 이러한 기능들 중 일부는 도 2a에 기술된 것들과 동일하거나 유사하다.
실시예들에 따르면, 커널(202b)(및/또는 도 2a와 관련하여 기술된 것과 같은 것)은 비한정적으로 입출력(I/O) 관리자(206b), SMB2 서버(212b), SMB 다이렉트 서버(214b) 및 RDMA 인터페이스(216b)를 포함할 수 있다. 이러한 기능들 중 일부는 도 2a에 기술된 것들과 동일하거나 유사하다.
실시예들에서 SMB2 서버(212b)는 마이크로소프트® 서버들을 위한 SMB2의 서버 측을 구현하는 드라이버이다. 다른 실시예들은 다른 타입의 서버들을 제공한다. SMB2 서버(212b)는 SMB를 이용하여 데이터를 시동 및 교환하고, 그 데이터를 I/O 관리자(206b)에게 공급하거나 그로부터 수신할 수 있다. 실시예들에서 SMB2 서버(212b)는 네트워크 연결을 통해 SMB2 데이터를 송신하거나 수신한다. SMB2 서버(212b)는 그 서버에 대해 네트워크들을 통해 통신하도록 기능한다. 따라서, 실시예들에 따르면 SMB2 서버(212b)는 전송할 SMB2 데이터를 제공하거나 네트워크 전송으로부터 SMB2 데이터를 수신한다.
실시예들에서 뉴 테크놀로지 파일 시스템(NTFS)(232)는 표준 파일 시스템일 수 있다. NTFS는 성능, 안정성 및 데이터 공간 활용성을 개선하기 위해 메타 데이터의 지원 및 진보한 데이터 구조들의 사용을 지원하고, 그에 더하여 보안 액세스 제어 리스트(ACL)들 및 파일 시스템 저널링(journaling)과 같은 추가적 확장들을 지원한다. NTFS는 하나 이상의 클라이언트들을 위한 파일 데이터를 조직 및 저장하도록 기능한다. 이러한 파일 데이터는 RDMA를 통한 SMB2 데이터 전송들과 같이 클라이언트와의 통신을 통해 클라이언트에 제공될 수 있다.
실시예들에 따르면 SMB 다이렉트는 SMB2 데이터를 교환하기 위해 RDMA 연결을 생성한다. 프로토콜은 협상 프로세스를 통해 RDMA 연결을 생성한다. 피어들(102 및 106)이 RDMA 연결을 협상한 후, 피어(102나 106)는 RDMA 연결을 통해 SMB2 데이터를 전송할 수 있다.
실시예들에 따르면, 제1SMB 다이렉트 협상 요청 패킷(300)이 도 3a에 도시된다. 이어서 실시예들에서 관련 SMB 다이렉트 협상 응답 패킷(336)이 도 3b에 도시된다. 또한 실시예들에 따라, 데이터를 전송하기 위해 사용되는 SMB 다이렉트 데이터 전송 패킷(338)이 도 3c에 도시된다. 각각의 메시지나 패킷은 예컨대, 생성, 전송, 저장 및/또는 수신될 수 있다. 실시예들에서 패킷들이나 메시지들은 각각 다양한 데이터를 저장하는 부분들이나 필드들을 포함할 수 있다.
도 3a를 참조하면, 본 개시의 실시예들에 따른 SMB 다이렉트 협상 요청 패킷(300)이 도시된다. SMB 다이렉트 협상 요청 패킷(300)은 비한정적인 것으로서, 예컨대 다음의 필드들 중 하나 이상을 포함할 수 있다: MinVersion(302), MaxVersion(304), Reserved(306), CreditsRequested(308), PreferredSendSize(310), MaxReceiveSize(312), 및/또는 MaxSMB2MessageSize(314). SMB 다이렉트 협상 요청 패킷(300)은 생략부호들(316)로 표현된 것과 같이 도 3a에 도시된 것보다 적거나 더 추가되는 필드들을 포함할 수 있다.
일 실시예에서, MinVersion 필드(302)는 클라이언트/요청자(102)가 지원하는 최하위 SMB 다이렉트 프로토콜 버전에 대한 값을 포함할 수 있다. MaxVersion 필드(304)는 클라이언트/요청자(102)가 지원하는 최상위 SMB 다이렉트 프로토콜 버전을 저장할 수 있다. 이 값은 MinVersion 필드(302)의 값과 같거나 더 클 수 있다. 실시예들에서 클라이언트/요청자는 MinVersion 필드(302)의 값 및 MaxVersion 필드(304)의 값 사이의 범위(해당 값들 포함) 안에 있는 모든 프로토콜 버전들을 지원한다. 일 실시예에 따라, Reserved 필드(306)는 단순히 미래의 알려지지 않은 요건들을 위한 예약 필드이며 클라이언트에 의해 사용되지 않는다.
실시예들에 따른 CreditsRequested 필드(308)는 클라이언트/요청자(102)가 서버/수신자(106)로부터 요청하고 있는 전송 크레딧들의 개수에 대한 값을 포함한다. 실시예들에서 CreditsRequested 필드(308)의 값은 SMB2 데이터가 후속 메시지를 통해 보내질 수 있도록 확실히 하기 위해 0보다 크다. 그러나 실시예들에 따르면 CreditsRequested 필드(308)의 값은 어떤 수라도 될 수 있으며 평균적 용도에 기반하여 설정될 수 있다. 대안적 실시예들에서 CreditsRequested 필드(308)의 값은 적어도 전송될 SMB 메시지의 사이즈에 기반할 수 있다. 또 다른 실시예들에서, 요청하는 크레딧들에서 기타 혹은 추가적 요인들이 고려될 수 있다. 또한 실시예들에서 큰 메시지들이 RDMA를 이용하여 전송될 수 있다.
PreferredSendSize 필드(310)는 클라이언트/요청자(102)가 서버/수신자(106)에게 전송할 수 있도록 요망하는 최대 SMB 다이렉트 데이터 전송 패킷(338)의 사이즈(가능하게는 바이트 단위)를 포함할 수 있다. MaxReceiveSize 필드(312)는 클라이언트/요청자(102)가 서버/수신자(106)로부터 수용할 수 있는 최대 SMB 다이렉트 데이터 전송 메시지의 사이즈(가능하게는 바이트 단위)를 포함한다. 실시예들에서 이 값은 클라이언트(102)가 세팅하는 메모리 버퍼(222a)의 블록이나 소정 할당치에 해당할 수 있다. 따라서, 단일 SMB2 데이터 전송이 메모리 할당치를 초과하지 못할 것이다. 실시예들에서 이 값은 적어도 데이터 전송 패킷 및 작은 SMB2 메시지 내 SMB 다이렉트 헤더의 사이즈인 문턱치(128)와 같거나 더 크다. 일 실시예에 따라, MaxSmb2MessageSize 필드(314)는 클라이언트/요청자가 서버/수신자(106)로부터 수용할 수 있는 최대 SMB2 프로토콜 메시지의 사이즈(가능하게는 바이트 단위)를 포함할 수 있다. 이 값은 클라이언트(102)에 의해 미리 정해지고 세팅된다. 실시예들에서 MaxSmb2MessageSize 필드(314)의 값은 메모리 버퍼(222a)의 총 사이즈보다 크지 않을 것이다. 이런 식으로 어떠한 SMB 메시지도 메모리 버퍼(222a)를 오버플로우할 수 없다. 그러나, 일 실시예에 따르면 MaxSmb2MessageSize 필드(314)의 값은 사용자에 의해 결정된 것과 같은 메모리 버퍼(222a) 내 메모리량보다 더 적을 수 있다.
도 3b를 참조하면, 실시예들에 따른 SMB 다이렉트 협상 응답 패킷(336)이 도시된다. SMB 다이렉트 협상 응답 패킷(336)은 RDMA 연결을 위한 협상을 이행하기 위해 피어(106)에 의해 전송될 수 있다. SMB 다이렉트 협상 응답 패킷(336)은 비한정적인 것으로서, 예컨대 다음의 필드들 중 하나 이상을 포함할 수 있다: MinVersion(302b), MaxVersion(304b), PreferredVersion(318), Reserved(306b), CreditsRequested(308b), CreditsGranted(320a), Status(322), PreferredSendSize(310b), MaxReceiveSize(312b), 및/또는 MaxSMB2MessageSize(314b). SMB 다이렉트 협상 응답 패킷(336)은 생략부호들(324)로 표현된 것과 같이 도 3b에 도시된 것보다 적거나 더 추가되는 필드들을 포함할 수 있다.
실시예들에 따르면, MinVersion 필드(302b)는 서버/수신자(106)가 지원하는 최하위 SMB 다이렉트 프로토콜 버전에 대한 값을 포함할 수 있다. MaxVersion 필드(304b)는 서버/수신자(106)가 지원하는 최상위 SMB 다이렉트 프로토콜 버전을 저장할 수 있다. 이 값은 MinVersion 필드(302b)의 값과 같거나 더 클 수 있다. 실시예들에서 서버/수신자(106)는 MinVersion 필드(302b)의 값 및 MaxVersion 필드(304b)의 값 사이의 범위(해당 값들 포함) 안에 있는 모든 프로토콜 버전들을 지원한다. PreferredVersion 필드(318)는 공통 SMB 다이렉트 프로토콜 버전에 대한 값을 저장한다. PreferredVersion 필드(318)의 값은 실시예들에서, 클라이언트의 SMB 다이렉트 협상 요청 패킷(300)의 MinVersion 필드(302a) 및 MaxVersion 필드(304a)에 의해 특정된 범위 안에 있다. 추가 실시예들에서, PreferredVersion 필드(318)의 값은 서버의 SMB 다이렉트 협상 응답 패킷(336)의 MinVersion 필드(302b) 및 MaxVersion 필드(304b)에 의해 특정된 범위 사이에 있다. 실시예들에 따라, Reserved 필드(306b)는 단순히 미래의 알려지지 않은 요건들을 위한 예약 필드이며 서버에 의해 사용되지 않는다.
실시예들에 따른 CreditsRequested 필드(308b)는 서버/수신자(106)가 클라이언트/요청자(102)로부터 요청하고 있는 전송 크레딧들의 개수에 대한 값을 포함한다. 실시예들에서 CreditsRequested 필드(308b)의 값은 SMB2 데이터가 후속 메시지를 통해 보내질 수 있도록 확실히 하기 위해 0보다 크다. 그러나 CreditsRequested 필드(308b)의 값은 어떤 수라도 될 수 있으며 평균적 용도에 기반하여 설정될 수 있다. 다른 대안적 실시예들에서, CreditsRequested 필드(308b)의 값은 전송될 SMB 메시지의 사이즈에 기반하거나, 다른 요인들에 기반할 수 있다. 실시예들에 따르면 하나의 크레딧이 요청될 때 큰 메시지들이 전송된다. CreditsGranted 필드(320a)는 서버/수신자(106)로부터 클라이언트/요청자(102)에게 부여된 크레딧들의 개수를 포함한다. 실시예들에서 CreditsGranted 필드(320a)의 값은 클라이언트/요청자(102)가 다음 SMB 다이렉트 메시지를 전송할 수 있도록 0보다 크다.
실시예들에서 status 필드(322)는 적어도 하나의 플래그나 값을 포함한다. 일 실시예에서, status 필드(322)는 하나나 두 개의 값들, 성공 상태나 지원되지 않는 상태를 포함한다. 성공 플래그는 서버/수신자(106)가 클라이언트/요청자의 SMB 다이렉트 협상 요청 패킷(300)을 허용했다는 것을 나타낸다. 지원되지 않는다는 플래그는 서버/수신자(106)가 클라이언트/요청자(102)의 SMB 다이렉트 협상 요청 패킷(300)을 거절했다는 것을 나타낸다.
실시예들에 따르면, PreferredSendSize 필드(310b)는 서버/수신자(106)가 클라이언트/요청자(102)에게 전송할 수 있도록 원하는 최대 SMB 다이렉트 데이터 전송 패킷(338)의 사이즈(가능하게는 바이트 단위)를 포함할 수 있다. PreferredSendSize 필드(310b)는 실시예들에서, SMB 다이렉트 협상 요청 패킷(300) 내 MaxReceiveSize 필드(312a)보다 작거나 같다. 따라서, 서버/수신자(106)에 의해 전송된 패킷 사이즈는 클라이언트/요청자(102)의 메모리 버퍼(222a) 할당치보다 크지 않을 것이다.
실시예들에서 MaxReceiveSize 필드(312b)는 서버/수신자(106)가 클라이언트/요청자(102)로부터 수용할 수 있는 최대 SMB 다이렉트 데이터 전송 메시지의 사이즈(가능하게는 바이트 단위)를 포함한다. 이 값은 서버/수신자(106)가 세팅하는 메모리 버퍼(222b)의 블록이나 소정 할당치에 해당할 수 있다. 따라서 실시예들에서, 어떤 SMB2 데이터 전송도 메모리 할당치를 초과하지 못할 것이다. 실시예들에서 이 값은 적어도 데이터 전송 패킷 내 SMB 다이렉트 헤더의 사이즈인 문턱치(128)와 같거나 더 크다. MaxSmb2MessageSize 필드(314b)는 서버/수신자(106)가 클라이언트/요청자(102)로부터 수용할 수 있는 최대 SMB2 프로토콜 메시지의 사이즈(가능하게는 바이트 단위)를 포함할 수 있다. 이 값은 서버/수신자(106)에 의해 미리 정해지고 세팅된다. 실시예들에서 MaxSmb2MessageSize 필드(314b)의 값은 메모리 버퍼(222b)의 총 사이즈보다 크지 않을 것이다. 이런 식으로 어떠한 SMB 메시지도 메모리 버퍼(222b)를 오버플로우할 수 없다. 그러나, 일 실시예에 따르면 MaxSmb2MessageSize 필드(314b)의 값은 사용자에 의해 결정된 것과 같은 메모리 버퍼(222b) 내 메모리량보다 더 적을 수 있다.
여기에 개시된 실시예들에 따라 SMB 다이렉트 데이터 전송 패킷(338)이 도 3c에 도시된다. SMB 다이렉트 데이터 전송 패킷(338)은 협상 중에 설정된 RDMA 연결을 통해 SMB2 데이터를 전송하기 위해 송신될 수 있다. 클라이언트/요청자(102)나 서버/수신자(106)는 SMB2 데이터를 전송하거나 수신할 수 있다. 그와 같이, 클라이언트/요청자(102) 및 서버/수신자(106) 둘 모두는 일반적으로 수신자 및 발송자라고 지칭된다. SMB 다이렉트 데이터 전송 패킷(338)은 비한정적인 것으로서, 예컨대 다음의 필드들 중 하나 이상을 포함할 수 있다: CreditsRequested(308c), CreditsGranted(320b), Reserved(306c), RemainingDataLength(326), DataOffset(328), DataLength(330), 및/또는 SMB2 데이터(332). 실시예들에 따르면, SMB 다이렉트 데이터 전송 패킷(338)은 생략부호들(334)로 표현된 것과 같이 도 3c에 도시된 것보다 적거나 더 추가되는 필드들을 포함할 수 있다.
실시예들에서 CreditsRequested 필드(308c)는 발송자가 수신자에게 요청하는 전송 크레딧들의 개수에 대한 값을 포함한다. 실시예들에서, CreditsRequested 필드(308c)의 값은 SMB2 데이터가 후속 메시지를 통해 송신될 수 있도록 보장하기 위해 0보다 크다. 그러나, CreditsRequested 필드(308c)의 값은 임의의 수일 수 있으며, 예측된 미래의 사용, 즉 데이터의 전송을 완료하기 위해 얼마나 더 많은 패킷들이 존재하는 지에 기반할 수 있다. CreditsGranted 필드(320b)는 발송자로부터 수신자에게 부여된 크레딧들의 개수를 포함한다. 실시예들에서 CreditsGranted 필드(320b)는 피어가 어떤 피어의 크레딧들에 대한 요청을 이행해야 하는 의무가 없기 때문에 0일 수 있다. 그러나, 피어는 클라이언트/요청자(102)가 다음 SMB 다이렉트 메시지를 전송할 수 있도록 CreditsGranted 필드(320b) 안에 크레딧들을 제공할 수 있다. 여기에 개시된 실시예들에 따라, Reserved 필드(306c)는 단순히 미래의 알려지지 않은 요건들을 위한 예약 필드이며 클라이언트에 의해 사용되지 않는다.
실시예들에서 RemainingDataLength 필드(326)는 수신자가 아직 수신하지 않은 분할된 SMB2 메시지의 바이트들의 수를 포함할 수 있다. 따라서 이 필드의 0 아닌 어떤 값은 또 하나의 SMB 다이렉트 데이터 전송 패킷(338)이 더 많은 데이터와 함께 전송될 것임을 수신자에게 나타낸다. 실시예들에 따르면, SMB 다이렉트 데이터 전송 패킷(338)이 완전한 SMB2 메시지나 분할된 SMB2 데이터를 보유하는 둘 이상의 SMB 다이렉트 데이터 전송 패킷들(338) 중 마지막 것을 전달하는 경우, RemainingDataLength 필드(326)의 값은 0이다. RDMA는 순차적으로 메시지들을 전송할 수 있다. 그로써, 순차적 메시지들이 엄격한 수신 순서로 다시 조립되기 때문에 메시지들을 다시 조립하는 것이 간단해진다. 따라서, 실시예들은 예컨대 헤더 안의 메시지 식별자에 대한 필요나 다른 보다 복잡한 재조립(reassembly) 기법들의 이용이 없어도 된다.
일 실시예에서 DataOffset 필드(328)는 SMB 다이렉트 데이터 전송 패킷(338)의 시작부터 캡슐화된 SMB2 프로토콜 메시지의 최초 8 바이트 정렬 바이트까지의 바이트들로 된 오프셋을 위한 값을 포함한다. 실시예들에서 DataLength 필드(330)의 값이 0이면, DataOffset 필드(328) 역시 0으로 세팅된다. DataLength의 값이 0이 아니면, 일 실시예에 따라 DataOffset 필드(328)는 어떤 값으로 헤더 내 다른 필드들의 사이즈인 24 바이트와 같거나 더 클 수 있다. DataLength 필드(330)는 SMB2 데이터 필드(332) 내 캡슐화된 SMB2 프로토콜 메시지의 바이트 단위 사이즈를 포함할 수 있다. 실시예들에서 SMB 다이렉트 데이터 전송 패킷(338)이 SMB2 프로토콜 메시지를 캡슐화하지 않은 경우, DataLength 필드(330)의 값은 0으로 세팅된다. SMB2 데이터 필드는 실시예들에 따르면, 어떤 SMB2 프로토콜 메시지를 포함한다.
여기에 개시된 실시예들에 따라 SMB2 읽기/쓰기 요청(340)이 도 3d에 도시된다. SMB2 읽기/쓰기 요청(340)은 직접 RDMA 읽기/쓰기를 수행하기 위해 SMB 다이렉트 데이터 전송 패킷(338) 안에 캡슐화될 수 있다. 직접 RDMA 읽기/쓰기는 부호화되지 않은 애플리케이션 데이터만을 전송한다. 본 개시의 실시예들에 따르면, 읽기/쓰기 요청(340)은 서버(106)가 클라이언트(102)에 RDMA 쓰기를 수행해야 하는 경우 SMB2 읽기 요청일 수 있고, 서버(106)가 클라이언트(102)로부터 RDMA 읽기를 수행해야 하는 경우 SMB2 쓰기 요청일 수 있다. 그와 무관하게 SMB2 읽기/쓰기 요청(340) 안의 필드들은 비슷하다. 서버(106)는 클라이언트(102)가 요청한 RDMA 전송을 수행한다는 것을 알아야 한다. SMB2 읽기/쓰기 요청(340)은 비한정적인 것으로서, 예컨대 다음의 필드들 중 하나 이상을 포함할 수 있다: Channel(342), ChannellnfoOffset(346) 및 ChannellnfoLength(348). 일 실시예에서 필드들은 RDMA 데이터 전송을 완료하기 위해 스티어링(steering) 정보를 포함할 수 있다. 일 실시예에 따라, Reserved 필드(344)는 단순히 미래의 알려지지 않은 요건들을 위한 예약 필드이며 사용되는 것은 아니다. SMB2 읽기/쓰기 요청(340)은 생략부호들(351)로 표현된 것과 같이 도 3d에 도시된 것보다 적거나 더 추가되는 필드들을 포함할 수 있다. 도시된 필드들은 예시할 목적으로 제공되며 한정하고자 하는 것이 아니다.
실시예들에서 Channel 필드(342)는 데이터가 발견될 채널의 값을 포함한다. RDMA 연결은 여러 채널들을 포함할 수 있다. 실시예들에 따라 채널 정보는 전송을 이행하도록 RDMA 장치에 피어가 제공하는 정보를 포함할 수 있다. 예를 들어 채널 정보는 도 3e에 도시된 바와 같이, 다른 RDMA 고유 정보와 함께 하나 이상의 토큰들, 오프셋들 및 메모리 세그먼트들의 길이들을 포함할 수 있다.
일 실시예에서 ChannellnfoOffset 필드(346) 및 ChannellnfoLength 필드(348)는 데이터 패킷 내 오프셋, 토큰 및 길이 정보에 대한 포인터들이다. 그 포인터들은 SMB2 읽기나 쓰기 요청 안에서 정보가 확인될 수 있는 위치를 제공한다. 실시예들에서 Flags(350)는 RDMA 직접 데이터 전송의 양태를 제어하거나 변경하기 위한 어떤 정보를 포함한다.
도 3e를 참조하면, 여기에 개시된 실시예들에 따라 RDMA 채널 서술자(352)가 도시된다. RDMA 채널 서술자(352)는 SMB 다이렉트 요청, 통상적으로 채널 필드(342) 안에 캡슐화될 수 있다. RDMA 채널 서술자(352)는 비한정적인 것으로서, 예컨대 다음의 필드들 중 하나 이상을 포함할 수 있다: Offset(354), Token(356) 및 Length(358). 일 실시예에서 필드들은 RDMA 데이터 전송을 완료하기 위해 스티어링(steering) 정보들이다. RDMA 채널 서술자(352)는 생략부호들(360)로 표현된 것과 같이 도 3e에 도시된 것보다 적거나 더 추가되는 필드들을 포함할 수 있다. 도시된 필드들은 예시할 목적으로 제공된다. 직접 데이터 전송을 완료하기 위해, RDMA는 채널 필드(342) 안의 정보에 기반하여 데이터의 길이 및 읽혀지거나 쓰여질 데이터를 가진 메모리로 돌려진다. 직접 데이터 전송은 애플리케이션 데이터만을 전송하므로, 이 정보는 적합한 전송을 확실히 하도록 돕는다.
일 실시예에 따르면, Offset(354)는 데이터가 시작되는 바이트나 비트 단위의 값이다. Offset(354)은 Token(356) 안에 제공된 정보를 이용하여 찾을 수 있는 메모리 블록 시작 어드레스로부터 측정될 수 있다. Length(358)는 데이터 세그먼트가 얼마나 긴지에 대한 비트나 바이트 단위의 값이다. 이러한 스티어링 정보는 예컨대 직접 데이터 전송을 인도한다.
여기에 개시된 실시예에 따라, 도 2a 및 2b에 도시된 다양한 소프트웨어 기능 모듈들의 상호동작들이 RDMA 연결을 협상하기 위해 도 4a-4c에 도시된 동작 단계들(400)에 더 예시된다. 도 4a는 본 개시의 실시예들에 따른 클라이언트(102) 및 서버(106) 간의 패킷들(408 및 424)의 전송들에 대한 표현(400A)을 도시한다. 본 개시의 실시예들에 따라 도 4b는 클라이언트(102) 관점의 것이고 도 4c는 서버(106) 관점의 것이다. 프로세스(400)는 클라이언트가 RDMA 연결을 요청하는 것이고 서버(106)가 응답하는 것으로서 기술된다는 것을 알아야 한다. 그러나, 실시예들에 따르면, 서버(106)가 요청하고 클라이언트가 응답하는 반대의 경우도 있을 수 있다. 또한 예컨대, 상기 방법이 여러 클라이언트들 사이 및/또는 여러 서버들 사이에서 수행될 수도 있다.
도 4b를 참조하면, 일 실시예에 따라 RDMA를 통해 SMB2를 이용하여 연결을 협상하기 위한 예시적 동작 단계들(400B)이 도시된다. 프로세스(400B)는 시작 동작(402B)에서 개시되며, 프로세스(400B)는 클라이언트가 수신(404)을 사전 포스팅하는 것으로 진행한다. 실시예들에서 RDMA 인터페이스(216a)는 RNIC들(108a, 108b)이 이용 가능하고 적절히 구성되는 것을 파악하기 위해 RNIC들(108a/108b)을 자동으로 검출하고 이용한다. 이어서, 일 실시예에서 SMB 다이렉트 NPI는 SMB 다이렉트 모듈(214)에 의해 노출된다. SMB 다이렉트 클라이언트(214a)는 SMB2 클라이언트(208)를 위한 RDMA 연결을 형성하기 위해 RDMA 어댑터에 대한 핸들을 오픈할 수 있다. 일 실시예에서 SMB 다이렉트 클라이언트(214a)는 그 후 RDMA 인터페이스(216a)를 통해 RDMA 연결을 요청한다. SMB 다이렉트 클라이언트(214a)는 또한 메모리 버퍼(222a) 안에 할당치들을 생성하고, 초기 전송 크레딧들을 위해 무엇을 요청하고 수신 크레딧들에 대해 무엇이 허용될 것인지를 결정할 수 있다. 실시예들에서 메모리 버퍼(222a) 내 할당치들은 미리 정해진 사이즈를 가질 수 있다. 실시예들에 따라 메모리 버퍼(222a) 내 메모리의 총량 역시 결정될 수 있다.
도 4b로 돌아가면, SMB 다이렉트 클라이언트(214a)는 그러면 RDMA 인터페이스(216a)로 전송할 SMB 다이렉트 협상 요청 패킷(300)을 구성할 수 있다(406). SMB 다이렉트 협상 요청 패킷(300)은 예컨대 도 3a에 기술된 바와 같다. 그로써, SMB 다이렉트 클라이언트(214a)는 SMB 다이렉트 협상 요청 패킷(300) 안에 필드들을 세팅한다. 따라서 SMB 다이렉트 클라이언트(214a)는 클라이언트(102)가 지원할 수 있는 SMB 다이렉트의 최소 및 최대 버전들을 결정한다. SMB 다이렉트 클라이언트(214a)는 요청할 크레딧들의 개수를 결정한다. 요청할 크레딧들의 개수는 SMB의 이제까지의 사용에 대해 앞으로 일어날 수 있는 예측된 SMB 트래픽 상으로 전송되거나 어떤 다른 방법을 통해 전송될 알려진 앞으로의 SMB 메시지들에 기반할 수 있다. 전송 사이즈는 내부 기능들 및 속도 고려사항들에 의해 결정된다. 최대 수신 사이즈는 메모리 버퍼 할당치의 사이즈에 연동될 수 있다. 최종적으로, 최대 SMB 메시지 사이즈가 결정되어 세팅된다(일반적으로 최대 SMB 메시지 사이즈는 피어가 크지만 모든 메모리를 사용할 정도로 크지는 않은 SMB2 패킷들을 전송할 수 있을 정도로 크다). 본 개시의 실시예들에 따르면 이렇게 모아진 정보는 SMB 다이렉트 협상 요청 패킷(300) 안에 입력된다.
이어서, SMB 다이렉트 클라이언트(214a)는 SMB 다이렉트 협상 요청 패킷(300)을 전송한다(408B). 일 실시예에서 SMB 다이렉트 클라이언트(214a)는 전송 동작에 의해 SMB 다이렉트 협상 요청 패킷(300)을 전송하도록 RDMA 인터페이스(216a)에 요청한다. RDMA 인터페이스(216a)는 RDMA 인터페이스(216b)와 통신하며 SMB 다이렉트 협상 요청 패킷(300)을 서버(106)로 전송한다. SMB 다이렉트 협상 요청 패킷(300)의 전송을 통해, SMB 다이렉트 클라이언트(214a)는 협상 요청 만료 타이머(410)를 시동한다. 협상 요청 만료 타이머는 소정 값을 가지고 그 값부터 0까지 카운트 다운할 수 있다. 그러면 SMB 다이렉트 클라이언트(214a)는 SMB 다이렉트 협상 요청 패킷(300)에 대한 응답을 기다린다. SMB 다이렉트 협상 요청 패킷(300)에 대한 응답을 수신하기 전에 협상 요청 만료 타이머가 만료된다고 판단되면(411), 프로세스(400B)는 아니오로 가서 연결이 포기되는 종료 동작(432B)으로 진행한다.
시작 동작(402C)에서 도 4c를 참조하면, 실시예들에서 서버(106)는 SMB 다이렉트 협상 요청 패킷(300)을 예상하고 수신(412)을 사전 포스팅한다. SMB2 서버(212b)는 활동에 주의를 기울일 수 있고, RDMA가 이용 가능하고 RNIC(108b)의 포트에 구속되는 것을 자동으로 발견할 수 있다. SMB2 서버(212b)는 리스너 종단을 오픈하고 RDMA가 RNIC(108b) 상에서 이용 가능하다고 판단한다. 이어서 SMB2 서버(212b)는 SMB 다이렉트 서버(214b)와의 통신을 시작한다. SMB 다이렉트 서버(214b)는 RDMA 연결을 오픈하고 RDMA 어댑터 핸들을 수신할 수 있다. SMB 다이렉트 서버(214a)는 그 후 RDMA 인터페이스(216a)를 통해 RDMA 연결을 요청한다. SMB 다이렉트 서버(214b)는 그런 다음 RDMA 연결을 허용할 수 있고, 그에 따라 클라이언트(102)에게 연결 요청이 성공했음을 알릴 수 있다. 이러한 RDMA 인터페이스(216a)로부터의 성공 정보는 클라이언트가 협상 요청을 전송하도록 촉발시킨다.
실시예들에 따르면 SMB 다이렉트 서버(214b)는 또한, 메모리 버퍼(222b) 안에 할당치들을 생성하고, 초기 전송 크레딧들을 위해 무엇을 요청하고 수신 크레딧들에 대해 무엇이 허용될 것인지를 결정할 수 있다. 메모리 버퍼(222b) 내 할당치들은 미리 정해진 사이즈를 가질 수 있다. 본 개시의 실시예들에 따라 메모리 버퍼(222b) 내 메모리의 총량 역시 결정될 수 있다.
도 4c로 돌아가면, SM 다이렉트 서버(214b)는 이제 협상 요청 만료 타이머(414)를 시동할 수 있다. 실시예들에서 서버(106)에서의 협상 요청 만료 타이머는 소정 값을 가지고 그 값부터 0까지 카운트 다운할 수 있다. 그러면 SMB 다이렉트 서버(214b)는 SMB 다이렉트 협상 요청 패킷(300)의 수신을 기다린다. 기다리면서 SMB 다이렉트 서버(214b)는 RDMA 연결을 모니터링하고 SMB 다이렉트 협상 요청 패킷(300)을 수신하기 전에 협상 요청 만료 타이머가 만료하였는지를 판단한다(416). 협상 요청 타이머가 만료되면, 프로세스(400C)는 아니오로 진행하여 연결이 포기되는 종료 동작(432C)으로 간다.
그러나 협상 요청 만료 타이머의 만료 전에 SMB 다이렉트 협상 요청 패킷(300)이 RNIC(108b) 및 RDMA 인터페이스(216b)에 도착한 경우, 프로세스(400C)는 예로 가서 RDMA 인터페이스(216b)에 의한 SMB 다이렉트 협상 요청 패킷(300) 수신 및 인증(408C), 그리고 메모리 버퍼(222b) 안에 패킷을 배치하는 것으로 진행한다. 이어서 SMB 다이렉트 서버(214b)는 데이터에 대해 정보를 얻고 SMB 다이렉트 협상 요청 패킷(300)이 유효한지를 판단한다(418).
실시예들에서 SMB 다이렉트 협상 요청 패킷(300)을 인증하기 위해, SMB 다이렉트 서버(214b)는 SMB 다이렉트 협상 요청 패킷(300)으로부터 데이터를 읽고 예컨대 다음과 같은 것을 판단한다: MaxVersion 필드(304)의 값이 MinVersion 필드(302)의 값보다 작은지, 혹은 그 범위 안에 드는 값이 지원되지 않는지; CreditsRequested 필드(308)의 값이 0인지; MaxReceiveSize 필드(312)의 값이 소정 문턱치(가령, 128 바이트)보다 작은지; 혹은 MaxSmb2MessageSize 필드(314)의 값이 소정 문턱치보다 작은지. 상술한 것들 중 어느 하나가 참이면, SMB 다이렉트 협상 요청 패킷(300)은 유효하지 않은 것이며, 프로세스(400C)는 아니오로 가서 SMB 다이렉트 서버(214b)가 연결을 해제하는 종료 동작(432C)으로 진행한다. 상기 검사항목들 모두가 참이 아니면, 프로세스(400C)는 예로 가서 SMB 다이렉트 응답(420)을 처리하도록 진행하며, 이때 SMB 다이렉트 협상 요청 패킷(300)이 SMB 다이렉트 서버(214b)에 의해 SMB 다이렉트 클라이언트(214a)로 보내진다.
SMB 다이렉트 협상 요청 패킷(300) 처리 시, 실시예들에서 SMB 다이렉트 서버(214b)는 클라이언트(102) 및 서버(106)에 의해 공유되는 최대 프로토콜 버전에 해당하도록 ProtocolVersion 설정을 세팅한다. SMB 다이렉트 서버(214b)는 얼마나 많은 크레딧들이 부여되어야 하는지를 또한 결정한다. 부여될 크레딧들의 개수는 실시예들에서, 메모리 버퍼(222b)의 이용 가능한 공간이나 기타 요인들에 좌우된다. 그러한 판단들을 행한 후, SMB 다이렉트 서버(214b)는 SMB 다이렉트 협상 응답 패킷(336)을 생성한다(422). 일 실시예에서 SMB 다이렉트 서버(214b)는 SMB 다이렉트 협상 응답 패킷(336) 안에 필드들을 세팅한다. 예를 들어 PreferredVersion 필드는 ProtocolVersion 설정 시의 값으로 세팅된다. 일 실시예에 따르면, CreditsGranted(320a)는 SMB 다이렉트 서버(214b)에 의해 결정된 크레딧들의 개수로 세팅된다. 기타 필드들이 SMB 다이렉트 협상 요청 패킷(300)과 비슷한 방식으로 채워진다. 그런 다음 SMB 다이렉트 협상 응답 패킷(336)이 클라이언트에게 전송된다(424C). 실시예들에서 SMB 다이렉트 서버(214b)는 전송할 RDMA 인터페이스(216b)로 SMB 다이렉트 협상 응답 패킷(336)을 전송한다.
도 4b로 돌아가면, SMB 다이렉트 클라이언트(214a)는 실시예들에 따라, 협상 만료 타이머의 만료 전에 응답이 수신되었는지를 판단한다(411). 타이머 만료 전에 응답이 수신되었으면, 프로세스(400B)는 예로 가서 SMB 다이렉트 협상 응답 패킷(336)을 인증한다(424B). RDMA 인터페이스(216a)는 메모리 버퍼(222a) 안으로 그 메시지를 수신한다. SMB 다이렉트 클라이언트(214a)는 SMB 다이렉트 협상 응답 패킷(336)을 읽고 그런 다음 그 메시지를 인증한다. 본 개시의 실시예들에 따라, SMB 다이렉트 협상 응답 패킷(336)을 인증하기 위해 SMB 다이렉트 클라이언트(214a)는 예컨대 다음과 같은 것을 판단한다(428): Status 필드(322)가 STATUS_SUCCESS(성공 상태)가 아닌지; PreferredVersion 필드(318)가 클라이언트의 SMB 다이렉트 협상 요청 패킷(300)의 MinVersion 필드(302) 및 MaxVersion 필드(304)에 의해 특정된 범위 안에 있는 값을 포함하지 않는지; CreditsRequested 필드(308b)가 0인지; CreditsGranted 필드(320a)가 0인지; PreferredSendSize(310b) 필드가 클라이언트의 SMB 다이렉트 협상 요청 패킷(300)의 MaxReceiveSize 필드(312)에 의해 특정된 값보다 큰지; 아니면 MaxReceiveSize 필드(312b)가 문턱치(가령, 128 바이트)보다 작은지. 상술한 것들 중 어느 하나가 참이면, SMB 다이렉트 협상 응답 패킷(336)은 유효하지 않은 것이며, 프로세스(400B)는 아니오로 가서 SMB 다이렉트 클라이언트(214a)가 연결을 해제하는 종료 동작(43B)으로 진행한다. 상기 검사항목들 모두가 참이 아니면, 프로세스(400B)는 예로 가서 SMB 다이렉트 응답(430)을 처리하도록 진행하며, 이때 여기 개시된 실시예들에 따라 SMB 다이렉트 협상 응답 패킷(336)이 SMB 다이렉트 클라이언트(214a)에 의해 처리된다.
SMB 다이렉트 협상 응답 패킷(336)을 처리 시, SMB 다이렉트 클라이언트(214a)는 실시예들에서 예컨대 다음과 같은 것을 이행한다: 설정들(226)에서 연결의 PeerTargetSendCreditsCount 설정을 CreditsRequested 필드(308b)과 동일하게 세팅하다; SMB 다이렉트 연결 특성들에서 연결의 SendCreditsCoun 설정을 CreditsGranted 필드(320a)와 동일하게 세팅한다; 설정들(226)에서 연결의 MaxSendSize 설정을 MaxReceiveSize 필드(312b)와 동일하게 설정한다; 설정들(226)에서 연결의 ReceiveSize 설정을 PreferredSendSize 필드(310b)와 동일하게 설정한다; 설정들(226)에서 연결의 MaxOutboundFragmentedMessageSize 설정을 MaxReceiveSize 필드(312b)와 동일하게 설정한다; 그리고 연결의 아이들 연결 타이머가 소정 정도의 시간 이후 만료되도록(가령, 몇 시간 뒤, 몇 분 뒤 등) 세팅한다. 상기 단계들이 수행되었으면, RDMA 연결 협상이 완료되었으며, 클라이언트(102) 및 서버(106)가 SMB 다이렉트 데이터 전송 패킷 교환을 시작할 수 있다. 그런 다음 프로세스(400B)는 종료 동작(432B)에서 종료된다.
본 명세서에 개시된 실시예에 따라, 도 2a 및 2b에 도시된 다양한 소프트웨어 기능 모듈들의 상호동작들은 설정된 RDMA 연결을 통해 SMB2 데이터를 교환하기 위해 도 5a-5d에 도시된 동작 단계들(500)에 더 예시된다. 요청 및 응답 통신들에서, 본 개시의 실시예들에 따라 SMB2 데이터를 SMB 다이렉트 데이터 전송 패킷(338)의 데이터 페이로드로서 캡슐화함으로써 SMB2 데이터가 설정된 SMB 다이렉트 연결을 통해 클라이언트(102) 및 서버(106) 사이에서 전송된다. 요청 및 응답 통신들은 예컨대 제어 채널 통신, 파일 메타데이터의 교환 또는 기타 프로세스를 위해 사용될 수 있다. 도 5a는 본 개시의 실시예들에 따른 클라이언트(102) 및 서버(106) 간의 패킷들(516/518, 530, 532 및 546)의 전송들에 대한 표현(500A)을 도시한다. 도 5b 및 5c는 클라이언트(102)의 관점에 있으며, 반면 도 5c는 서버(106)의 관점에 있다. 프로세스(500)는 클라이언트가 SMB2 데이터를 서버(106)에 독립적으로 혹은 서버로부터의 요청에 대응하여 전송되는 것으로 기술되는 것을 주목해야 한다. 그러나 서버(106)가 요청에 응답하여 거꾸로 클라이언트(102)로 데이터를 전송하는 반대의 경우도 있을 수 있다. 따라서, 실시예들에서 여기에 기술된 프로세스들은 서버가 요청을 보내고 크레딧들을 요구하는 경우에 적용한다. 또한, 예컨대 상기 방법이 여러 클라이언트들 사이 또는 여러 서버들 사이에서 수행될 수도 있다.
도 5b를 참조하면, 여기 개시된 실시예들에 따라 RDMA를 통해 SMB2를 이용하여 데이터를 교환하기 위한 예시적 동작 단계들(500B)이 도시된다. 시작 동작(502)이 개시되고, 프로세스(500B)는 클라이언트(102)가 RDMA 연결을 설정하는 동작(504)으로 진행한다. 본 개시의 실시예들에 따라 RDMA 연결을 설정하는 것은 도 4a-4c와 관련하여 기술된 바와 같을 수 있다. 일 실시예에서 SMB 다이렉트 클라이언트(214a)는 MaxSendSize 설정을 MaxReceiveSize 필드(312b)와 동일하게 설정하는 것, 연결의 ReceiveSize 설정을 PreferredSendSize 필드(310b)와 동일하게 설정하는 것 및 설정들(226) 안의 연결의 MaxOutboundFragmentedMessageSize 설정을 MaxReceiveSize 필드(312b)와 동일하게 설정하는 것을 포함하여, 여러 연결 특성들을 세팅한다. 이런 방식으로, 실시예들에서 클라이언트(102)는 서버(106)로 전송될 수 있는 패킷들의 사이즈를 설정하였다.
도 5b로 돌아가면, 실시예들에 따라 SMB 다이렉트 클라이언트(214a)는 서버(106)로 SMB2 메시지를 전송하는데 필요로 되는 SMB 다이렉트 데이터 전송 패킷들의 개수를 결정할 수 있다. 그러한 결정을 내리기 위해 SMB 다이렉트 클라이언트(214a)는 협상 중에 세팅된 것과 같은 MaxSendSize(R로서 지정)를 먼저 검색할 수 있다. SMB 다이렉트 클라이언트(214a)는 그 후 전송되어야 하는 SMB2 프로토콜 메시지(들)의 사이즈를 결정할 수 있다; 이 값은 실시예들에서 "S"라고 세팅된다. SMB 다이렉트 클라이언트(214a)는 또한, 8 바이트 정렬 경계 상에서 시작할 SMB 다이렉트 데이터 전송 패킷(338) 페이로드를 위한 SMB 다이렉트 데이터 전송 패킷(338) 헤더 및 패딩(가령, DataOffset(328) 등)에 의해 소비되는 바이트 수(실시예들에서 P라 지정됨)도 결정한다. 실시예들에서 SMB 다이렉트 클라이언트(214a)는 그 후 S가 (R-P)보다 작거나 같은지를 판단하고, 작거나 같은 경우, 실시예들에 따라 S를 (R-P)로 나눔으로써 패킷들의 수를 결정할 수 있다.
프로세스(500B)는 이제 SMB 다이렉트 클라이언트(214a)에 의해 분할(fragmentation)이 사용되는지를 판단(510)하는 것으로 진행한다. 일 실시예에서 분할은 SMB2 프로토콜 메시지가 단일 SMB 다이렉트 데이터 전송 패킷(338)에 "적합하지" 않을 때 사용된다. 즉, S가 (R-P) 보다 큰가? 분할이 사용되어야 하는 것이 아니면, 프로세스(500B)는 아니오로 진행하여 하나의 SMB 다이렉트 데이터 전송 패킷(518B)을 전송하도록 한다. 한편 분할이 사용되는 경우 프로세스(500B)는 예로 진행하여 전송 버퍼 바이트들을 초기화한다(512).
단계 518로 돌아가면, 실시예들에 따라 SMB2 프로토콜 메시지가 분할 없이 전송될 수 있다. 전송 패킷들을 위해 사용되는 메모리 버퍼(222a)의 일부가 초기화된다. 실시예들에서 SMB 다이렉트 데이터 전송 패킷(338)을 위한 헤더 정보를 세팅하고 SMB2 페이로드가 8 바딩트 정렬되는 것을 보장하도록 0으로 된 패딩 바이트들을 추가하기 위해 최초 P 바이트들이 초기화된다. 따라서 실시예들에 따라, 버퍼에서, DataOffset 필드(328)는 P로 세팅되고, DataLength 필드(330)는 S로 세팅되며, RemainingDataLength 필드(326)는 0으로 세팅된다. 크레딧들에 대한 정보나 요청이 CreditsRequested 필드(308c)나 CreditsGranted 필드(320b)에 저장된다. 따라서 클라이언트(102)는 SMB 다이렉트 데이터 전송 패킷(338)에 더 많은 크레딧들을 요청하거나 부여할 수 있다. 실시예들에서 SMB 다이렉트 데이터 전송 패킷의 발신자는 CreditsRequested 필드를 적어도 1로 세팅해야 한다. 그 다음 S 바이트들이 메모리 버퍼(222a) 안에서 초기화되며, SMB2 프로토콜 메시지가 SMB2 데이터 필드(332) 안에 저장된다. SMB 다이렉트 데이터 전송 패킷(338)이 모아진 후, SMB 다이렉트 클라이언트(214a)는 그 패킷을 RDMA 연결을 통해 서버(106)로 전송하기 위해 RDMA 인터페이스(216a)로 보낸다. 프로세스(500B)는 페이지 연결자 B를 거쳐 종료 동작(548C)으로 진행하며 프로세스가(500B)는 종료된다.
단계 512로 돌아가면, S가 (R-P) 보다 큰 경우, 실시예들에 따라 SMB2 프로토콜 메시지는 둘 이상의 부분들로 분할된다. 그 부분들은 그 후 각각 SMB2 프로토콜 메시지의 일부(조각(fragment))를 운반하는 일련의 RDMA 전송 동작들로서 전송되기 위해 순서화된다. SMB2 프로토콜 메시지를 조각들로 분할하기 위해, 제1페이로드의 사이즈는 X로 세팅되며, 이것은 (R-P)와 동일하거나 더 작다. 일 실시예에 따라 X는 적어도 제1RDMA 전송 동작에 의해 전송될 SMB2 프로토콜 메시지의 바이트 수를 나타낸다. 단계 518B를 통해, 전송 패킷들을 위해 사용되는 메모리 버퍼(222a)의 일부가 초기화된다. 실시예들에서 SMB 다이렉트 데이터 전송 패킷(338)에 대한 헤더 정보 및 그에 더해 패딩 바이트들을 세팅하기 위해 최초의 P 바이트들이 초기화된다. 이어서, 실시예들에 따라, DataOffset 필드(328)는 P로 세팅되고, DataLength 필드(330)는 S로 세팅되고, RemainingDataLength 필드(326)는 (S-X)로 세팅된다. RemainingDataLength 필드(326)는 실시예들에서, 얼마나 많은 SMB2 프로토콜 메시지의 바이트들이 전송되도록 남아 있는지를 나타낸다. 실시예들에서 SMB2 프로토콜 메시지의 마지막 조각이 전송될 때 (S-X)가 0으로 될 것이다. 마지막 패킷에서, RemainingDataLength 필드(326)는 이제 0으로 세팅되는데, 이는 SMB 다이렉트 데이터 전송 패킷(338)이 SMB2 프로토콜 메시지의 마지막 조각을 운반한다는 것을 나타낸다. 크레딧들에 대한 정보나 요청이 CreditsRequested 필드(308c)나 CreditsGranted 필드(320b)에 저장된다. 따라서 실시예들에서, 클라이언트(102)는 SMB 다이렉트 데이터 전송 패킷(338)에 더 많은 크레딧들을 요청하거나 부여한다. 메모리 버퍼(222a)의 다음 X 바이트들이 이제 초기화된다. 그런 다음 여기 개시된 실시예들에 따라, SMB2 프로토콜 메시지의 조각이 SMB2 데이터 필드(332) 안에 저장될 수 있다.
SMB2 프로토콜 메시지의 최초 미전송 X 바이트들과 함께 SMB 다이렉트 데이터 전송 패킷(338)을 모은 후, SMB 다이렉트 데이터 전송 패킷(338)이 서버로 보내진다(516B). SMB 다이렉트 클라이언트(214a)는 실시예들에서, SMB 다이렉트 데이터 전송 패킷(338)을 RDMA 연결을 통해 서버(106)로 전송하기 위해 RDMA 인터페이스(216a)로 전송한다. 프로세스(500B)는 그런 다음 페이지 연결자 A(520)를 통해, SMB 다이렉트 클라이언트(214a)가 다른 조각을 포함하는 다음 SMB 다이렉트 데이터 전송 패킷(338)이 전송되어야 할지를 판단(526)하는 동작 단계(526)로 진행한다. 따라서 실시예들에서 SMB 다이렉트 클라이언트(214a)는 마지막 패킷을 전송한 후 (S-X)가 0인지를 판단한다. (S-X)가 0이거나 0보다 적어 마지막 조각이 마지막 SMB 다이렉트 데이터 전송 패킷(338)을 통해 전송되었다는 것을 의미하는 경우, 프로세스(500B)는 아니로로 종료 동작(548C)으로 진행하며 프로세스(500B)는 종료된다. 그러나 (S-X)가 0보다 크면, 프로세스(500B)는 예로 진행하여 충분한 전송 크레딧들이 존재하는지를 판단한다(528). 실시예들에서 단계(526)는 (도시된 바와 같이) 선택적일 수 있는데, 이는 조각들을 전송하는 SMB 다이렉트 데이터 전송 패킷(338)이 메모리 버퍼(222a) 안에 미리 스테이징되어 순차적으로 전송될 수 있다. 버퍼(222a)가 비어 있을 때, 프로세스(500B)는 종료된다. 다음 패킷이 전송되어야 하는지를 판단해야 할 필요가 없다. SMB2 프로토콜 메시지가 분할될 때, 실시예들에 따라 조각들을 운반하는 RDMA 전송 동작들이 순차적이고도 단조적으로 전송되며, 분할된 SMB2 프로토콜 메시지와 무관한 다른 RDMA 전송 동작들에 의해 방해되지 않을 것이라는 것을 알아야 한다. 일 실시예에 따라 수신자 측에서 RDMA 전송 순서는 수신 피어가 최초 메시지를 재구성할 수 있도록 조각들의 시퀀싱을 유지할 것이다.
단계 528로 돌아가면, SMB 다이렉트 클라이언트(214a)는 다음 조각을 전송하기 충분한 전송 크레딧들이 존재하는지를 판단한다(528). 실질적으로 SMB 다이렉트 클라이언트(214a)는 하나의 전송 크레딧이 남아 있는지를 판단한다. 전송 크레딧이 있는 경우, 프로세스(500B)는 예로 페이지 연결자 C(524)를 통해 단계 512로 진행한다. 실시예들에서 RDMA 전송들은 발신자가 패킷을 전송할 수 있기 전에 수신자에 의해 사전 포스팅된 수신 버퍼를 가진다. 이러한 규칙은 발신자들이 수신자가 수신을 미리 포스팅하기 전에 패킷을 전송하도록 시도하지 않게 하기 위해 발신자와 수신자 사이에서의 조정을 필요로 한다. 본 개시의 실시예들에 따르면 SMB 다이렉트는 요망하는 조정을 달성하기 위해 전송 크레딧들의 시스템을 이용한다.
일 실시예에서 서버(106)나 클라이언트(102)로부터 부여된 전송 크레딧들은 서버(106)나 클라이언트(102) 상의 하나의 미리 포스팅된 수신을 나타낸다. 피어는 하나의 전송 크레딧을 가지고 하나의 RDMA 전송 동작을 수행할 자격이 주어진다. 클라이언트(102)는 또한 CreditsRequested 필드(308c)를 세팅하거나 전송 크레딧 요청(일 실시예에 따라 분할된 SMB2 데이터를 전송하는 SMB 다이렉트 데이터 전송 패킷(338)의 집합 중간에서 전송되어서는 안됨)의 형식으로 클라이언트(102)가 자신의 작업 부하를 효율적으로 지원하기 위해 얼마나 많은 전송 크레딧들을 필요로 하는지에 대한 정보를 서버(106)에 제공할 수 있다. 전송 크레딧들은 SMB 다이렉트 데이터 전송 패킷(338)의 CreditsGranted 필드(320b) 안에 부여된다. 따라서 SMB 다이렉트 클라이언트(214a)는 CreditsRequest 필드(308c)의 값을 보다 높은 수(가능하게는 모든 미래의 분할 패킷들을 커버하는 수)로 세팅함으로써 보다 많은 전송 크레딧들을 요청할 수 있다. SMB 다이렉트 클라이언트(214a)는 이제, 일 실시예에 따라 SMB 다이렉트 데이터 전송 패킷(338)의 CreditsGranted 필드(320b)를 통해 데이터는 가지지 않지만 전송 크레딧들을 포함하는 서버(106)로부터 보내진 SMB 다이렉트 데이터 전송 패킷(338)을 기다림으로써 전송 크레딧들을 수신하기 위해 기다릴 수 있다(530C). SMB 다이렉트 클라이언트(214a)는 타이머들(224a)에서 SendCreditsGrantedTimer을 세팅함으로써 크레딧들이 수신되는지를 질의(532C)에서 판단할 수 있다. SendCreditsGrantedTimer가 크레딧들이 부여되기 전에 만료하면(547), 프로세스(500B)는 예로 가서 전송 동작을 실패시키거나 종료시키며 프로세스(500B)는 종료 동작(548C)에서 종료된다. 크레딧들이 부여되면(532C), 프로세스(500B)는 예로 페이지 연결자 C(524)를 통해 단계 512로 진행한다. 일 실시예에 따라 어떤 타이머도 세팅되지 않고/거나 타이머가 만료되지 않았으면(547), 프로세스(500B)는 아니오로 진행하여 전송 동작을 실패시키거나 종료하지 않으며 대신 전송 크레딧들의 수신을 계속 기다린다(530C).
도 5d 및 프로세스(500D)의 시작 동작(502D)를 참조하면, 서버(106)에서 SMB 다이렉트 데이터 전송 패킷(338)이 수신된다(516D). 일 실시예에서 RDMA 인터페이스(216b)는 SMb 다이렉트 데이터 전송 패킷(338)을 수신하고 그것을 SMB 다이렉트 서버(214b)로 전송한다. 먼저 SMB 다이렉트 서버(214b)는 헤더 정보를 읽는다. SMB 다이렉트 서버(214b)는 질의(536)로 진행하여 RemainingDataLength 필드(326)가 0이 아닌 어떤 것인지를 판단한다. RemainingDataLength 필드(326)가 0이면, 일 실시예에서 SMB 다이렉트 데이터 전송 패킷(338)은 유일한 패킷이며, 프로세스(500D)는 아니오로 진행하여 SMB 패킷 데이터(544)를 처리하는데, 여기서 SMB 다이렉트 서버(214b)는 패킷 데이터를 처리하고 SMB2 프로토콜 메시지를 SMB2 서버(212b)에 전송한다. RemainingDataLength 필드(326)이 0이 아닌 어떤 것이면, 프로세스(500D)는 예로 진행하여 재조립 버퍼(538)를 할당한다.
단계 538에서 SMB 다이렉트 서버(214b)는 일 실시예에서, 버퍼(222b) 안에 SMB2 프로토콜 메시지를 다시 모으기 위한 메모리 버퍼(222b)의 일부를 할당한다. 따라서, SMB 다이렉트 서버(214b)는 DataLength 필드(330) 값에 더해 RemainingDataLength 필드(326) 값에 기반하여 현재의 SMB 다이렉트 데이터 전송 패킷(338) 및 앞으로의 SMB 다이렉트 데이터 전송 패킷(338) 안의 데이터를 수용하기 위해 메모리 버퍼(222b) 안에 충분한 블록들을 할당할 수 있다. SMB 다이렉트 서버(214b)는 그 후 본 개시의 실시예들에 따라 SMB2 데이터 필드(332)로부터 SMB2 데이터를 읽고 그 데이터를 할당된 버퍼(540) 안에 복사할 수 있다.
이어서, 일 실시예는 SMB 다이렉트 서버(214b)가 다음 SMB 다이렉트 데이터 전송 패킷(338)을 대기하여 수신하도록(546D) 하게 해준다. SMB2 데이터 필드(332) 안의 데이터 역시 일 실시예에서 메모리 버퍼(222b)의 다음 부분 안에 복사된다. 대안적 실시예에서, SMB 다이렉트 서버(214b)는 선택적으로 이러한 다음 SMB 다이렉트 데이터 전송 패킷(338)이 분할된 데이터를 포함하는 마지막 패킷인지를 판단할 수 있다(542). 그러한 결정을 하기 위해, SMB 다이렉트 서버(214b)는 RemainingDataLength 필드(326)가 0인지를 검사한다. RemainingDataLength 필드(326)가 0이면 SMB 다이렉트 서버(214b)는 더 이상 패킷들이 수신되지 않을 것이라고 이해하고, 프로세스(500D)는 예로 진행하여 메모리 버퍼(222b)로부터 SMB2 프로토콜 메시지(544)를 처리하도록 한다. 그런 다음 프로세스(500D)는 종료 동작(548D8)에서 종료된다. 한편 RemainingDataLength 필드(326)가 0이 아닌 어떤 것이면, SMB 다이렉트 서버(214b)는 다른 패킷(들)이 수신될 것이라고 이해하며, 프로세스(500D)는 일 실시예에 따라 아니오로 진행하여 다음 SMB 다이렉트 데이터 전송 패킷(338)을 수신하도록 한다(546D).
여기에 개시된 실시예에 따라, 도 2a 및 2b에 도시된 다양한 소프트웨어 기능 모듈들의 상호동작들이 RDMA 다이렉트 데이터 전송을 수행하기 위해 도 6에 도시된 동작 단계들(600)에 더 예시된다. 도6은 본 개시의 실시예들에 따른 클라이언트(102) 및 서버(106) 간의 데이터 전송에 대한 표현을 도시한다.
도 6에 도시된 바와 같이, 프로세스(600)는 시작 동작(602)에서 개시되며 SMB2 클라이언트(208)는 SMB2 읽기/쓰기 요청(340)을 생성한다(604). 애플리케이션(220)은 데이터가 서버(106)로 전송되거나 서버(106)로부터 읽혀지도록 요청할 수 있다. 본 개시의 실시예들에 따라 데이터 전송은 RDMA 직접 데이터 전송을 이용하도록 SMB2 클라이언트(208)에 의해 지시됨으로써, SMB2 서버(106)가 실제 RDMA 요청을 고유하게 수행하도록 한다. 전송을 시작하기 위해 SMB2 클라이언트(208)는 부호화되지 않은 애플리케이션 데이터를 제공하거나 수신할 타깃 메모리 버퍼들을 등록하고, 그런 다음 RDMA를 통해 전송되고 수행되어야 하는 SMB 읽기/쓰기 명령을 생성한다. 그 명령은 SMB2 읽기/쓰기 요청(340)에 포함되고 그 SMB2 읽기/쓰기 요청(340)을 SMB 다이렉트 데이터 전송 패킷 안에 캡슐화하는(606) SMB 다이렉트 클라이언트(214a)로 전송될 수 있다. 실시예들에서 SMB2 읽기/쓰기 요청(340)은 SMB 데이터 전송 패킷 내 SMB2 데이터 필드(332) 안에 저장된다. SMB 다이렉트 데이터 전송 패킷은 그런 다음 RDMA 인터페이스(216)을 통해 서버(106)로 전송될 수 있다(608). 일 실시예에서 서버(106)는 SMB 다이렉트 데이터 전송 패킷을 수신하고 SMB2 데이터 필드(332)로부터 SMB2 읽기/쓰기 요청(340)을 읽는다. SMb 다이렉트 서버(214b)는 그 후 channel(342), ChannellnfoOffset(346) 및 ChannellnfoLength(348)를 포함하는 SMB2 읽기/쓰기 요청(340)으로부터 데이터를 읽을 수 있다. 이러한 정보는 SMB 다이렉트 서버(214b)가 RDMA 채널 서술자(352) 안의 스티어링 정보로 항하게 할 수 있다. 스티어링 정보로부터 SMB 다이렉트 서버(214b)는 클라이언트(102)의 버퍼 내 어떤 메모리 위치로/로부터 부호화되지 않은 애플리케이션 데이터를 전송하거나 회수(612)함으로써 직접 데이터 전송을 시작할 수 있다. 그런 다음 프로세스(600)는 종료 동작(614)에서 종료된다.
도 4a-4c, 5a-5d 및 6은 여기 개시된 실시예들에 따라, RDMA를 통해 파일 액세스 프로토콜을 이용하여 통신을 협상하고 RDMA를 통해 파일 액세스 프로토콜을 이용하여 데이터를 교환하기 위한 예시적 동작 특성들을 각기 예시한다. 실시예들에서 도시된 동작 단계들은 다른 단계들 안에 결합되고/거나 재정렬될 수 있다. 또한 예컨대 더 적거나 추가되는 단계들이 사용될 수 있다.
일반적으로 크레딧들은 본 실시예들에 대한 장점이다. 전송 크레딧은 피어 상에서 들어오는 데이터를 수신하도록 사전 포스팅되었던 버퍼를 나타낸다. 따라서, 전송 크레딧은 피어가 제한된 수신 자원들(메모리, 메모리 영역들 등)을 이용하여 데이터를 전송하도록 피어에게 약속되었던 그 제한된 수신 자원들을 나타낸다. RDMA의 특성으로 인해, 실시예들에서 일단 포스팅되었던 수신은 취소될 수 없다. 수신과 관련된 자원들이 해제되도록, 그 자원들은 들어오는 전송을 서비스하는 데 사용된다. 이것은 실시예들에서 수신 피어가 자원들이 고갈되기 시작하는 경우 가능한 문제를 제기하고, 미결정 수신들에 전용되었던 자원들의 일부를 반환 요구한다. 수신들은 여기 개시된 실시예들에 따라 취소될 수 없기 때문에, 이러한 자원들의 반환 요구는 피어의 협조에 의존한다.
SMB 다이렉트에서 이러한 문제에 대한 해법은 일 실시예에 따라 전송 크레딧 해제로 지칭된다. 피어에게 전송되는 SMB 다이렉트 데이터 전송 패킷은 얼마나 많은 추가 전송 크레딧들이 피어에게 부여되었는지를 특정하는 CreditsGranted 필드를 가진다. 대안적 실시예들에서 SMB 다이렉트 데이터 전송 패킷(338) 안에 크레딧 해제 플래그(미도시)를 세팅함으로써, CreditsGranted 필드(320b)의 의미가 피어가 유지할 수 있는 전송 크레딧들의 개수가 되도록 바뀐다. 예를 들어, CreditRevocation 플래그가 세팅되었고 CreditsGranted 필드(320b)의 값이 10이면, 10이 수신기가 보유할 수 있는 크레딧들의 개수이다. 수신자가 현재 10 이상의 전송 크레딧들을 보유하는 경우, 수신자는 수신자가 10이나 그보다 적은 전송 크레딧들이 되도록 해제된 전송 크레딧들을 고갈시키기 위해 일련의 RDMA 전송 동작들을 수행한다. 해제된 전송 크레딧들을 고갈시키기 위해 수행되는 전송 동작들은 빈 SMB 다이렉트 데이터 전송 패킷(338)(데이터 페이로드를 가지지 않은 패킷)을 전송하는 것을 포함할 수 있다. 들어오는 빈 SMB 다이렉트 데이터 전송 패킷들(338)을 수신할 때, 실시예들에 따르면 전송 크레딧들을 해제했던 피어는 이러한 자원들을 해제하거나, 적합하다고 판단할 때 그들을 재사용할 수 있다.
전송 크레딧들은 두 피어들이 자신들의 전송 및 수신 동작들을 동기시킬 수 있게 하며, 실시예들에서 그 피어들은 전송 크레딧 교착상태를 피하고자 시도한다. 피어 Y가 피어 X로부터 하나의 전송 크레딧을 가지고 피어 X가 피어 Y로부터 하나의 전송 크레딧을 가지는 시나리오를 가정한다. 이 시나리오에서 각각의 피어는 아무 때에나 자신의 피어로 하나의 전송을 수행할 자격이 부여된다. X 및 Y 둘 모두가 자신들의 단일 전송 크레딧을 프로세스 중에 사용하여 동시에 전송 동작을 수행하지만 두 피어들 모두에 의해 전송되는 SMB 다이렉트 데이터 전송 패킷(338)은 피어에 어떤 추가 전송 크레딧들도 부여하지 않는다고 가정한다. 그에 따른 상태가 전송 크레딧 교착상태라고 알려져 있다. X 및 Y 모두는 자신들의 마지막 전송 크레딧을 사용하였다. 추가 패킷들을 피어에게 전송할 수 있게 하기 위해, 각각의 피어는 추가 전송 크레딧들을 필요로 한다. 그러나 전송 크레딧들은 SMB 다이렉트 데이터 전송 패킷들(338)을 통해 부여되며 어느 피어도 어떤 추가 전송 동작들을 수행할 수 없다. 그 결과는 어떤 피어도 어떤 추가적 패킷들을 전송할 수 없다는 것이며, 이들이 추가 전송 크레딧들을 획득할 수 있게 하는 메커니즘은 존재하지 않는다. 따라서 교착상태가 발생하였다.
이 문제에 대한 해법은 단순히 본 개시의 실시예들에 따른 하나의 규칙이다. SMB 다이렉트 피어가 자신의 마지막 전송 크레딧을 사용할 때, 일 실시예에 따라 전송되고 있는 SMB 다이렉트 데이터 전송 패킷(338)은 적어도 하나의 추가적 전송 크레딧을 피어에게 부여한다. 두 피어들이 이 규칙을 따르면, 각각의 피어가 항상 추가 전송 크레딧들의 부여를 통해 다른 것에 응답할 수 있을 것이기 때문에 교착상태는 발생되지 않는다.
마지막으로 도 7은 여기에 개시된 실시예들이 구현될 수 있는 예시적 컴퓨팅 시스템(700)을 도시한다. 여기에 개시된 실시예들에 따라, 예컨대 여기 도시된 것과 같은 메시지 데이터를 교환하기 위해 적어도 하나의 프로세서(702)를 가지는 클라이언트/애플리케이션 서버(102)나 파일 서버(106)와 같은 컴퓨터 시스템(700)이 도시된다. 시스템(700)은 예컨대 시스템 메모리, 휘발성 메모리 및 비휘발성 메모리를 구비하는 메모리(704)를 가진다. 가장 기본적인 구성 안에서 컴퓨팅 시스템(700)이 점선(706)으로 도 7에 예시된다. 또한 시스템(700)은 비한정적인 것으로서 자기 또는 광 디스크나 테이프를 포함하는 추가 저장부(착탈가능형 및/또는 비착탈가능형)을 포함할 수도 있다. 그러한 추가 저장부는 도 7에서 착탈형 저장부(708) 및 비착탈형 저장부(710)로써 예시된다.
여기서 사용된 컴퓨터 판독 가능 매체라는 용어는 컴퓨터 저장 매체를 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈이나 기타 데이터 같은 정보의 저장을 위해 어떤 방법 또는 기술로 구현된 휘발성 및 비휘발성, 착탈형 및 비착탈형 매체를 포함한다. 시스템 메모리(704), 착탈형 저장부(708) 및 비착탈형 저장부(710)는 모두 컴퓨터 저장 매체의 예들(즉, 메모리 저장부)이다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM(electrically erasable read-only memory), 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD(digital versatile disks) 또는 다른 광학적 저장부, 마그네틱 카세트, 마그네틱 테이프, 마그네틱 디스크 저장부 또는 다른 마그네틱 저장기, 또는 원하는 정보를 저장하는데 사용될 수 있고 컴퓨터 시스템(700)에 의해 액세스될 수 있는 어떤 다른 매체를 포함하나, 그에 국한되지 않는다. 그러한 어떤 컴퓨터 저장 매체는 시스템(700)의 일부일 수 있다. 도 7의 예시도는 어떤 식으로든 본 개시의 범위를 한정하고자 의도된 것이 아니다.
여기서 사용된 컴퓨터 판독 가능 매체라는 용어는 통신 매체를 또한 포함할 수 있다. 통신 매체는 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 또는 반송파나 다른 전송 메커니즘 같은 변조된 데이터 신호 속의 다른 데이터를 통해 구현될 수 있으며, 어떤 정보 전달 매체라도 포함한다. "변조된 데이터 신호"라는 용어는 신호 안에 정보를 인코딩하기 위한 방식으로 세팅되거나 변경되는 신호의 특성들 중 한 개 이상을 가지는 신호를 기술할 수 있다. 한정하는 것이 아닌 예로서, 통신 매체는 유선 네트워크나 직접 유선 연결 같은 유선 매체, 및 청각, RF(radio frequency), 적외선 및 다른 무선 매체 같은 무선 매체를 포함할 수 있다.
시스템(700)은 또한 장치가 다른 장치들과 통신할 수 있게 하는 통신 접속(들)(716)을 포함할 수 있다. 시스템(700)은 또한 키보드, 마우스, 펜, 음성 입력 기기, 터치 입력 기기 등과 같은 입력 기기(들)(714)을 포함할 수 있다. 디스플레이, 스피커, 프린터 등과 같은 출력 기기(들)(712) 역시 포함될 수 있다. 이 기기들 모두는 이 기술 분야에 잘 알려져 있으므로 여기에 상세히 논의될 필요가 없다. 상술한 장치들은 예들로서 다른 것들이 사용될 수도 있다.
상기 도면들을 참조하여 본 개시의 실시예들을 기술하였으나, 당업자에게 용이하게 제시할 수 있고 본 개시의 범위와 사상 안에 포함되며, 첨부된 청구범위에 정의된 바와 같은 실시예들에 대한 수많은 변경이 이루어질 수 있다는 것을 알아야 한다. 실제로 실시예들은 본 개시의 목적을 위해 기술되었지만, 본 개시의 범위 안에서 다양한 변경 및 수정이 이루어질 수 있다.
마찬가지로, 본 개시가 구조적 특징들, 방법론적 행위들, 및 그러한 행위들을 포함하는 컴퓨터 판독 가능 매체에 특정되는 언어를 사용하였으나, 첨부된 청구범위에 정의 발명의 대상이 본 명세서에 기술된 특정한 구조, 행위들, 특징들 또는 매체에 꼭 국한되는 것은 아니라는 것을 알아야 한다. 예를 들어, API들, 루틴들 등의 명칭들과 같이 실시예들의 양태들을 기술하면서 특정 명칭들이나 명명 관례들이 사용되었지만, 본 개시의 사상 및 범위 안에 포괄되는 그러한 명칭들 및/또는 명명 관례들에 대한 수많은 변경이 이루어질 수 있다. 상술한 특정한 구조들, 특징들, 행위들, 명칭들, 명령 관례들 및/또는 매체는 청구범위를 구현하는 예시적 형태들로서 개시된다. 실시예들의 양태들은 여러 클라이언트/애플리케이션 서버들, 여러 파일 서버들, 여러 네트워크들, 여러 연결 피어들 등을 허용한다. 혹은 다른 실시예들에서 하나의 서버 및 하나의 네트워크와 함께 하나의 클라이언트 컴퓨터가 사용된다. 당업자는 본 개시의 범위와 사상 안에 있는 다른 실시예들이나 개선사항들을 인식할 수 있을 것이다. 따라서, 특정한 구조, 행위들 또는 매체들은 본 개시를 구현하는 예시적인 실시예들로서 개시된다. 본 개시는 첨부된 청구범위에 의해 정의된다.

Claims (20)

  1. 데이터 교환을 위한 접속을 수립하는 컴퓨터 구현 방법으로서,
    수신기에 의해, 제1 패킷을 수신하는 단계 - 상기 제1 패킷은 제1 필드 및 데이터를 포함하고, 상기 제1 필드는 상기 수신기가 아직 수신하지 않은 분할된 메시지(fragmented message)의 바이트 수와 동일함 - 와,
    상기 제1 필드에 저장된 값이 0인지 여부를 판정하는 단계와,
    상기 값이 0인 경우, 상기 제1 패킷 내의 데이터를 처리하는 단계와,
    상기 값이 0이 아닌 경우,
    상기 접속에 재조립 버퍼를 할당하는 단계와,
    상기 데이터를 상기 제1 패킷으로부터 상기 재조립 버퍼로 복사하는 단계와,
    제2 데이터를 포함하는 제2 패킷을 수신하는 단계와,
    상기 제2 데이터를 상기 제2 패킷으로부터 상기 재조립 버퍼로 복사하는 단계를 포함하는
    컴퓨터 구현 방법.
  2. 제1항에 있어서,
    상기 제1 패킷은 크레딧 요청(credits requested) 필드, 크레딧 승인(credits granted) 필드, 데이터 오프셋(data offset) 필드, 및 데이터 길이(data length) 필드로 이루어진 그룹 중 하나 이상의 필드를 포함하는
    컴퓨터 구현 방법.
  3. 제2항에 있어서,
    상기 크레딧 승인 필드는 얼마나 많은 크레딧이 상기 제1 패킷의 발송자에게 제공되었는지를 나타내는
    컴퓨터 구현 방법.
  4. 제1항에 있어서,
    크레딧은 발송자에 의해 전송될 수 있는 메시지의 개수를 나타내는 값인
    컴퓨터 구현 방법.
  5. 제1항에 있어서,
    상기 제2 패킷이 마지막 패킷인지를 판정하는 단계와,
    상기 제2 패킷이 마지막 패킷이면, 상기 재조립 버퍼 내의 데이터를 처리하는 단계와,
    상기 제2 패킷이 마지막 패킷이 아니면, 적어도 하나의 제3 패킷을 수신하고 상기 제3 패킷으로부터의 제3 데이터를 상기 재조립 버퍼로 복사하는 단계를 더 포함하는
    컴퓨터 구현 방법.
  6. 제5항에 있어서,
    상기 재조립 버퍼는 적어도 두 개의 데이터 패킷으로부터의 데이터를 포함하는
    컴퓨터 구현 방법.
  7. 제5항에 있어서,
    상기 제1 패킷이 마지막 패킷인지를 판정하는 단계는 상기 제1 필드에 저장된 값이 0인지 여부를 판정하는 단계를 포함하는
    컴퓨터 구현 방법.
  8. 제1항에 있어서,
    협상 요청의 수신을 사전 포스팅(pre-posting)하는 단계와,
    협상 요청 만료 타이머를 설정하는 단계와,
    상기 협상 요청이 상기 협상 요청 만료 타이머가 만료되기 전에 수신되었는지 여부를 판정하는 단계와,
    상기 협상 요청이 상기 협상 요청 만료 타이머가 만료되기 전에 수신되지 않으면, 상기 협상 요청의 수신을 취소하는 단계와,
    상기 협상 요청이 상기 협상 요청 만료 타이머가 만료되기 전에 수신되면, 상기 협상 요청을 수신하는 단계 - 상기 협상 요청은 원격 직접 메모리 액세스를 이용하여 데이터를 전송하기 위한 접속을 수립하도록 요청함 - 와,
    상기 협상 요청을 검증하는 단계와,
    상기 협상 요청을 처리하는 단계와,
    상기 협상 요청 처리에 응답하여, 응답을 생성하는 단계 - 상기 응답은 상기 접속을 허용하고, 패킷을 전송할 상기 협상 요청의 발송자에게 적어도 하나의 크레딧을 할당함 - 와,
    상기 응답을 전송하는 단계를 포함하는
    컴퓨터 구현 방법.
  9. 제8항에 있어서,
    상기 협상 요청은, 요청 버전(request version) 필드, 제1 크레딧 요청(credit request) 필드, 제1 크기를 나타내는 선호 크기(referred size) 필드, 및 제2 크기를 나타내는 최대 크기(max size) 필드로 이루어진 그룹 중 하나 이상의 필드를 포함하는
    컴퓨터 구현 방법.
  10. 제9항에 있어서,
    상기 응답은 응답 버전(response version) 필드, 선호 버전(preferred version) 필드, 제2 크레딧 요청(second credit request) 필드, 크레딧 승인(credit granted) 필드 및 상태(status) 필드로 이루어진 그룹 중 하나 이상의 필드를 포함하는
    컴퓨터 구현 방법.
  11. 프로세서에 의해 실행될 때 데이터를 교환하는 방법을 수행하는 컴퓨터 실행 가능 명령어를 저장한 컴퓨터 판독 가능 저장 매체로서,
    상기 방법은
    서버와의 접속을 수립하는 단계와,
    상기 서버와의 접속을 협상하는 단계와 - 상기 협상은 상기 서버가 상기 접속에서 수신할 최대 바이트 수를 규정함 -,
    상기 접속과 연관된 데이터를 상기 서버로 전송하기 위한 패킷의 개수를 결정하는 단계와,
    상기 데이터의 분할이 사용되어야 하는지를 판정하는 단계와,
    상기 데이터의 분할이 사용될 필요가 없는 경우, 제1 패킷을 상기 데이터와 함께 상기 서버로 전송하는 단계와,
    상기 데이터의 분할이 사용되어야 하는 경우, 전송 버퍼 내의 최초 바이트들을 상기 제1 패킷 내의 데이터로서 전송하도록 초기화하고, 상기 제1 패킷 내에 데이터 길이에 대응하는 제1 필드 및 나머지 데이터에 대응하는 제2 필드를 설정하고 - 상기 제2 필드는 상기 서버가 아직 수신하지 않은 분할 메시지의 바이트 개수와 동일함 - , 상기 제1 패킷을 상기 서버로 전송하고, 상기 전송 버퍼 내의 바이트들을 제2 프로토콜 패킷 내의 데이터로서 전송하도록 초기화하고, 제2 패킷 내에 나머지 데이터에 대응하는 제3 필드를 설정하고, 상기 제2 패킷을 상기 서버로 전송하는 단계
    를 포함하는 컴퓨터 판독 가능 저장 매체.
  12. 제11항에 있어서,
    상기 분할이 사용되어야 하는지를 판단하는 단계는 상기 데이터를 전송하는데 필요한 패킷의 개수가 1개보다 많은지를 판정하는 단계를 포함하는
    컴퓨터 판독 가능 저장 매체.
  13. 제12항에 있어서,
    상기 접속과 연관된 데이터를 상기 서버로 전송하기 위한 패킷의 개수를 결정하는 단계는 상기 서버가 상기 접속에서 수신할 수 있는 최대 바이트 수가 전송될 데이터 바이트의 개수보다 적은지를 판정하는 단계를 포함하는
    컴퓨터 판독 가능 저장 매체.
  14. 제11항에 있어서,
    상기 서버와의 접속을 협상하는 단계는
    수신을 사전 포스팅하는 단계와,
    협상 요청을 구성하는 단계와,
    상기 협상 요청을 상기 서버로 전송하는 단계와,
    협상 만료 타이머를 설정하는 단계와,
    상기 협상 요청에 대한 응답이 상기 협상 만료 타이머가 만료되기 전에 수신되는지를 판정하는 단계와,
    상기 협상 요청에 대한 응답이 상기 협상 만료 타이머가 만료되기 전에 수신되지 않으면, 상기 협상 요청을 재전송하는 단계와,
    상기 협상 요청에 대한 응답이 상기 협상 만료 타이머가 만료되기 전에 수신되면, 협상 응답을 수신하는 단계와,
    상기 협상 응답을 검증하는 단계와,
    상기 협상 응답을 처리하는 단계 - 상기 협상 응답은 상기 프로토콜 패킷을 전송할 적어도 하나의 크레딧을 제공함 -
    를 포함하는 컴퓨터 판독 가능 저장 매체.
  15. 제14항에 있어서,
    상기 방법은
    상기 제2 패킷을 전송하기 위한 충분한 크레딧이 존재하면, 상기 적어도 제2 패킷을 전송하는 단계와,
    상기 제2 패킷을 전송하기 위한 충분한 크레딧이 존재하지 않으면, 상기 서버에게 크레딧을 적어도 하나 더 요구하는 단계와,
    충분한 크레딧이 수신되는지 판단하는 단계와,
    충분한 크레딧이 수신되지 않으면, 상기 접속을 종료하는 단계와,
    충분한 크레딧이 수신되면, 상기 제2 패킷을 전송하는 단계
    를 더 포함하는 컴퓨터 판독 가능 저장 매체.
  16. 데이터를 교환을 위한 접속을 수립하도록 구성된 시스템으로서,
    적어도 하나의 프로세서와,
    컴퓨터 실행가능 명령어를 저장하는 메모리를 포함하되,
    상기 명령어는 상기 적어도 하나의 프로세서에 의해 실행되는 경우 상기 프로세서로 하여금,
    수신기에 의해, 제1 패킷을 수신하는 단계 - 상기 제1 패킷은 제1 필드 및 데이터를 포함하고, 상기 제1 필드는 상기 수신기가 아직 수신하지 않은 분할된 메시지의 바이트 수와 동일함 - 와,
    상기 제1 필드에 저장된 값이 0인지 여부를 판정하는 단계,
    상기 값이 0인 경우, 상기 제1 패킷 내의 데이터를 처리하는 단계와,
    상기 값이 0이 아닌 경우,
    상기 접속에 재조립 버퍼를 할당하는 단계와,
    상기 데이터를 상기 제1 패킷으로부터 상기 재조립 버퍼로 복사하는 단계와,
    제2 데이터를 포함하는 제2 패킷을 수신하는 단계와,
    상기 제2 데이터를 상기 제2 패킷으로부터 상기 재조립 버퍼로 복사하는 단계를 수행하게 하는
    시스템.
  17. 제16항에 있어서,
    상기 명령어는 상기 적어도 하나의 프로세서에 의해 실행되는 경우 상기 프로세서로 하여금,
    상기 제2 패킷이 마지막 패킷인지를 판정하는 단계와,
    상기 제2 패킷이 마지막 패킷이면, 상기 재조립 버퍼 내의 데이터를 처리하는 단계와,
    상기 제2 패킷이 마지막 패킷이 아니면, 적어도 제3 패킷을 수신하고 상기 제3 패킷으로부터의 제3 데이터를 상기 재조립 버퍼로 복사하는 단계를 수행하게 하는 명령어를 더 포함하는
    시스템.
  18. 제17항에 있어서,
    상기 재조립 버퍼는 적어도 두 개의 데이터 패킷으로부터의 데이터를 포함하는
    시스템.
  19. 제16항에 있어서,
    상기 명령어는 상기 적어도 하나의 프로세서에 의해 실행되는 경우 상기 프로세서로 하여금,
    협상 요청의 수신을 사전 포스팅하는 단계와,
    협상 요청 만료 타이머를 설정하는 단계와,
    상기 협상 요청이 상기 협상 요청 만료 타이머가 만료되기 전에 수신되었는지 여부를 판정하는 단계와,
    상기 협상 요청이 상기 협상 요청 만료 타이머가 만료되기 전에 수신되지 않으면, 상기 협상 요청의 수신을 취소하는 단계와,
    상기 협상 요청이 상기 협상 요청 만료 타이머가 만료되기 전에 수신되면, 상기 협상 요청을 수신하는 단계 - 상기 협상 요청은 원격 직접 메모리 액세스를 이용하여 데이터를 전송하기 위한 접속을 수립하도록 요청함 - 와,
    상기 협상 요청을 검증하는 단계와,
    상기 협상 요청을 처리하는 단계와,
    상기 협상 요청 처리에 응답하여, 응답을 생성하는 단계 - 상기 응답은 상기 접속을 허용하고, 패킷을 전송할 상기 협상 요청의 발송자에게 적어도 하나의 크레딧을 할당함 - 와,
    상기 응답을 전송하는 단계를 수행하게 하는 명령어를 더 포함하는
    시스템.
  20. 제16항에 있어서,
    상기 제1 패킷은 크레딧 요청 필드, 크레딧 승인 필드, 데이터 오프셋 필드 및 데이터 길이 필드로 이루어진 그룹 중 하나 이상의 필드를 포함하는
    시스템.
KR1020137034797A 2011-06-29 2012-06-06 원격 직접 메모리 액세스를 통한 임의 사이즈의 전송 기법 KR102047142B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/172,757 US9331955B2 (en) 2011-06-29 2011-06-29 Transporting operations of arbitrary size over remote direct memory access
US13/172,757 2011-06-29
PCT/US2012/041049 WO2013002980A2 (en) 2011-06-29 2012-06-06 Transporting operations of arbitrary size over remote direct memory access

Publications (2)

Publication Number Publication Date
KR20140034872A KR20140034872A (ko) 2014-03-20
KR102047142B1 true KR102047142B1 (ko) 2019-11-20

Family

ID=47391756

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137034797A KR102047142B1 (ko) 2011-06-29 2012-06-06 원격 직접 메모리 액세스를 통한 임의 사이즈의 전송 기법

Country Status (6)

Country Link
US (2) US9331955B2 (ko)
EP (1) EP2737685A4 (ko)
JP (1) JP6047158B2 (ko)
KR (1) KR102047142B1 (ko)
CN (2) CN106411767B (ko)
WO (1) WO2013002980A2 (ko)

Families Citing this family (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8332526B2 (en) 2005-05-25 2012-12-11 Microsoft Corporation Data communication protocol including negotiation and command compounding
US8631277B2 (en) 2010-12-10 2014-01-14 Microsoft Corporation Providing transparent failover in a file system
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
US8788579B2 (en) 2011-09-09 2014-07-22 Microsoft Corporation Clustered client failover
US20130067095A1 (en) 2011-09-09 2013-03-14 Microsoft Corporation Smb2 scaleout
US9473596B2 (en) * 2011-09-27 2016-10-18 International Business Machines Corporation Using transmission control protocol/internet protocol (TCP/IP) to setup high speed out of band data communication connections
US9495324B2 (en) * 2012-03-30 2016-11-15 Intel Corporation Efficient distribution of subnet administration data over an RDMA network
US20140280669A1 (en) * 2013-03-15 2014-09-18 Microsoft Corporation Memory Sharing Over A Network
US20140337456A1 (en) * 2013-05-07 2014-11-13 Dell Products L.P. Systems and methods for enabling rdma between diverse endpoints
US9641614B2 (en) 2013-05-29 2017-05-02 Microsoft Technology Licensing, Llc Distributed storage defense in a cluster
US10404520B2 (en) 2013-05-29 2019-09-03 Microsoft Technology Licensing, Llc Efficient programmatic memory access over network file access protocols
US10223326B2 (en) * 2013-07-31 2019-03-05 Oracle International Corporation Direct access persistent memory shared storage
WO2015174972A1 (en) * 2014-05-14 2015-11-19 Hitachi Data Systems Engineering UK Limited Method and an apparatus, and related computer-program products, for managing access request to one or more file systems
US9584429B2 (en) * 2014-07-21 2017-02-28 Mellanox Technologies Ltd. Credit based flow control for long-haul links
CN105450588B (zh) * 2014-07-31 2019-02-12 华为技术有限公司 一种基于rdma的数据传输方法及rdma网卡
US9582463B2 (en) * 2014-12-09 2017-02-28 Intel Corporation Heterogeneous input/output (I/O) using remote direct memory access (RDMA) and active message
US10469581B2 (en) 2015-01-05 2019-11-05 International Business Machines Corporation File storage protocols header transformation in RDMA operations
US10073809B2 (en) * 2015-04-27 2018-09-11 Intel Corporation Technologies for scalable remotely accessible memory segments
CN106664290B (zh) * 2015-05-26 2019-12-06 华为技术有限公司 一种光电混合网络的数据传输方法及装置
US20170034267A1 (en) * 2015-07-31 2017-02-02 Netapp, Inc. Methods for transferring data in a storage cluster and devices thereof
CN105141603B (zh) * 2015-08-18 2018-10-19 北京百度网讯科技有限公司 通信数据传输方法及系统
CN105446936B (zh) * 2015-11-16 2018-07-03 上海交通大学 基于htm和单向rdma操作的分布式哈希表方法
CN105938446B (zh) * 2016-01-12 2019-01-25 上海交通大学 基于rdma和硬件事务性内存支持的数据复制容错方法
EP3286631A4 (en) 2016-01-29 2018-05-30 Hewlett-Packard Enterprise Development LP Remote direct memory access
US10877674B2 (en) 2016-01-29 2020-12-29 Hewlett Packard Enterprise Development Lp Determining layout templates identifying storage drives
CN107179878B (zh) * 2016-03-11 2021-03-19 伊姆西Ip控股有限责任公司 基于应用优化的数据存储的方法和装置
US11190454B2 (en) * 2016-03-23 2021-11-30 Purdue Research Foundation Receiver-directed computer network congestion control system
US10169238B2 (en) 2016-09-30 2019-01-01 International Business Machines Corporation Memory access for exactly-once messaging
US9794366B1 (en) * 2016-10-19 2017-10-17 Red Hat, Inc. Persistent-memory management
CN106411922A (zh) * 2016-10-31 2017-02-15 四川长虹电器股份有限公司 一种安全的身份认证方法及系统
US10198378B2 (en) * 2016-11-18 2019-02-05 Microsoft Technology Licensing, Llc Faster data transfer with simultaneous alternative remote direct memory access communications
US10997132B2 (en) 2017-02-07 2021-05-04 Oracle International Corporation Systems and methods for live data migration with automatic redirection
US10803039B2 (en) 2017-05-26 2020-10-13 Oracle International Corporation Method for efficient primary key based queries using atomic RDMA reads on cache friendly in-memory hash index
US10719446B2 (en) 2017-08-31 2020-07-21 Oracle International Corporation Directly mapped buffer cache on non-volatile memory
US10732836B2 (en) * 2017-09-29 2020-08-04 Oracle International Corporation Remote one-sided persistent writes
US10956335B2 (en) 2017-09-29 2021-03-23 Oracle International Corporation Non-volatile cache access using RDMA
US11086876B2 (en) 2017-09-29 2021-08-10 Oracle International Corporation Storing derived summaries on persistent memory of a storage device
US10802766B2 (en) 2017-09-29 2020-10-13 Oracle International Corporation Database with NVDIMM as persistent storage
CN109756464B (zh) * 2017-11-07 2021-12-03 阿里巴巴集团控股有限公司 一种通信方法及服务器、客户端
US10911547B2 (en) * 2017-12-28 2021-02-02 Dell Products L.P. Systems and methods for SMB monitor dialect
CN108319428A (zh) * 2017-12-29 2018-07-24 杭州华为数字技术有限公司 一种数据读取的方法及装置
US11321249B2 (en) * 2018-03-26 2022-05-03 Samsung Electronics Co., Ltd. Mechanism to autonomously manage SSDS in an array
US11394776B2 (en) 2018-06-07 2022-07-19 Tuxera, Inc. Systems and methods for transport layer processing of server message block protocol messages
US11019132B2 (en) 2018-06-29 2021-05-25 R-Stor Inc. System and method for performing fast file transfers with dynamic bandwidth provisioning
US20200007608A1 (en) * 2018-06-29 2020-01-02 R-Stor Inc. System and method for performing fast file transfers
US11128575B2 (en) * 2018-07-20 2021-09-21 Bank Of America Corporation System for increasing processing efficiency through automated resource field transformation
US11403253B2 (en) 2018-09-13 2022-08-02 Microsoft Technology Licensing, Llc Transport protocol and interface for efficient data transfer over RDMA fabric
US11295205B2 (en) * 2018-09-28 2022-04-05 Qualcomm Incorporated Neural processing unit (NPU) direct memory access (NDMA) memory bandwidth optimization
CN111262798B (zh) * 2018-11-30 2023-03-14 深圳市中兴微电子技术有限公司 一种信息处理方法、设备及计算机存储介质
US10951549B2 (en) 2019-03-07 2021-03-16 Mellanox Technologies Tlv Ltd. Reusing switch ports for external buffer network
KR20210030073A (ko) * 2019-09-09 2021-03-17 삼성전자주식회사 엣지 컴퓨팅 서비스를 위한 방법 및 장치
CN111400212B (zh) * 2019-09-29 2022-02-08 杭州海康威视系统技术有限公司 一种基于远程直接数据存取的传输方法、设备
CN111277988B (zh) * 2020-03-17 2023-06-23 北京百瑞互联技术有限公司 一种提高微信小程序蓝牙传输速度的方法
US20220187992A1 (en) * 2020-12-16 2022-06-16 Kioxia Corporation Systems and methods for data copy offload for storage devices
US11558316B2 (en) 2021-02-15 2023-01-17 Mellanox Technologies, Ltd. Zero-copy buffering of traffic of long-haul links
CN113127387A (zh) * 2021-03-12 2021-07-16 山东英信计算机技术有限公司 一种存储器和服务器
US11973696B2 (en) 2022-01-31 2024-04-30 Mellanox Technologies, Ltd. Allocation of shared reserve memory to queues in a network device
CN115328408B (zh) * 2022-10-14 2023-01-03 联想凌拓科技有限公司 用于数据处理的方法、装置、设备及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6347337B1 (en) 1999-01-08 2002-02-12 Intel Corporation Credit based flow control scheme over virtual interface architecture for system area networks
US20020024963A1 (en) * 2000-07-05 2002-02-28 Andrew Reeve Buffer management

Family Cites Families (278)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4399504A (en) 1980-10-06 1983-08-16 International Business Machines Corporation Method and means for the sharing of data resources in a multiprocessing, multiprogramming environment
JPS6019341A (ja) 1983-07-13 1985-01-31 Usac Electronics Ind Co Ltd 回線制御方式
JPS6019341U (ja) 1983-07-19 1985-02-09 ヤンマー農機株式会社 コンバインの脱穀装置
JPS613496U (ja) 1984-06-13 1986-01-10 株式会社東芝 タ−ビンミサイルの防護装置
US4825354A (en) 1985-11-12 1989-04-25 American Telephone And Telegraph Company, At&T Bell Laboratories Method of file access in a distributed processing computer network
JPS62256165A (ja) 1986-04-30 1987-11-07 Fujitsu Ltd 構造解析デ−タ処理装置
US4736369A (en) 1986-06-13 1988-04-05 International Business Machines Corp. Adaptive session-level pacing
US4780821A (en) 1986-07-29 1988-10-25 International Business Machines Corp. Method for multiple programs management within a network having a server computer and a plurality of remote computers
JPH076917B2 (ja) 1986-09-01 1995-01-30 富士写真フイルム株式会社 乾式分析方法における検量線の補正方法
US4914570A (en) 1986-09-15 1990-04-03 Counterpoint Computers, Inc. Process distribution and sharing system for multiple processor computer system
JPS6361148U (ko) 1986-10-08 1988-04-22
US4887204A (en) 1987-02-13 1989-12-12 International Business Machines Corporation System and method for accessing remote files in a distributed networking environment
US5202971A (en) 1987-02-13 1993-04-13 International Business Machines Corporation System for file and record locking between nodes in a distributed data processing environment maintaining one copy of each file lock
JPS63205747A (ja) 1987-02-13 1988-08-25 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン 通信方法及びデータ処理システム
US4791566A (en) 1987-03-27 1988-12-13 Digital Equipment Corporation Terminal device session management protocol
JPS63256165A (ja) 1987-04-14 1988-10-24 Seiko Epson Corp 嫌気性液体の定量吐出方法
JPS6461148A (en) 1987-08-31 1989-03-08 Nec Corp Flow control system
WO1989003837A1 (en) 1987-10-28 1989-05-05 Pro-Neuron, Inc. Acylated uridine and cytidine and uses thereof
US5008853A (en) 1987-12-02 1991-04-16 Xerox Corporation Representation of collaborative multi-user activities relative to shared structured data objects in a networked workstation environment
US4891785A (en) 1988-07-08 1990-01-02 Donohoo Theodore J Method for transferring data files between computers in a network response to generalized application program instructions
JPH0821969B2 (ja) 1988-09-13 1996-03-04 日本電気株式会社 伝送制御方法
JPH02101847A (ja) 1988-10-11 1990-04-13 Nec Corp 通信制御方式
US5124909A (en) 1988-10-31 1992-06-23 Hewlett-Packard Company Software program for providing cooperative processing between personal computers and a host computer
JPH02101847U (ko) 1989-01-24 1990-08-14
CA1323448C (en) 1989-02-24 1993-10-19 Terrence C. Miller Method and apparatus for translucent file system
US5109519A (en) 1989-03-28 1992-04-28 Wang Laboratories, Inc. Local computer participating in mail delivery system abstracts from directory of all eligible mail recipients only served by local computer
US5560008A (en) 1989-05-15 1996-09-24 International Business Machines Corporation Remote authentication and authorization in a distributed data processing system
US5113519A (en) 1989-05-15 1992-05-12 International Business Machines Corporation Maintenance of file attributes in a distributed data processing system
US5218696A (en) 1989-07-24 1993-06-08 International Business Machines Corporation Method for dynamically expanding and rapidly accessing file directories
US5265261A (en) 1989-08-14 1993-11-23 Microsoft Corporation Method and system for network communications using raw mode protocols
US5261051A (en) 1989-08-14 1993-11-09 Microsoft Corporation Method and system for open file caching in a networked computer system
JPH0374745A (ja) 1989-08-15 1991-03-29 Oki Electric Ind Co Ltd データ処理装置
JPH0754462Y2 (ja) 1989-11-10 1995-12-18 株式会社竹中工務店 被連結部材の連結装置
JPH03245939A (ja) 1990-02-20 1991-11-01 Fudoo Kk 工具ホルダー把持装置
JP2575543B2 (ja) 1990-04-04 1997-01-29 インターナショナル・ビジネス・マシーンズ・コーポレイション 同時アクセス管理方法
US5130986A (en) 1990-04-27 1992-07-14 At&T Bell Laboratories High speed transport protocol with two windows
JPH04172039A (ja) 1990-11-05 1992-06-19 Matsushita Electric Ind Co Ltd パケット通信装置
KR940001700B1 (ko) 1991-05-25 1994-03-05 한국전기통신공사 전전자 교환기의 운용 명령어 수행상태 조회 및 삭제방법
JPH0589048A (ja) 1991-09-25 1993-04-09 Nec Corp コマンド処理方式
JPH05143488A (ja) 1991-11-18 1993-06-11 Nippon Telegr & Teleph Corp <Ntt> 複数コマンドの転送方法
JPH0619771A (ja) 1992-04-20 1994-01-28 Internatl Business Mach Corp <Ibm> 異種のクライアントによる共用ファイルのファイル管理機構
JPH0675890A (ja) 1992-08-26 1994-03-18 Chugoku Nippon Denki Software Kk クライアント・サーバ間の要求データ応答データ授受方式
US5349642A (en) 1992-11-03 1994-09-20 Novell, Inc. Method and apparatus for authentication of client server communication
US5452447A (en) 1992-12-21 1995-09-19 Sun Microsystems, Inc. Method and apparatus for a caching file server
US5493728A (en) 1993-02-19 1996-02-20 Borland International, Inc. System and methods for optimized access in a multi-user environment
US5491752A (en) 1993-03-18 1996-02-13 Digital Equipment Corporation, Patent Law Group System for increasing the difficulty of password guessing attacks in a distributed authentication scheme employing authentication tokens
JPH0675890U (ja) 1993-04-02 1994-10-25 市光工業株式会社 コーナリングランプ点灯回路
JP2513127B2 (ja) 1993-05-31 1996-07-03 日本電気株式会社 ホットスタンバイ高速切替えシステム
JPH0736760A (ja) 1993-07-20 1995-02-07 Nippon Telegr & Teleph Corp <Ntt> 装置多重化機能とモジュール間共用機能を併用した外部記憶装置の高信頼化方法
US5522042A (en) 1994-01-28 1996-05-28 Cabletron Systems, Inc. Distributed chassis agent for distributed network management
US5588117A (en) 1994-05-23 1996-12-24 Hewlett-Packard Company Sender-selective send/receive order processing on a per message basis
US5513314A (en) 1995-01-27 1996-04-30 Auspex Systems, Inc. Fault tolerant NFS server system and mirroring protocol
JPH08314784A (ja) 1995-05-19 1996-11-29 Toshiba Corp ファイル管理装置
US5628005A (en) 1995-06-07 1997-05-06 Microsoft Corporation System and method for providing opportunistic file access in a network environment
US5826027A (en) 1995-10-11 1998-10-20 Citrix Systems, Inc. Method for supporting an extensible and dynamically bindable protocol stack in a distrubited process system
US5764887A (en) 1995-12-11 1998-06-09 International Business Machines Corporation System and method for supporting distributed computing mechanisms in a local area network server environment
US5633899A (en) 1996-02-02 1997-05-27 Lsi Logic Corporation Phase locked loop for high speed data capture of a serial data stream
US6343313B1 (en) 1996-03-26 2002-01-29 Pixion, Inc. Computer conferencing system with real-time multipoint, multi-speed, multi-stream scalability
US6438691B1 (en) 1996-04-01 2002-08-20 Hewlett-Packard Company Transmitting messages over a network
RU2118051C1 (ru) 1996-04-30 1998-08-20 Лихачев Александр Геннадьевич Способ доступа к ресурсам "всемирной паутины" через шлюзы-представители
US6434120B1 (en) 1998-08-25 2002-08-13 Cisco Technology, Inc. Autosensing LMI protocols in frame relay networks
US5933602A (en) 1996-07-31 1999-08-03 Novell, Inc. System for selecting command packet and corresponding response packet from communication stream of packets by monitoring packets sent between nodes on network
US6208952B1 (en) 1996-10-24 2001-03-27 Microsoft Corporation Method and system for delayed registration of protocols
JPH10133971A (ja) 1996-10-25 1998-05-22 Nec Corp ファイル転送処理方式
US6125122A (en) 1997-01-21 2000-09-26 At&T Wireless Svcs. Inc. Dynamic protocol negotiation system
FR2759518B1 (fr) 1997-02-07 1999-04-23 France Telecom Procede et dispositif d'allocation de ressources dans un reseau numerique de transmission par paquets
US5987621A (en) 1997-04-25 1999-11-16 Emc Corporation Hardware and software failover services for a file server
US5931913A (en) 1997-05-07 1999-08-03 International Business Machines Corporation Methods, system and computer program products for establishing a session between a host and a terminal using a reduced protocol
JP3341637B2 (ja) 1997-06-20 2002-11-05 日本電気株式会社 トランザクション処理システムにおける端末状態管理方法及びコンピュータ読み取り可能な記録媒体
US6219799B1 (en) 1997-07-01 2001-04-17 Unisys Corporation Technique to support pseudo-names
US6092199A (en) 1997-07-07 2000-07-18 International Business Machines Corporation Dynamic creation of a user account in a client following authentication from a non-native server domain
JPH1155314A (ja) 1997-07-30 1999-02-26 Nippon Telegr & Teleph Corp <Ntt> データ転送制御方法
US6275953B1 (en) 1997-09-26 2001-08-14 Emc Corporation Recovery from failure of a data processor in a network server
US6247139B1 (en) 1997-11-11 2001-06-12 Compaq Computer Corp. Filesystem failover in a single system image environment
US6085247A (en) 1998-06-08 2000-07-04 Microsoft Corporation Server operating system for supporting multiple client-server sessions and dynamic reconnection of users to previous sessions using different computers
US6131125A (en) 1997-11-14 2000-10-10 Kawasaki Lsi U.S.A., Inc. Plug-and-play data cable with protocol translation
US6516351B2 (en) 1997-12-05 2003-02-04 Network Appliance, Inc. Enforcing uniform file-locking for diverse file-locking protocols
US7010532B1 (en) 1997-12-31 2006-03-07 International Business Machines Corporation Low overhead methods and apparatus for shared access storage devices
KR100272567B1 (ko) 1997-12-31 2000-11-15 서평원 이동통신 네트워크를 이용한 이동 인터넷
US6243862B1 (en) 1998-01-23 2001-06-05 Unisys Corporation Methods and apparatus for testing components of a distributed transaction processing system
US6317844B1 (en) 1998-03-10 2001-11-13 Network Appliance, Inc. File server storage arrangement
JPH11265361A (ja) 1998-03-17 1999-09-28 Nec Corp 多重計算機システム、通信処理装置、トランザクション処理システム、トランザクション処理システム運転引き継ぎ方法、トランザクション処理システム運転引き継ぎプログラムを記録した記録媒体
JP3506920B2 (ja) 1998-08-25 2004-03-15 日本電信電話株式会社 全命令トレースデータの2次記憶装置への格納競合防止方法
AU1105600A (en) * 1998-10-07 2000-04-26 Adobe Systems Incorporated Distributing access to a data item
US6230190B1 (en) 1998-10-09 2001-05-08 Openwave Systems Inc. Shared-everything file storage for clustered system
US6401123B1 (en) 1998-11-24 2002-06-04 International Busines Machines Corporation Systems, methods and computer program products for employing presumptive negotiation in a data communications protocol
JP2000163369A (ja) 1998-11-30 2000-06-16 Nippon Telegr & Teleph Corp <Ntt> 処理結果分散管理方法及びシステム及び処理結果分散管理サーバ装置及び処理結果分散管理プログラムを格納した記憶媒体
US6883000B1 (en) 1999-02-12 2005-04-19 Robert L. Gropper Business card and contact management system
US6324581B1 (en) 1999-03-03 2001-11-27 Emc Corporation File server system using file system storage, data movers, and an exchange of meta data among data movers for file locking and direct access to shared file systems
US6453354B1 (en) 1999-03-03 2002-09-17 Emc Corporation File server system using connection-oriented protocol and sharing data sets among data movers
US20040139004A1 (en) 1999-04-08 2004-07-15 Aceinc Pty Ltd. Secure online commerce transactions
US6938096B1 (en) 1999-04-12 2005-08-30 Softricity, Inc. Method and system for remote networking using port proxying by detecting if the designated port on a client computer is blocked, then encapsulating the communications in a different format and redirecting to an open port
US7562129B1 (en) 1999-04-15 2009-07-14 Alcatel-Lucent Canada Inc. Subscription management system for data communication network
US6349350B1 (en) 1999-05-04 2002-02-19 International Business Machines Corporation System, method, and program for handling failed connections in an input/output (I/O) system
WO2000068856A2 (en) 1999-05-11 2000-11-16 Webvan Group, Inc. Electronic commerce enabled delivery system and method
US7318102B1 (en) 1999-05-24 2008-01-08 Hewlett-Packard Development Company, L.P. Reliable datagram
US6430691B1 (en) 1999-06-21 2002-08-06 Copytele, Inc. Stand-alone telecommunications security device
US6490666B1 (en) 1999-08-20 2002-12-03 Microsoft Corporation Buffering data in a hierarchical data storage environment
US6636242B2 (en) 1999-08-31 2003-10-21 Accenture Llp View configurer in a presentation services patterns environment
JP2001077844A (ja) 1999-09-06 2001-03-23 Axle Linkage Labo Inc ネットワーク制御方法、サーバ装置、クライアント装置、遊技台装置用ネットワーク制御方法、ホールサーバコンピュータ装置、遊技台装置
JP2001094613A (ja) 1999-09-21 2001-04-06 Canon Inc 通信制御装置、方法および記録媒体
US6775707B1 (en) 1999-10-15 2004-08-10 Fisher-Rosemount Systems, Inc. Deferred acknowledgment communications and alarm management
US6910082B1 (en) 1999-11-18 2005-06-21 International Business Machines Corporation Method, system and program products for reducing data movement within a computing environment by bypassing copying data between file system and non-file system buffers in a server
US6658476B1 (en) 1999-11-29 2003-12-02 Microsoft Corporation Client-server protocol support list for standard request-response protocols
US7050984B1 (en) 1999-12-22 2006-05-23 Ge Medical Systems, Inc. Integrated interactive service to a plurality of medical diagnostic systems
US7111060B2 (en) 2000-03-14 2006-09-19 Aep Networks, Inc. Apparatus and accompanying methods for providing, through a centralized server site, a secure, cost-effective, web-enabled, integrated virtual office environment remotely accessible through a network-connected web browser
US6883015B1 (en) 2000-03-30 2005-04-19 Cisco Technology, Inc. Apparatus and method for providing server state and attribute management for multiple-threaded voice enabled web applications
US6993587B1 (en) 2000-04-07 2006-01-31 Network Appliance Inc. Method and apparatus for election of group leaders in a distributed network
JPWO2001077844A1 (ja) 2000-04-10 2004-04-30 富士通株式会社 情報処理システム及び方法並びにサーバ
US7225244B2 (en) 2000-05-20 2007-05-29 Ciena Corporation Common command interface
US6452903B1 (en) 2000-05-31 2002-09-17 Fujitsu Network Communications, Inc. Network switch supporting rate-based and credit-based flow control mechanisms on a link-by-link basis
US6961858B2 (en) 2000-06-16 2005-11-01 Entriq, Inc. Method and system to secure content for distribution via a network
US7693976B2 (en) 2000-07-11 2010-04-06 Ciena Corporation Granular management of network resources
US6732289B1 (en) 2000-08-31 2004-05-04 Sun Microsystems, Inc. Fault tolerant data storage system
US6349250B1 (en) 2000-10-26 2002-02-19 Detroit Diesel Corporation Clear historic data from a vehicle data recorder
US20020062379A1 (en) 2000-11-06 2002-05-23 Widegren Ina B. Method and apparatus for coordinating quality of service requirements for media flows in a multimedia session with IP bearer services
JP2002183000A (ja) 2000-12-11 2002-06-28 Hitachi Ltd ネットワークを介するデータ参照方法及びそのシステム
US20020073211A1 (en) 2000-12-12 2002-06-13 Raymond Lin System and method for securely communicating between application servers and webservers
US6862692B2 (en) 2001-01-29 2005-03-01 Adaptec, Inc. Dynamic redistribution of parity groups
KR100750735B1 (ko) 2001-02-03 2007-08-22 삼성전자주식회사 홈네트워크내의 기기 제어장치 및 방법 및 이를 적용한홈네트워크 시스템
US7493391B2 (en) 2001-02-12 2009-02-17 International Business Machines Corporation System for automated session resource clean-up by determining whether server resources have been held by client longer than preset thresholds
US7055036B2 (en) 2001-04-06 2006-05-30 Mcafee, Inc. System and method to verify trusted status of peer in a peer-to-peer network environment
US8051212B2 (en) 2001-04-11 2011-11-01 Mellanox Technologies Ltd. Network interface adapter with shared data send resources
US20030093678A1 (en) 2001-04-23 2003-05-15 Bowe John J. Server-side digital signature system
JP2002328828A (ja) 2001-04-27 2002-11-15 Fujitsu Ltd ストレージサービス方法、ストレージサービスユーザ及びストレージサービスプロバイダ
JP3797236B2 (ja) 2001-04-27 2006-07-12 日本ビクター株式会社 記録再生装置および記録再生方法
US6640226B1 (en) 2001-06-19 2003-10-28 Informatica Corporation Ranking query optimization in analytic applications
US7287079B2 (en) * 2001-06-29 2007-10-23 Qualcomm Incorporated Implementing and coordinating configuration of protocol processes
JP4249915B2 (ja) 2001-07-13 2009-04-08 株式会社バンダイ 配信システム、そのサーバ及び収容装置と、携帯端末システムと、プログラム
US7409420B2 (en) 2001-07-16 2008-08-05 Bea Systems, Inc. Method and apparatus for session replication and failover
US6944785B2 (en) 2001-07-23 2005-09-13 Network Appliance, Inc. High-availability cluster virtual server system
JP2003069610A (ja) 2001-08-22 2003-03-07 Canon Inc 通信装置、その制御方法、通信システム、及び制御プログラム
JP3663627B2 (ja) 2001-10-18 2005-06-22 ソニー株式会社 通信処理装置、および通信処理方法、並びにコンピュータ・プログラム
US7136982B2 (en) 2001-11-09 2006-11-14 Danger, Inc. Apparatus and method for allocating memory blocks
CN100366025C (zh) 2001-12-07 2008-01-30 捷讯研究有限公司 从主服务到移动台分布信息的方法
US7394764B2 (en) 2001-12-14 2008-07-01 Sasken Communication Technologies Limited Technique for improving transmission control protocol performance in lossy networks
US7313816B2 (en) 2001-12-17 2007-12-25 One Touch Systems, Inc. Method and system for authenticating a user in a web-based environment
JP3969089B2 (ja) 2001-12-25 2007-08-29 株式会社日立製作所 階層構成サーバシステム
US7111035B2 (en) 2001-12-26 2006-09-19 Hewlett-Packard Development Company, L.P. Fault tolerance associations for IP transport protocols
US20030140129A1 (en) 2002-01-24 2003-07-24 Noam Livnat Installing communication protocol in a handheld device
US20030154398A1 (en) 2002-02-08 2003-08-14 Eaton Eric Thomas System for providing continuity between session clients and method therefor
US6829606B2 (en) 2002-02-14 2004-12-07 Infoglide Software Corporation Similarity search engine for use with relational databases
US7178050B2 (en) 2002-02-22 2007-02-13 Bea Systems, Inc. System for highly available transaction recovery for transaction processing systems
US7984157B2 (en) 2002-02-26 2011-07-19 Citrix Systems, Inc. Persistent and reliable session securely traversing network components using an encapsulating protocol
US7388866B2 (en) 2002-03-07 2008-06-17 Broadcom Corporation System and method for expediting upper layer protocol (ULP) connection negotiations
US7668306B2 (en) 2002-03-08 2010-02-23 Intel Corporation Method and apparatus for connecting packet telephony calls between secure and non-secure networks
JP2003281091A (ja) 2002-03-25 2003-10-03 Fujitsu Ltd 同時受付制御システム
JP4315696B2 (ja) 2002-03-29 2009-08-19 富士通株式会社 ホスト端末エミュレーションプログラム、中継用プログラムおよびホスト端末エミュレーション方法
CA2385344A1 (en) 2002-05-08 2003-11-08 Bell Globemedia Inc. Data transfer method and apparatus
JP4000905B2 (ja) 2002-05-22 2007-10-31 ソニー株式会社 情報処理システムおよび方法、情報処理装置および方法、記録媒体、並びにプログラム
JP2003337717A (ja) 2002-05-22 2003-11-28 Nec Corp オンライントランザクション処理の障害時復旧同期システム
AU2002314310A1 (en) 2002-06-10 2003-12-22 Caplin Systems Limited Resource management
US7290141B2 (en) 2002-06-27 2007-10-30 Nokia, Inc. Authentication of remotely originating network messages
US20040003210A1 (en) 2002-06-27 2004-01-01 International Business Machines Corporation Method, system, and computer program product to generate test instruction streams while guaranteeing loop termination
CN1666188A (zh) 2002-07-01 2005-09-07 株式会社东芝 无缝系统和记录介质以及计算机系统的处理继续方法
CA2393502A1 (en) 2002-07-15 2004-01-15 Mark J. Frazer System and method for reliable transport in a computer network
US20040019660A1 (en) 2002-07-24 2004-01-29 Sandhya E. Lock holding multi-threaded processes for distibuted data systems
US6829473B2 (en) 2002-07-25 2004-12-07 Utstarcom, Inc. Roaming and hand-off support for prepaid billing for wireless data networks
AU2003259297A1 (en) 2002-07-29 2004-02-16 Eternal Systems, Inc. Consistent message ordering for semi-active and passive replication
US7386855B2 (en) 2002-08-12 2008-06-10 Ntt Docomo, Inc. Application mobility service
US20040032876A1 (en) 2002-08-19 2004-02-19 Ajay Garg Selection of transmission channels
JP3846384B2 (ja) 2002-08-28 2006-11-15 ブラザー工業株式会社 端末装置、接続制御方法、接続制御用プログラム及び記録媒体
US6957367B2 (en) 2002-08-30 2005-10-18 Hewlett-Packard Development Company L.P. System and method for controlling activity of temporary files in a computer system
JP3938002B2 (ja) 2002-10-18 2007-06-27 キヤノン株式会社 印刷システムの制御方法
US7109430B2 (en) 2002-11-05 2006-09-19 Emrise Corporation Low profile rotary switch with detent in the bushing
US7386889B2 (en) 2002-11-18 2008-06-10 Trusted Network Technologies, Inc. System and method for intrusion prevention in a communications network
US7421502B2 (en) 2002-12-06 2008-09-02 International Business Machines Corporation Method and system for storage-aware flow resource management
US7475142B2 (en) 2002-12-06 2009-01-06 Cisco Technology, Inc. CIFS for scalable NAS architecture
US7664991B1 (en) 2002-12-17 2010-02-16 Symantec Operating Corporation System and method for distributed file system I/O recovery
US20040153700A1 (en) 2003-01-02 2004-08-05 Nixon Mark J. Redundant application stations for process control systems
US7290051B2 (en) 2003-01-09 2007-10-30 Sun Microsystems, Inc. Method and apparatus for hardware implementation independent verification of network layers
JP3999135B2 (ja) 2003-01-24 2007-10-31 株式会社エヌ・ティ・ティ・ドコモ 通信システム、データ送信方法、通信装置、プログラムおよび記録媒体
US7526658B1 (en) 2003-01-24 2009-04-28 Nortel Networks Limited Scalable, distributed method and apparatus for transforming packets to enable secure communication between two stations
US7151939B2 (en) 2003-02-18 2006-12-19 Qualcomm Incorporated Method, apparatus, and machine-readable medium for providing indication of location service availability and the quality of available location services
US7072807B2 (en) 2003-03-06 2006-07-04 Microsoft Corporation Architecture for distributed computing system and automated design, deployment, and management of distributed applications
US7490152B2 (en) 2003-04-11 2009-02-10 Alcatel-Lucent Usa Inc. Version caching mechanism
US7339885B2 (en) 2003-06-05 2008-03-04 International Business Machines Corporation Method and apparatus for customizable surveillance of network interfaces
US20040255202A1 (en) 2003-06-13 2004-12-16 Alcatel Intelligent fault recovery in a line card with control plane and data plane separation
US7363629B2 (en) 2003-06-19 2008-04-22 International Business Machines Corporation Method, system, and program for remote resource management
US7526640B2 (en) 2003-06-30 2009-04-28 Microsoft Corporation System and method for automatic negotiation of a security protocol
US7698115B2 (en) 2003-06-30 2010-04-13 Microsoft Corporation System and method for dynamically allocating resources in a client/server environment
US7693998B2 (en) 2003-06-30 2010-04-06 Microsoft Corporation System and method for message-based scalable data transport
US20050015511A1 (en) 2003-07-02 2005-01-20 Nec Laboratories America, Inc. Accelerated large data distribution in overlay networks
JP4229774B2 (ja) 2003-07-11 2009-02-25 日本電信電話株式会社 セッション制御プログラムと通信端末装置
US7296264B2 (en) 2003-07-18 2007-11-13 Bea Systems, Inc. System and method for performing code completion in an integrated development environment
JP4490917B2 (ja) 2003-07-24 2010-06-30 パナソニック株式会社 ファイル管理方法及び情報処理装置
US8028078B2 (en) 2003-08-07 2011-09-27 Teamon Systems, Inc. Communications system including protocol interface device providing enhanced operating protocol selection features and related methods
CN100547583C (zh) 2003-08-14 2009-10-07 甲骨文国际公司 数据库的自动和动态提供的方法
US7870268B2 (en) 2003-09-15 2011-01-11 Intel Corporation Method, system, and program for managing data transmission through a network
US20050091226A1 (en) 2003-10-23 2005-04-28 Yun Lin Persistent caching directory level support
US7539722B2 (en) 2003-10-24 2009-05-26 Microsoft Corporation Method and system for accessing a file
US7231397B2 (en) 2003-10-24 2007-06-12 Microsoft Corporation Method and system for transacted file operations over a network
US7673066B2 (en) 2003-11-07 2010-03-02 Sony Corporation File transfer protocol for mobile computer
KR20060111492A (ko) 2003-11-07 2006-10-27 소니 일렉트로닉스 인코포레이티드 모바일 컴퓨터용 파일 전송 프로토콜
JP4836432B2 (ja) 2003-11-17 2011-12-14 株式会社リコー 文書管理システム、文書管理装置、文書管理方法、文書管理プログラム及び記録媒体
US7188273B2 (en) 2003-11-24 2007-03-06 Tsx Inc. System and method for failover
US20050111030A1 (en) 2003-11-25 2005-05-26 Berkema Alan C. Hard copy imaging systems, print server systems, and print server connectivity methods
FI20031779A0 (fi) 2003-12-05 2003-12-05 Nokia Corp Menetelmä, järjestelmä ja lähetettävän puolen yhteyskäytäntöyksikkö datapakettien lähettämiseksi kuittaamattoman toimintamuodon palveluissa
US7730489B1 (en) 2003-12-10 2010-06-01 Oracle America, Inc. Horizontally scalable and reliable distributed transaction management in a clustered application server environment
US7243284B2 (en) 2003-12-11 2007-07-10 International Business Machines Corporation Limiting number of retransmission attempts for data transfer via network interface controller
US7177941B2 (en) 2003-12-11 2007-02-13 International Business Machines Corporation Increasing TCP re-transmission process speed
US7383483B2 (en) 2003-12-11 2008-06-03 International Business Machines Corporation Data transfer error checking
US7478381B2 (en) 2003-12-15 2009-01-13 Microsoft Corporation Managing software updates and a software distribution service
US20050177635A1 (en) 2003-12-18 2005-08-11 Roland Schmidt System and method for allocating server resources
US7493394B2 (en) 2003-12-31 2009-02-17 Cisco Technology, Inc. Dynamic timeout in a client-server system
US7698361B2 (en) 2003-12-31 2010-04-13 Microsoft Corporation Lightweight input/output protocol
US7383463B2 (en) 2004-02-04 2008-06-03 Emc Corporation Internet protocol based disaster recovery of a server
CN1934639A (zh) 2004-03-17 2007-03-21 皇家飞利浦电子股份有限公司 用于扫描盘形信息存储介质的方法和装置
US7444536B1 (en) 2004-04-16 2008-10-28 Sun Microsystems, Inc. RMI-IIOP request failover mechanism
US7627627B2 (en) 2004-04-30 2009-12-01 Hewlett-Packard Development Company, L.P. Controlling command message flow in a network
US20050246803A1 (en) 2004-04-30 2005-11-03 Spencer Andrew M Peripheral device for processing data from a computing device
JP2005321953A (ja) 2004-05-07 2005-11-17 Hitachi Ltd ストレージ制御装置、その動作プログラム、及びアクセス制御方法
JP2005322016A (ja) 2004-05-10 2005-11-17 Yokogawa Electric Corp サーバ装置および情報配信方法
US7380080B2 (en) 2004-05-17 2008-05-27 Hewlett-Packard Development Company, L.P. Calculating unneeded data storage credits for a data transmission to a pair of storage devices
US7487353B2 (en) 2004-05-20 2009-02-03 International Business Machines Corporation System, method and program for protecting communication
US7330910B2 (en) 2004-05-20 2008-02-12 International Business Machines Corporation Fencing of resources allocated to non-cooperative client computers
US7434087B1 (en) 2004-05-21 2008-10-07 Sun Microsystems, Inc. Graceful failover using augmented stubs
US7080173B2 (en) 2004-05-27 2006-07-18 Microsoft Corporation Reducing information reception delays
US20060059118A1 (en) 2004-08-10 2006-03-16 Byrd Stephen A Apparatus, system, and method for associating resources using a behavior based algorithm
US8023417B2 (en) 2004-08-30 2011-09-20 International Business Machines Corporation Failover mechanisms in RDMA operations
US7418712B2 (en) 2004-08-31 2008-08-26 Microsoft Corporation Method and system to support multiple-protocol processing within worker processes
US7418709B2 (en) 2004-08-31 2008-08-26 Microsoft Corporation URL namespace to support multiple-protocol processing within worker processes
US7428655B2 (en) 2004-09-08 2008-09-23 Hewlett-Packard Development Company, L.P. Smart card for high-availability clustering
KR20060025100A (ko) 2004-09-15 2006-03-20 삼성전자주식회사 다국어를 지원하는 메타 데이터를 기록한 정보저장매체 및메타 데이터 처리방법
US20060067244A1 (en) 2004-09-30 2006-03-30 Microsoft Corporation Registration identifier reuse
US7451347B2 (en) 2004-10-08 2008-11-11 Microsoft Corporation Failover scopes for nodes of a computer cluster
JP4398843B2 (ja) 2004-10-13 2010-01-13 日本放送協会 配信サーバ及び配信プログラム
CN1767472A (zh) 2004-10-27 2006-05-03 乐金电子(天津)电器有限公司 家庭网络系统
US8156049B2 (en) 2004-11-04 2012-04-10 International Business Machines Corporation Universal DRM support for devices
US7457722B1 (en) 2004-11-17 2008-11-25 Symantec Operating Corporation Correlation of application instance life cycle events in performance monitoring
JP4451293B2 (ja) 2004-12-10 2010-04-14 株式会社日立製作所 名前空間を共有するクラスタ構成のネットワークストレージシステム及びその制御方法
US8522293B2 (en) 2004-12-15 2013-08-27 Time Warner Cable Enterprises Llc Method and apparatus for high bandwidth data transmission in content-based networks
US8515490B2 (en) 2004-12-30 2013-08-20 Alcatel Lucent Method and apparatus for providing same session switchover between end-user terminals
JP2008530835A (ja) 2005-02-08 2008-08-07 テレフオンアクチーボラゲット エル エム エリクソン(パブル) パケット交換ネットワーク上のオンデマンドマルチチャネルストリーミングセッション
US7743245B2 (en) 2005-03-10 2010-06-22 Intel Corporation Security protocols on incompatible transports
US7453879B1 (en) 2005-04-04 2008-11-18 Sun Microsystems, Inc. Method and apparatus for determining the landing zone of a TCP packet
US20060281525A1 (en) 2005-05-17 2006-12-14 Milo Borissov Slot type game with player input opportunity
US8332526B2 (en) * 2005-05-25 2012-12-11 Microsoft Corporation Data communication protocol including negotiation and command compounding
JP2006333433A (ja) 2005-05-25 2006-12-07 Microsoft Corp データ通信プロトコル
EP1727055B1 (en) 2005-05-25 2016-09-07 Microsoft Technology Licensing, LLC Data communication coordination with sequence numbers
JP2007058506A (ja) 2005-08-24 2007-03-08 Ricoh Co Ltd 文書管理サーバ、文書管理システム、及び、文書管理プログラムとその記録媒体
GB0519246D0 (en) 2005-09-21 2005-10-26 Ibm A method, apparatus and computer program for handling web server failure
RU2313824C2 (ru) 2005-09-26 2007-12-27 Михаил Васильевич Беляев Информационная система клиент - сервер и способ предоставления графического пользовательского интерфейса
WO2007073429A2 (en) 2005-10-04 2007-06-28 Activegrid, Inc. Distributed and replicated sessions on computing grids
US7962129B2 (en) 2005-10-24 2011-06-14 At&T Intellectual Property I, L.P. Method and system of creating customized ringtones
US8108548B2 (en) 2005-12-22 2012-01-31 Microsoft Corporation Methodology and system for file replication based on a peergroup
US8051179B2 (en) 2006-02-01 2011-11-01 Oracle America, Inc. Distributed session failover
US8024439B2 (en) 2006-03-17 2011-09-20 Microsoft Corporation Server session management application program interface and schema
US7526668B2 (en) 2006-06-08 2009-04-28 Hitachi, Ltd. Failover method of remotely-mirrored clustered file servers
US7685227B2 (en) 2006-11-10 2010-03-23 Gerber Robert H Message forwarding backup manager in a distributed server system
US7774544B1 (en) 2006-11-15 2010-08-10 Netapp, Inc. Reliable disk ownership changes
KR20080057483A (ko) 2006-12-20 2008-06-25 삼성전자주식회사 서버, 클라이언트, 로드 밸런싱 시스템 및 그의 로드밸런싱 방법
US7809828B2 (en) 2007-04-11 2010-10-05 International Business Machines Corporation Method for maintaining state consistency among multiple state-driven file system entities when entities become disconnected
WO2008130983A1 (en) 2007-04-16 2008-10-30 Attune Systems, Inc. File aggregation in a switched file system
US8271669B2 (en) * 2007-05-30 2012-09-18 Broadcom Corporation Method and system for extended steering tags (STAGS) to minimize memory bandwidth for content delivery servers
US8073922B2 (en) 2007-07-27 2011-12-06 Twinstrata, Inc System and method for remote asynchronous data replication
WO2009043033A2 (en) 2007-09-28 2009-04-02 Xcerion Aktiebolag Network operating system
EP2066101B1 (en) 2007-11-28 2012-10-17 Alcatel Lucent System and method for an improved high availability component implementation
US20090158221A1 (en) 2007-12-17 2009-06-18 Nokia Corporation Device feature manipulation based on presented content
CN101217483A (zh) 2008-01-21 2008-07-09 中兴通讯股份有限公司 用于实现集群服务器内负载分担代理的方法
US8458298B2 (en) 2008-03-03 2013-06-04 Microsoft Corporation Failover in an internet location coordinate enhanced domain name system
JP5054618B2 (ja) 2008-06-10 2012-10-24 京セラドキュメントソリューションズ株式会社 ネットワークファイル処理システム
JP4549408B2 (ja) 2008-06-24 2010-09-22 富士通株式会社 ファイルサーバのクラスタノード制御プログラム,クラスタノード制御方法及びクラスタノード制御装置
US7840730B2 (en) 2008-06-27 2010-11-23 Microsoft Corporation Cluster shared volumes
US8700760B2 (en) 2008-08-18 2014-04-15 Ge Fanuc Intelligent Platforms, Inc. Method and systems for redundant server automatic failover
US8275815B2 (en) 2008-08-25 2012-09-25 International Business Machines Corporation Transactional processing for clustered file systems
US8185566B2 (en) 2009-01-15 2012-05-22 Microsoft Corporation Client-based caching of remote files
CN101594320B (zh) 2009-06-23 2012-05-09 中兴通讯股份有限公司 一种基于snmp协议的消息交互方法
US9749387B2 (en) 2009-08-13 2017-08-29 Sap Se Transparently stateful execution of stateless applications
JP2011119794A (ja) 2009-11-30 2011-06-16 Toshiba Corp 電子機器及び通信制御方法
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
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
US8788579B2 (en) 2011-09-09 2014-07-22 Microsoft Corporation Clustered client failover
US20130067095A1 (en) 2011-09-09 2013-03-14 Microsoft Corporation Smb2 scaleout
US9896870B2 (en) 2012-03-05 2018-02-20 Gator Kennels Llc Enclosure having ribbed stanchions
US9888068B2 (en) 2013-04-06 2018-02-06 Citrix Systems, Inc. Systems and methods for maintaining session persistence in a cluster system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6347337B1 (en) 1999-01-08 2002-02-12 Intel Corporation Credit based flow control scheme over virtual interface architecture for system area networks
US20020024963A1 (en) * 2000-07-05 2002-02-28 Andrew Reeve Buffer management

Also Published As

Publication number Publication date
JP2014528107A (ja) 2014-10-23
CN106411767B (zh) 2019-08-13
JP6047158B2 (ja) 2016-12-21
US20130007180A1 (en) 2013-01-03
KR20140034872A (ko) 2014-03-20
EP2737685A4 (en) 2015-07-01
WO2013002980A3 (en) 2013-03-14
US10284626B2 (en) 2019-05-07
US20160226951A1 (en) 2016-08-04
WO2013002980A2 (en) 2013-01-03
CN106411767A (zh) 2017-02-15
EP2737685A2 (en) 2014-06-04
US9331955B2 (en) 2016-05-03
CN103636181A (zh) 2014-03-12
CN103636181B (zh) 2016-11-02

Similar Documents

Publication Publication Date Title
KR102047142B1 (ko) 원격 직접 메모리 액세스를 통한 임의 사이즈의 전송 기법
US9338019B2 (en) Scalable transport method for multicast replication
US9479587B2 (en) Scalable object storage using multicast transport
US8806030B2 (en) Multichannel connections in file system sessions
EP1684173A1 (en) Bus abstraction system and method for unifying device discovery and message transport in multiple bus implementations and networks
US20030018828A1 (en) Infiniband mixed semantic ethernet I/O path
US20130138836A1 (en) Remote Shared Server Peripherals Over an Ethernet Network For Resource Virtualization
WO2022148363A1 (zh) 数据传输方法及数据传输服务器
US20130080561A1 (en) Using transmission control protocol/internet protocol (tcp/ip) to setup high speed out of band data communication connections
EP1759317B1 (en) Method and system for supporting read operations for iscsi and iscsi chimney
US20120173737A1 (en) Method and system for data processing
WO2017028399A1 (zh) 通信数据传输方法及系统
US20040267960A1 (en) Force master capability during multicast transfers
WO2011098033A1 (zh) 虚拟链路建立的方法、通信网元及以太网网络系统
WO2023109891A1 (zh) 组播传输方法、装置和系统
CN112838992A (zh) 报文调度方法及网络设备
Fox et al. IBM's Shared Memory Communications over RDMA (SMC-R) Protocol
Interface UDI NIC Driver Specification Version 1.0

Legal Events

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