US 9,813,283 B2
Efficient data transfer between servers and remote peripherals
Ariel Cohen, Cupertino, CA (US); Abhinav Anand, Milpitas, CA (US); Pierre Aulagnier, Sunnyvale, CA (US); Gerald Cheung, Palo Alto, CA (US); Naveed Cochinwala, San Jose, CA (US); Greg Lockwood, Redwood City, CA (US); Ganesh Sundaresan, San Jose, CA (US); Susheel Tadikonda, Santa Clara, CA (US); Vikram Venkataraghavan, Santa Clara, CA (US); and Ming Wong, San Jose, CA (US)
Assigned to ORACLE INTERNATIONAL CORPORATION, Redwood Shores, CA (US)
Filed by Ariel Cohen, Cupertino, CA (US); Abhinav Anand, Milpitas, CA (US); Pierre Aulagnier, Sunnyvale, CA (US); Gerald Cheung, Palo Alto, CA (US); Naveed Cochinwala, San Jose, CA (US); Greg Lockwood, Redwood City, CA (US); Ganesh Sundaresan, San Jose, CA (US); Susheel Tadikonda, Santa Clara, CA (US); Vikram Venkataraghavan, Santa Clara, CA (US); and Ming Wong, San Jose, CA (US)
Filed on Aug. 9, 2005, as Appl. No. 11/200,761.
Prior Publication US 2013/0138758 A1, May 30, 2013
Int. Cl. G06F 15/16 (2006.01); H04L 29/08 (2006.01); G06F 13/10 (2006.01)
CPC H04L 29/08549 (2013.01) [G06F 13/10 (2013.01); H04L 67/1097 (2013.01); H04L 69/32 (2013.01)] 13 Claims
OG exemplary drawing
 
1. A method for transferring data between a remote entity and a plurality of servers, the method comprising:
receiving, by the remote entity from a first server of the plurality of servers, a first request for access to a first peripheral of a plurality of peripherals, the remote entity comprising the plurality of peripherals, the receiving the first request comprising:
receiving a first write index, of a first server descriptor ring associated with the first server, using a Remote Direct Memory Access capable network;
receiving, by the remote entity from a second server of the plurality of servers, a second request for access to the first peripheral, the receiving the second request comprising:
receiving a second write index, of a second server descriptor ring associated with the second server, using the remote direct memory access capable network;
wherein a different server descriptor ring is associated with each server of the plurality of servers, each different server descriptor ring comprising a respective write index, a respective read index, respective instructions, and respective commands for the respective server associated with the server respective different descriptor ring;
transmitting to the first server a first read data buffer request from virtualization logic, wherein the first read data buffer request is sent from the remote entity to the server in response to the remote entity receiving the first write index of the first server descriptor ring from the first server;
transmitting to the second server a second read data buffer request from the virtualization logic, wherein the second read data buffer request is sent from the remote entity to the second server in response to the remote entity receiving the second write index of the second server descriptor ring from the second server;
enforcing traffic policing policies, by the remote entity with the virtualization logic associated with the remote entity, to prioritize access to each of the plurality of peripherals using a virtual device driver for the peripheral, wherein the virtualization logic allows each of the plurality of peripherals to be shared by the plurality of servers based at least in part on the different server descriptor rings, wherein the plurality of peripherals comprise peripheral interfaces, peripheral components, and one or more host bus adapters, one or more network interface cards, and at least one of a cryptographic accelerator or an eXtensible Markup Language accelerator, and wherein the access to each of the plurality of peripherals comprises requests from the first server and the second server forwarded to one network interface card of the one or more network interface cards, the remote entity:
receiving server traffic comprising:
receiving data transferred from the first server to the remote entity in response to the first read data buffer request;
receiving data transferred from the second server to the remote entity in response to the second read data buffer request;
performing packet inspection to classify at least some of the server traffic with classifier logic, the performing packet inspection comprising parsing data packets of the server traffic and utilizing lookup logic to determine priorities attributed to the data packets;
placing the data packets into at least one prioritized queue based at least in part on the priorities determined;
placing selected data into memory associated with the first peripheral; and
posting a reference to the selected data, and facilitating reading of the selected data associated with the first peripheral by the first server or the second server to obtain the selected data from the memory associated with the first peripheral.