Techniques for dynamically adjusting the manner in which I/O requests are transmitted between a computing device and a storage device

Disclosed herein is a technique for managing I/O requests transmitted between a computing device and a storage device. According to some embodiments, the technique can be implemented by the computing device, and include providing at least one I/O request to a submission queue configured to store a plurality of I/O requests. In conjunction with providing the at least one I/O request, the computing device can identify that at least one condition associated with the submission queue—and/or a completion queue—is satisfied, where efficiency gains can be achieved. In turn, the computing device can (1) update an operating mode of the storage device to cause the storage device to cease interrupt issuances to the computing device when I/O requests are completed by the storage device, and (2) update an operating mode of the computing device to cause the computing device to periodically check the completion queue for completed I/O requests.

FIELD

The described embodiments set forth techniques for dynamically adjusting the manner in which input/output (I/O) requests are transmitted between a computing device and a storage device.

BACKGROUND

Generally, a storage device is configured to issue an interrupt to a computing device when the storage device completes the processing of an input/output (I/O) request issued by the computing device. In this regard, the computing device is able to identify when subsequent action should be taken on the completed I/O request. This can include, for example, providing data to a requesting entity when the I/O request is a read command that targets the data on the storage device. Alternatively, this can include indicating, to a requesting entity, that the I/O request was successfully processed when the I/O request is a write command.

The foregoing interrupt-based approach has traditionally provided a reliable infrastructure for managing the flow of information between computing devices and storage devices. For example, when an I/O request involves writing a large amount of data to a storage device, it is more efficient for the computing device to wait to process the I/O request completion until an interrupt is issued by the storage device (upon completion of the I/O request), as opposed to continually inquiring as to whether the storage device has completed the I/O request. However, scenarios exist where the nature of I/O requests being processed cause post-processing latencies that rival or even exceed the latencies associated with processing the I/O requests themselves, thereby degrading the overall performance of interrupt-based approaches.

Accordingly, what is needed is an improved technique that mitigates the above-described deficiencies of interrupt-based approaches.

SUMMARY

The described embodiments relate to techniques for dynamically adjusting the manner in which input/output (I/O) requests are transmitted between a computing device and a storage device. In particular, the techniques enable the computing device and the storage device to transition between (i) a polling-based I/O completion mode, and (ii) an interrupt-based I/O completion mode, based on the nature of the I/O requests that are being processed.

One embodiment sets forth a technique for dynamically adjusting the manner in which I/O requests are transmitted between a computing device and a storage device. According to some embodiments, the method can be implemented by the computing device, and include providing at least one I/O request to a submission queue configured to store a plurality of I/O requests. The method can also include identifying that at least one condition associated with the submission queue and/or a completion queue is satisfied while the plurality of I/O requests are being handled by the storage device, and, in response, activating (or maintaining) a polling-based I/O completion mode. According to some embodiments, the polling-based I/O completion mode can be activated by (1) updating an operating mode of the storage device to cause the storage device to cease interrupt issuances to the computing device when I/O requests are completed by the storage device, and (2) updating an operating mode of the computing device to cause the computing device to periodically check the completion queue for completed I/O requests.

Additionally, the method can further include identifying that the at least one condition is no longer satisfied, and, in response, activating an interrupt-based I/O completion mode. According to some embodiments, the interrupt-based I/O completion mode can be activated by (1) updating the operating mode of the storage device to cause the storage device to issue interrupts to the computing device when I/O requests are completed by the storage device, and (2) updating the operating mode of the computing device to cause the computing device to (i) cease polling for completions and (ii) check the completion queue for completed I/O requests in response to receiving the interrupts from the storage device.

Other embodiments include a non-transitory computer readable storage medium configured to store instructions that, when executed by a processor included in a computing device, cause the computing device to carry out the various steps of any of the foregoing methods. Further embodiments include a computing device that is configured to carry out the various steps of any of the foregoing methods.

