IP Library › Granted Patent US 9,916,178
Granted Patent B2
US 9,916,178 · App. 14/866,572 · Granted Mar 13, 2018

Technologies for integrated thread scheduling

Inventors: James Dinan (Hudson, MA); Mario Flajslik (Hudson, MA); Tom St. John (San Jose, CA)
Assignee: Intel Corporation
G06F9/46G06F9/4881G06F9/5027G06F9/5038
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 9,916,178
App. No.
14/866,572
Granted
Mar 13, 2018
Kind
B2
Abstract

Technologies for integrated thread scheduling include a computing device having a network interface controller (NIC). The NIC is configured to detect and suspend a thread that is being blocked by one or more communication operations. A thread scheduling engine of the NIC is configured to move the suspended thread from a running queue of the system thread scheduler to a pending queue of the thread scheduling engine. The thread scheduling engine is further configured to move the suspended thread from the pending queue to a ready queue of the thread scheduling engine upon determining any dependencies and/or blocking communications operations have completed. Other embodiments are described and claimed.

Claims (66)

1. A computing device for integrated thread scheduling, the computing device comprising:

a network interface controller (NIC);

one or more processors; and

one or more data storage devices having stored therein a plurality of instructions that, when executed by the one or more processors, causes the computing device to:

detect whether processing of a thread of the computing device is blocked by one or more communication operations;

suspend the thread in response to detecting the processing of the thread is blocked;

move the suspended thread from a system thread scheduler of the computing device to a thread scheduling engine of the NIC;

identify, by the NIC, whether the thread has one or more dependencies;

determine, by the NIC, whether each of the one or more communication operations has completed;

determine, by the NIC and in response to a determination that the thread has the one or more dependencies, whether the one or more dependencies have been satisfied; and

move, by the NIC, the thread from the thread scheduling engine to the system thread scheduler in response to a determination that (i) each of the one or more communication operations has completed and (ii) each of the one or more dependencies has been satisfied.

2. The computing device of claim 1 , wherein to move the thread from the system thread scheduler to the thread scheduling engine comprises to move the thread from a running queue of the system thread scheduler to a pending queue of the thread scheduling engine.

3. The computing device of claim 1 , wherein to move the thread from the thread scheduling engine to the system thread scheduler includes to move the thread from a pending queue of the thread scheduling engine to a ready queue of the thread scheduling engine prior to the thread being moved to the system thread scheduler.

4. The computing device of claim 3 , wherein to move the thread from the thread scheduling engine to the system thread scheduler further includes to move the thread from the pending queue of the thread scheduling engine to one of a running queue of the system thread scheduler or a ready queue of the system thread scheduler.

5. The computing device of claim 4 , wherein to move the thread from the thread scheduling engine to the system thread scheduler further includes to provide an indication to the thread scheduling engine that indicates the thread may be scheduled for execution.

6. The computing device of claim 1 , wherein to identify whether the thread has one or more dependencies comprises to identify whether the thread depends on one or more other threads or one or more communication operations.

7. The computing device of claim 1 , wherein the plurality of instructions further causes the network interface controller to:

receive, by a pending thread queue management module of the NIC, a notification indicative of completion of a dependency of the one or more dependencies of the thread,

wherein to determine whether the one or more dependencies have been satisfied comprises to determine, by the pending thread queue management module in response to having received the notification, whether each dependency of the one or more dependencies of the thread has received a corresponding notification.

8. The computing device of claim 1 , further comprising a system-on-a-chip (SoC) that includes the one or more processors and the network interface controller.

9. The computing device of claim 1 , further comprising a multichip package that includes the one or more processors and the network interface controller.

10. One or more non-transitory, computer-readable storage media comprising a plurality of instructions stored thereon that in response to being executed cause a computing device to:

detect whether processing of a thread of the computing device is blocked by one or more communication operations;

suspend the thread in response to detecting the processing of the thread is blocked;

move the suspended thread from a system thread scheduler of the computing device to a thread scheduling engine of a network interface controller (NIC) of the computing device;

identify, by the NIC, whether the thread has one or more dependencies;

determine, by the NIC, whether each of the one or more communication operations has completed;

determine, by the NIC and in response to a determination that the thread has the one or more dependencies, whether the one or more dependencies have been satisfied; and

move, by the NIC, the thread from the thread scheduling engine to the system thread scheduler in response to a determination that (i) each of the one or more communication operations has completed and (ii) each of the one or more dependencies has been satisfied.

11. The one or more non-transitory, computer-readable storage media of claim 10 , wherein to move the thread from the system thread scheduler to the thread scheduling engine comprises to move the thread from a running queue of the system thread scheduler to a pending queue of the thread scheduling engine.

12. The one or more non-transitory, computer-readable storage media of claim 10 , wherein to move the thread from the thread scheduling engine to the system thread scheduler includes to move the thread from a pending queue of the thread scheduling engine to a ready queue of the thread scheduling engine prior to the thread being moved to the system thread scheduler.

13. The one or more non-transitory, computer-readable storage media of claim 12 , wherein to move the thread from the thread scheduling engine to the system thread scheduler further includes to move the thread from the pending queue of the thread scheduling engine to one of a running queue of the system thread scheduler or a ready queue of the system thread scheduler.

