IP Library Granted Patent US 7,127,534
Granted Patent B2
US 7,127,534 · App. 10/609,291 · Granted Oct 24, 2006

Read/write command buffer pool resource management using read-path prediction of future resources

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 7,127,534
App. No.
10/609,291
Granted
Oct 24, 2006
Kind
B2
Abstract

A method for managing read and write data congestion in a system for executing write and read data commands and having a buffer pool of blocks for temporarily storing read and write data is disclosed. Management of the buffer pool and the initiation of read and write commands ensures that free blocks are available to temporarily store read data arriving at a host bus adapter (HBA). If the currently available blocks would be substantially consumed by the total outstanding inbound read data requested, no more write data commands will be initiated. As inbound read data is received into the buffer pool and subsequently transferred out of the buffer pool to the initiator device, the blocks in the buffer pool are freed up. When the read data transfer is completed and sufficient buffer resources have been freed up, read and write data commands may resume.

Claims (65)

1. In a system for executing write and read data commands, an apparatus for managing read and write data congestion, the apparatus comprising:

a shared read/write buffer pool of blocks for temporarily storing write data to be sent to a peer device and read data received from the peer device;

a receive list memory which contains descriptor pointers to free blocks and blocks filled with read data in the shared read/write buffer pool;

a transmit list memory which contains descriptor pointers to free blocks and blocks filled with write data in the shared read/write buffer pool; and

a processor programmed for preventing an initiation of a new write data command until pending read data requests have been processed enough to free up sufficient blocks in the buffer pool to accommodate the data of the new write data command by

determining a number of blocks in the shared read/write buffer pool that will be required to store the read or write data for the pending read data requests and the new write data command,

determining a number of free blocks in the shared read/write buffer pool, and

throttling the new write data command if the number of free blocks in the shared read/write buffer pool is insufficient to store the read data for the pending read data requests and the write data for the new write data command.

2. The apparatus as recited in claim 1 , the system comprising a free list memory which contains descriptor pointers to free blocks not referenced in the receive list memory, the processor further programmed for determining the number of free blocks in the buffer pool by:

summing the number of free blocks in the receive list memory and the free list memory.

3. The apparatus as recited in claim 1 , the processor further programmed for initiating the new write data command if the number of free blocks is sufficient to store the read data for the pending read data requests and the write data for the new write data command.

4. The apparatus as recited in claim 1 , the system comprising a free list memory which contains descriptor pointers to free blocks not referenced in the receive list memory, the processor further programmed for determining the number of free blocks in the buffer pool by:

summing the number of free blocks in the receive list memory and the free list memory; and

subtracting from the sum a number of blocks estimated for storing incoming read data for any pending read data requests.

5. The apparatus as recited in claim 4 , the processor further programmed for initiating the new read or write data command if the number of free blocks is sufficient to store the read data for the pending read data requests and the write data for the new write data command.

6. The apparatus as recited in claim 1 , the processor further programmed for:

storing the throttled new write data command and any subsequent new read or write data commands into a first-in-first-out (FIFO) read/write command request queue;

processing pending read data requests to completion to free up blocks in the buffer pool; and

executing a next read or write data command from the read/write command request queue if the number of free blocks becomes sufficient to store the read or write data for the next read or write data command.

7. A host bus adapter (HBA) comprising the apparatus of claim 1 , the HBA for implementing upper layer protocols (ULPs).

8. The HBA of claim 7 , further comprising an Internet Small Computer System Interface (iSCSI) controller circuit.

9. A host computer comprising the HBA of claim 8 .

10. A storage area network (SAN) comprising the host computer of claim 9 , wherein an iSCSI network is coupled to the iSCSI controller circuit and one or more storage devices are coupled to the iSCSI network.

11. A computer program for avoiding read and write data congestion in a system for executing write and read data commands, the computer program being stored on a machine readable medium and executable to perform acts comprising:

temporarily storing write data to be sent to a peer device and read data received from the peer device in a shared read/write buffer pool of blocks;

storing descriptor pointers to free blocks and blocks filled with read data in the shared read/write buffer pool in a receive list memory;

storing descriptor pointers to free blocks and blocks filled with write data in the shared read/write buffer pool in a transmit list memory; and

preventing an initiation of a new write data command until pending read data requests have been processed enough to free up sufficient blocks in the buffer pool to accommodate the data of the new write data command by

determining a number of blocks in the shared read/write buffer pool that will be required to store the read or write data for the pending read data requests and the new write data command,

determining a number of free blocks in the shared read/write buffer pool, and

throttling the new write data command if the number of free blocks in the shared read/write buffer pool is insufficient to store the read data for the pending read data requests and the write data for the new write data command.

12. The computer program as recited in claim 11 , the system comprising a free list memory which contains descriptor pointers to free blocks not referenced in the receive list memory, the computer program further executable to perform acts comprising determining the number of free blocks in the buffer pool by:

summing the number of free blocks in the receive list memory and the free list memory.

13. The computer program as recited in claim 11 , further executable to perform acts comprising initiating the new write data command if the number of free blocks is sufficient to store the read data for the pending read data requests and the write data for the new write data command.

