Patent Description:
<CIT> describes techniques for dynamic load and priority based clock scaling for non-volatile storage devices.

The invention relates to a method and one or more computer storage media as set forth in the claims.

Aspects described herein are directed to methods, systems, and computer storage media, for providing adjustable seek energy settings in storage device systems. In particular, operations described herein support adjusting storage device component seek energy (e.g., speeding up the rate at which a read/write head of HDD operates to locate a track) for executing one or more requests (e.g., an input/output (I/O) request to delete a set of data) based on a particular classification (e.g., a highest priority classification) of the I/O requests.

Conventional methods and existing technologies fall short when providing a solution for prioritizing storage device system requests. For example, executing highly prioritized requests at relatively high speeds or rates relative to executing lower priority requests at lower speeds or rates are not executed in an energy efficient manner. By way of background, some existing storage device technologies execute requests (e.g., I/O requests) in the order they are received. Some technologies may also optimize the scheduling of requests where request data sets that are near each other on disk are batched or processed together. However, the seek energy setting at which components of the disk are operating are typically at a static and continuous level, which causes a large quantity of energy to be consumed and requests are not processed fast enough. Moreover, existing technologies disregard any priority level for the requests for adjusting execution speed of such requests. As such, improvements to the computing operations, functionality, and technological process of adjusting storage device component seek energy settings for executing one or more requests based on a particular classification of the requests can be defined to address the above-described problems and other limitations in existing technologies and systems of request management.

Accordingly, one example aspect of the present disclosure provides improved storage device systems with operations for adjustable seek energy settings. In operation, a request (e.g., an I/O request for a hard disk drive system) is received. A classification (i.e., priority classification) is selected for the request. The classification indicates a priority level for executing the request. The priority level corresponds with an adjustable seek energy setting (i.e., an adjustable operational speed or energy setting for the hard disk drive system). The classification can be indicative of a request category classification (e.g., read, write, and maintenance) that a particular request belongs to and a priority level (e.g., high priority, medium priority, low priority) that the category is associated with. In some instances, the priority level indicates the importance or relevance of the particular requests or category of the requests relative to other requests or categories. In this manner, requests or categories of particular requests can be ranked or prioritized. A storage device system (e.g., an HDD system) can then set or configure an adjustable seek energy setting at which one or more components (e.g., a read/write head) of the storage device system operates to execute the one or more received requests based on the classification.

In addition, the configuring of the adjustable seek energy settings can be further based on other functionality, such as a queue depth of a queue associated with particular storage area (e.g., a volume) where a particular request is executed. The queue depth may be indicative of a particular quantity of requests that are pending within the queue associated. Alternatively or additionally, the adjustable setting of the seek energy setting can be further based on a position that one or more request are located at within a data structure, such as a queue. In some aspects, an application, operating system, and/or storage device system itself may be responsible for carrying out these steps.

In addition, an application and operating system component can process application requests having classifications that indicate priority levels that are associated with adjustable seek energy settings. In this manner, a classification can be transmitted based on a classification indicating a priority level. The transmitting of the classification causes one or more hardware components of a storage device system to operate to execute a request based on the adjustable seek energy setting.

As such, aspects described herein improve the computing operations, functionality, and the technological process by at least configuring an adjustable seek energy setting for one or more storage device components operate such that requests having particular priority levels based on their corresponding classifications are processed accordingly. For example, particular highly prioritized requests are executed faster, and lower prioritized requests are executed slower relative to the highly prioritized requests at the corresponding adjusted seek energy setting. This improves management of power consumption, in that, decreases or increases in power consumption based on storage devices can be configured. Further improvements include: data structures (e.g., a configuration table) designed to store mappings of priority levels with seek energy settings, and an ordered combinations of steps for setting a seek energy setting based on I/O classification between components in a non-generic arrangement.

This summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used in isolation as an aid in determining the scope of the claimed subject matter.

The present disclosure is described in detail below with reference to the attached drawing figures, wherein:.

Users often rely on applications or services to quickly or efficiently perform computing tasks. However, existing technologies do not adequately execute requests (e.g., I/O requests) in an efficient enough manner depending on types of requests or priority levels in various instances. This is partly because existing technologies include storage device systems that perform limited functionality. For example, a hard disk drive storage controller may only receive limited information from an application or operating system, such as only a logical block address (LBA) and timestamp associated with a particular request. Some existing technologies use this limited information to execute requests based on a FIFO (first-in-first-out) queue data structure. In these instances, requests are processed in the order in which they are received. The storage device controller simply identifies the LBA to determine where to execute the request and the timestamp to determine where to place the request in the Queue. This is problematic because a particular important or high priority request may be ordered last in a very large queue, which means that there will be latency (e.g., network latency) or decreased throughput involved with processing the request.

Some existing technologies use optimized queue data structures that batch requests that are near each other on disk. In this way, although particular I/O requests arrive at different time stamps, they may be processed together or consecutively so that hard drive components do not have to excessively move to execute the I/O requests. However, these technologies do not set priorities or classifications for I/O requests. This is problematic because the system may determine that there are various I/O requests in a queue that are near each other on disk and responsively choose to execute those I/O requests first, for example. However, all or a majority of these I/O requests may be low in priority such that executing them at a later time would have been appropriate. This leaves more important I/O request left to be processed at a later time, which leads to the latency and throughput problems described above. Moreover, the seek energy setting at which components of a storage device system is configured to is static and does not dynamically change according any criteria. This consumes an unnecessary amount of resources, such as power. This is particularly the case in distributed computing environments or data centers where even a small amount of energy that is consumed in excess on one disk multiplied by the thousands of disks in use causes a massive amount of energy and power to be consumed. As such, a comprehensive system that addresses the challenges identified above and other challenges is integral to providing improved storage device system management functionality.

Aspects of the present disclosure provide simple and efficient methods and systems for providing adjustable seek energy settings in storage device systems. In particular, operations described herein support configuring adjustable seek energy settings (e.g., speeding up the read/write head of HDD to locate a track) for executing requests based on a particular classification having a priority level (i.e., priority classification) for executing the request. An "I/O" of an I/O request can be any suitable action performed against a storage device, such as a read of data from the storage device, a writing of data to a storage device, database or persistent storage operations (e.g., INSERT, DELETE, CREATE, UPDATE), maintenance operations (e.g., indexing), etc. Some or each of these I/O operations can be executed in response to particular user requests, such as requesting a set of data from a file as described above or requesting to change a set of data. A "classification" is indicative priority level of a request. The priority level corresponds with an adjustable seek energy setting (i.e., an adjustable operational speed or energy setting for the hard disk drive system). A classification may also indicate the priority level of the request based on a type or category (e.g., read/write/maintenance) of the request. In various aspects, classifications having priority levels are assigned to requests based on whether the latency is critical, meaning that executing the request urgently or quickly within a threshold is important or more important than other requests.

"Seek energy setting", as used herein, refers to a speed and/or energy operational level for performing one or more operations in a storage device system. In some aspects, seek energy is an operational setting that indicates to a component (e.g., a read/write head) how fast to go when executing a request with a particular classification. In some aspects, the seek energy setting may be refereed to colloquially as "turbo mode" of a hard drive such that the speed at which the hard drive operates to execute a read or write is increased. Seek energy may additionally or alternatively include configuring the energy level that is consumed by one or storage device components for executing a particular I/O request. For example, the energy setting may be configured to a specific energy quantity per time slice (e.g., Joules per second) that one or more storage device components must consume when executing a particular I/O request.

In some aspects, seek energy settings are "predetermined. " This means that the seek energy setting configuration is determined in advance of an actual storage device component operating at a particular seek energy setting to execute a request. For example, the system may map an incoming request to a classification having a priority level of Y. A data structure (e.g., the configuration table <NUM> of <FIG>) may then be queried to map the priority level Y to seek energy setting T. In response to this mapping or other set of rules to configure seek energy settings (i.e., the predetermined seek energy settings), the one or more storage device components may then physically operate at the speed level T based at least in part on this mapping. This is different than a storage device component that either randomly adjusts the seek energy to execute a request or adjusts speed levels based on other factors, such as speeding up a seek time or seek latency because the read/write head executed a first operation against the storage device, which was already in the same track or sector as a prior second operation.