DETAILED DESCRIPTION

Representative applications of apparatuses and methods according to the presently described embodiments are provided in this section. These examples are being provided solely to add context and aid in the understanding of the described embodiments. It will thus be apparent to one skilled in the art that the presently described embodiments can be practiced without some or all of these specific details. In other instances, well known process steps have not been described in detail in order to avoid unnecessarily obscuring the presently described embodiments. Other applications are possible, such that the following examples should not be taken as limiting.

The embodiments set forth herein describe techniques for dynamically adjusting the manner in which input/output (I/O) requests are transmitted between a computing device and a storage device. In particular, the techniques enable the computing device and the storage device to transition between (i) a polling-based I/O completion mode and (ii) an interrupt-based I/O completion mode, based on the nature of the I/O requests that are being processed. A more detailed discussion of these techniques is set forth below and described in conjunction withFIGS. 1, 2A-2B, and3A-3B, which illustrate detailed diagrams of systems and methods that can be used to implement these techniques.

FIG. 1illustrates a block diagram100of a computing device102—e.g., a smart phone, a tablet, a laptop, a desktop, a server, speaker, etc.—that can be configured to implement the various techniques described herein. It should be understood that the various hardware components of the computing device102illustrated inFIG. 1are presented at a high level in the interest of simplification, and that an example of a more detailed breakdown is provided below in conjunction withFIG. 4. It should also be understood that the computing device102can include additional entities that enable the implementation of the various techniques described herein without departing from the scope of this disclosure. Is should additionally be understood that the entities described herein can be combined or split into additional entities without departing from the scope of this disclosure. It should further be understood that the various entities described herein can be implemented using software-based or hardware-based approaches (or a combination of software and hardware) without departing from the scope of this disclosure.

As shown inFIG. 1, the computing device102can include a processor104that, in conjunction with a volatile memory106(e.g., a dynamic random-access memory (DRAM)) and a storage device122(e.g., a hard drive, a solid-state drive (SSD), etc.), enables different software entities to execute on the computing device102. For example, the processor104can be configured to load, into the volatile memory106, various components for an operating system (OS)108that are stored in a non-volatile memory130of the storage device122. In turn, the operating system108can enable the computing device102to provide a variety of useful functions, e.g., loading/executing various applications110(e.g., user applications). It is noted that it is not a requirement for the storage device122to be included within the computing device102. On the contrary, the storage device122can be a separate/remote component that is accessed by the computing device102.

As shown inFIG. 1, the operating system108/applications110can issue I/O requests132to the storage device122via a storage device driver112. The I/O requests132can represent, for example, new data writes, existing data overwrites, existing data migrations, and so on. According to some embodiments, the I/O request132can be associated with a collection of properties, for example, an operation directionality (i.e., read or write), a data size, a priority, and so on. It is noted that the foregoing properties are merely exemplary, and that all known properties of I/O requests132can be utilized by the techniques set forth herein without departing from the scope of this disclosure.

According to some embodiments, the priority of an I/O request132can automatically be assigned based on the nature of the application110that issues the I/O request132. For example, I/O requests132issued by a “foreground” application110—e.g., one that provides a graphical user interface (GUI) that is visible to a user—can automatically be assigned a high priority, as such I/O requests132are pertinent to an overall responsiveness of the computing device102that is expected by the user. Examples of foreground applications include utility applications, gaming applications, social media applications, and so on, that are actively being utilized by a user operating the computing device102. In contrast, I/O requests132issued by a “background” application110—e.g., one that is not visible to the user and/or is not being actively engaged by the user—can automatically be assigned a low priority, as such I/O requests132are not pertinent to the overall responsiveness of the computing device102that is expected by the user. Examples of background applications can include those that perform indexing operations in the background, generate previews for documents in the background, back up data to a cloud-based storage system, and so on. It is noted that the techniques set forth herein are not limited to such automatic assignment of priorities, and that each application110can manually assign different priorities to I/O requests132based on the respective urgencies of the I/O requests132. Additionally, it is noted that any number of priorities can be implemented to achieve a desired level of granularity without departing from the scope of this disclosure. For example, different priority tiers (e.g., “tier 0”, “tier 1”, “tier 2”, and “tier 3”) can be assigned, where “tier 0” represents a highest priority level, while “tier 3” represents a lowest priority level.

