Many content providers, such as cable television and satellite television providers, provide both Video On Demand (VOD) and Digital Video Recording (DVR) services to their customers. In connection with such services, one or more versions of a content asset, such as an episode of a television program or a movie, may be stored on a content storage system that may include multiple storage subsystems communicatively connected by a network. In such a content storage system, versions of a particular content asset are typically stored on a storage subsystem associated with the user. When the user desires to view the recorded content asset, portions of the content asset may be retrieved from the storage subsystem and sent to a user device for playback, typically using a streaming process, such as adaptive bitrate streaming. When a storage subsystem of a content storage system encounters problems during playback, the user experience can be affected. Hence, improved methods of storing content are needed.
Systems and methods are described herein for improved storage of different versions of a content asset across a plurality of storage subsystems of a content storage system. Portions of different versions of a content asset may be stored in a manner that reduces the impact on viewing experience in the event of a failure of one of the plurality of storage subsystems. In particular, portions of the different versions of a content asset, which are associated with a same playback time of the content asset, may be stored in different storage subsystems. By storing the portions of at least some of the different versions of a content asset, associated with a same playback time, to different storage subsystems, no one storage subsystem stores all the corresponding portions of all of the versions. In this manner, if the storage subsystem from which a portion of one of the versions is being retrieved for playback encounters a problem, a user device can access a corresponding version of a different stream stored on a different one of the storage subsystems. For a different period in time associated with the content asset, the content storage system may change which of the storage subsystems are storing the portions of the different versions of the content asset. This may further enhance the resiliency of the system.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter. Furthermore, the claimed subject matter is not limited to limitations that solve any or all disadvantages noted in any part of this disclosure
The following drawings show generally, by way of example, but not by way of limitation, various examples discussed in the present disclosure. In the drawings:
A content storage system may receive content and store the content to one or more storage subsystems. A storage subsystem may comprise one or more storage devices that store and maintain content. A storage subsystem may comprise a partition of a content storage system. A storage subsystem may have built-in redundancy to prevent data loss. Examples of redundancy may comprise, but are not limited to, erasure encoding, 2-way replication, and a Redundant Array of Inexpensive Disks (RAID).
A content asset may comprise one or more of linear content, non-linear content, video content, audio content, multi-media content, a movie, a television show, a presentation a song, an album, a live broadcast, recorded content, stored content, or any other form of content a user may wish to consume. A content asset may comprise one or more versions of the content, each of which may be referred to as a stream. Each version may comprise a different encoding of the content asset. Each version may have properties that differ from other versions, such as a different bitrate, compression technique, compression ratio, resolution, frame rate, video quality (for video), number of channels, or sampling rate (for audio). Each version of a content asset may comprise a plurality of portions. Each portion may comprise one or more segments, sometimes referred to as chunks, which may be independently accessible for playback on a user device. A version, or stream, of a content asset may be described in a manifest, and a user device may use the manifest to request segments of a version for playback on the user device. The user device may select a version for playback based on its properties and/or current network conditions. The user device may periodically reevaluate its selection of version for playback and may shift to a different version, or stream, due to changing network conditions. For example, the user device may switch to a version of the content asset having a different bitrate. This approach may be referred to as multi-rate streaming or adaptive bitrate (ABR) streaming. Example implementations of adaptive bitrate streaming techniques include MPEG DASH (Dynamic Adaptive Streaming over HTTP) and Apple HLS (HTTP Live Streaming).
In a content storage system, portions of the various versions of a content asset may be randomly stored across a plurality of different storage subsystems. However, in such a system all of the portions of the different versions associated with a same playback time could end up stored on the same storage subsystem. If all of the portions for the same playback time are stored on the same subsystem, and that subsystem encounters a problem (e.g., the subsystem goes down or becomes inaccessible), a user device may not be able to access a portion of the content asset during that playback time. This may result in a poor viewing experience.
Systems and methods are described herein for improved storage of portions of different versions of a content asset across a plurality of storage subsystems. Portions of different streams of a content asset may be stored in a manner that reduces the impact on viewing experience in the event of a failure of one of the plurality of storage subsystems of the content storage system. In particular, portions of each of the different versions of a content asset, which may be associated with a same portion of the playback time of the content asset, may be stored in different storage subsystems. In this manner, if the storage subsystem from which a portion of one of the streams is being retrieved for playback encounters a problem, the user device can access a corresponding portion of a different version stored on a different one of the storage subsystems.
By storing the portions of at least some of the different versions of a content asset, associated with a first time period, to different storage subsystems, no one storage subsystem stores all the corresponding portions of all of the versions. For a different period in time associated with the content asset, the content storage system may change which of the storage subsystems are storing the portions of the different streams of the content asset. This may further enhance the resiliency of the system.
As described above, each version (e.g., stream) of a content asset may comprise a different encoding of the content asset. For example, each stream may comprise a version of the content asset encoded at a different bitrate. Other properties of a content asset that may differ among the versions include compression technique, compression ratio, resolution, frame rate, video quality (for video), number of channels, or sampling rate (for audio). The versions, or streams, may also comprise one or more trick play or other specialty versions.
The content storage system may store the same portions of a lowest bitrate version or some other type of minimal playback version on a plurality of the storage subsystems to ensure that such a version having minimal playback quality may still be accessible in the event that one or more of the plurality of storage subsystems becomes unavailable or otherwise encounters a problem.
The computing systems 125-127 may receive the content asset from the content provider 105, generate one or more versions (e.g., streams) of the content asset and their respective segments, and store the segments of the streams to the storage subsystems 135-139. The computing systems 125-127 and storage subsystems 135-139 may be interconnected by a network 130. The network may comprise a WAN, a LAN, or any other type of network that may include at least a portion of the Internet.
The segment recorder 225 may receive the segments from the packager 210, and timing information for each segment from the scheduler 220, and may store the segments to the storage subsystems of a content storage system, such as the storage subsystems 135-139 of
In the example of
The first, second, and third time periods represented in
As can be appreciated from the example of
The following is an example of playback based upon
As this example illustrates, in the event of a catastrophic failure of a storage subsystem, playback of the content asset is not disrupted, because the portions of other streams of the content asset are available from other storage subsystems for the same playback time. This may allow a user device to obtain portions from another stream with parameters that still satisfy current network conditions. As such, a user consuming the content may only experience a mild downgrade in video quality due to the catastrophic failure of the storage subsystem 301. At the end of the playback time period in which the failure occurred, the user device may return to requesting and receiving portions of the stream previously lost due to the failure, because its portions for the subsequent time period are stored by another storage subsystem. Thus, even the degradation in video quality may be limited only to the time period in which the failure of the one subsystem occurred.
Another advantage of switching the storage of the portions of each stream to a different storage subsystem for each different time period is that the storage load of the streams can be evenly distributed across the various storage subsystems. For example, a higher bitrate stream may comprise a larger amount of data than a lower bitrate stream for the same playback time period of the content asset. Thus, by switching the storage of the portions of each stream to a different storage subsystem for every associated time period, the burden associated with storing the higher bitrate streams (i.e., the ones comprising the most data) may be more evenly distributed across the multiple subsystems. That is, the overall amount of data stored by each of the storage subsystems may be more evenly balanced.
As mentioned above, portions of a lowest quality stream of the content asset, such as the stream denoted Asset 1 LBR, may also be stored to more than one storage subsystem for each associated time period. This may ensure that a user device is able at least to retrieve portions from that lowest quality stream for any given time period, regardless of the number of storage subsystems that may have failed (as long as at least on storage subsystem remains available) and/or the current network conditions.
The storage router 410 may receive the request and, based on the information in the request, determine a storage subsystem in which to store the portion of the stream. The storage router 410 may use a distribution algorithm to determine which of the plurality of storage subsystems in which to store the portion. In determining in which storage subsystem the portion is to be stored, the storage router 410 may access configuration information from a configuration file, a library, or any other suitable data structure that comprises information indicative of a grouping of the plurality of storage subsystems into one or more groups and tiers, as well as associating users with the one or more groups or tiers. Such use of a configuration file or library may allow multiple storage routers associated with different systems to make the same determination with respect to storage groups and tiers when storing segments of the same content asset in a synchronized manner. In that scenario, the storage routers may synchronize based on a same universal time.
One or more of the plurality of storage subsystems of a content storage system may be logically grouped together. Such a grouping may be referred to as a tier. The plurality of storage subsystems may be grouped into a plurality of different tiers.
The one or more subsystems in a tier may be further grouped together based on operational parameters of the subsystems. Each such further grouping may be referred to herein as a “group” within the tier and may comprise a subset of the storage subsystems of the tier. In the example of
The system may select one particular tier to store the various streams (i.e., versions) of a particular content asset. Selection of the tier in which to store the streams of a particular content asset may be based on a quality of service associated with a user requesting that the content asset be stored. For example, a user may have a subscription for a higher quality of service that dictates that storage subsystems that are more reliable and more able to quickly process requests are used for storage of content assets for the user. Alternatively, the selection of the tier may be based on the content asset being stored. For example, a popular show that is in an HD or UltraHD format may be best stored in a tier with faster or larger storage capacities. Programs in a SD format or some other format may be stored to other tiers or groups that may operate at slower speeds.
To promote even distribution of content across the storage subsystems, a lesser number of tiers may be preferred, with each tier comprising a greater number of storage subsystems. For example, a larger number of tiers may cause recordings of a popular content asset, such as a popular episode of a television program, to be stored on only a small percentage of the storage subsystems available, whereas with a smaller number of tiers, the same content asset may be stored across a greater percentage of the storage subsystems available.
Different streams of a content asset may be stored to the storage subsystems of different groups of a tier. Determining which streams of a content asset are to be stored in which groups of a tier may be based on reliability considerations. For example, because the loss of a medium bitrate (MBR) stream due to storage subsystem failure may result in a playback device switching to a low bitrate (LBR) stream, it may be preferable to store MBR streams of a content asset to the storage subsystems of one group and to store low bitrate (LBR) streams of the content asset to the storage subsystems of a different group of the tier.
Determining which streams of a content asset are to be stored in which groups of a tier may be based on storage size considerations. For example, it may be preferable to store the different streams in different groups such that the aggregate size of each group is close to all other groups. This may result in more even writes across tier groups for any given content asset.
In step 520, the system may receive a portion of a second version of the content asset. Similar to the portion of the first version of the content asset, the portion of the second version of the content asset may comprise one or more segments of the second version of the content asset. The portions of the first and second versions of the content asset may comprise one or more segments associated with a same time period associated with the content asset, such as a portion of the playback time of the content asset. In step 530, the system may store the portion of the first version of the content asset in a first storage subsystem of a plurality of storage subsystems of the content storage system. In step 540, the system may store the portion of the second version of the content asset in a second storage subsystem of the plurality of storage subsystems. The first and second storage subsystems may be different storage subsystems to ensure that content is available from at least one of the versions (e.g., streams) of the content asset in the event of a catastrophic failure of one or more of the storage subsystems.
In step 550, the system may determine whether the end of a first time period associated with the content asset has been reached. The first time period may comprise at least one of a playback time associated with the content asset, a recording time associated with the content asset, an absolute time, a relative time, or another measure of time associated with the content asset. The time period may comprise any suitable length of time. For example, the length of the time period may comprise, but is not limited to, 15 minutes (about one half or one quarter of a typical episode of a television program), 30 minutes (a whole or a half of a typical episode of a television program), one hour (a whole or two whole typical episodes of a television program), or two hours. The time period may have a fixed length. The time period may have a variable length.
If the end of the time period has not been reached in step 550, the method may be repeated from step 510 using the same first and second storage subsystems. That is, subsequently received portions of the first and second versions of the content asset associated with the current time period may continue to be stored to the first and second storage subsystems, respectively.
If the end of the time period has been reached at step 550, the first and second storage subsystem may be changed to other storage subsystems at step 560, such that subsequently received portions of the first and second versions of the content asset, associated with a next time period associated with the content asset, are stored to different storage subsystems. As illustrated in
In accordance with the method 500 illustrated in
In step 630, the request for storage information may be transmitted to a storage router. The storage router may be configured to implement a storage distribution algorithm such as that described above and illustrated in
In step 730, the storage router may determine a tier of storage subsystems in which to store the portion of the version of the content asset. The determination may be based on a look-up table, a configuration file, or a designation in the received request. The determination may be based on the user identification and/or the profile associated with the version of the content asset.
In step 740, the storage router may determine a current storage subsystem, or one or more storage subsystems, of the tier in which to store the portion of the version of the content asset. The storage router may determine the current storage subsystem based on a method such as that described above and illustrated in
In step 750, a response message may be generated that identifies the current storage subsystem in which the portion of the version of the content asset is to be stored. In step 760, the response message may be sent to the segment recorder from which the request for storage information was received.
As discussed above, a distribution algorithm, such as that described above and illustrated in
In accordance with the capacity adaptive algorithm, a weighting or ratio, such as a multiplier, may be added to an initial calculation and subsequent calculations of a length of time for storing portions of a particular version (or group of versions) of a content asset to be written to a particular storage subsystem in a tier. The weighting may comprise a weighting multiplier based upon a current available (i.e., free) storage capacity of each storage subsystem. The weighting multiplier may be adjusted for every successive time period. The value of the weighting multiplier may be changed each time the calculation is performed to account for changes to the available storage capacity of the storage subsystems as portions of the versions of the content asset are stored in the subsystems. The capacity adaptive algorithm may only be used when a number of storage subsystems in a tier or group is greater than a number of versions of a content asset being stored, as expressed in the following equation:
S>C
where S represents the number of storage subsystems available in the tier and C represents the number of versions of a content asset being written to the storage subsystems. If the number of storage subsystems is less than or equal to the number of versions of the content asset, the distribution algorithm described above and illustrated in
By way of example and not limitation, assume that the portions of the different versions of Asset 1 and Asset 2 have been stored to the storage subsystems 801, 802, and 803 in accordance with the distribution algorithm described above and illustrated in
After the system has operated for some period of time, a substantial portion of the available capacity of the currently available storage subsystems is currently being used. As shown in
At some later point in time, assume further that the available capacity of the storage subsystems 801-803 may be insufficient to support the additional content expected or anticipated over some future time period. To meet the future demand, a new storage subsystem 804 may be added to the system. The storage subsystem 804 may have a nearly 100% available capacity while the existing subsystems 801-803 have on average about 25% available capacity.
In this situation, when a fixed time period, such as the time period of fixed length m, is used in the distribution algorithm, several scenarios are likely to occur:
To avoid these potential scenarios, the capacity adaptive algorithm changes the formula for a time period duration from:
time=t0+(m*n)
where m represents the fixed shift interval and n represents the number of consecutive preceding time periods, to a new formula:
time=t0+(m*f(x))
where f(x) represents a function that is a weighting or ratio applied based upon a proportion of the available capacity of the individual storage subsystems and time is the start time of the next time period.
The function represented by f(x) can be implemented by a variety of formulas. Some examples that may be employed include, but are not limited to, a logistic function, an error function, or a tan h function. The results produced by f(x) might change for different numbers of simultaneous storage subsystems actively being used to store content at a particular instant in time.
The function f(x) preferable complies with the two requirements:
For purposes of illustrating the capacity adaptive algorithm, assume an example system comprising four (4) storage subsystems, denoted S0, S1, S2, and S3, three (3) versions (or groups of versions) of a content asset to be stored, and a value of 10 minutes for m.
Assume further a simple mathematical computation for the function f(x), which utilizes the available capacity of each storage subsystem. The function produces a duration of time to store each version of the content asset to the particular storage subsystem and is represented by:
f(x)=2*capacity of the storage subsystem as a percentage.
Using this formula, x would vary from 0 to 2 times the value of m from the fixed interval distribution algorithm described above and illustrated in
The use of the above function, f(x), without any further processing on the resulting durations, may result in violating at least one of the above requirements (i.e., portions of different versions of a content asset that a playback device may switch between in the event of a storage subsystem failure should not be stored on a same storage subsystem, and the first storage system on which to begin storing portions of a version of the content asset should be determined using a hashing function). For example, with reference to
Using the function f(x) to calculate the duration of the time period for each storage subsystem produces the following results:
d
0=(10*2*0.01)=0.2 min;
d
1=(10*2*0.01)=0.2 min;
d
2=(10*2*0.01)=0.2 min; and
d
3=(10*2*1)=20 min.
In this example, within 0.6 mins regardless of which storage subsystem is selected to begin the storing of a version (or group of versions) of the content asset, multiple versions of the content asset will be written to a same one of the storage subsystems. To prevent this from occurring, a constraint may be enforced that the duration of each time period must be less than or equal to the sum of all durations of the time periods for each storage subsystem. This constraint can be expressed by the following equation:
where d0 through dn represents the individual weight adjusted duration calculations of all d for each storage subsystem; and di is the weighting of a specific weight adjusted capacity calculation, which may be referred to herein as the normalization constraint. When applying the normalization constraint to the duration calculations above, d3 (storage subsystem S3) is reduced to the sum of the other three durations as shown in the following:
d
0=(10*2*0.01)=0.2 min.;
d
1=(10*2*0.01)=0.2 min.;
d
2=(10*2*0.01)=0.2 min.; and
d
3=(10*2*1)=20 min>0.2+0.2+0.2; reduce to 0.2+0.2+0.2=0.6 min.
However, even with the application of the normalization constraint, the maximum amount of time that a particular version (or group of versions) of a content asset may be stored before needing to be stored on d3 (subsystem S3) is 0.4 min, but the first version being written on that storage subsystem would be written for 0.6 min. This would result in a violation of the first requirement. Thus, to overcome this issue a duration for the time period of any specific subsystem must not exceed a maximum value—referred to herein as a maximum constraint. This constraint may be calculated by first performing an ascending sort on the set of calculated durations represented by D:
D=ascending sort {d0,d1,d2,d3}={0.2,0.2,0.2,0.6}
Next, the first n entries from D may be summed and divided by n−1 (because each version must be written to a different storage subsystem at any given point), where n is the number of versions of the content asset to store to the system and m is the resulting maximum constraint value.
When calculating the maximum constraint value for the current example, the result of m is 0.3 min. After applying the normalization and maximum constraints, the calculated durations are:
d
0=0.2 min.;
d
1=0.2 min.;
d
2=0.2 min.; and
d
3=0.3 min.
However, there is a third issue that can arise from the combination of the first and second requirements. With reference to
As shown, the portions of the first, second and third versions overlap on storage subsystem S3, which violates the first requirement (two different versions of the content asset associated with a same playback time cannot be stored by the same storage subsystem). Therefore, an additional constraint, referred to herein as a jitter constraint, may be imposed to prevent two or more versions of the content asset from being stored to the same storage subsystem. This jitter constraint may require that the initial duration of a time period be greater than or equal to the duration of the number of versions minus one of the other determined time periods. This can be represented by the equation:
d
i=maximum {da,da+1, . . . , dn−1}
where di is a maximum weighting from a set of specific weight adjusted durations from the subsequent group of durations. Applying the jitter constraint, and using the previously computed time periods after the normalization and maximum constraints, results in the following first time periods for the storage systems:
g
1=maximum of (0.2, 0.3 or 0.2) from the d2,d3 and d0 subsystems=0.3 min. on S2;
g2=maximum of (0.3 or 0.2 min.) from the d3 and d0 subsystems=0.3 min. on S3;
and
g
3=0.2 as there are no more values to compare because n−1=zero remaining versions.
All subsequent writes may continue using the computed values produced by the individual durations of the time periods after applying the normalization and maximum constraints.
A final constraint may be to not store any partial segments of a content asset to a storage subsystem. Thus, if the weighted value of di is not evenly divisible by the segment duration, di may be rounded down to the nearest full-time duration. For example, in the case of 2 second segments, the write time for a storage subsystem could be up to 2 seconds less than the weighted duration calculates for a single subsystem but ensures the fulfillment of the first requirement.
In this described example, assume that all of the time period durations are fully divisible by the segment time interval (e.g., 2 seconds). This results in the timeline shown in
Note that the initial duration for the portions of the first version of the content asset on storage subsystem S2 is the same as for the initial duration of the second version of the content asset on storage system S3. This is due to the jitter constraint calculation. Also, the gray intervals in between the stored portions represent periods of time when there is no active version of the content asset being written to the corresponding storage subsystem. Lastly, viewing the timeline of storage subsystem S3 shows no periods with inactivity. This illustrates the capacity adaptive algorithm's maximization of the storage subsystem with the greatest free capacity.
The capacity adaptive algorithm may be reapplied to determine the time periods for each of the subsystems storing versions of the content asset. The capacity adaptive algorithm may be used to recalculate the duration of the current time period based on the remaining free capacity. The likelihood of a particular versions (or group of versions) of a content asset being stored too often to the same partition may be further reduced by randomly distributing the order of the versions allocated to the function. For example, one or more HBR versions might be assigned as g1 for one requested calculation, but then may get assigned to g2 on the next requested calculation of the capacity adaptive algorithm.
A percentage of available (i.e., free) space on each storage subsystem may be determined in step 1308. The duration of the time period for each subsystem to store portions of a particular version or group of versions may be determined in step 1310. This determination may be made using the function f(x) described above. In step 1312, the normalization constraint may be applied to the determined durations. In step 1314, the maximum constraint may be applied.
In step 1320, if it is determined that the current time period is the initial time period for storing versions of the content asset, the jitter constraint may be applied in step 1322. Application of the jitter constraint in step 1322 may be optional. Application of the jitter constraint may not be limited to the initial time period; the jitter constraint may be applied in association with other time periods. In step 1324, any determined duration that is not evenly divisible by the segment duration (e.g., 2 seconds) may be rounded down so that is evenly divisible.
In situations where a storage subsystem fails, becomes exhausted, or is taken offline for maintenance, the capacity adaptive algorithm described above may easily adapt to the reduction of available subsystems. An automated detection of the loss of a storage subsystem may be used to trigger the invocation of the algorithm to redistribute the load across the remaining available subsystems.
The capacity adaptive algorithm may also be advantageous when content assets, or certain streams of a content asset, are migrated to a Capped Variable Bit Rate (CVBR) stream. For example, when migrated to CVBR, the size of a high bit rate (HBR) stream associated with one content asset may be substantially different than the HBR stream of a different content asset, based upon the complexity of the underlying video content, resulting in varying storage utilization by content asset. By adapting to the current available free capacity over some time period using the capacity adaptive algorithm, the system may adapt to the preceding time period's writing sizes allowing the overall system to achieve equilibrium sooner and remain there for longer periods of time.
The computing device 1400 may include a baseboard, or “motherboard,” which is a printed circuit board to which a multitude of components or devices may be connected by way of a system bus or other electrical communication paths. One or more central processing units (CPUs) 1404 may operate in conjunction with a chipset 1406. The CPU(s) 1404 may be standard programmable processors that perform arithmetic and logical operations necessary for the operation of the computing device 1400.
The CPU(s) 1404 may perform the necessary operations by transitioning from one discrete physical state to the next through the manipulation of switching elements that differentiate between and change these states. Switching elements may generally include electronic circuits that maintain one of two binary states, such as flip-flops, and electronic circuits that provide an output state based on the logical combination of the states of one or more other switching elements, such as logic gates. These basic switching elements may be combined to create more complex logic circuits including registers, adders-subtractors, arithmetic logic units, floating-point units, and the like.
The CPU(s) 1404 may be augmented with or replaced by other processing units, such as GPU(s) 1405. The GPU(s) 1405 may comprise processing units specialized for but not necessarily limited to highly parallel computations, such as graphics and other visualization-related processing.
A chipset 1406 may provide an interface between the CPU(s) 1404 and the remainder of the components and devices on the baseboard. The chipset 1406 may provide an interface to a random access memory (RAM) 1408 used as the main memory in the computing device 1400. The chipset 1406 may further provide an interface to a computer-readable storage medium, such as a read-only memory (ROM) 1420 or non-volatile RAM (NVRAM) (not shown), for storing basic routines that may help to start up the computing device 1400 and to transfer information between the various components and devices. ROM 1420 or NVRAM may also store other software components necessary for the operation of the computing device 1400.
The computing device 1400 may operate in a networked environment using logical connections to remote computing nodes and computer systems through local area network (LAN) 1416. The chipset 1406 may include functionality for providing network connectivity through a network interface controller (NIC) 1422, such as a gigabit Ethernet adapter. A NIC 1422 may be capable of connecting the computing device 1400 to other computing nodes over a network 1416. It should be appreciated that multiple NICs 1422 may be present in the computing device 1400, connecting the computing device to other types of networks and remote computer systems.
The computing device 1400 may be connected to a mass storage device 1428 that provides non-volatile storage for the computer. The mass storage device 1428 may store system programs, application programs, other program modules, and data, which have been described in greater detail herein. The mass storage device 1428 may be connected to the computing device 1400 through a storage controller 1424 connected to the chipset 1406. The mass storage device 1428 may consist of one or more physical storage units. A storage controller 1424 may interface with the physical storage units through a serial attached SCSI (SAS) interface, a serial advanced technology attachment (SATA) interface, a fiber channel (FC) interface, or other type of interface for physically connecting and transferring data between computers and physical storage units.
The computing device 1400 may store data on a mass storage device 828 by transforming the physical state of the physical storage units to reflect the information being stored. The specific transformation of a physical state may depend on various factors and on different implementations of this description. Examples of such factors may include, but are not limited to, the technology used to implement the physical storage units and whether the mass storage device 1428 is characterized as primary or secondary storage and the like.
For example, the computing device 1400 may store information to the mass storage device 1428 by issuing instructions through a storage controller 1424 to alter the magnetic characteristics of a particular location within a magnetic disk drive unit, the reflective or refractive characteristics of a particular location in an optical storage unit, or the electrical characteristics of a particular capacitor, transistor, or other discrete component in a solid-state storage unit. Other transformations of physical media are possible without departing from the scope and spirit of the present description, with the foregoing examples provided only to facilitate this description. The computing device 1400 may further read information from the mass storage device 1428 by detecting the physical states or characteristics of one or more particular locations within the physical storage units.
In addition to the mass storage device 1428 described herein, the computing device 1400 may have access to other computer-readable storage media to store and retrieve information, such as program modules, data structures, or other data. It should be appreciated by those skilled in the art that computer-readable storage media may be any available media that provides for the storage of non-transitory data and that may be accessed by the computing device 1400.
By way of example and not limitation, computer-readable storage media may include volatile and non-volatile, transitory computer-readable storage media and non-transitory computer-readable storage media, and removable and non-removable media implemented in any method or technology. Computer-readable storage media includes, but is not limited to, RAM, ROM, erasable programmable ROM (“EPROM”), electrically erasable programmable ROM (“EEPROM”), flash memory or other solid-state memory technology, compact disc ROM (“CD-ROM”), digital versatile disk (“DVD”), high definition DVD (“HD-DVD”), BLU-RAY, or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage, other magnetic storage devices, or any other medium that may be used to store the desired information in a non-transitory fashion.
A mass storage device, such as the mass storage device 1428 depicted in
The mass storage device 1428 or other computer-readable storage media may also be encoded with computer-executable instructions, which, when loaded into the computing device 1400, transforms the computing device from a general-purpose computing system into a special-purpose computer capable of implementing the methods or apparatus described herein. These computer-executable instructions transform the computing device 1400 by specifying how the CPU(s) 1404 transition between states, as described herein. The computing device 800 may have access to computer-readable storage media storing computer-executable instructions, which, when executed by the computing device 1400, may perform the methods described in relation to
A computing device, such as the computing device 1400 depicted in
As described herein, a computing device may be a physical computing device, such as the computing device 1400 of
It is to be understood that the methods and systems described herein are not limited to specific methods, specific components, or to particular implementations. It is also to be understood that the terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting.
As used in the specification and the appended claims, the singular forms “a,” “an,” and “the” include plural referents unless the context clearly dictates otherwise. Ranges may be expressed herein as from “about” one particular value, and/or to “about” another particular value. When such a range is expressed, another embodiment includes from the one particular value and/or to the other particular value. Similarly, when values are expressed as approximations, by use of the antecedent “about,” it will be understood that the particular value forms another embodiment. It will be further understood that the endpoints of each of the ranges are significant both in relation to the other endpoint, and independently of the other endpoint.
“Optional” or “optionally” means that the subsequently described event or circumstance may or may not occur, and that the description includes instances where said event or circumstance occurs and instances where it does not.
Throughout the description and claims of this specification, the word “comprise” and variations of the word, such as “comprising” and “comprises,” means “including but not limited to,” and is not intended to exclude, for example, other components, integers or steps. “Exemplary” means “an example of” and is not intended to convey an indication of a preferred or ideal embodiment. “Such as” is not used in a restrictive sense, but for explanatory purposes.
Components are described that may be used to perform the described methods and systems. When combinations, subsets, interactions, groups, etc., of these components are described, it is understood that while specific references to each of the various individual and collective combinations and permutations of these may not be explicitly described, each is specifically contemplated and described herein, for all methods and systems. This applies to all aspects of this application including, but not limited to, operations in described methods. Thus, if there are a variety of additional operations that may be performed it is understood that each of these additional operations may be performed with any specific embodiment or combination of embodiments of the described methods.
As will be appreciated by one skilled in the art, the methods and systems may take the form of an entirely hardware embodiment, an entirely software embodiment, or an embodiment combining software and hardware. Furthermore, the methods and systems may take the form of a computer program product on a computer-readable storage medium having computer-readable program instructions (e.g., computer software) embodied in the storage medium. More particularly, the present methods and systems may take the form of web-implemented computer software. Any suitable computer-readable storage medium may be utilized including hard disks, CD-ROMs, optical storage devices, or magnetic storage devices.
Embodiments of the methods and systems are described below with reference to block diagrams and flowchart illustrations of methods, systems, apparatuses and computer program products. It will be understood that each block of the block diagrams and flowchart illustrations, and combinations of blocks in the block diagrams and flowchart illustrations, respectively, may be implemented by computer program instructions. These computer program instructions may be loaded on a general-purpose computer, special-purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions which execute on the computer or other programmable data processing apparatus create a means for implementing the functions specified in the flowchart block or blocks.
These computer program instructions may also be stored in a computer-readable memory that may direct a computer or other programmable data processing apparatus to function in a particular manner, such that the instructions stored in the computer-readable memory produce an article of manufacture including computer-readable instructions for implementing the function specified in the flowchart block or blocks. The computer program instructions may also be loaded onto a computer or other programmable data processing apparatus to cause a series of operational steps to be performed on the computer or other programmable apparatus to produce a computer-implemented process such that the instructions that execute on the computer or other programmable apparatus provide steps for implementing the functions specified in the flowchart block or blocks.
The various features and processes described herein may be used independently of one another, or may be combined in various ways. All possible combinations and sub-combinations are intended to fall within the scope of this disclosure. In addition, certain methods or process blocks may be omitted in some implementations. The methods and processes described herein are also not limited to any particular sequence, and the blocks or states relating thereto may be performed in other sequences that are appropriate. For example, described blocks or states may be performed in an order other than that specifically described, or multiple blocks or states may be combined in a single block or state. The example blocks or states may be performed in serial, in parallel, or in some other manner. Blocks or states may be added to or removed from the described example embodiments. The example systems and components described herein may be configured differently than described. For example, elements may be added to, removed from, or rearranged compared to the described example embodiments.
It will also be appreciated that various items are illustrated as being stored in memory or on storage while being used, and that these items or portions thereof may be transferred between memory and other storage devices for purposes of memory management and data integrity. Alternatively, in other embodiments, some or all of the software modules and/or systems may execute in memory on another device and communicate with the illustrated computing systems via inter-computer communication. Furthermore, in some embodiments, some or all of the systems and/or modules may be implemented or provided in other ways, such as at least partially in firmware and/or hardware, including, but not limited to, one or more application-specific integrated circuits (“ASICs”), standard integrated circuits, controllers (e.g., by executing appropriate instructions, and including microcontrollers and/or embedded controllers), field-programmable gate arrays (“FPGAs”), complex programmable logic devices (“CPLDs”), etc. Some or all of the modules, systems, and data structures may also be stored (e.g., as software instructions or structured data) on a computer-readable medium, such as a hard disk, a memory, a network, or a portable media article to be read by an appropriate device or via an appropriate connection. The systems, modules, and data structures may also be transmitted as generated data signals (e.g., as part of a carrier wave or other analog or digital propagated signal) on a variety of computer-readable transmission media, including wireless-based and wired/cable-based media, and may take a variety of forms (e.g., as part of a single or multiplexed analog signal, or as multiple discrete digital packets or frames). Such computer program products may also take other forms in other embodiments. Accordingly, the present invention may be practiced with other computer system configurations.
While the methods and systems have been described in connection with preferred embodiments and specific examples, it is not intended that the scope be limited to the particular embodiments set forth, as the embodiments herein are intended in all respects to be illustrative rather than restrictive.
Unless otherwise expressly stated, it is in no way intended that any method set forth herein be construed as requiring that its operations be performed in a specific order. Accordingly, where a method claim does not actually recite an order to be followed by its operations or it is not otherwise specifically stated in the claims or descriptions that the operations are to be limited to a specific order, it is no way intended that an order be inferred, in any respect. This holds for any possible non-express basis for interpretation, including: matters of logic with respect to arrangement of steps or operational flow; plain meaning derived from grammatical organization or punctuation; and the number or type of embodiments described in the specification.
It will be apparent to those skilled in the art that various modifications and variations may be made without departing from the scope or spirit of the present disclosure. Other embodiments will be apparent to those skilled in the art from consideration of the specification and practices described herein. It is intended that the specification and example figures be considered as exemplary only, with a true scope and spirit being indicated by the following claims.