US 12,293,225 B2
Lockless handling of buffers for remote direct memory access (RDMA) I/O operations
Hema Venkataramani, San Jose, CA (US); Alok Nemchand Kataria, Pune (IN); and Rohit Jain, Cupertino, CA (US)
Assigned to Nutanix, Inc., San Jose, CA (US)
Filed by Nutanix, Inc., San Jose, CA (US)
Filed on Dec. 31, 2020, as Appl. No. 17/139,698.
Prior Publication US 2022/0206852 A1, Jun. 30, 2022
Int. Cl. G06F 9/50 (2006.01); G06F 9/48 (2006.01); G06F 9/52 (2006.01); G06F 9/54 (2006.01); G06F 12/02 (2006.01); G06F 15/173 (2006.01)
CPC G06F 9/5016 (2013.01) [G06F 9/4881 (2013.01); G06F 9/52 (2013.01); G06F 9/544 (2013.01); G06F 12/0238 (2013.01); G06F 12/0292 (2013.01); G06F 15/17331 (2013.01); G06F 9/5022 (2013.01); G06F 12/023 (2013.01); G06F 2209/5011 (2013.01)] 24 Claims
OG exemplary drawing
 
1. A non-transitory computer readable medium having stored thereon a sequence of instructions which, when stored in memory and executed by a processor cause a set of acts comprising:
before receiving a request for a remote direct memory access (RDMA) memory allocation from a first processing entity, pre-dividing, in response to invocation of a memory register application programming interface (API) call from a hook, a contiguous physical memory region allocated to an RDMA network interface card (NIC) into a plurality of chunks that are pre-assigned to individual processing entities in a non-overlapping manner for lockless buffer allocation, wherein
a first chunk of the plurality of chunks is assigned to the first processing entity and a second chunk of the plurality of chunks is assigned to a second processing entity,
assignment of the first chunk to the first processing entity is represented by a first entry in a data structure that maps the contiguous physical memory region to the first chunk and the first processing entity,
assignment of the second chunk to the second processing entity is represented by a second entry in the data structure that maps the contiguous physical memory region to the second chunk and the second processing entity, and
the first and second chunks do not overlap;
receiving the request for the RDMA memory allocation from the first processing entity; and
locklessly processing the request for the RDMA memory allocation from the first processing entity using the previously assigned first chunk, at least by allocating at least a portion of the previously assigned first chunk to the first processing entity without acquiring a lock.