Referring back now toFIG. 1, according to some embodiments, the storage device driver112can be configured to implement one or more submission queues114configured to store information about I/O requests132that have not been processed by the storage device122and require the attention of the storage device122. It is noted that single queues are being discussed in the interest of simplifying this disclosure, and that any number of queues can be implemented without departing from the scope of this disclosure. According to some embodiments, the storage device driver112can also be configured to implement one or more completion queues116configured to store information about completed I/O requests132that have been processed by the storage device122and require the attention of the storage device driver112. Additionally, the storage device driver112can be configured to implement one or more interrupt engines118that enable the interrupt-based I/O completion mode to operate, the details of which are described below in conjunction withFIGS. 2A and 3B. Additionally, the storage device driver112can be configured to implement one or more polling engines120that enable the polling-based I/O completion mode described herein to be implemented, the details of which are described below in conjunction withFIGS. 2B and 3A.

According to some embodiments, and as shown inFIG. 1, the storage device122can include a storage device controller124that is configured to orchestrate the overall operation of the storage device122. In particular, the storage device controller124can implement submission queue alerts126, which enables the storage device controller124to receive alerts134from the storage device driver112when I/O requests132are added to the submission queue114. In turn, the storage device controller124can obtain the I/O requests132from the submission queue114and process the I/O requests132as I/O operations142. Additionally, the storage device controller124can issue completions136to the completion queue116when the I/O operations142that correspond to the I/O requests132are completed. According to some embodiments, and as described in greater detail herein, an interrupt138can be issued in conjunction with the issuance of each completion136when the interrupt-based I/O completion mode is active. In turn, the interrupt engine118receives the interrupt138and checks the completion queue116for updates. Alternatively, the interrupts138are not issued by the storage device controller124when the polling-based I/O completion mode is active, as the polling engine120is configured to periodically check the completion queue116for updates. In either case, when the updates to the completion queue116are processed by the storage device driver112, the storage device driver112can issue acknowledgements140to completion queue acknowledgements128(managed by the storage device controller124) to indicate that the completion136was acknowledged/processed by the storage device driver112.

Accordingly,FIG. 1provides an overview of the manner in which the computing device102can be configured to implement the techniques described herein, according to some embodiments. An example of a more detailed breakdown of the manner in which the interrupt-based I/O completion mode and polling-based I/O completion mode operate—as well as the conditions that cause either mode to be activated—will now be provided below in conjunction withFIGS. 2A-2B and 3A-3B.

FIGS. 2A-2Billustrate conceptual diagrams of the manner in which information flows between the computing device102and the storage device122when an interrupt-based I/O completion mode or a polling-based I/O completion mode is activated, according to some embodiments. In particular,FIG. 2Aillustrates an example breakdown200of a flow of information when the computing device102is operating in the interrupt-based I/O completion mode, andFIG. 2Billustrates an example breakdown210of a flow of information when the computing device102is operating in the polling-based I/O completion mode.

As shown inFIG. 2A, operating in the interrupt-based I/O completion mode can involve a step201where the storage device driver112receives an I/O request132from an entity executing on the computing device102(e.g., the operating system108/an application110). In turn, a step202involves the storage device driver112transmitting an alert134to the submission queue alerts126managed by the storage device controller124. According to some embodiments, the alert134can include information about the I/O request132/submission queue114so that the storage device controller124is able to identify that the I/O request132requires attention. In response to receiving the alert134, the storage device controller124carries out a step203that involves performing an I/O operation142in accordance with the I/O request132. This can involve, for example, reading data from the non-volatile memory130of the storage device122, writing data into the non-volatile memory130of the storage device122, and so on. When the I/O operation142is completed, the storage device controller124carries out a step204that involves transmitting a completion136to the completion queue116. According to some embodiments, the completion136can include information associated with the I/O request132, I/O operation142, etc., so that the overall progress of the I/O request132within the computing device102can be understood by both the storage device driver112and the storage device controller124.

