IP Library › Granted Patent US 12,405,830
Granted Patent B2
US 12,405,830 · App. 18/159,109 · Granted Sep 2, 2025

Dynamic CPU core sharing

Inventors: Ningdong Li (Acton, MA); Robert Lucey (Whitechurch, IE); James McGillis (Franklin, MA); Peng Yin (Southborough, MA); Rong Yu (West Roxbury, MA)
Assignee: Dell Products L.P.
G06F9/5044G06F9/5083
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 12,405,830
App. No.
18/159,109
Granted
Sep 2, 2025
Kind
B2
Abstract

Emulation modules running on a single-board compute node have allocations of cores of a multi-core processor. The emulation modules are configured to donate underutilized cores or available CPU cycle units to a shared pool that can be used by other emulation modules running on the board. Emulation modules that require additional processing resources borrow cores or CPU cycle units from the shared pool. The emulation modules dynamically donate and retract cores or CPU cycle units from the shared pool based on utilization of allocated cores.

Claims (39)

1. An apparatus comprising:

at least one compute node configured to manage access to an array of non-volatile drives, the at least one compute node comprising at least one multi-core processor with a first set of cores that are allocated to an input-output (IO) services emulation module running on the compute node, a second set of cores that are allocated to a frontend emulation module running on the compute node, and a third set of cores that are allocated to a backend emulation module running on the compute node;

the IO services emulation module configured to monitor utilization of the first set of cores by the IO services emulation module and donate processing resources to a shared pool responsive to the first set of cores being underutilized by the IO services emulation module;

the frontend emulation module configured to monitor utilization of the second set of cores by the frontend emulation module and donate processing resources to the shared pool responsive to the second set of cores being underutilized by the frontend emulation module;

the backend emulation module configured to monitor utilization of the third set of cores by the backend emulation module and donate processing resources to the shared pool responsive to the third set of cores being underutilized by the backend emulation module;

the processing resources donated to the shared pool being accessible to the IO services emulation module, the frontend emulation module, and the backend emulation module for running threads.

2. The apparatus of claim 1 further comprising the IO services emulation module configured to donate central processing unit (CPU) cycle units to a shared pool responsive to the first set of cores being underutilized; the frontend emulation module configured to donate CPU cycle units to the shared pool responsive to the second set of cores being underutilized; the backend emulation module configured to donate CPU cycle units to the shared pool responsive to the third set of cores being underutilized.

3. The apparatus of claim 2 further comprising the IO services emulation module configured to return borrowed CPU cycle units to the shared pool responsive to the first set of cores being underutilized; the frontend emulation module configured to return borrowed CPU cycle units to the shared pool responsive to the second set of cores being underutilized; and the backend emulation module configured to return borrowed CPU cycle units to the shared pool responsive to the third set of cores being underutilized.

4. The apparatus of claim 3 further comprising the IO services emulation module configured to unpublish CPU cycle units from the shared pool responsive to the first set of cores being overutilized; the frontend emulation module configured to unpublish CPU cycle units from the shared pool responsive to the second set of cores being overutilized; and the backend emulation module configured to unpublish CPU cycle units from the shared pool responsive to the third set of cores being overutilized.

5. The apparatus of claim 4 further comprising the IO services emulation module configured to borrow CPU cycle units from the shared pool responsive to the first set of cores being overutilized; the frontend emulation module configured to borrow CPU cycle units from the shared pool responsive to the second set of cores being overutilized; and the backend emulation module configured to borrow CPU cycle units from the shared pool responsive to the third set of cores being overutilized.

6. The apparatus of claim 1 further comprising a data structure that indicates, for each of the emulation modules, a number of CPU cycle units donated by the emulation module to the shared pool and a number of the donated CPU cycle units that have been borrowed by the other emulation modules.

7. The apparatus of claim 1 further comprising the IO services emulation module configured to donate cores to a shared pool responsive to the first set of cores being underutilized; the frontend emulation module configured to donate cores to the shared pool responsive to the second set of cores being underutilized; the backend emulation module configured to donate cores to the shared pool responsive to the third set of cores being underutilized.

8. A method comprising:

allocating a first set of cores of a multi-core processor of a compute node of a storage system to an input-output (IO) services emulation module running on the compute node;

allocating a second set of cores of the multi-core processor to a frontend emulation module running on the compute node;

allocating a third set of cores of the multi-core processor to a backend emulation module running on the compute node;

monitoring, by the IO services emulation module, utilization of the first set of cores by the IO services emulation module and donating processing resources to a shared pool responsive to the first set of cores being underutilized by the IO services emulation module;

monitoring, by the frontend emulation module, utilization of the second set of cores by the frontend emulation module and donating processing resources to the shared pool responsive to the second set of cores being underutilized by the frontend emulation module; and

monitoring, by the backend emulation module, utilization of the third set of cores by the backend emulation module and donating processing resources to the shared pool responsive to the third set of cores being underutilized by the backend emulation module;

wherein the processing resources donated to the shared pool are accessible to the IO services emulation module, the frontend emulation module, and the backend emulation module for running threads.

9. The method of claim 8 further comprising the IO services emulation module donating central processing unit (CPU) cycle units to a shared pool responsive to the first set of cores being underutilized, the frontend emulation module donating CPU cycle units to the shared pool responsive to the second set of cores being underutilized, and the backend emulation module donating CPU cycle units to the shared pool responsive to the third set of cores being underutilized.

