IP Library Granted Patent US 9,323,680
Granted Patent B1
US 9,323,680 · App. 11/864,716 · Granted Apr 26, 2016

Method and apparatus for prefetching data

Inventors: Tommi Salli (Mountain View, CA); Hans Van Rietschote (Sunnyvale, CA); Craig W. Hobbs (Mountain View, CA)
Assignee: Veritas US IP Holdings LLC
G06F12/0862G06F2212/6026G06F2212/6028H04L65/4069H04N21/23406
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,323,680
App. No.
11/864,716
Granted
Apr 26, 2016
Kind
B1
Abstract

A method and apparatus for pre-fetching data to be streamed from a data storage to a user computer comprising the steps of determining information regarding a file type of a data file, establishing pre-fetch parameters in response to the information, accessing the data file and pre-fetching data blocks from the data file in accordance with the pre-fetch parameters is described.

Claims (102)

1. A method for pre-fetching data, the method comprising: ascertaining, using a computer, information regarding a data file, wherein the ascertaining

comprises

accessing a download speed of a network connection, a bit rate, a file size of the data file, and a length of play, and

computing a number of data blocks of the data file to buffer, wherein the computing is performed, at least in part, by multiplying the download speed with the length of play to calculate an intermediate result, and subtracting the intermediate result from the file size, and

the number of data blocks is greater than zero;

providing, using the computer, the information to an application programming interface (API);

in response to receiving the information, using the API to establish a first set of pre-fetch parameters, wherein

the first set of pre-fetch parameters comprises at least two of alphabetical order, numerical order, an order according to a play list, and an order following instructions from the API,

the first set of pre-fetch parameters is established in accordance with a first pre-fetch technique, and

the first pre-fetch technique is chosen from a plurality of pre-fetch techniques,

attempting to pre-fetch one or more of a plurality of data blocks via a network from the data file using the computer in accordance with the first set of pre-fetch parameters, wherein

the data file comprises the plurality of data blocks;

determining whether the attempting is successful;

in response to a determination that the attempting was unsuccessful, establishing a second set of pre-fetch parameters

wherein

the second set of pre-fetch parameters comprises at least two of alphabetical order, numerical order, an order according to a play list, and an order following instructions from the API,

the second set of pre-fetch parameters is not identical to the first set of pre-fetch parameters,

the second set of pre-fetch parameters is established in accordance with a second pre-fetch technique, and

the second pre-fetch technique is chosen from the plurality of pre-fetch techniques using the API; and

pre-fetching, using the computer, one or more of the plurality of data blocks from the data file, wherein

the pre-fetching is performed in accordance with either the first set of pre-fetch parameters or the second set of pre-fetch parameters, and

the pre-fetching is performed via the network;

accessing the data file using the computer, wherein

the data file is stored on a storage device, and

the storage device is communicatively coupled to the computer via a network; and

buffering the one or more pre-fetched data blocks, wherein the buffering comprises storing the one or more pre-fetched data blocks in a memory on the computer.

2. The method of claim 1 , wherein the ascertaining the information regarding the data file further comprises

determining second information regarding a file type of the data file,

in response to a determination of the file type, determining one or more pointers of the data file, wherein

each of the one or more pointers points to one or more of the plurality of data blocks.

3. The method of claim 2 , wherein

the ascertaining the information further comprises analyzing at least one of a content or a metadata of the data file, and

the pre-fetching the one or more data blocks in accordance with the first set of pre-fetch parameters comprises

accessing one or more respective data blocks of the one or more data blocks pointed to by each of the one or more pointers.

4. The method of claim 3 , wherein the step of ascertaining the information further comprises determining a read access pattern for the file type.

5. The method of claim 1 , wherein the step of ascertaining the information further comprises examining a usage pattern for the data file.

6. An apparatus for pre-fetching data, comprising:

a storage device comprising a data file, wherein

the data file comprises a plurality of data blocks;

a file system used by an application for accessing the data file via a network;

an application programming interface (API) for

receiving, via the network, information describing the data file, wherein the information comprises a download speed of a network connection, a bit rate, a file size of the data file, and a length of play, and

the information is used to compute a number of data blocks of the data file to buffer, wherein

the number is computed, at least in part, by multiplying the download speed with the length of play to calculate an intermediate result, and subtracting the intermediate result from the file size, and

the number is greater than zero;