Additionally, and as shown inFIG. 2A, the storage device controller124can be configured to carry out a step205that involves issuing an interrupt138to the interrupt engine118in conjunction with issuing the completion136at step204. According to some embodiments, the interrupt138indicates to the interrupt engine118that the completion queue116has been updated—by way of the completion136issued at step204—and requires the attention of the interrupt engine118. In turn, the interrupt engine118can carry out a step206that involves issuing a completion136to the entity that issued the I/O request132at step201(e.g., the operating system108/application110). Additionally, the interrupt engine118can carry out a step207that involves issuing an acknowledgement140to the completion queue acknowledgements128managed by the storage device controller124. In this manner, the storage device controller124is able to utilize the completion queue acknowledgements128to identify that the completion of the I/O request132has been recognized by the storage device driver112.

Accordingly,FIG. 2Aillustrates an example breakdown200of a flow of information between the storage device driver112and the storage device controller124when the computing device102is operating in the interrupt-based I/O completion mode. Notably, situations can arise where the required transmission of interrupts138—e.g., step205inFIG. 2A—can establish relative processing latencies that degrade the overall performance of the computing device102. For example, when the I/O request132illustrated inFIG. 2Arepresents a read command directed to a small amount of data, the various subsequent steps that need to be carried out—e.g., steps204-207—establish impactful latencies that, in some cases, can even exceed the latency associated with executing the corresponding I/O operation142itself. Accordingly, the polling-based I/O completion mode illustrated inFIG. 2Bcan help mitigate this issue, which is described below in greater detail in conjunction withFIG. 2B.

As shown inFIG. 2B, the example breakdown210of the polling-based I/O completion mode includes a step211that involves the storage device driver112receiving an I/O request132from an entity executing on the computing device102(e.g., as described above in conjunction with step201ofFIG. 2A). Notably, and in contrast to the interrupt-based I/O completion mode, the storage device driver112can respond to the I/O request132by issuing an activation command to the polling engine120at step212. It is noted that the activation command can cause the polling engine120to activate when the polling engine120is in an inactive state, or cause the polling engine120to remain active when the polling engine120is already in an active state. Other approaches can be used to carry out the intended effect of step212illustrated inFIG. 2Bwithout departing from the scope of this disclosure. For example, the storage device driver112can reference a binary flag that indicates the I/O completion mode that is currently active (i.e., the interrupt-based I/O completion mode or the polling-based I/O completion mode). In this manner, the storage device driver112can forego issuing activation commands each time an I/O request132is received when the polling-based I/O completion mode is currently active, thereby improving overall operating efficiency.

According to some embodiments, and as described herein, the polling engine120can be configured to periodically reference the completion queue116to identify any new entries i.e., completions136—that are added to the completion queue116by the storage device controller124when I/O operations142are successfully processed. In this regard, the storage device controller124may not issue interrupts138, which are relied upon by the interrupt-based I/O completion mode. In this manner, operational efficiency gains can be achieved—especially when the appropriate conditions are met for activating the polling-based I/O completion mode over the interrupt-based I/O completion mode, which are described below in greater detail in conjunction withFIGS. 3A-3B.