10. The method of claim 9 further comprising the IO services emulation module returning borrowed CPU cycle units to the shared pool responsive to the first set of cores being underutilized, the frontend emulation module returning borrowed CPU cycle units to the shared pool responsive to the second set of cores being underutilized, and the backend emulation module returning borrowed CPU cycle units to the shared pool responsive to the third set of cores being underutilized.

11. The method of claim 10 further comprising the IO services emulation module unpublishing CPU cycle units from the shared pool responsive to the first set of cores being overutilized, the frontend emulation module unpublishing CPU cycle units from the shared pool responsive to the second set of cores being overutilized, and the backend emulation module unpublishing CPU cycle units from the shared pool responsive to the third set of cores being overutilized.

12. The method of claim 11 further comprising the IO services emulation module borrowing CPU cycle units from the shared pool responsive to the first set of cores being overutilized, the frontend emulation module borrowing CPU cycle units from the shared pool responsive to the second set of cores being overutilized, and the backend emulation module borrowing CPU cycle units from the shared pool responsive to the third set of cores being overutilized.

13. The method of claim 8 further comprising a data structure indicating, for each of the emulation modules, a number of CPU cycle units donated by the emulation module to the shared pool and a number of the donated CPU cycle units that have been borrowed by the other emulation modules.

14. The method of claim 8 further comprising the IO services emulation module donating cores to a shared pool responsive to the first set of cores being underutilized, the frontend emulation module donating cores to the shared pool responsive to the second set of cores being underutilized, and the backend emulation module donating cores to the shared pool responsive to the third set of cores being underutilized.

15. A non-transitory computer-readable storage medium storing instructions that are executed by a storage system to perform a method comprising:

allocating a first set of cores of a multi-core processor of a compute node of a storage system to an input-output (IO) services emulation module running on the compute node;

allocating a second set of cores of the multi-core processor to a frontend emulation module running on the compute node;

allocating a third set of cores of the multi-core processor to a backend emulation module running on the compute node;

monitoring, by the IO services emulation module, utilization of the first set of cores by the IO services emulation module and donating processing resources to a shared pool responsive to the first set of cores being underutilized by the IO services emulation module;

monitoring, by the frontend emulation module, utilization of the second set of cores by the frontend emulation module and donating processing resources to the shared pool responsive to the second set of cores being underutilized by the frontend emulation module; and

monitoring, by the backend emulation module, utilization of the third set of cores by the backend emulation module and donating processing resources to the shared pool responsive to the third set of cores being underutilized by the backend emulation module;

wherein the processing resources donated to the shared pool are accessible to the IO services emulation module, the frontend emulation module, and the backend emulation module for running threads.

16. The non-transitory computer-readable storage medium of claim 15 in which the method further comprises the IO services emulation module donating central processing unit (CPU) cycle units to a shared pool responsive to the first set of cores being underutilized, the frontend emulation module donating CPU cycle units to the shared pool responsive to the second set of cores being underutilized, and the backend emulation module donating CPU cycle units to the shared pool responsive to the third set of cores being underutilized.

17. The non-transitory computer-readable storage medium of claim 16 in which the method further comprises the IO services emulation module returning borrowed CPU cycle units to the shared pool responsive to the first set of cores being underutilized, the frontend emulation module returning borrowed CPU cycle units to the shared pool responsive to the second set of cores being underutilized, and the backend emulation module returning borrowed CPU cycle units to the shared pool responsive to the third set of cores being underutilized.

18. The non-transitory computer-readable storage medium of claim 17 in which the method further comprises the IO services emulation module unpublishing CPU cycle units from the shared pool responsive to the first set of cores being overutilized, the frontend emulation module unpublishing CPU cycle units from the shared pool responsive to the second set of cores being overutilized, and the backend emulation module unpublishing CPU cycle units from the shared pool responsive to the third set of cores being overutilized.

19. The non-transitory computer-readable storage medium of claim 18 in which the method further comprises the IO services emulation module borrowing CPU cycle units from the shared pool responsive to the first set of cores being overutilized, the frontend emulation module borrowing CPU cycle units from the shared pool responsive to the second set of cores being overutilized, and the backend emulation module borrowing CPU cycle units from the shared pool responsive to the third set of cores being overutilized.

20. The non-transitory computer-readable storage medium of claim 15 in which the method further comprises generating a data structure indicating, for each of the emulation modules, a number of CPU cycle units donated by the emulation module to the shared pool and a number of the donated CPU cycle units that have been borrowed by the other emulation modules.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 25, 2023
From: LI, NINGDONG; LUCEY, ROBERT; MCGILLIS, JAMES; YIN, PENG; YU, RONG
To: DELL PRODUCTS L.P.
Reel/Frame 062477/0785 →
Continuity (1)
Related Publication 20240248766A1 · Jul 25, 2024
References Cited (5)
US 20180027066A1 · Van De Groenendaal · 2018 [cited by examiner]
US 20200356292A1 · Ippatapu · 2020 [cited by examiner]
US 20210224138A1 · Wang · 2021 [cited by examiner]
US 20210311852A1 · Doddaiah · 2021 [cited by examiner]
US 20210349762A1 · Kamran · 2021 [cited by examiner]