IP Library Granted Patent US 10,083,067
Granted Patent B1
US 10,083,067 · App. 15/196,472 · Granted Sep 25, 2018

Thread management in a storage system

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 10,083,067
App. No.
15/196,472
Granted
Sep 25, 2018
Kind
B1
Abstract

Described embodiments provide systems and methods for operating a storage system. The storage system may generate one or more input/output (I/O) caller threads. For each of the I/O caller threads, one or more background provider threads may be generated that may be associated with the I/O caller thread. Instructions associated with the I/O caller threads and the background provider threads may be performed. Each of the one or more background provider threads may be synchronized with the associated I/O caller thread. Each thread may check a state of the associated threads, and based upon the state of the associated threads, each thread may post a state indicator to a mailbox field in a context of the associated threads.

Claims (68)

1. A method comprising:

generating one or more input/output (I/O) caller threads to operate a storage system;

generating, for each of the one or more I/O caller threads, one or more background provider threads associated with a given one of the I/O caller threads; and

synchronizing each of the one or more background provider threads with the associated I/O caller thread according to respective states of the I/O caller threads and the one or more background provider threads, the respective states indicated by at least one of associated context data and an associated synchronization object,

wherein synchronizing the one or more background provider threads with the associated I/O caller thread comprises:

checking, by each background provider thread, a state of the associated I/O caller thread, and based upon the state of the associated I/O caller thread, posting, by each background provider thread, a state indicator to a mailbox field in a context of the associated I/O caller thread; and

checking, by each I/O caller thread, a state of the one or more associated background provider threads, and based upon the state of the one or more associated background provider threads, posting, by the associated I/O caller thread, a state indicator to a mailbox field in a context of the one or more background provider threads associated with the I/O caller thread, and

wherein checking, by each background provider thread, a state of the associated I/O caller thread further comprises determining whether the associated I/O caller thread has exited and, if so, exiting the background provider thread without posting the state indicator to the mailbox field in the context of the associated I/O caller thread.

2. The method of claim 1 , wherein checking, by each I/O caller thread, a state of the one or more associated background provider threads further comprises determining whether each of the associated background provider threads have exited and, if so, not posting the state indicator to the mailbox field in the context of the associated background provider threads.

3. The method of claim 1 , wherein each of the one or more I/O caller threads has an associated timeout period, the method further comprising:

initializing the timeout period of each of the I/O caller threads;

generating a context block associated with each of the one or more I/O caller threads; and

copying the context block from each of the one or more I/O caller threads to each of the one or more background provider threads associated with the I/O caller thread, wherein the context block comprises a synchronization object to communicate between the I/O caller thread and the one or more background provider threads associated with the I/O caller thread.

4. The method of claim 3 , further comprising:

performing the one or more background provider threads; and

exiting the background provider thread without posting the state indicator of the one or more background provider threads to the mailbox field in the context of the associated I/O caller thread if the timeout period of the I/O caller thread associated with the one or more background provider threads has expired.

5. The method of claim 4 , further comprising, if the timeout period of the I/O caller thread associated with the one or more background provider threads has not expired:

posting the state indicator of the one or more background provider threads to the mailbox field in the context of the associated I/O caller thread;

deleting the synchronization object from the context block; and

exiting the background provider thread.

6. The method of claim 5 , wherein exiting the background provider thread comprises detaching the background provider thread and performing the background provider thread as a background process of the storage system.

7. The method of claim 3 , further comprising:

determining, by the one or more background provider threads, a state of the I/O caller thread based upon the mailbox field in the context of each of the one or more background provider threads; and

based upon the state of the I/O caller thread, notifying, via the synchronization object, the I/O caller thread when each of the one or more background provider threads complete.

8. A system comprising:

a processor; and

memory storing computer program code that when executed on the processor causes the processor to operate a storage system, the storage system operable to perform the operations of:

generating one or more input/output (I/O) caller threads to operate a storage system;

generating, for each of the one or more I/O caller threads, one or more

background provider threads associated with a given one of the I/O caller threads; and synchronizing each of the one or more background provider threads with the associated I/O caller thread according to respective states of the I/O caller threads and the one or more background provider threads, the respective states indicated by at least one of associated context data and an associated synchronization object,

wherein synchronizing the one or more background provider threads with the associated I/O caller thread comprises:

checking, by each background provider thread, a state of the associated I/O caller thread, and based upon the state of the associated I/O caller thread, posting, by each background provider thread, a state indicator to a mailbox field in a context of the associated I/O caller thread; and

checking, by each I/O caller thread, a state of the one or more associated background provider threads, and based upon the state of the one or more associated background provider threads, posting, by the associated I/O caller thread, a state indicator to a mailbox field in a context of the one or more background provider threads associated with the I/O caller thread, and