As shown inFIG. 2B, a step213involves the storage device driver112transmitting an alert134to the submission queue alerts126managed by the storage device controller124(e.g., as described above in conjunction with step202ofFIG. 2A). In response to receiving the alert134, the storage device controller124carries out a step214that involves performing an I/O operation142in accordance with the I/O request132(e.g., as described above in conjunction with step203ofFIG. 2A). When the I/O operation142is completed, the storage device controller124carries out a step215that involves transmitting a completion136to the completion queue116(e.g., as described above in conjunction with step204ofFIG. 2A). Again, and in contrast to the interrupt-based I/O completion mode, the polling-based I/O completion mode does not involve issuing an interrupt138in conjunction with issuing the completion136. In particular, and as previously described herein, the polling engine120is configured to periodically check the completion queue116for updates, thereby obviating the need for interrupts138to be issued by the storage device controller124.

The polling engine120can identify the completion136issued at step215.FIG. 2B, and, in response, carry out a step216that involves providing the completion136to the entity that issued the I/O request132at step211(e.g., as described above in conjunction with step206ofFIG. 2A). Additionally, the polling engine118can carry out a step217that involves issuing an acknowledgement140to the completion queue acknowledgements128managed by the storage device controller124(e.g., as described above in conjunction with step207ofFIG. 2A).

Accordingly,FIG. 2Billustrates an example breakdown210of a flow of information between the storage device driver112and the storage device controller124when the computing device102is operating in the polling-based I/O completion mode. As previously noted herein, different factors can be taken into consideration when the storage device driver112is attempting to identify whether operating in the interrupt-based I/O completion mode or operating in the polling-based I/O completion mode is more optimal. Accordingly,FIGS. 3A-3Bare provided to illustrate a method300for dynamically transitioning between the interrupt-based I/O completion mode and the polling-based I/O completion mode, according to some embodiments.

As shown inFIG. 3A, the method300begins at step302, where the storage device driver112receives an I/O request132from an entity (e.g., the operating system108, an application110, etc.) executing on the computing device102. According to some embodiments, the I/O request132can include a collection of properties that describe the nature of the I/O request132(as described above in conjunction withFIG. 1). At step304, the storage device driver112provides the I/O request132to a submission queue114managed by the storage device driver112. At step306, the storage device driver112notifies the storage device122—in particular, the storage device controller124of the storage device122—of the I/O request132. According to some embodiments, the storage device driver112can be configured to transmit an alert134to the submission queue alerts126(managed by the storage device controller124) each time an I/O request132is placed into the submission queue114. In this manner, the storage device controller124can be aware of when to take action on new I/O requests132that need to be processed.

At step308, the storage device driver112determines whether at least one condition associated with the polling-based I/O completion mode is satisfied based on (i) outstanding I/O requests132included in the submission queue114, and/or (ii) completions136(that correspond to completed I/O requests132) included in the completion queue116. In particular, step308involves the storage device driver112identifying whether it is appropriate to activate (or maintain) the polling-based I/O completion mode based on the outstanding/completed I/O requests132within the computing device102. As previously described herein, the storage device driver112can take any number of factors into consideration when making this determination. For example, the at least one condition can be satisfied when at least one of the I/O requests132indicates (i) a read operation directionality, (ii) a priority of a highest level, and/or (iii) a data size that satisfies a threshold size. Moreover, the at least one condition can be satisfied when a number of the I/O requests132satisfies a threshold number. Again, it is noted that the above-described factors are exemplary, and that any number of factors can be analyzed and combined when attempting to identify the operating mode that is most efficient for processing the current I/O requests132.

At step310, the storage device driver112determines whether the at least one condition is satisfied. If, at step310, the storage device driver112determines that the at least one condition is satisfied, then the method300proceeds to step312. Otherwise, the method300proceeds to step320ofFIG. 3B, which is described below in greater detail. At step312, the storage device driver112activates (or maintains) the polling-based I/O completion mode by causing the storage device122to cease the issuance of interrupts138when I/O requests132are completed by the storage device122.