in response to the receiving of the information, establishing a first set of pre-fetch parameters,

wherein

the first set of pre-fetch parameters comprises at least two of alphabetical order, numerical order, an order according to a play list, and an order following instructions from the API,

the first set of pre-fetch parameters is chosen in accordance with a first pre-fetch technique, and

the first pre-fetch technique is chosen from a plurality of pre-fetch techniques;

attempting to pre-fetch at least one of the plurality of data blocks via the network, wherein

the attempting comprises attempting to pre-fetch the at least one of the plurality of data blocks using the first set of pre-fetch parameters;

determining whether the attempting is successful;

in response to a determination that the attempting was unsuccessful, establishing a second set of pre-fetch parameters, wherein

the second set of pre-fetch parameters comprises at least two of alphabetical order, numerical order, an order according to a play list, and an order following instructions from the API,

the second set of pre-fetch parameters is not identical to the first set of pre-fetch parameters,

the second set of pre-fetch parameters is chosen in accordance with a second pre-fetch technique, and

the second pre-fetch technique is chosen from the plurality of pre-fetch techniques using the API;

a pre-fetching module, implemented by a processor, coupled to the file system for

pre-fetching, using the network, one or more of the plurality of data blocks from the data file in accordance with either the first set of pre-fetch parameters or the second set of pre-fetch parameters; and

a buffer for storing the one or more pre-fetched data blocks, wherein the application accesses the one or more pre-fetched data blocks from the buffer.

7. The apparatus of claim 6 , wherein the pre-fetching module is further for

determining second information regarding a file type of the data file, and in response to a determination of the file type,

determining one or more pointers of the data file, wherein

each of the one or more pointers points to one or more respective data blocks of the plurality of data blocks.

8. The apparatus of claim 6 , wherein the pre-fetching module processes instructions from the application for pre-fetching the data file through the API.

9. The apparatus of claim 7 , wherein the pre-fetching module is further for analyzing at least one of a content or a metadata of the data file, and is configured to perform the pre-fetching of the data blocks in accordance with the second set of pre-fetch parameters by accessing one or more respective data blocks of the plurality of data blocks pointed to by each of the one or more pointers.

10. The apparatus of claim 6 , wherein the pre-fetching module examines a usage pattern for the data file.

11. A system for pre-fetching data, comprising:

a user computer comprising:

an application for

requesting a data file stored on a storage device, wherein the data file comprises a plurality of data blocks, and the storage device is communicatively coupled to the user computer via a network,

determining information regarding the data file, wherein the information comprises a download speed of a network connection, a bit rate, file size of the data file, and a length of play,

computing a number of data blocks of the data file to buffer, wherein

the computing is performed, at least in part, by multiplying the download speed with the length of play to calculate an intermediate result, and subtracting the intermediate result from the file size, and

the number of data blocks is greater than zero;

an application programming interface (API) for

establishing a first set of pre-fetch parameters, wherein the first set of pre-fetch parameters comprises at least two of alphabetical order, numerical order, an order according to a play list, and an order following instructions from the API,

the first set of pre-fetch parameters is established in accordance with a first pre-fetch technique, and

the first pre-fetch technique is chosen from a plurality of pre-fetch techniques,

attempting to pre-fetch one or more of the plurality of data blocks from the data file,

using the user computer in accordance with the first set of pre-fetch parameters,

determining whether the attempting is successful,

in response to a determination that the attempting was unsuccessful,

establishing a second set of pre-fetch parameters, wherein the second set of pre-fetch parameters comprises at least two of alphabetical order, numerical order, an order according to a play list, and an order following instructions from the API,

the second set of pre-fetch parameters is not identical to the first set of pre-fetch parameters,

the second set of pre-fetch parameters is established in accordance with a second pre-fetch technique, and

the second pre-fetch technique is chosen from the plurality of pre-fetch techniques using the API;

a storage device for transmitting the data file to the user computer comprising: a file system used by the application for accessing the data file;

a pre-fetching module, implemented by a processor, coupled to the file system for

pre-fetching at least one of the plurality of data blocks from the data file in accordance with either the first set of pre-fetch parameters or the second set of pre-fetch parameters; and a buffer for storing the one or more pre-fetched data blocks, wherein the application is configured to access the one or more pre-fetched data blocks from the buffer.

12. The system of claim 11 , wherein the application is a multimedia application for executing multimedia files.

