IP Library › Granted Patent US 11,363,124
Granted Patent B2
US 11,363,124 · App. 17/085,916 · Granted Jun 14, 2022

Zero copy socket splicing

Inventors: Alex Markuze (Ramat Gan, IL); Chen Dar (Magshimim, IL); Aran Bergman (Givatayim, IL); Igor Golikov (Kfar Saba, IL); Israel Cidon (San Francisco, CA); Eyal Zohar (Shimshit, IL)
Assignee: VMWARE, INC.
H04L69/162H04L47/193H04L47/30H04L49/9089
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 11,363,124
App. No.
17/085,916
Filed
Oct 30, 2020
Granted
Jun 14, 2022
Kind
B2
Examiner
TANG, KIET G
Art Unit
2469
USPC
709/227
Abstract

Some embodiments provide a novel method for splicing Transmission Control Protocol (TCP) sockets on a computing device that processes a kernel of an operating system. The method receives a set of packets at a first TCP socket of the kernel. The method stores the set of packets at a kernel memory location sends the set of packets directly from the kernel memory location out through a second TCP socket of the kernel.

Claims (42)

1. A method of splicing Transmission Control Protocol (TCP) sockets on a computing device that processes a kernel of an operating system, the method comprising:

receiving a set of packets at a first TCP socket of the kernel;

storing the set of packets at a kernel memory location;

sending the set of packets directly from the kernel memory location out through a second TCP socket of the kernel, the kernel memory location comprising a location of a buffer of a particular size;

sending an indicator of a receive window size of the first TCP socket to a source of the set of packets;

when the buffer is full beyond a threshold level, sending an indicator of a reduced size of the receive window to the source of the set of packets.

2. A method of splicing Transmission Control Protocol (TCP) sockets on a computing device that processes a kernel of an operating system, the method comprising:

receiving a set of packets at a first TCP socket of the kernel;

storing the set of packets at a kernel memory location;

sending the set of packets directly from the kernel memory location out through a second TCP socket of the kernel, the kernel memory location comprising a location of a buffer of a particular size;

sending an indicator of a receive window size of the first TCP socket to a source of the set of packets;

when the buffer is full, sending an indicator that the receive window size is zero to the source of the set of packets.

3. The method of claim 2 , wherein the indicator is a first indicator, the method further comprising:

emptying the buffer by sending packets from the second TCP socket; and

sending a second indicator that the receive window size is no longer zero.

4. The method of claim 1 wherein the set of packets is a first set of packets, the method further comprising waiting for the first set of packets to be sent by the second TCP socket before allowing a second set of packets to be received by the first TCP socket.

5. The method of claim 4 , wherein the kernel memory location comprises a set of memory pages, the method further comprising freeing the memory pages with a driver completion handler after the pages are sent.

6. The method of claim 1 , wherein:

the first TCP socket writes data comprising the set of packets to the kernel memory location upon first receiving the set of packets, and

the second TCP socket reads the data from the same kernel memory location.

7. The method of claim 1 , wherein the receiving, storing, and sending are performed without a system call.

8. A non-transitory machine readable medium storing a program which when executed by at least one processing unit splices sockets on a computing device that processes a kernel of an operating system, the program comprising sets of instructions for:

receiving a set of packets at a first socket of the kernel;

storing the set of packets at a kernel memory location;

sending the set of packets directly from the kernel memory location out through a second socket of the kernel, the kernel memory location comprising a location of a buffer of a particular size;

sending an indicator of a receive window size of the first socket to a source of the set of packets;

when the buffer is full beyond a threshold level, sending an indicator of a reduced size of the receive window to the source of the set of packets.

9. A non-transitory machine readable storing a program which when executed by at least one processing unit splices sockets on a computing device that processes a kernel of an operating system, the program comprising sets of instructions for:

receiving a set of packets at a first socket of the kernel;

storing the set of packets at a kernel memory location;

sending the set of packets directly from the kernel memory location out through a second socket of the kernel, the kernel memory location comprising a location of a buffer of a particular size;

sending an indicator of a receive window size of the first socket to a source of the set of packets;

when the buffer is full, sending an indicator that the receive window size is zero to the source of the set of packets.

10. The non-transitory machine readable medium of claim 9 , wherein the indicator is a first indicator, the program further comprising sets of instructions for:

emptying the buffer by sending packets from the second socket; and

sending a second indicator that the receive window size is no longer zero.

11. The non-transitory machine readable medium of claim 8 wherein the set of packets is a first set of packets, the program further comprising a set of instructions for waiting for the first set of packets to be sent by the second socket before allowing a second set of packets to be received by the first socket.

12. The non-transitory machine readable medium of claim 11 , wherein the kernel memory location comprises a set of memory pages, the program further comprising a set of instructions for freeing the memory pages with a driver completion handler after the pages are sent.

13. The non-transitory machine readable medium of claim 8 , wherein:

the first socket writes data comprising the set of packets to the kernel memory location upon first receiving the set of packets, and

the second socket reads the data from the same kernel memory location.

14. The non-transitory machine readable medium of claim 8 , wherein the sets of instructions for receiving, storing, and sending are performed without a system call.

Assignments (2)
CHANGE OF NAME Recorded Apr 15, 2024
From: VMWARE, INC.
To: VMWARE LLC
Reel/Frame 067102/0395 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 30, 2020
From: MARKUZE, ALEX; DAR, CHEN; BERGMAN, ARAN; GOLIKOV, IGOR; CIDON, ISRAEL; ZOHAR, EYAL
To: VMWARE, INC.
Reel/Frame 054228/0916 →
Continuity (2)
Provisional Application 63059113 · Jul 30, 2020
Related Publication 20220038557A1 · Feb 3, 2022
Cited By (34)
US 12,218,800 US 12,218,845 US 12,237,990 US 12,250,114 US 12,261,777 US 12,267,364 US 12,316,524 US 12,335,131 US 12,355,655 US 12,368,676 US 12,375,403 US 12,401,544 US 12,425,332 US 12,425,335 US 12,425,347 US 12,425,395 US 12,483,968 US 12,489,672 US 12,506,678 US 12,507,120 US 12,507,148 US 12,507,153 US 12,526,183 US 12,549,465 US 12,563,438 US 12,568,039 US 12,587,468 US 12,603,827 US 12,603,848 US 12,632,330 US 12,652,217 US 12,659,719 US 12,719,782 US 12,750,290