According to some embodiments, the storage device driver112can transmit, to the storage device controller124, a command that indicates to the storage device controller124the mode that is currently active—i.e., the polling-based I/O completion mode or the interrupt-based I/O completion mode. For example, when transitioning from the interrupt-based I/O completion mode to the polling-based I/O completion mode, the command can indicate to the storage device controller124that interrupts138should no longer be issued to the storage device driver112each time an I/O request132is completed by the storage device controller124. Conversely, when transitioning from the polling-based I/O completion mode to the interrupt-based I/O completion mode, the command can indicate to the storage device controller124that interrupts138should be issued to the storage device driver112each time an I/O request132is completed by the storage device controller124. According to some embodiments, the command can cause a different value to be assigned to a binary flag that is accessible to the storage device controller124, e.g., where a value of “1” indicates that the interrupt-based I/O completion mode is active, and a value of “0” indicates that the polling-based I/O completion mode is active. It is noted that any known technique can be utilized between the storage device driver112/storage device controller124to effectively maintain and identify the active mode without departing from the scope of this disclosure.

Additionally, it is noted that the storage device driver112/storage device controller124can be configured to perform the foregoing mode transitions in an organized manner to avoid unpredictable behavior from occurring within the computing device102. For example, when transitioning from the interrupt-based I/O completion mode to the polling-based I/O completion mode, the polling engine120can be configured to wait for the interrupt engine118conclude the processing of any outstanding completions136that were inserted into the completion queue116in conjunction with interrupts138. Conversely, when transitioning from the polling-based I/O completion mode to the interrupt-based I/O completion mode, the polling engine120can be configured to conclude the processing of any outstanding completions136that were inserted into the completion queue116independent from any interrupts138(as interrupts138are not issued when operating in the polling-based I/O completion mode). In turn, the polling engine120can issue the above-described command to activate the interrupt-based I/O completion mode, which subsequently causes the storage device controller124to resume issuing interrupts138in conjunction with completions136that are issued as I/O requests132are completed.

Additionally, and as shown inFIG. 3A, activating the polling-based I/O completion mode can also involve causing the computing device102to periodically check the completion queue116for completions136that correspond to the completed I/O requests132. According to some embodiments, this can involve the storage device driver112activating a polling engine120configured to check the completion queue116for the completions136. For example, the polling engine120can be configured to check the completion queue116at timed intervals with the expectation that at least one completion136will imminently be placed into the completion queue116, given that the at least one condition was satisfied and caused the polling-based I/O completion mode to be activated. In this regard, the polling engine120does not rely on the interrupts138being issued by the storage device controller124when I/O requests132are completed (as with the interrupt-based I/O completion mode).

Accordingly, at step314, the storage device driver112—in particular, the polling engine120associated with the storage device driver112—determines whether a completion136that corresponds to the I/O request132received at step302—or other completions136that correspond to I/O requests132received at other times—are present in the completion queue116. If, at step314, the storage device driver112determines that at least one completion136is present in the completion queue116, then the method300proceeds to step316. Otherwise, the method300can repeat at step314, where the polling engine120continues to periodically check the completion queue116for completions136as long as the polling-based I/O completion mode is active.

At step316, the polling engine120removes the one or more completions136from the completion queue116. It is noted that the polling engine120can perform the removal itself, or can report up to and request that the storage device driver112perform the removal. At step318, the polling engine120—or the storage device driver112, as previously described—issues, to the storage device controller124, respective acknowledgements140for the one or more completions136. According to some embodiments, the storage device controller124can place the acknowledgements140into the completion queue acknowledgements128managed by the storage device controller124. In this manner, the storage device controller124can effectively utilize the completion queue acknowledgements128to identify that the I/O requests132are being received and acknowledged by the storage device driver112at a rate that will not result in an overflow.