In operation, one or more requests are received (e.g., over a computer network and from a user computing device). For example, the received one or more request can be a request from a user computing device that requests to read data from a file. In response, the one or more I/O requests are classified (e.g., by an application and/or operating system). The classification can be indicative of a priority level relative to other classifications. The classification may alternatively or additionally is indicative of a category or type of I/O request received.

Various vendors may create different classifications for different requests (e.g., via an API that communicates the classifications to an application and/or operating system). For example, a plurality of classifications may exist, such as "data read", "data write" and "maintenance" (e.g., data scrubbing, indexing, data mirroring, etc.). Each classification can be associated with a priority level (e.g., urgent, moderately urgent, or non-urgent). The priority level is indicative of how fast the I/O request needs to be processed relative to other types of I/O requests. Any suitable classification may exist. Using the illustration above, in response to the request to read data from a file, an application may generate a classification of "data read-priority <NUM>" (e.g., highest priority). The classification may be represented as an ID in a non-payload or packet header information of an I/O request that is received. The classification may then be mapped to a priority level. For example, a request may include a packet header ID of <NUM>, which is a data read. The ID can then be mapped to a priority level (e.g., via a hash table).

The classification can be transmitted to another component (e.g., an operating system component), which causes a storage device system (e.g., a hard disk drive controller) to set or configure a first seek energy setting at which one or more components of the storage device system operates in order to execute the particular I/O request. For example, in response to an application or operating system selecting a classification of an I/O request, the application or operating system may then transmit the classification to hard disk drive system. A storage controller of the hard disk drive system in particular aspects identifies the classification and associates the classification to a seek energy setting. For example, the storage controller may interface with a configuration lookup table that includes a priority classification attribute and a predetermined seek energy setting attribute. The storage controller may then map the received classification ID under the classification attribute to a corresponding seek energy setting attribute ID under the associated attribute (e.g., both IDs are included in the same record). The storage controller may then cause one or more hardware components to operate at the configured seek energy setting.

It is contemplated that if the classification is associated with a highest priority, then the highest seek energy setting is configured without any other consideration. However, if the classification is not associated with a highest priority, then other factors may additionally or alternatively be used to configure the seek energy setting. For example, if a received request is associated with a middle tier priority, it may then be determined what the queue depth is of a queue associated with a storage area (e.g., a volume) where the request will be executed. Moreover if the queue depth is less than a threshold (e.g., <NUM> entries), then a lower seek energy setting is set (e.g., <NUM>) relative to a seek energy setting (e.g., <NUM>) that is set when the queue depth is greater than or equal to the same threshold. Alternatively or additionally, the seek energy settings are set based at least in part on the order of a particular I/O request in a queue data structure. For example, if there are <NUM> pending I/O requests in a queue, the first <NUM> may be executed at a speed level of <NUM>, the next <NUM> I/O requests may be executed at a speed level of <NUM>, and the last <NUM> I/O requests may be executed at a speed level of <NUM>.

Components of a storage device can be configured at a seek energy setting based on priority classifications for requests. Responsively, the components perform at the configured seek energy settings. For example, in response to a storage controller mapping a priority <NUM> (e.g., highest priority) classification to a highest predetermined speed level (e.g., <NUM>), a read/write head component of an HDD system may speed up seek time to the highest predetermined speed level to locate a track associated with a corresponding I/O request address. Alternatively or additionally, a spindle component of an HDD system may change its rotational speed to a faster corresponding level so that a read/write head can more quickly locate, at the particular speed level, a sector where the address is located within the track due to the faster rotational speed of the platter. In another example, in response to a storage controller mapping a priority <NUM> (e.g., lowest priority) classification to a lowest predetermined speed level (e.g., <NUM>), a read/write head component of HDD system may slow down seek time to the lowest seek energy setting to locate a track associated with a corresponding I/O request address. Alternatively or additionally, a spindle of an HDD system may change its rotational speed to a slower corresponding level so that a read/write head more slowly locates a sector where the address is located at due to the lower rotational speed of a platter.

As such, advantageously, aspects described herein improve existing technology by increasing throughput and decreasing network latency. This is the case especially for executing highly prioritized requests. The faster one or more components of a storage device operates, the faster the storage device reads or writes the data to or from the storage device to execute the I/O request. Aspects described herein also improve computing resource consumption, such as reducing energy or power consumption among other things. This is especially the case for lower prioritized requests. The slower a read/write head operates to execute an I/O request, the less kinetic energy it consumes, thereby decreasing the amount of power utilized, since power is defined as an energy unit over a time unit. For example, when a HDD component reduces its speed from a first level to a second level, energy and power consumption are reduced during the time at which the HDD component executes an I/O request at the second level.

Turning now to the Figures, <FIG> is a block diagram of an example system <NUM>, according to some aspects. <FIG> shows a high level architecture of a system <NUM> that has an output of components of a storage device operating at a configured adjustable seek energy setting. The "components" (e.g., engines, modules, and managers) described in <FIG> can be any suitable tangible or logical component that is responsible for carrying out particular action. In some aspects, all of the components within the system <NUM> are located on a same host computing device. In alternative aspects, some or each of the components are only communicatively coupled such that some or each of the components are located on different host computing devices and communicate over a wired or wireless computer network (e.g., a WAN). For example, some or each of the components may be spread across a cloud computing network. In some aspects, some or each of these components are managed by different layers. For example, in some aspects, the I/O classification component <NUM> is managed by an application and/or operating system layer whereas the seek energy setting component <NUM>, the seek energy adjustment component <NUM>, queue depth determining component <NUM>, and/or the queue ordering component <NUM> is managed by firmware or a storage controller associated with a storage device.

The I/O classification component <NUM> receives one or more requests (e.g., I/O requests) and selects one or more classifications for the one or more received requests. For example, the classification component <NUM> may receive a request and identify in a received packet header that the request has an ID of <NUM>. A data structure may be generated, such as a hash table or lookup table. This data structure may include a classification ID attribute and a priority level attribute. Accordingly, the I/O classification component <NUM> in various aspects associates the ID received from the I/O request to a priority level. For example, the I/O classification component <NUM> may map the received ID to a classification ID and to an associated priority. The mapping operation may occur via a lookup function to identify what priority value is included in the same record as the received classification ID.

In various aspects, there may be any suitable type and quantity of classifications and priorities available depending on application needs. Each priority classification may be configured differently for each entity or vendor (e.g., MICROSOFT Inc. of Redmond Washington, or Alphabet Inc. , of Mountain View California). In an example illustration of the types of classifications or priority levels that may exist, there may be a plurality of classifications as follows: "read," "maintenance," and "write" with corresponding priority levels of <NUM>, <NUM>, <NUM>, meaning that read I/Os are ranked higher or take a higher priority than maintenance I/Os and maintenance I/Os are ranked higher or take on a higher priority than write I/Os. These priorities may also be associated with the seek energy setting at which one or more components will operate to execute the respective I/O request, as described in more detail below.

The seek energy setting component <NUM> associates a classification selected by the I/O classification component <NUM> with a seek energy setting is configured. The seek energy setting component <NUM> may also determine whether additional processing needs to occur based on the classification. For example, in response to determining that an incoming request is not a highest ranked or prioritized type of I/O, instead of immediately setting or configuring the seek energy setting, this component may contact the queue depth determining component <NUM>. This component determines a depth of a queue associated with a storage area where the I/O request will be executed. For example, the queue depth determining component <NUM> may identify that there are over <NUM> pending requests that are waiting to perform work on the same volume as the request. The quantity of pending requests may be relayed or communicated back to the seek energy setting component <NUM>. The seek energy setting mapping component <NUM> may then identify a set of rules associated with the queue depth that govern seek energy setting configuration. The seek energy setting component <NUM> may operate to compare the quantity of requests that are pending to one or more thresholds defined by the rules and responsively configures the seek energy setting. For example, a rule may indicate that a number of pending requests below a first threshold is set to a speed of X. A second rule may indicate a number of pending I/O request above the threshold is set to a speed of Y. A third rule may indicate a number of pending I/O request above a second threshold (e.g., higher than the other threshold) is set to a speed of Z.