13. The method of claim 1 , further comprising recording the failure of the first set of pre-fetch parameters such that subsequent accesses of the data file can be performed using an alternate set of pre-fetch parameters chosen in accordance with an alternate pre-fetch technique chosen from the plurality of pre-fetch techniques other than the first pre-fetch technique.

14. The method of claim 1 , further comprising in response to the establishing of the first set of pre-fetch parameters, associating the first set of pre-fetch parameters with a file type of the data file; and

in response to the establishing of the second set of pre-fetch parameters, disassociating the first set of pre-fetch parameters with the file type, and associating the second set of pre-fetch parameters with the file type.

15. The method of claim 14 , further comprising: determining, using the computer, other information regarding an other data file;

providing, using the computer, the other information to the application programming interface;

determining whether the other data file is of the file type; and

in response to a determination that the other data file is of the file type, establishing the second set of pre-fetch parameters using the application programming interface, wherein

the second set of pre-fetch parameters is established in accordance with the first pre-fetch technique.

16. The method of claim 1 , further comprising playing the data file on the computer, wherein the playing comprises displaying a plurality of the pre-fetched data blocks; retaining in the buffer, after the playing, a subset of the pre-fetched data blocks, wherein the subset is sufficient to scroll back a predetermined amount of time during the playing; and

discarding, after the playing, one or more of the pre-fetched data blocks that are not among the subset.

Assignments (15)
SECURITY INTEREST Recorded Dec 12, 2025
From: ARCTERA US LLC
To: CITIBANK, N.A., AS COLLATERAL AGENT
Reel/Frame 073951/0470 →
TERMINATION AND RELEASE OF PATENT SECURITY AGREEMENT AT R/F 070530/0497 Recorded Dec 1, 2025
From: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
To: ARCTERA US LLC
Reel/Frame 073833/0730 →
SECURITY INTEREST Recorded Mar 17, 2025
From: ARCTERA US LLC
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 070530/0497 →
RELEASE OF SECURITY INTEREST Recorded Dec 16, 2024
From: ACQUIOM AGENCY SERVICES LLC, AS COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC (F/K/A VERITAS US IP HOLDINGS LLC)
Reel/Frame 069712/0090 →
RELEASE OF SECURITY INTEREST Recorded Dec 13, 2024
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 069634/0584 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 9, 2024
From: VERITAS TECHNOLOGIES LLC
To: ARCTERA US LLC
Reel/Frame 069548/0468 →
ASSIGNMENT OF SECURITY INTEREST IN PATENT COLLATERAL Recorded Nov 25, 2024
From: BANK OF AMERICA, N.A., AS ASSIGNOR
To: ACQUIOM AGENCY SERVICES LLC, AS ASSIGNEE
Reel/Frame 069440/0084 →
TERMINATION AND RELEASE OF SECURITY IN PATENTS AT R/F 037891/0726 Recorded Nov 30, 2020
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
To: VERITAS US IP HOLDINGS, LLC
Reel/Frame 054535/0814 →
SECURITY INTEREST Recorded Aug 20, 2020
From: VERITAS TECHNOLOGIES LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 054370/0134 →
MERGER Recorded Apr 18, 2016
From: VERITAS US IP HOLDINGS LLC
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 038483/0203 →
SECURITY INTEREST Recorded Feb 23, 2016
From: VERITAS US IP HOLDINGS LLC
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 037891/0001 →
SECURITY INTEREST Recorded Feb 23, 2016
From: VERITAS US IP HOLDINGS LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
Reel/Frame 037891/0726 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 4, 2016
From: SYMANTEC CORPORATION
To: VERITAS US IP HOLDINGS LLC
Reel/Frame 037693/0158 →
CORRECTIVE COVERSHEET TO CORRECT THE SPELLING OF THE SECOND ASSIGNOR'S LAST NAME ON COVERSHEET PREVIOUSLY RECORDED ON REEL REEL/FRAME 019903/0761. Recorded Nov 21, 2007
From: SALLI, TOMMI; VAN RIETSCHOTE, HANS; HOBBS, CW
To: SYMANTEC CORPORATION
Reel/Frame 020151/0350 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 1, 2007
From: SALLI, TOMMI; REOTSCJPTE, HANS VAN; HOBBS, CW
To: SYMANTEC CORPORATION
Reel/Frame 019903/0761 →