Accordingly, steps312-318describe the manner in which the storage device driver112and the storage device controller124operate when the polling-based I/O completion mode is active. However, as described herein, an interrupt-based I/O completion mode can instead be activated when the at least one condition at step310is no longer satisfied. This can dynamically occur, for example, when pending I/O requests132that caused the polling-based I/O completion mode to be activated are completed, when new I/O requests132are received and do not meet the requirements of the polling-based I/O completion mode, and so on. At step310, when the at least one condition is not satisfied, the method300proceeds to step320ofFIG. 3B, where the storage device driver112activates the interrupt-based I/O completion mode by (i) causing the storage device controller124to issue interrupts138when I/O requests132are completed by the storage device122. As previously described herein, the storage device controller124can update the binary flag to indicate that an interrupt138should be issued any time an I/O request132is successfully processed.

Additionally, and as shown in step320ofFIG. 3B, activating the interrupt-based I/O completion mode can also involve (ii) causing the storage device driver112to check the completion queue116for completions136in response to receiving the interrupts138from the storage device122. According to some embodiments, the storage device driver112can activate an interrupt engine118that is specifically configured to check the completion queue116for completions136in response to interrupts138that are issued by the storage device controller124. For example, the storage device driver112can receive an interrupt138from the storage device controller124and notify the interrupt engine118of the interrupt138. In turn, the interrupt engine118can check the completion queue116for a completion136that will presumably be present, given that the storage device controller124issued the interrupt138after placing the completion136(associated with the interrupt138) into the completion queue116. In this regard, interrupt engine118relies on the interrupts138being issued by the storage device controller124when I/O requests132are completed, which is distinct from the polling-based I/O completion mode.

At step322, the storage device driver112(or the interrupt engine118) waits for interrupts138to be received from the storage device122. If, at step322, the storage device driver112determines that an interrupt is received from the storage device122, then the method300proceeds back to step316ofFIG. 3A, where steps316and318are carried out as previously described herein. Otherwise, the method300remains at step322, and the storage device driver112(or the interrupt engine118) waits for interrupts138to be received from the storage device122.

FIG. 4illustrates a detailed view of a computing device400that can be used to implement the various components described herein, according to some embodiments. In particular, the detailed view illustrates various components that can be included in the computing device102illustrated inFIG. 1. As shown inFIG. 4, the computing device400can include a processor402that represents a microprocessor or controller for controlling the overall operation of computing device400. The computing device400can also include a user input device408that allows a user of the computing device400to interact with the computing device400. For example, the user input device408can take a variety of forms, such as a button, keypad, dial, touch screen, audio input interface, visual/image capture input interface, input in the form of sensor data, etc. Still further, the computing device400can include a display410(screen display) that can be controlled by the processor402to display information to the user. A data bus416can facilitate data transfer between at least a storage device440, the processor402, and a controller413. The controller413can be used to interface with and control different equipment through and equipment control bus414. The computing device400can also include a network/bus interface411that couples to a data link412. In the case of a wireless connection, the network/bus interface411can include a wireless transceiver.

The computing device400also includes a storage device440, which can comprise a single disk or a plurality of disks (e.g., SSDs), and includes a storage management module that manages one or more partitions within the storage device440. In some embodiments, storage device440can include flash memory, semiconductor (solid state) memory or the like. The computing device400can also include a Random-Access Memory (RAM)420and a Read-Only Memory (ROM)422. The ROM422can store programs, utilities or processes to be executed in a non-volatile manner. The RAM420can provide volatile data storage, and stores instructions related to the operation of the computing device102.

The various aspects, embodiments, implementations or features of the described embodiments can be used separately or in any combination. Various aspects of the described embodiments can be implemented by software, hardware or a combination of hardware and software. The described embodiments can also be embodied as computer readable code on a computer readable medium. The computer readable medium is any data storage device that can store data that can be read by a computer system. Examples of the computer readable medium include read-only memory, random-access memory, CD-ROMs, DVDs, magnetic tape, hard disk drives, solid state drives, and optical data storage devices. The computer readable medium can also be distributed over network-coupled computer systems so that the computer readable code is stored and executed in a distributed fashion.