Alternatively or additionally, the seek energy setting component <NUM> and/or the queue depth determining component <NUM> communicates with the queue ordering component <NUM> to determine what level to set the seek energy setting. The queue ordering component <NUM> identifies what position in a queue the received request is at in the queue where the request will be executed (and/or all other I/O requests pending in the queue). A queue organizes or schedules requests in a particular order to be executed in the particular order. For example, the queue may be a traditional FIFO data structure where requests are executed in the order they are received. Alternatively or additionally, the queue may be optimized such that requests are ordered according whether they are within a threshold distance from each other on a storage device, such as within the same or nearby sectors. For example, if a queue contains <NUM> pending requests that are within a threshold distance of each other, they may be batched together in the optimized queue to be processed together or sequentially notwithstanding they were not received together.

It is contemplated that the position that the I/O request (received by the I/O classification component <NUM>) is in, within the queue, or the positions of some or each I/O request in the queue, are communicated back to the seek energy setting component <NUM>. The seek energy setting component <NUM> may then query a set of rules used to set or configure the seek energy setting based at least in part on the order of the request(s) in the queue. For example, the rules may indicate that when a queue us at a depth of X (e.g., as determined by the queue depth determining component <NUM>), particular I/O request at particular order thresholds are configured to particular seek energy settings. The rules may alternatively or additionally indicate that a first quantity or percentage of I/O requests next to be processed in the queue are configured to be set at a first seek energy setting, a second quantity or percentage of requests in the middle (and/or bottom) portion of the queue are configured to be set a second seek energy setting, etc. There may be any suitable quantity of pending requests that are set to any suitable seek energy setting. For example, each pending request may have its own seek energy setting.

The seek energy setting component <NUM> operates to configure the seek energy setting based on the queue depth determining component <NUM> functions, the queue ordering component <NUM> functions, and/or the specific classification. For example, for a particular request classified by the classification component <NUM>, the seek energy setting component <NUM> may configure a first seek energy setting in response to receiving the queue depth from the queue depth component <NUM> and based on a first set of rules. However, the configured first seek energy setting can be modified in response to receiving information from the queue ordering component <NUM> and based on a second set of rules. For example, it may be determined that a queue depth is greater than a threshold, which may warrant a first seek energy setting. Additionally, the particular incoming request may be a highest priority that is at the first position in a queue to be processed before most other pending requests. Accordingly, due to the fact that the request is at the first position of a queue (and not in the last position) and is highest in priority, the configured seek energy setting can be increased even higher than the first seek energy setting.

The queue depth determining component <NUM> and the queue ordering component <NUM> are not contacted at all by the seek energy setting component <NUM>. Rather, the seek energy setting component <NUM> may simply map a classification and priority level straight to a seek energy setting such that the seek energy adjustment component <NUM> directly causes one or more storage device components to perform at the set seek energy setting. For example, in response to the seek energy setting component <NUM> determining that the I/O classification ID is mapped to a highest speed level because it is in a highest priority class, the seek energy mapping component <NUM> may directly interface with the seek energy adjustment component <NUM> without communicating with the other components <NUM> and <NUM>.

The seek energy adjustment component <NUM> (e.g., within a storage controller) directly causes one or more components of a storage device system to operate at a seek energy setting that matches the configuration set by the seek energy setting component <NUM>. For example, in response to receiving a particular highest priority level <NUM> read request and receiving instruction from the seek energy setting component <NUM> that the seek energy level is the highest, the seek energy component <NUM> may cause a read/write head to shift to a highest available speed for seek time in order to locate a track where the level <NUM> read request data is located at on disk. In some aspects, this causes a change in seek energy relative to a time prior to the seek energy adjustment component <NUM> executing the request at the particular seek energy setting. For example, at a first time a low priority request may be received, and the seek energy component <NUM> may responsively cause one or more storage device components to operate at a first level. At a second subsequent time, a high priority request may be received and the seek energy component <NUM> may responsively cause the one or more storage device components to operate at a second level, which rate is faster than the first level based on the particular I/O classification and priority of the request received at the second time.

With reference to <FIG> is a block diagram of a system <NUM>, according to aspects. The system <NUM> includes one or more hosts <NUM> (e.g., a server computing device), an application component <NUM> (e.g., an application), an operating system component <NUM> (e.g., MICROSOFT WINDOWS and LINUX) and a hard drive system component <NUM> (e.g., a storage controller). One or more of the components in the system <NUM> of <FIG> may be included within one or more of the components of the system <NUM> of <FIG>. For example, the I/O classification component <NUM> may be implemented within the application component <NUM> and/or the operating system component <NUM>. In another example, the hard drive system component <NUM> includes the seek energy component <NUM>, the queue depth determining component <NUM>, the queue ordering component <NUM> and/or the seek energy adjustment component <NUM>.

The application component <NUM> operates to receive requests. In response to the application component <NUM> selecting a classification for a corresponding request, the application component <NUM> transmits or communicates the I/O request classification ID to the operating system component <NUM>. The application component <NUM> may alternatively bypass the operating system component <NUM> such that the I/O classification ID is transmitted directly to the hard drive system component <NUM> and not to the operating system component <NUM>.

The operating system component <NUM> operates to select its own set of priority classifications in addition or in the alternative to the application component <NUM> priority classifications. For example, because an operating system in various instances manages a file system (and an application does not), the operating system component <NUM> can make other classifications, such as whether the request is for file system metadata or file system payload data. The operating system component <NUM> may prioritize file system metadata ahead of file system payload data. It is contemplated that when the operating system component <NUM> selects its own set of classifications and/or priority levels, the operating system component <NUM> can modify the classification or priority received from the application component <NUM> to a second classification or priority. Alternatively, the operating system component <NUM> does not modify the classification or priority received from the application component <NUM> but additionally selects its own set of classifications to transmit (along with the classifications received at the application component(s) <NUM>) to the hard drive system component <NUM>. As such, the operating system component <NUM> may use one or both sets of classifications to configure a seek energy setting at which one or more storage device components operate at to execute a request.

In an example illustration of how the operating system component <NUM> can modify the classification of requests received from the application component <NUM>, the operating system component <NUM> may receive a first write I/O request and a classification ID of <NUM>, which is indicative of a middle tier priority level. However, the operating system component <NUM> may associate the classification ID of <NUM> to a metadata read, which is higher in priority than a payload data read. Accordingly, the operating system component <NUM> may responsively change the ID and/or priority level to a <NUM>, indicating that the priority is the highest or higher priority.

In some instances, the operating system component <NUM> provides the application component <NUM> with different abstractions or modifies application functionality (e.g., seek energy setting values). For example, vendor A may offer energy settings <NUM>-<NUM> but vendor B may offer settings <NUM>-<NUM>. The operating system component <NUM> may accordingly provide the application component <NUM> with more settings (e.g., <NUM>-<NUM>) or less settings (e.g., high, med, low) and then translate those based on the HDD capabilities.

The hard drive system component <NUM> operates to receive the I/O classification IDs from the operating system component <NUM> and/or the application component <NUM> and set a seek energy setting at which one or more components of a storage device <NUM> will operate based on the priority classification of the received requests. The hard drive system component(s) <NUM> may communicate with the operating system component <NUM> and the application component <NUM> via any suitable protocol or standard. These protocols or standards provide rules or procedures for formatting and processing requests associated with classification. For example, this communication may be made via Serial Advanced Technology Attachment (SATA) or Serial Attached SCSI (SAS) standard protocols. In an example illustration of this specific communication, the hard drive system component <NUM> may receive a first classification ID from the operating system component <NUM> indicating that a read at a highest priority level was received. Additionally or alternatively, the hard drive system component <NUM> may receive a second classification ID from the operating system component <NUM> indicating that the same read request was payload data (as identified by an operating system) and thus the priority is not a highest priority.

The hard drive system component <NUM> may also operate to settle on a final request priority classification notwithstanding that two or more classification IDs have been received for a single request. Settling may occur because the application component <NUM>, the operating system component <NUM>, or the hard drive system component <NUM> may select different priority levels for the same I/O requests. For example, using the illustration above, the hard drive system component <NUM> may combine the classification or seek energy settings (e.g., take the average of the speed values) to arrive at a final classification or seek energy setting. For example, if one received classification ID from the application component <NUM> was <NUM> and another classification ID from the operating system component <NUM> was <NUM> and there were corresponding matching speed levels, the average, <NUM>, may be used to configure the speed instead of <NUM> or <NUM>. In this manner, the combined value causes a seek energy setting of one or more storage device components to operate at a level higher than <NUM> but lower than <NUM>.