14. The computer program as recited in claim 11 , the system comprising a free list memory which contains descriptor pointers to free blocks not referenced in the receive list memory, the computer program further executable to perform acts comprising determining the number of free blocks in the buffer pool by:

summing the number of free blocks in the receive list memory and the free list memory; and

subtracting from the sum a number of blocks estimated for storing incoming read data for any pending read data requests.

15. The computer program as recited in claim 14 , further executable to perform acts comprising initiating the new read or write data command if the number of free blocks is sufficient to store the read data for the pending read data requests and the write data for the new write data command.

16. The computer program as recited in claim 11 , further executable to perform acts comprising:

storing the throttled new write data command and any subsequent new read or write data commands into a first-in-first-out (FIFO) read/write command request queue;

processing pending read data requests to completion to free up blocks in the buffer pool; and

executing a next read or write data command from the read/write command request queue if the number of free blocks becomes sufficient to store the read or write data for the next read or write data command.

17. A host bus adapter (HBA) comprising the computer program of claim 11 , the HBA for implementing upper layer protocols (ULPs).

18. The HBA of claim 17 , further comprising an Internet Small Computer System Interface (iSCSI) controller circuit.

19. A host computer comprising the HBA of claim 18 .

20. A storage area network (SAN) comprising the host computer of claim 19 , wherein an iSCSI network is coupled to the iSCSI controller circuit and one or more storage devices are coupled to the iSCSI network.

21. A method for avoiding read and write data congestion in a system for executing write and read data commands, the method comprising:

temporarily storing write data to be sent to a peer device and read data received from the peer device in a shared red/write buffer pool of blocks;

storing descriptor pointers to free blocks and blocks filled with read data in the shared read/write buffer pool in a receive list memory;

storing descriptor pointers to free blocks and blocks filled with write data in the shared read/write buffer pool in a transmit list memory; and

preventing an initiation of a new write data command until pending read data requests have been processed enough to free up sufficient blocks in the buffer pool to accommodate the data of the new write data command by

determining a number of blocks in the shared read/write buffer pool that will be required to store the read or write data for the pending read data requests and the new write data command,

determining a number of free blocks in the shared read/write buffer pool, and

throttling the new write data command if the number of free blocks in the shared read/write buffer pool is insufficient to store the read data for the pending read data requests and the write data for the new write data command.

22. The method as recited in claim 21 , the system comprising a free list memory which contains descriptor pointers to free blocks not referenced in the receive list memory, the step of determining the number of free blocks in the buffer pool further comprising:

summing the number of free blocks in the receive list memory and the free list memory.

23. The method as recited in claim 21 , further comprising initiating the new write data command if the number of free blocks is sufficient to store the read data for the pending read data requests and the write data for the new write data command.

24. The method as recited in claim 21 , the system comprising a free list memory which contains descriptor pointers to free blocks not referenced in the receive list memory, the step of determining the number of free blocks in the buffer pool further comprising:

summing the number of free blocks in the receive list memory and the free list memory; and

subtracting from the sum a number of blocks estimated for storing incoming read data for any pending read data requests.

25. The method as recited in claim 24 , further comprising initiating the new read or write data command if the number of free blocks is sufficient to store the read data for the pending read data requests and the write data for the new write data command.

26. The method as recited in claim 21 , further comprising:

storing the throttled new write data command and any subsequent new read or write data commands into a first-in-first-out (FIFO) read/write command request queue;

processing pending read data requests to completion to free up blocks in the buffer pool; and

executing a next read or write data command from the read/write command request queue if the number of free blocks becomes sufficient to store the read or write data for the next read or write data command.

Assignments (6)
CORRECTIVE ASSIGNMENT TO CORRECT THE EXECUTION DATE PREVIOUSLY RECORDED AT REEL: 047422 FRAME: 0464. ASSIGNOR(S) HEREBY CONFIRMS THE MERGER. Recorded Mar 6, 2019
From: AVAGO TECHNOLOGIES GENERAL IP (SINGAPORE) PTE. LTD.
To: AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE. LIMITED
Reel/Frame 048883/0702 →
MERGER Recorded Oct 5, 2018
From: AVAGO TECHNOLOGIES GENERAL IP (SINGAPORE) PTE. LTD.
To: AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE. LIMITED
Reel/Frame 047422/0464 →
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENTS Recorded Feb 3, 2017
From: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
To: AVAGO TECHNOLOGIES GENERAL IP (SINGAPORE) PTE. LTD.
Reel/Frame 041710/0001 →
PATENT SECURITY AGREEMENT Recorded Feb 11, 2016
From: AVAGO TECHNOLOGIES GENERAL IP (SINGAPORE) PTE. LTD.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 037808/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 23, 2015
From: EMULEX CORPORATION
To: AVAGO TECHNOLOGIES GENERAL IP (SINGAPORE) PTE. LTD.
Reel/Frame 036942/0213 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 17, 2014
From: EMULEX DESIGN AND MANUFACTURING CORPORATION
To: EMULEX CORPORATION
Reel/Frame 032087/0842 →