wherein checking, by each background provider thread, a state of the associated I/O caller thread further comprises determining whether the associated I/O caller thread has exited and, if so, exiting the background provider thread without posting the state indicator to the mailbox field in the context of the associated I/O caller thread.

9. The system of claim 8 , wherein the storage system is further operable to perform the operation of checking, by each I/O caller thread, a state of the one or more associated background provider threads further comprises determining whether each of the associated background provider threads have exited and, if so, not posting the state indicator to the mailbox field in the context of the associated background provider threads.

10. The system of claim 8 , wherein each of the one or more I/O caller threads has an associated timeout period, and wherein the storage system is further operable to perform the operations of:

initializing the timeout period of each of the I/O caller threads;

generating a context block associated with each of the one or more I/O caller threads; and

copying the context block from each of the one or more I/O caller threads to each of the one or more background provider threads associated with the I/O caller thread, wherein the context block comprises a synchronization object to communicate between the I/O caller thread and the one or more background provider threads associated with the I/O caller thread;

performing the one or more background provider threads; and

exiting the background provider thread without posting the state indicator of the one or more background provider threads to the mailbox field in the context of the associated I/O caller thread if the timeout period of the I/O caller thread associated with the one or more background provider threads has expired.

11. The system of claim 10 , wherein if the timeout period of the I/O caller thread associated with the one or more background provider threads has not expired, the storage system is further operable to perform the operations of:

posting the state indicator of the one or more background provider threads to the mailbox field in the context of the associated I/O caller thread;

deleting the synchronization object from the context block; and

exiting the background provider thread.

12. The system of claim 11 , wherein the storage system is further operable to perform the operations of:

determining, by the one or more background provider threads, a state of the I/O caller thread based upon the mailbox field in the context of each of the one or more background provider threads; and

based upon the state of the I/O caller thread, notifying, via the synchronization object, the I/O caller thread when each of the one or more background provider threads complete.

13. A computer program product including a non-transitory computer readable storage medium having computer program code encoded thereon that when executed on a processor of a computer causes the computer to operate a storage system, the computer program product comprising:

computer program code for generating one or more input/output (I/O) caller threads to operate a storage system;

computer program code for generating, for each of the one or more I/O caller threads, one or more background provider threads associated with a given one of the I/O caller threads; and

computer program code for synchronizing each of the one or more background provider threads with the associated I/O caller thread according to respective states of the I/O caller threads and the one or more background provider threads, the respective states indicated by at least one of associated context data and an associated synchronization object,

wherein synchronizing the one or more background provider threads with the associated I/O caller thread comprises:

checking, by each background provider thread, a state of the associated I/O caller thread, and based upon the state of the associated I/O caller thread, posting, by each background provider thread, a state indicator to a mailbox field in a context of the associated I/O caller thread; and

checking, by each I/O caller thread, a state of the one or more associated background provider threads, and based upon the state of the one or more associated background provider threads, posting, by the associated I/O caller thread, a state indicator to a mailbox field in a context of the one or more background provider threads associated with the I/O caller thread, and

wherein checking, by each background provider thread, a state of the associated I/O caller thread further comprises determining whether the associated I/O caller thread has exited and, if so, exiting the background provider thread without posting the state indicator to the mailbox field in the context of the associated I/O caller thread.

14. The computer program product of claim 13 , wherein the computer program product further comprises:

computer program code for initializing a timeout period of each of the I/O caller threads;

computer program code for generating a context block associated with each of the one or more I/O caller threads;

computer program code for copying the context block from each of the one or more I/O caller threads to each of the one or more background provider threads associated with the I/O caller thread, wherein the context block comprises a synchronization object to communicate between the I/O caller thread and the one or more background provider threads associated with the I/O caller thread;

computer program code for performing the one or more background provider threads;

if the timeout period of the I/O caller thread associated with the one or more background provider threads has not expired, the computer program product further comprises:

computer program code for posting the state indicator of the one or more background provider threads to the mailbox field in the context of the associated I/O caller thread;

computer program code for deleting the synchronization object from the context block; and

computer program code for exiting the background provider thread.

15. The computer program product of claim 14 , wherein the computer program product further comprises:

computer program code for determining, by the one or more background provider threads, a state of the I/O caller thread based upon the mailbox field in the context of each of the one or more background provider threads; and

computer program code for notifying, based upon the state of the I/O caller thread and via the synchronization object, the I/O caller thread when each of the one or more background provider threads complete, wherein the synchronization object comprises at least one of: a lock, a semaphore, and an event.

Assignments (3)
SECURITY AGREEMENT Recorded Mar 21, 2019
From: CREDANT TECHNOLOGIES, INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 049452/0223 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 3, 2017
From: EMC CORPORATION
To: EMC IP HOLDING COMPANY LLC
Reel/Frame 041872/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 10, 2016
From: SHVEIDEL, VLADIMIR
To: EMC CORPORATION
Reel/Frame 039394/0453 →