The hard drive system component <NUM> can include its own set of classification criteria alternative or additional to the set of criteria defined by the application component <NUM> and/or the operating system component <NUM>. For example, there may be temperature sensor located at one or more storage device system components (e.g., a read/write head) that measures a temperature of the one or more components. The hard drive system component <NUM> may identify a lookup table or other data structure, which indicates what seek energy setting to select based on the temperature readings. For example, when one or more components are power throttled or are over a temperature threshold, it may be desirable to configure seek energy settings low such that there is not as much energy expended, thereby reducing the temperature of components.

The hard drive system component <NUM> may also combine priority classifications received from the application component <NUM>, operating system component <NUM>, and/or from its own classification criteria. For example, the application component <NUM> may transmit a classification ID to the operating system component <NUM> indicating a priority <NUM> (highest priority) for a particular read I/O request. This priority may also be transmitted from the operating system component <NUM> to the hard drive system component <NUM> (or another modified classification ID may be transmitted to the hard drive component <NUM>). The hard drive system component <NUM> may then map the priority <NUM> to a highest level of seek energy at which storage device components may be configured to operate, such as a level <NUM> speed. The hard drive system component <NUM> may then identify a temperature that one or more hardware components are operating at. The hard drive system component <NUM> may then query a data structure that maps the specific temperature to an associated seek energy setting, such as <NUM>, which may be indicative of a relatively low seek energy. The temperature may be over a threshold, such that the components are fairly hot. The hard drive system component <NUM> may then linearly combine the energy levels <NUM> and <NUM>, such as adding or subtracting them together, multiplying, or averaging them together to arrive at a final classification and/or priority level.

The hard drive system component <NUM> may further strictly modify or change an I/O classification ID (and/or seek energy setting) received from the operating system component <NUM> or the application component <NUM>. Instead of combining a seek energy setting based on different classification IDs received, the hard drive system component <NUM> may rather change the classification IDs and/or the mapped seek energy settings. For example, using the illustration above, instead of linearly combining the energy levels of <NUM> and <NUM>, the hard drive system component <NUM> may select one or the other.

The hard drive system component <NUM> operates to transmit a seek energy setting signal to the one or more hardware storage device components of the hardware storage device <NUM> based on the seek energy configuration setting made. This causes the one or more hardware storage device components (e.g., a read/write head) to operate at a seek energy setting that the hard drive system component <NUM> configured the setting to be at to execute the I/O request(s) received by the application component <NUM>.

<FIG> is a schematic diagram of an example configuration table <NUM>, where the configuration table <NUM> may be a lookup table or hash table that represents where seek energy settings are configured based on the priority level value. It is understood that although the table <NUM> is a specific data structure includes specific attributes and values, they are representative only. Accordingly, additional or different data structures (e.g., an ordered list) attributes or values may exist. In some aspects, the table <NUM> or similar table is the data structure(s) queried by the hard drive system component(s) <NUM> of <FIG> or the seek energy setting component <NUM> to map priority levels to seek energy settings.

The configuration table <NUM> incudes a priority level attribute and a seek energy setting attribute. As indicated under the priority level attribute of the configuration table <NUM>, there are a plurality of priority level classifications-<NUM>, <NUM>, <NUM>L, <NUM>H, and <NUM>. As indicated under the seek energy setting attribute, there are a plurality of adjustable seek energy settings-<NUM>, <NUM>, <NUM>, <NUM>, and <NUM>. Each classification of the plurality of classifications are mapped to a respective seek energy setting of the plurality of seek energy settings. For example, within the record <NUM>-<NUM>, the priority level <NUM> is mapped to the seek energy setting <NUM> by nature of these two values being within the same entry or record. In this manner, any priority level classification can be assigned to a particular I/O request and mapped to a seek energy setting. For example, an application component may receive a first I/O request, and select priority level "<NUM>" as the classification for the first I/O request. The application may transmit the priority level <NUM> value to a storage controller. The storage controller may then identify the matching value of <NUM> in the configuration table <NUM>. Because the record <NUM>-<NUM> where the matching value is located indicates that the seek energy setting is <NUM>, the system (e.g., the seek energy adjustment component <NUM>) may then cause one or more storage device hardware components (e.g., a read/write head) to operate at the level <NUM> value.

The configuration table <NUM> indicates that for various priority level classifications identified, there are differing seek energy settings that are configured. The configuration table <NUM> also indicates that the higher the priority level a particular I/O request is, the higher the seek energy setting configuration will be set to. For example, a first I/O request may be identified as priority <NUM>. The system may consequently cause one or more storage device hardware components to operate at a seek energy level of <NUM>. Likewise, a second I/O request may be identified as a priority level <NUM>. The system may consequently cause one or more storage device hardware components to change its rate to operate a lower seek energy of <NUM> instead of the <NUM>. In like manner, a third I/O request may be identified as priority level <NUM>. The system may consequently cause one or more storage device components to set the seek energy setting to <NUM>, which is in between the <NUM> and <NUM> value. Accordingly, the table <NUM> illustrates a continuous priority and seek energy setting spectrum where each priority level and I/O request is categorized at and there is a corresponding seek energy setting.

The configuration table <NUM> also indicates similar priority level classifications of <NUM>L and <NUM>H that operate at different seek energy settings. In some aspects, as indicated in this instance, some priority level classifications have sub-priorities to identify a corresponding seek energy setting. For example the "L" next to the <NUM> indicates that the queue depth is low or less than a threshold count (e.g., as determined by the queue depth determining component <NUM>). Conversely, the "H" next to the other <NUM> indicates that the queue depth is high or greater than the threshold count. In these aspects, when a queue depth associated with a particular I/O request is low, the seek energy setting configuration is lower relative to when a queue depth is high.

In an example illustration, the determination of "low" or "high" queue depth may be determined based on whether a count is less than or equal to a threshold count, such as <NUM> pending I/O requests. Continuing with this example, in response to receiving a first I/O request, with a priority level classification of <NUM>, the system may then determine that the queue depth is <NUM> (less than the threshold <NUM>). Accordingly, the system may responsively set the priority level to <NUM>L. The configuration table <NUM> can then be accessed to map <NUM>L to <NUM> execute the first I/O request. In another example, in response to receiving a second I/O request, with a similar priority level classification of <NUM>, the system may then determine that the queue depth is <NUM> (greater than the threshold <NUM>). Accordingly, the system may set the priority level classification to <NUM>H. A mapping may then be done to indicate that one or more components of the storage device should operate at a speed of <NUM> (instead of <NUM>) to execute the second I/O request. The seek energy setting may be higher when a queue depth is high because this indicates that the system is getting backed up and one way to relieve the queue is to start executing I/O requests faster when the queue level is above a threshold.

<FIG> is a schematic diagram of a configuration table <NUM>, according to some aspects. In various aspects, the configuration table <NUM> is the data structure used by seek energy component <NUM> and/or the hard drive system component(s) <NUM> to map classifications to seek energy settings. In some aspects, the configuration table <NUM> is used alternatively or in conjunction with the configuration table <NUM> of <FIG>. In some aspects, only portions of the configuration table <NUM> are utilized for different components described herein. For example, in particular aspects, the I/O classification attribute and the priority level attribute (and not the seek energy setting attribute) together represent a data structure used by the application component <NUM> or the operating system component <NUM>. Likewise, these two attributes may represent a data structure used by the I/O classification component <NUM> of <FIG>. Accordingly, a two-attribute data structure indicates that an incoming I/O request can be classified and then mapped to a particular priority level based on the classification of the I/O request. Although the configuration table <NUM> indicates a specific data structure, specific attributes and values, it is understood that this is representative only and that various data structures, values and attributes can be present.

The configuration table <NUM> represents that a particular I/O request can be mapped to a particular I/O category classification, a corresponding priority level, and a corresponding seek energy setting. Moreover, it is understood that any I/O category classification can alternatively or additionally be used according to vendor needs. For example, instead of the "block read" and "file and object" read being two different category classifications, in some aspects, these represent a single I/O category classification, such as "data read".

