IP Library › Granted Patent US 8,018,961
Granted Patent B2
US 8,018,961 · App. 12/489,194 · Granted Sep 13, 2011

Systems and methods for receive and transmission queue processing in a multi-core architecture

Assignee: Citrix Systems, Inc.
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 8,018,961
App. No.
12/489,194
Filed
Jun 22, 2009
Granted
Sep 13, 2011
Kind
B2
Examiner
HO, DUC CHI
Art Unit
2465
USPC
370/413
Abstract

Described herein is a method and system for directing outgoing data packets from packet engines to a transmit queue of a NIC in a multi-core system, and a method and system for directing incoming data packets from a receive queue of the NIC to the packet engines. Packet engines store outgoing traffic in logical transmit queues in the packet engines. An interface module obtains the outgoing traffic and stores it in a transmit queue of the NIC, after which the NIC transmits the traffic from the multi-core system over a network. The NIC receives incoming traffic and stores it in a NIC receive queue. The interface module obtains the incoming traffic and applies a hash to a tuple of each obtained data packet. The interface module then stores each data packet in the logical receive queue of a packet engine on the core identified by the result of the hash.

Claims (38)

1. A method for directing outgoing data packets from a plurality of packet engines to a transmit queue of a NIC in a multi-core system intermediary to a client and a server, each packet engine executing on a core of a plurality of cores in the multi-core system and the NIC having a number of transmit queues less than the number of logical transmit queues of each packet engine, the method comprising:

(a) storing, by a first packet engine of a plurality of packet engines of a multi-core system intermediary to a client and a server, a first data packet in a first logical transmit queue of the first packet engine executing on a first core of a plurality of cores in the multi-core system, each of the plurality of packet engines having a logical transmit queue;

(b) storing, by a second packet engine of the plurality of packet engines, a second data packet in a second logical transmit queue of the second packet engine executing on a second core of the multi-core system;

(c) obtaining, by an interface module executing on the first core, the first data packet from the first logical queue on the first core, and the second data packet from the second logical queue on the second core; and

(d) storing, by the interface module, the first data packet and the second data packet to a transmit queue of the NIC in the multi-core system for transmission from the multi-core system.

2. The method of claim 1 , further comprising transmitting, by the NIC, the first data packet to the client.

3. The method of claim 1 , further comprising transmitting, by the NIC, the second data packet to the client.

4. The method of claim 1 , further comprising selecting, by the interface module, a first NIC from a plurality of NICs.

5. The method of claim 4 , further comprising storing, by the interface module, the first data packet and the second data packet to a first transmit queue of the first NIC.

6. The method of claim 4 , further comprising:

selecting, by the interface module, a second NIC from the plurality of NICs;

storing, by the interface module, one of either the first data packet and the second data packet to a first transmit queue of the first NIC; and

storing, by the interface module, the other of either the first data packet and the second data packet to a second transmit queue of the second NIC.

7. The method of claim 1 , further comprising polling, by the interface module prior to obtaining the first and second data packets, each logical transmit queue for information.

8. The method of claim 7 , wherein polling further comprises polling, round robin, each logical transmit queue for information.

9. The method of claim 7 , wherein polling further comprises randomly polling each logical transmit queue for information.

10. The method of claim 7 , wherein polling further comprises polling according to a priority scheme.

11. The method of claim 10 , further comprising polling from the logical transmit queue having the lowest priority to the logical transmit queue having the highest priority.

12. The method of claim 10 , further comprising polling from the logical transmit queue having the highest priority to the logical transmit queue having the lowest priority.

13. The method of claim 1 , wherein storing comprises writing to memory.

14. The method of claim 1 , wherein the interface module executes within a flow distributor executing on the first core.

15. A method for directing incoming data packets from a receive queue of a NIC in a multi-core system intermediary to a client and a server, to at least one packet engine of a plurality of packet engines in the multi-core system, each packet engine executing on a core of a plurality of cores in the multi-core system and the NIC having a number of transmit queues less than the number of logical transmit queues of each packet engine, the method comprising:

(a) storing, by a NIC of a multi-core system intermediary to a client and a server, a first data packet and a second data packet in a receive queue of the NIC;

(b) obtaining, by a flow distributor executing on a first core of a plurality of cores in the multi-core system, the first data packet and the second data packet from the receive queue of the NIC;

(c) storing, by the flow distributor, the first data packet in a first logical queue of a first packet engine executing on the first core selected by the flow distributor based on a hash of a first tuple of the first data packet, the first tuple comprising a first client internet protocol address, a first client port, a first server internet protocol address, and a first server port; and

(d) storing, by the flow distributor, the second data packet in a second logical queue of a second packet engine executing on a second core selected by the flow distributor based on a hash of a second tuple of the second data packet, the second tuple comprising a second client internet protocol address, a second client port, a second server internet protocol address, and a second server port.

16. The method of claim 15 , further comprising obtaining, by the first packet engine, the first data packet from the first logical queue.

17. The method of claim 15 , further comprising obtaining, by the second packet engine, the second data packet from the second logical queue.

18. The method of claim 15 , wherein the first client internet protocol address is different than the second client internet protocol address.

19. The method of claim 15 , wherein the first client internet protocol address is substantially similar to the second client internet protocol address.

20. The method of claim 15 , wherein the first server internet protocol address is different than the second server internet protocol address.

21. The method of claim 15 , wherein the first server internet protocol address is substantially similar to the second server internet protocol address.

22. The method of claim 15 , wherein storing, by an interface module, in a receive queue of the NIC further comprises storing in a memory element on the NIC.

23. The method of claim 15 , wherein storing in a first logical receive queue further comprises storing in a memory element of the first core of the plurality of cores in the multi-core system.

24. The method of claim 15 , wherein storing in a second logical receive queue further comprises storing in a memory element of the second core of the plurality of cores in the multi-core system.

25. The method of claim 15 , wherein the hash applied to the first tuple is substantially the same as the hash applied to the second tuple.

26. The method of claim 15 , wherein obtaining, by a flow distributor, the first data packet and the second data packet from the receive queue of the NIC further comprises periodically obtaining data packets from the receive queue of the NIC.

27. The method of claim 15 , wherein obtaining, by a flow distributor, the first data packet and the second data packet from the receive queue of the NIC further comprises continuously obtaining data packets from the receive queue of the NIC.

Assignments (7)
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
SECURITY INTEREST Recorded Sep 30, 2022
From: CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 062079/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 23, 2009
From: GOPINATH, SANDHYA; BOTS, HENK
To: CITRIX SYSTEMS, INC.
Reel/Frame 022996/0740 →
Continuity (1)
Related Publication 20100322265A1 · Dec 23, 2010