1. A method for caching data, comprising: maintaining a random data list and a sequential data list;
dynamically establishing a desired size for the sequential data list, wherein the establishing act comprises:
empirically determining a marginal utility of adding space to the random data list;
computing a marginal utility of adding space to the sequential data list in terms of a rate of sequential misses; and
based on the computing and determining acts, establishing the desired size of the sequential data list, wherein the empirically determining act comprises determining a rate “s” of sequential misses as the number of sequential misses during a time period defined by two successive cache hits in a bottom portion ΔL of the random data list, wherein ΔL is a length, and further wherein the act of establishing the desired size of the sequential data list comprises:
increasing the desired size if the computed marginal utility of adding space to the sequential data list exceeds the empirically determined marginal utility of adding space to the random data list, and otherwise decreasing the desired size;
moving at least one newly prefetched group of units of data along with an asynchronous trigger unit of data in the group of units of data to a most recently use (MRU) portion of the sequential data list; and
moving at least some unaccessed units of data in the group of units of data to the MRU portion of the sequential data list.