As indicated in the configuration table <NUM>, a "block read" is the highest priority I/O classification. A block read is a read from block or structured data (e.g., within a database). A "file and object read" is a data read operation of non-block data, data from multiple dimensions, or non-structured data (e.g., data not within a database), such as data reads from blogs, social media, etc. This data tends to be larger or more dimensional than block data and latency tends to be less crucial compared to block reads. A "maintenance task" may be any I/O, such as a read or write, but which is for the purpose of maintaining the proper functioning of data. Examples include, backing up data, rebuilding, mirroring, and/or any other administrative tasks. These tasks tend to be performed by administrative users, as opposed to end users that use applications associated with products or services, for example. A "data write" can include request to write, change, or append data to a storage device. For example, a data write may include a request that a customer makes to change his or her biographical information, such as change and address.

In an example illustration of how the configuration table <NUM> may be accessed, a user may select a button on a user interface, which requests a file from a database. The request may then be transmitted from the user computing device, over a computer network, to another computing device. This computing device may extract a classification ID from packet header information indicative of a block read. A component (e.g., the I/O classification component <NUM>) may then assign or map the classification ID to a priority level value or ID within the configuration table <NUM>, which is <NUM> or the highest priority level. Responsively, the priority level is then mapped to a corresponding seek energy setting, which is <NUM> meters per second. In some aspects, this is indicative of the speed at which a read/write head is configured to operate at in order to locate a track for executing the corresponding block read I/O request. Continuing with the example above, responsively, a component (e.g., the seek energy adjustment component <NUM>) causes a storage device system to operate at specific seek energy setting speed of <NUM> meters per second, which was set for executing the block read I/O request. The process may end by sending the file to the user computing device that requested it. This same process is repeated for other I/O requests received that fall under any of the other classifications. Accordingly, the configuration table <NUM> indicates that the speed of one or more storage device components can be constantly adjusting to execute I/O requests based at least in part on their classification. As described above, this both saves energy in the aggregate while at the same time speeds up execution for important I/O requests.

<FIG> is a schematic diagram of multiple queues, the entries of which are mapped to a corresponding seek energy setting, according to aspects. In some aspects, <FIG> represents functionality performed by the queue ordering component <NUM> and/or the queue depth determining component <NUM> of <FIG>.

The queue <NUM> is a FIFO data structure with multiple entries (e.g., <NUM>-<NUM>), each of which represent an I/O request that is pending in the order received. For example, entry <NUM>-<NUM> may be associated with an I/O request that was received first and is therefore scheduled to be processed first. However, the queue <NUM> illustrates an optimized queue data structure where the entries located in the first queue <NUM> have been shuffled according to any suitable criteria. For example, the queue <NUM> can be ordered based on a classification of the corresponding I/O request. In an illustrative example, the first two entries <NUM>-<NUM> and <NUM>-<NUM> can be associated with a first priority level, which is also associated with a highest seek energy setting <NUM>. Likewise, the second two entries <NUM>-<NUM> and <NUM>-<NUM> are associated with a second priority level, lower in priority or not as important as the first priority level. And the last two entries-<NUM>-<NUM> and <NUM>-<NUM>-are associated with a third priority level, or lowest priority or importance. There are corresponding seek energy settings. Additionally or alternatively, the queue <NUM> is ordered based on other criteria in some aspects, such as I/O request data that is near each other on a storage device. For example, entries <NUM>-<NUM> and <NUM>-<NUM> may be near each other and are thus executed together at the same speed level.

The seek energy setting table <NUM> illustrates differing levels that one or more components of a storage device system is configured to operate at to execute a corresponding I/O request based at least in part on the position each entry is at in the queue <NUM> (or alternatively in the queue <NUM>). A plurality of I/O requests are processed based on a respective classification of a respective I/O request and a subset of I/O requests that are grouped together in the queue are set to be processed at a corresponding seek energy setting at which one or more components of a storage device system operates to execute the subsequent group of I/O requests. For example, the entries <NUM>-<NUM> and <NUM>-<NUM> are a group configured to be executed at the lowest seek energy setting available (i.e., <NUM>). Whereas the entries <NUM>-<NUM> and <NUM>-<NUM> are configured to be executed at the highest seek energy setting available (i.e., <NUM>). The other entries are also configured to be executed at middle-tier seek energy settings.

It is understood that although the table <NUM> represents that pending I/O request or entries can be processed at differing seek energy settings, in some aspects, each entry of each queue associated with different storage areas can be processed at the same seek energy setting. For example, the queue <NUM> may represent a queue that is over a threshold depth or count of <NUM> entries (e.g., as determined by the queue depth determining component <NUM>). Accordingly, each entry can be processed at a seek energy setting of <NUM>. Continuing with this example, another queue (not shown) may be less than or equal to the same threshold depth or count of <NUM> entries. Accordingly, each entry can be processed at a seek energy setting at some level under <NUM>. This is indicative that the entire queue of entries do not need to be processed as fast or expend as much energy as the queue <NUM> because the other queue is not as backed up compared to the queue <NUM>.

