Transporting operations of arbitrary size over remote direct memory access
First Claim
1. A computer-implemented method for establishing a connection for exchanging data, the method comprising:
- receiving, by a receiver, a first packet, wherein the packet comprises a first field and data, wherein the first field is equal to a number of bytes of a fragmented message that the receiver has yet to receive;
determining if a value stored the first field zero;
when the value is zero;
processing the data in the first packet;
when the value is not zero;
allocating a reassembly buffer to the connection;
copying the data from the first packet into the reassembly buffer;
receiving a second packet comprising second data; and
copying the second data from the second packet into the reassembly buffer.
2 Assignments
0 Petitions
Accused Products
Abstract
The embodiments described herein generally relate to a protocol for implementing data operations, e.g., a version of SMB, atop RDMA transports. In embodiments, systems and methods use the protocol definition, which specifies new messages for negotiating an RDMA connection and for transferring SMB2 data using the negotiated communication. A new protocol message may include new header information to determine message size, number of messages, and other information for sending the SMB2 data over RDMA. The header information is used to accommodate differences in message size requirements between RDMA and SMB2. The SMB Direct protocol allows SMB2 data to be fragmented into multiple individual RDMA messages that a receiver may then logically concatenate into a single SMB2 request or SMB2 response. The SMB Direct protocol also may allow SMB2 to transfer application data via efficient RDMA direct placement and to signal the application data'"'"'s availability when the transfer is complete.
-
Citations
20 Claims
-
1. A computer-implemented method for establishing a connection for exchanging data, the method comprising:
-
receiving, by a receiver, a first packet, wherein the packet comprises a first field and data, wherein the first field is equal to a number of bytes of a fragmented message that the receiver has yet to receive; determining if a value stored the first field zero; when the value is zero; processing the data in the first packet; when the value is not zero; allocating a reassembly buffer to the connection; copying the data from the first packet into the reassembly buffer; receiving a second packet comprising second data; and copying the second data from the second packet into the reassembly buffer. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10)
-
-
11. A computer storage device storing computer-executable instructions that when executed by a processor perform a method for exchanging data, the method comprising:
-
establishing a connection with a server; negotiating a connection with the server, wherein the negotiation establishes a maximum number of bytes the server will receive in the connection; determining a number of packets to send data associated with the connection to the server; determining if fragmentation of the data is to be used; when fragmentation of the data is not to be used; sending a first packet to the server with the data; when fragmentation of the data is to be used; initializing first bytes within a transmission buffer to send as data in the first packet; setting a first field corresponding to data length and a second field corresponding to remaining data in the first packet, wherein the second field is equal to a number of bytes of a fragmented message that the server has yet to receive; sending the first packet to the server; initializing bytes within the transmission buffer to send as data in the second protocol packet; setting a third field corresponding to remaining data in the second packet; and sending the second packet to the server. - View Dependent Claims (12, 13, 14, 15)
-
-
16. A system configured to establish a connection for exchanging data, the system comprising:
-
at least one processor; and memory storing computer executable instructions that, when executed by the at least one processor, cause the processor to; receive, by a receiver, a first packet, wherein the packet comprises a first field and data, wherein the first field is equal to a number of bytes of a fragmented message that the receiver has yet to receive; determine if a value stored by the first field is zero; when the value stored by the first field is zero; process the data in the first packet; when the value stored by the first field is not zero; allocate a reassembly buffer to the connection; copy the data from the first packet into the reassembly buffer; receive a second packet comprising second data; and copy the second data from the second packet into the reassembly buffer. - View Dependent Claims (17, 18, 19, 20)
-
Specification