14. The one or more non-transitory, computer-readable storage media of claim 10 , wherein to move the thread from the thread scheduling engine to the system thread scheduler comprises to provide an indication to the thread scheduling engine that indicates the thread may be scheduled for execution.

15. The one or more non-transitory, computer-readable storage media of claim 10 , wherein to identify whether the thread has one or more dependencies comprises to identify whether the thread depends on one or more other threads or one or more communication operations.

16. The one or more non-transitory, computer-readable storage media of claim 10 , wherein the plurality of instructions further causes the computing device to:

receive, by a pending thread queue management module of the NIC, a notification indicative of completion of a dependency of the one or more dependencies of the thread,

wherein to determine whether the one or more dependencies have been satisfied comprises to determine, by the pending thread queue management module in response to having received the notification, whether each dependency of the one or more dependencies of the thread has received a corresponding notification.

17. A method for integrated thread scheduling, the method comprising:

detecting, by a computing device, whether processing of a thread of the computing device is blocked by one or more communication operations;

suspending, by a system thread scheduler of the computing device, the thread in response to detecting the processing of the thread is blocked;

moving, by the computing device, the suspended thread from the system thread scheduler to a thread scheduling engine of a network interface controller of the computing device;

identifying, by the thread scheduling engine, whether the thread has one or more dependencies;

determining, by the thread scheduling engine, whether each of the one or more communication operations has completed;

determining, by the thread scheduling engine and in response to a determination that the thread has the one or more dependencies, whether the one or more dependencies have been satisfied; and

moving, by the thread scheduling engine, the thread from the thread scheduling engine to the system thread scheduler in response to a determination that (i) each of the one or more communication operations has completed and (ii) each of the one or more dependencies has been satisfied.

18. The method of claim 17 , wherein moving the thread from the system thread scheduler to the thread scheduling engine comprises moving the thread from a running queue of the system thread scheduler to a pending queue of the thread scheduling engine.

19. The method of claim 17 , wherein moving the thread from the thread scheduling engine to the system thread scheduler includes moving the thread from a pending queue of the thread scheduling engine to a ready queue of the thread scheduling engine prior to the thread being moved to the system thread scheduler, and wherein moving the thread from the thread scheduling engine to the system thread scheduler further includes moving the thread from the pending queue of the thread scheduling engine to one of a running queue of the system thread scheduler or a ready queue of the system thread scheduler.

20. The method of claim 17 , wherein moving the thread from the thread scheduling engine to the system thread scheduler comprises providing an indication to the thread scheduling engine that indicates the thread may be scheduled for execution.

21. The method of claim 17 , wherein moving the thread from the system thread scheduler to the thread scheduling engine comprises appending a handle corresponding to the thread to a pending queue of the thread scheduling engine.

22. The method of claim 17 , wherein identifying whether the thread has one or more dependencies comprises identifying at least one of whether the thread depends on one or more other threads and whether the thread depends on one or more communication operations;

means for receiving, by the thread scheduling engine, a notification indicative of completion of a dependency of the one or more dependencies of the thread, and

wherein the means for determining whether the one or more dependencies have been satisfied comprises to means for determining, by the thread scheduling engine in response to having received the notification, whether each dependency of the one or more dependencies of the thread has received a corresponding notification.

23. The method of claim 17 , further comprising:

receiving, by the thread scheduling engine, a notification indicative of completion of a dependency of the one or more dependencies of the thread,

wherein determining whether the one or more dependencies have been satisfied comprises determining, by the thread scheduling engine in response to having received the notification, whether each dependency of the one or more dependencies of the thread has received a corresponding notification.

24. A computing device to filter a received message, the computing device comprising:

means for detecting whether processing of a thread of the computing device is blocked by one or more communication operations;

means for suspending, by a system thread scheduler of the computing device, the thread in response to detecting the processing of the thread is blocked;

means for moving the suspended thread from the system thread scheduler to a thread scheduling engine of a network interface controller of the computing device;

means for identifying, by the thread scheduling engine, whether the thread has one or more dependencies;

means for determining, by the thread scheduling engine, whether each of the one or more communication operations has completed;

means for determining, by the thread scheduling engine and in response to a determination that the thread has the one or more dependencies, whether the one or more dependencies have been satisfied; and

means for moving, by the thread scheduling engine, the thread from the thread scheduling engine to the system thread scheduler in response to a determination that (i) each of the one or more communication operations has completed and (ii) each of the one or more dependencies has been satisfied.

25. The computing device of claim 24 , further comprising:

means for receiving, by the thread scheduling engine, a notification indicative of completion of a dependency of the one or more dependencies of the thread, and

wherein the means for determining whether the one or more dependencies have been satisfied comprises means for determining, by the thread scheduling engine in response to having received the notification, whether each dependency of the one or more dependencies of the thread has received a corresponding notification.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 8, 2016
From: DINAN, JAMES; FLAJSLIK, MARIO; ST. JOHN, TOM
To: INTEL CORPORATION
Reel/Frame 037922/0668 →
Continuity (1)
Related Publication 20170090979A1 · Mar 30, 2017