<FIG> is a flow diagram of an example process <NUM> for selecting and transmitting a classification, which causes a storage device system to set an adjustable seek energy setting, according to aspects. The process <NUM> (and/or any of the functionality described herein (e.g., process <NUM>, <NUM>, etc.) may be performed by processing logic that comprises hardware (e.g., circuitry, dedicated logic, programmable logic, microcode, etc.), software (e.g., instructions run on a processor to perform hardware simulation), firmware, or a combination thereof. Although particular blocks described in this disclosure are referenced in a particular order at a particular quantity, it is understood that any block may occur substantially parallel with or before or after any other block. Further, more (or fewer) blocks may exist than illustrated. Such added blocks may include blocks that embody any functionality described herein. The computer-implemented method, the system (that includes at least one computing device having at least one processor and at least one computer readable storage medium), and/or the computer program product as described herein may perform or be caused to perform the processes <NUM>, <NUM>, <NUM> and/or any other functionality described herein. In some aspects, some or each of the blocks of process <NUM> is performed by an application component and/or an operating system component of a system (e.g., the application component <NUM> of <FIG> and/or the operating system component <NUM> of <FIG>).

Per block <NUM> first I/O requests are received (e.g., by the I/O classification component <NUM>) for a storage device system (e.g., a hard disk drive system). For example, a user may issue a request from a user interface of a client device in order to update information to a database. The request may be transmitted, over a computer network, in one or more packets to one or more other computing devices. The one or more packets may include the type of I/O request. One or more classifications for the one or more I/O requests may then be selected (e.g., by the I/O classification component <NUM>) via block <NUM>.

The first request can be an application request for a read operation, a write operation, or a maintenance operation. As such, the application request is associated with an application running on an operating system such that the application, the operating system, and the storage device system are configured to process application requests having classifications that indicate the priority levels that correspond to adjustable seek energy settings. For example, <FIG> describes I/O application requests that are processed by the application component <NUM>, the operating system component <NUM>, and the hard drive system component <NUM>. In an example illustration, an administrator may issue a command to rebuild one or more indexes. The command may be communicated and the system may associate a "maintenance" I/O classification to the request.

The first classification(s) may be one of a plurality of classifications. Each classification of the plurality of classifications indicates a priority level for executing the first request. The first priority level is associated with a first adjustable seek energy setting of a plurality of adjustable seek energy settings for executing requests on the storage device system, wherein a seek energy setting includes an adjustable operational setting for the storage device system. For example, referring back to <FIG> or <FIG>, there are a plurality of classifications (e.g., "block read" "data scrubbing", and "priority level <NUM>") included in the respective configuration tables, each of which are associated with a priority level at which any I/O request belonging to the classification should be processed relative to any other request. For example, with respect to <FIG>, "block reads" should be processed before or more urgently than "file and object reads. " Similarly "file and object reads" should be processed before or more urgently than "maintenance tasks. " In some aspects, the first classification(s) are indicative of at least an I/O request category classification that the first I/O request(s) belongs to. For example, referring back to <FIG>, the category may be any of the classifications, such as "block read" and/or any of the priority levels, such as <NUM>.

Selecting the first classification at block <NUM> is based on accessing a configuration table that includes a plurality of classifications having priority levels and the plurality of adjustable seek energy settings. Each of the plurality of classifications is mapped to a corresponding adjustable seek energy setting. For example, this is described with respect to the configuration table <NUM> in <FIG>. The first classification may be further based on assigning the first classification to the first request based on the first classification being mapped to the first adjustable seek energy setting within the configuration table (e.g., as described in <FIG>).

Selecting of the first classification for the first I/O request at block <NUM> can alternatively or additionally be based on a category classification of the request. The category classifications may correspond to predefined classifications for priority levels. For example, the category classification in some aspects correspond to the I/O classifications described in the configuration table <NUM> of <FIG>. For example, a classification category can be a "block read". The category classification in various aspects is selected from one of the following: a read operation, a write operation, or a maintenance operation (e.g., as described in <FIG>). In some aspects, the priority levels are selected from one of the following: a high priority, a medium priority, and a low priority. For example, referring back to <FIG>, the block read is a "high priority", the file and object read, maintenance tasks, and data scrubbing can all be labeled a "medium priority" and a data write can be considered a "low priority.

It is contemplated that the high priority is indicative of the first I/O request(s) needing to be urgently executed before any other I/O request of other types or within different classifications. The low priority level is indicative of the first I/O request(s) requiring a least amount of urgency for being executed relative to any other I/O request of other types or classifications. The medium priority is indicative of the first I/O request(s) needing to be executed not as urgently as the high priority; but more urgently than the low priority. In these aspects, priorities are set with respect to how fast each classification of I/O requests needs to be processed relative to other classifications of I/O requests. Alternatively or additionally, in some aspects, priorities are set with respect to the order in which I/O requests should be processed. For example, referring back to <FIG>, the queue <NUM> may be ordered such that certain entries are processed before others depending on the classification and/or priority level.

Per block <NUM> the first classification associated with the first I/O request is transmitted (e.g., by the application component(s) <NUM> and/or the operating system component(s) <NUM>) to cause the storage device system to set the first adjustable seek energy setting based on the first classification indicating the first priority level associated with the first adjustable seek energy setting. One or more hardware components of the storage device system operates to execute the first request based on the first adjustable seek energy setting.

The adjustable operational setting for the storage device system is a setting that causes a read/write head of the storage device system to change a rate for locating tracks corresponding to request. For example, referring back to <FIG>, a first I/O request may be a block read, which is set to a priority level <NUM> and a <NUM> meters per second rate. A second I/O request may be a file and object read, which is set to a priority level <NUM> and a <NUM> meters per second rate. Accordingly, a read/write head rate can change from the <NUM>/s to <NUM>/s.

Transmitting the first classification can include an application communicating the first classification to an operating system. The operating system may then modify the first classification for the first request to a second classification. The operating system may communicate the first request having the second classification. Examples of the modifications are described with respect to <FIG>.

The setting of the first adjustable seek energy setting can further be based on a que depth of a queue associated with a first storage area where the first request is executed (e.g., as described with respect to the queue depth determining component <NUM>). The queue depth is a first quantity of requests that are pending within the queue.

It is contemplated that the process <NUM> is repeated for various I/O requests. For example, the process <NUM> may occur for a first I/O request. At a second time, a second I/O request is received. Then a second classification is generated for the second I/O request. The second classification can be the same or different than the first classification associated with the first I/O request. The second classification can also be associated with a higher (or lower or the same) priority compared to the first classification. Based at least in part on the second classification of the second I/O request, a second request is transmitted to the storage device system that is configured to case the storage device system to set a second seek energy setting at which one or more components of the storage device system operates to execute the second I/O request. In various aspects, the second seek energy setting is higher (or lower or the same) than the first seek energy setting based at least in part on the second classification being associated with a higher (or lower or the same) priority than the first classification. For example, referring back to <FIG>, five I/O request may be received that are prioritized at each of the levels <NUM>, <NUM>, <NUM>L, <NUM>H, and <NUM>. Accordingly, the one or more components of the storage device may operate at each of the corresponding seek energy settings to execute the respective I/O request based at least in part on the priority level.

<FIG> is a flow diagram of a process <NUM> for configuration of a particular adjustable seek energy setting for one or more components of a storage device system, according to some aspects. In some aspects, some or each blocks of the process <NUM> is performed by a storage device component (e.g., the hard drive system component <NUM> of <FIG>) of a system.

Per block <NUM> a first request is received, which is an I/O request received at a storage device system. The first request can be an application request or operating system request. The application request is associated with an application and the operating system request is associated with an operating system. An application, the operating system, and the storage device system are configured to process requests having classifications that indicate the priority levels that correspond to adjustable seek energy settings, as indicated in <FIG> for example.

Per block <NUM>, it is determined that a first I/O request is associated with a first classification. In some aspects, the determination that the first request is associated with a first classification is based on a storage device system protocol associated with the storage device system. The storage device system protocol provides the rules or procedures for formatting and processing requests associated with the classifications. For example, Native Command Queueing (NCQ), an extension of serial ATA protocol allows hard disk drives to internally optimize the order in which receive and write requests are executed. NCQ allows the hard disk drive itself to determine the optimal order in which to retrieve pending requests. This may allow the drive to fulfill all requests in fewer rotations and thus less time. This same or similar type of communication to a hard drive that allows it to provide an optimal order of request may also be used to communicate an I/O request or classification to a hard drive to configure seek energy settings based on the received classifications.

The storage device system protocol is associated with a configuration table that includes a plurality of classifications having priority levels and the plurality of adjustable seek energy settings. Each of the plurality of classifications is mapped to a corresponding adjustable seek energy setting. The configuring of the first adjustable seek energy setting for the one or more components of the storage device system is based on the first classification being mapped to the first adjustable seek energy setting within the configuration table. For example, tables identical or similar to the configuration tables <NUM> or <NUM> may be used by these protocols.

Per block <NUM>, based on the first classification, a first adjustable seek energy setting is configured for one or more components of the storage device system. The one or more components execute the first request based on the first adjustable seek energy setting. For example, referring back to <FIG>, if the priority classification is <NUM>, this classification is mapped to its adjustable seek energy setting, via the configuration table <NUM>, which is <NUM>. Accordingly, one or more hardware components can execute the first request at the first adjustable seek energy setting.

A second request or set of request can be received at which new classifications are selected, which cause a change in the seek energy settings. For example, a second I/O request is received. It is determined that the second request is associated with a second classification that indicates a second priority level for executing the second request. A queue depth can then be accessed of a queue associated with a storage area where the second request is to be executed at. Based on the queue depth of the queue, a new classification for the second request is selected. The new classification includes the new priority level for executing the second request. The new priority level may be a higher priority level or a lower priority level. The new priority level may correspond to a new adjustable seek energy setting of the plurality of adjustable seek energy settings for executing requests on the storage device system. In some aspects, based on the second classification indicating the priority level corresponding to the second adjustable seek energy setting, the second adjustable seek energy setting is configured for the one or more components of the storage device system.

<FIG> is a flow diagram of an example process <NUM> for configuring seek energy settings based on various criteria, according to aspects. Per block <NUM> one or more classifications of one or more I/O requests are identified or selected (e.g., block <NUM> of <FIG>). Per block <NUM>, it is determined (e.g., by the I/O classification component <NUM>) whether the one or more I/O requests are associated with a highest (e.g., most important) priority level. In some aspects, determining whether an I/O request is associated with a highest priority level includes accessing a data structure and mapping the classification to a priority level. For example, referring back to <FIG> and <FIG>, the highest priority levels are <NUM> for both configuration tables. Accordingly, any incoming classification can be mapped to a priority level in the respective data structure to determine if the value is less than or equal to <NUM>, for example.

Per block <NUM>, if the I/O request(s) is associated with a highest priority level the seek energy setting is configured to be at its highest. For example, referring back to <FIG>, in response to an I/O request being prioritized the highest at level <NUM>, the configuration of the seek energy setting is <NUM>, which is higher than any of the other values-<NUM> and <NUM> within the configuration table <NUM>. Accordingly, one or more storage device system components may operate to execute the corresponding I/O request at the configured level (e.g., a read/write head operates <NUM>/s to locate a track).

Per block <NUM>, the queue depth of a queue associated with a storage area is determined (e.g., by the queue depth determining component <NUM>). In these aspects, the setting or configuring of a seek energy setting can be further based on queue depth. The queue depth is indicative of a particular quantity of I/O request that are pending (e.g., have not been executed) within a queue associated with a storage area (e.g., a volume). In an example illustration, referring back to <FIG>, the system may determine that there are <NUM> pending requests within the queue <NUM> corresponding to the <NUM> entries.

Per block <NUM>, it is determined (e.g., by the seek energy setting component <NUM>) whether the queue depth and/or the priority level is greater (and/or equal) to one or more thresholds. In various aspects, both the queue depth and priority levels are weighted or linearly combined to arrive at final seek energy setting configurations. In these examples, the higher a priority is, the higher the weight value assigned. The lower the priority the lower weight value that is assigned. Likewise, the higher the queue depth, the higher weight value assigned. The lower the queue depth, the lower weight value assigned.

For example, a first received I/O request may be associated with a second-to-highest priority level (<NUM>) (weight = <NUM>) but at a queue depth that is fairly shallow, such as <NUM> entries (e.g., weight = -<NUM>). Although the mapped priority level (e.g., within a data structure similar to <NUM>) indicates that the seek energy setting is <NUM> (which is also its weight), this integer is reduced to <NUM> (<NUM> + -<NUM>) since the queue depth is shallow below a threshold. In another example, a second received I/O request may be associated to a third-to-highest priority level (<NUM>) (weight = <NUM>) but the queue depth may be extremely deep well over a threshold (e.g., contains <NUM> entries) (weight = <NUM>). Although the mapped priority level indicates that the seek energy setting configuration is <NUM>, this integer is summed to <NUM> (<NUM>+<NUM>) since the que depth is extremely deep. In this manner, various I/O request can be executed at various speeds and/or energy levels directly proportionate to the specific I/O priority level and/or the specific queue depth. In various aspects, additional or alternative determinations can be made at block <NUM>, such as proximity I/O requests are to each other in a storage area and/or the exact queue position, as described with respect to the queue ordering component <NUM>.

Per block <NUM>, if the queue depth or the priority level is greater than one or more thresholds, the seek energy setting is configured to be set at one or more mid-range levels, which is below the highest level as indicated in block <NUM>. A "mid-range level" may be any value that is not the highest seek energy setting or the lowest seek energy setting, but is in between these values. For example, referring back to <FIG>, a first I/O request may be associated with a priority level classification of three, but which has a high queue depth (<NUM>H). The seek energy setting may be responsively set to <NUM>. Likewise, the priority level classification of <NUM> is mapped to the seek energy setting of <NUM>. Per block <NUM>, if the que depth and/or the priority level is not greater than one or more thresholds, one or more seek energy settings are configured at a level lower than the mid-range, such as the lowest level available. For example, referring back to <FIG>, a first I/O request may be associated with a priority level of three, but which has a low queue depth (<NUM>L). The seek energy setting may be responsively set to <NUM>. Likewise, the priority level <NUM> is mapped to the seek energy setting of <NUM>.

<FIG> is a schematic diagram of example hardware components of a hard disk drive storage device system <NUM>, according to aspects. The storage device system <NUM> includes a storage device controller <NUM> that controls functionality of the components-an actuator <NUM>, an actuator axis <NUM>, an actuator arm <NUM>, a read/write head <NUM> that reads data from or writes data to a magnetic disk called a platter <NUM>, a driving motor called the spindle <NUM>, and a hard drive case <NUM>. The actuator <NUM> controls the position of the actuator arm <NUM> and the read/write head <NUM> to a correct track (e.g., track <NUM>) within the platter <NUM>. The axis <NUM> allows movement of the actuator arm <NUM> and read/write head <NUM> from the center of the platter <NUM> to the outer edge of the platter <NUM>. The platter <NUM> rotates to a correct sector (e.g., sector <NUM>) via the spindle <NUM>. The platter <NUM> includes various tracks <NUM>, <NUM>, and <NUM> and various sectors (e.g., <NUM>). A track is a concentric ring where data is stored. Each track is divided into sections called sectors (e.g., sector <NUM>), which is the smallest physical storage unit or area on the platter <NUM>. Each track has the same quantity of sectors. Each track shares common sectors. For example, there are three tracks <NUM>, <NUM>, and <NUM> within the sector <NUM>. When data is written to or from the platter <NUM>, the read/write head <NUM> moves to the appropriate track where the data is located and the spindle <NUM> causes the platter <NUM> to spin to the appropriate sector where the data is located. As described above, these mechanical processes to read or write can be expensive, particularly in terms of latency and energy.

As described herein, in various aspects one or more components of a storage device system can operate or move at configured seek energy settings based at least in part on a classification of a request (e.g., via the seek energy component <NUM>, via block <NUM> of <FIG>, the components <NUM> of <FIG>). This improves the energy and latency issues described above. One or more components within <FIG> can operate or move at the configured seek energy settings described above. For example, a user may issue an request to open a file. The request may be classified as a "data read" and prioritized at a level <NUM> or highest priority. The priority <NUM> level may then be mapped to a highest seek energy setting (e.g., via the configuration table <NUM> of <FIG>). The storage device controller <NUM> of the storage device system <NUM> may responsively cause the actuator <NUM> to move the read/write head <NUM> at the specified highest seek energy setting in order to locate the track <NUM>. In various instances, this causes seek time to be reduced. Seek time is the time it takes to move from one track to another. This causes the read/write head <NUM> to operate at a faster rate than it did prior to the configuring of the particular seek energy setting for certain classifications. Alternatively or additionally, the storage device controller <NUM> responsively causes the spindle <NUM> to rotate at the configured seek energy setting, which causes the platter <NUM> to also rotate at or substantially at the configured seek energy setting. In some instances, this causes the seek latency to be reduced. Seek latency is the time it takes for the platter <NUM> to spin or rotate to a correct sector. Accordingly, the spindle <NUM> can rotate at a faster rate than it did prior to the configuring of the particular seek energy setting.

In another example, a user may issue a request to change data within a file. The request may be classified as a "data write" and prioritized at a level <NUM> or the lowest priority. The priority <NUM> may then be mapped to a lowest seek energy setting (e.g., as indicated in <FIG>). The storage device controller <NUM> may then responsively cause the actuator <NUM> to move the read/write head <NUM> at the specified lowest seek energy setting to locate a track. In this way seek time can become longer or the rate at which the read/write head <NUM> operates can change to a slower rate in various instances. This causes the read/write head to operate slower than it did prior to the configuring of the particular seek energy setting to save energy. Alternatively or additionally, the storage device controller <NUM> responsively causes the spindle <NUM> to rotate at the configured seek energy setting, which causes the platter <NUM> to also rotate at or substantially at the configured seek energy setting. Seek latency can be strategically increased in some instances. Accordingly, the spindle <NUM> can rotate slower or at a slower rate than it did prior to the configuring of the particular seek energy setting.

It is contemplated that other timing characteristics are improved alternative or additional to seek time or seek latency. For example, in some aspects, access time is improved. Access time is the time when a command was issued (e.g., use issues a query), up through seek time and seek latency to the time data is transferred back to the user.

Although the storage device system <NUM> in <FIG> and other components described herein describe a hard disk drive storage system, it is understood that any suitable storage device system associated with any suitable storage device may exist. For example, the components in which the seek energy setting is configured to operate may be any suitable components of any non-volatile storage device (e.g., solid state drives, floppy disks, magnetic tape, flash memory, read-only memory, etc.) and/or volatile storage device (e.g., RAM).

<FIG> is a block diagram of an example computing environment <NUM> in which various aspects of the present disclosure are implemented within, according to aspects. Although the computing environment <NUM> includes particular components at a specific quantity, it is understood that any suitable components or quantity may exist. For example, in some aspects, there is only one client device <NUM> instead of multiple client devices. The computing environment <NUM> includes the client device <NUM>, the client device <NUM>, the client device N, the one or more networks <NUM>, the one or more computing devices <NUM>, and the one or more storage devices <NUM>.

The client devices <NUM>, <NUM>, and N each issue one or more I/O requests, over the computer network(s) <NUM>. The components within the environment <NUM> communicate with each other over one or more computer networks <NUM> (e.g., public network or virtual private network "VPN"), which may include one or more wired and/or wireless connection protocols (e.g., IEEE <NUM>). The network(s) <NUM> may include, without limitation, one or more local area networks (LANs) and/or wide area networks (WANs). The client devices and/or the computing device(s) <NUM> may include any type of computing device, such as the computing device <NUM> described with reference to <FIG>, for example.

The one or more computing devices <NUM> receive the I/O requests from the client devices and execute or complete the requests. In some aspects, the one or more computing devices <NUM> includes some or each of the components or performs some or each of the functionality as described with respect to <FIG>. For example, referring back to <FIG>, in response to receiving the I/O requests from the client devices <NUM>, <NUM>, and client device N, the computing device(s) <NUM> stores the I/O requests as entries within the queue <NUM> and/or <NUM>. Moreover, the one or more computing devices <NUM> selects and maps one or more I/O classifications to priority levels (e.g., as indicated in <FIG> and/or <FIG>). The one or more computing devices <NUM> includes the seek energy adjustment component(s) <NUM>. In some aspects, this includes the seek energy adjustment component <NUM> of <FIG> and/or the hard drive system component(s) <NUM> of <FIG>. The seek energy adjustment component(s) <NUM> adjust, configure, and/or cause one or more components of the storage device(s) <NUM> to operate at a specified seek energy setting based at least in part on the particular classification and/or priority level of a particular I/O request (e.g., the I/O request from the client device <NUM>).

With reference to <FIG>, computing device <NUM> includes bus <NUM> that directly or indirectly couples the following devices: memory <NUM>, one or more processors <NUM>, one or more presentation components <NUM>, input/output ports <NUM>, input/output components <NUM>, and illustrative power supply <NUM>. Bus <NUM> represents what may be one or more buses (such as an address bus, data bus, or combination thereof). The various blocks of <FIG> are shown with lines for the sake of conceptual clarity, and other arrangements of the described components and/or component functionality are also contemplated. For example, one may consider a presentation component such as a display device to be an I/O component. Also, processors have memory. We recognize that such is the nature of the art, and reiterate that the diagram of <FIG> is merely illustrative of an exemplary computing device that can be used in connection with one or more aspects of the present disclosure. Distinction is not made between such categories as "workstation," "server," "laptop," "hand-held device," etc., as all are contemplated within the scope of <FIG> and reference to "computing device.

Computing device <NUM> typically includes a variety of computer-readable media. Computer-readable media can be any available media that can be accessed by computing device <NUM> and includes both volatile and nonvolatile media, removable and non-removable media. By way of example, and not limitation, computer-readable media may comprise computer storage media and communication media.

Computer storage media include volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by computing device <NUM>. Computer storage media excludes signals per se.

Communication media typically embodies computer-readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of any of the above should also be included within the scope of computer-readable media.

Memory <NUM> includes computer storage media in the form of volatile and/or nonvolatile memory. The memory may be removable, non-removable, or a combination thereof. Exemplary hardware devices include solid-state memory, hard drives, optical-disc drives, etc. Computing device <NUM> includes one or more processors that read data from various entities such as memory <NUM> or I/O components <NUM>. Presentation component(s) <NUM> present data indications to a user or other device. Exemplary presentation components include a display device, speaker, printing component, vibrating component, etc..

I/O ports <NUM> allow computing device <NUM> to be logically coupled to other devices including I/O components <NUM>, some of which may be built in. Illustrative components include a microphone, joystick, game pad, satellite dish, scanner, printer, wireless device, etc..

With reference to the classification based-adjustable seek energy setting system (e.g., as indicated in <FIG>), components refer to integrated components for configuring seek energy based at least in part on the classification. The integrated components refer to the hardware architecture and software framework that support functionality within the system. The hardware architecture refers to physical components and interrelationships thereof and the software framework refers to software providing functionality that can be implemented with hardware embodied on a device.

The end-to-end software-based system can operate within the system components to operate computer hardware to provide system functionality. At a low level, hardware processors execute instructions selected from a machine language (also referred to as machine code or native) instruction set for a given processor. The processor recognizes the native instructions and performs corresponding low level functions relating, for example, to logic, control and memory operations. Low level software written in machine code can provide more complex functionality to higher levels of software. As used herein, computer-executable instructions includes any software, including low level software written in machine code, higher level software such as application software and any combination thereof. In this regard, the system components can manage resources and provide services for system functionality. Any other variations and combinations thereof are contemplated with aspects of the present disclosure.

Having identified various components utilized herein, it should be understood that any number of components and arrangements may be employed to achieve the desired functionality within the scope of the present disclosure. For example, the components in the aspects depicted in the figures are shown with lines for the sake of conceptual clarity. Other arrangements of these and other components may also be implemented. For example, although some components are depicted as single components, many of the elements described herein may be implemented as discrete or distributed components or in conjunction with other components, and in any suitable combination and location. Some elements may be omitted altogether. Moreover, various functions described herein as being performed by one or more entities may be carried out by hardware, firmware, and/or software, as described below. For instance, various functions may be carried out by a processor executing instructions stored in memory. As such, other arrangements and elements (e.g., machines, interfaces, functions, orders, and groupings of functions, etc.) can be used in addition to or instead of those shown.

Aspects described in the paragraphs above may be combined with one or more of the specifically described alternatives. In particular, an aspect that is claimed may contain a reference, in the alternative, to more than one other aspect. The aspect that is claimed may specify a further limitation of the subject matter claimed.

The subject matter of aspects of the disclosure is described with specificity herein to meet statutory requirements. However, the description itself is not intended to limit the scope of this patent. Rather, the inventors have contemplated that the claimed subject matter might also be embodied in other ways, to include different steps or combinations of steps similar to the ones described in this document, in conjunction with other present or future technologies. Moreover, although the terms "step" and/or "block" may be used herein to connote different elements of methods employed, the terms should not be interpreted as implying any particular order among or between various steps herein disclosed unless and except when the order of individual steps is explicitly described.

For purposes of this disclosure, the word "including" has the same broad meaning as the word "comprising," and the word "accessing" comprises "receiving," "referencing," or "retrieving. " Further the word "communicating" has the same broad meaning as the word "receiving," or "transmitting" facilitated by software or hardware-based buses, receivers, or transmitters using communication media described herein. In addition, words such as "a" and "an," unless otherwise indicated to the contrary, include the plural as well as the singular. Thus, for example, the constraint of "a feature" is satisfied where one or more features are present. Also, the term "or" includes the conjunctive, the disjunctive, and both (a or b thus includes either a or b, as well as a and b).

For purposes of a detailed discussion above, aspects of the present disclosure are described with reference to an adjustable seek energy environment. Components can be configured for performing novel aspects of aspects, where the term "configured for" can refer to "programmed to" perform particular tasks or implement particular abstract data types using code. Further, while aspects of the present disclosure may generally refer to the on-demand secret distribution system and the schematics described herein, it is understood that the techniques described may be extended to other implementation contexts.

Aspects of the present disclosure have been described in relation to particular aspects which are intended in all respects to be illustrative rather than restrictive. Alternative aspects will become apparent to those of ordinary skill in the art to which the present disclosure pertains without departing from the scope of the appended claims.

From the foregoing, it will be seen that this disclosure is one well adapted to attain all the ends and objects hereinabove set forth together with other advantages which are obvious and which are inherent to the structure.

Claim 1:
A computer-implemented method for implementing classification-based adjustable seek energy settings in storage device systems, the method comprising:
receiving (<NUM>) a first request, wherein the first request is an input/output request for a hard disk drive system;
selecting (<NUM>) a first classification for the first request, wherein the first classification is selected from a plurality of classifications, wherein the first classification indicates a first priority level for executing the first request, the first priority level is associated with a first adjustable seek energy setting of a plurality adjustable seek energy settings for executing requests on the hard disk drive system, wherein a seek energy setting is an adjustable operational speed or energy setting for the hard disk drive system; and
based on the first classification indicating the first priority level associated with the first adjustable seek energy setting, transmitting (<NUM>) the first classification to cause the hard disk drive system to set the first adjustable seek energy setting,
identifying a position of the first request in a queue, the queue being a queue for organizing requests in a particular order to be executed in that particular order;
modifying the first seek energy setting based on the identified position,
wherein one or more hardware components of the hard disk drive system operates to execute the first request based on the first adjustable seek energy setting.