Apparatus and methods for autonomous gear scaling within die architectures
The AGS mechanism addresses suboptimal gear scaling in memory devices by adjusting gear levels based on overall application demands, improving throughput and power efficiency in die architectures.
Patent Information
- Application Number
- PCT/CN2024/100598
- Authority / Receiving Office
- WO · WO
- Patent Type
- Applications
- Current Assignee / Owner
- Filing Date
- 2024-06-21
- Publication Date
- 2025-12-26
AI Technical Summary
Conventional memory devices in die architectures often operate at suboptimal gear scale levels due to configuration based on individual host OS needs, leading to inefficient data throughput and power consumption, especially in multi-OS virtualization environments.
An autonomous gear scaling (AGS) mechanism that adjusts memory device gear scale levels based on the overall processing needs of all executing applications by computing busy times for memory access requests and using threshold values to determine gear scale adjustments.
Optimizes data throughput and power consumption by dynamically configuring memory devices to match the combined demands of all OSs, enhancing system performance and efficiency.
Smart Images

Figure CN2024100598_26122025_PF_FP_ABST
Abstract
Description
APPARATUS AND METHODS FOR AUTONOMOUS GEAR SCALING WITHIN DIE ARCHITECTURESBACKGROUND
[0001] FIELD OF THE DISCLOSURE
[0002] This disclosure relates generally to die architectures and, more particularly, to gear scaling mechanisms within die architectures.
[0003] DESCRIPTION OF RELATED ART
[0004] Dies, such as chiplets and system-on-chips (SoCs) , are used across a multitude of applications, such as telecommunication, automotive, cloud-based, gaming, enterprise, and networking applications, among various other applications. Typically, die architectures include memory devices for data storage. For instance, die architectures may include flash storage devices that store data required for various operations. Often times, these memory devices include a gear scaling capability whereby the memory device can be configured at various data transmission speeds. For instance, a memory device may support various gears where higher gears allow for higher data throughput compared to lower gears which allow for comparatively lower data throughput. Typically, the memory devices use less power when operating at a lower gear compared to a higher gear.
[0005] Often times, however, the memory devices may be configured to operate at a lower gear even though a higher gear may be more advantageous, such as during periods of higher memory device access demands. Similarly, the memory devices may be configured to operate at a higher gear when a lower gear may be more advantageous, such as during periods of lower or even no memory device access demands. As such, there are opportunities to address deficiencies associated with configuring memory device transmission speeds within die architectures.SUMMARY
[0006] According to one aspect, an apparatus includes a non-transitory, machine-readable storage medium storing instructions, and at least one processor coupled to the non-transitory, machine-readable storage medium. The at least one processor is configured to detect one or more memory device access requests for the memory device during a load monitor window. The at least one processor is also configured to determine a busy time value based on a duration of each of one or more data transfers associated with the one or more memory device access requests. Further, the at least one processor is configured to detect an end of the load monitor window. In response to the detection of the end of the load monitor window, the at least one processor is configured to adjust a gear scale level of the memory device based on the busy time value and at least one threshold value.
[0007] According to another aspect, a method by at least one processor includes detecting one or more memory device access requests for the memory device during a load monitor window. The method also includes determining a busy time value based on a duration of each of one or more data transfers associated with the one or more memory device access requests. Further, the method includes detecting an end of the load monitor window. In response to the detection of the end of the load monitor window, the method includes adjusting a gear scale level of the memory device based on the busy time value and at least one threshold value.
[0008] According to yet another aspect, a non-transitory, machine-readable storage medium stores instructions that, when executed by at least one processor, causes the at least one processor to perform operations. The operations include detecting one or more memory device access requests for the memory device during a load monitor window. The operations also include determining a busy time value based on a duration of each of one or more data transfers associated with the one or more memory device access requests. Further, the operations include detecting an end of the load monitor window. In response to the detection of the end of the load monitor window, the operations includes adjusting a gear scale level of the memory device based on the busy time value and at least one threshold value.
[0009] According to even another aspect, a die comprises a mass storage device, at least one register, and a processor communicatively coupled to the mass storage device and the at least one register. The processor is configured to read a value from the at least one register. The processor is also configured to detect, during a load monitor window, one or more memory device access requests for the mass storage device based on the value. Further, the processor is configured to determine a busy time value based on a duration of each of one or more data transfers associated with the one or more memory device access requests. The processor is also configured to detect an end of the load monitor window. In response to the detection of the end of the load monitor window, the processor is configured to adjust a gear scale level of the mass storage device based on the busy time value and at least one threshold value.BRIEF DESCRIPTION OF DRAWINGS
[0010] FIG. 1 is a block diagram of a die package, according to some implementations;
[0011] FIG. 2 is a block diagram of a die package, according to some implementations;
[0012] FIG. 3 illustrates a state machine, according to some implementations;
[0013] FIG. 4 illustrates a busy time computation, according to some implementations;
[0014] FIG. 5 illustrates a state machine, according to some implementations;
[0015] FIG. 6 illustrates a state machine, according to some implementations;
[0016] FIGS. 7A, 7B, and 7C illustrate various registers, according to some implementations; and
[0017] FIG. 8 is a flowchart of an exemplary process for configuring data transmission speeds of a memory device, according to some implementations.DETAILED DESCRIPTION
[0018] While the features, methods, devices, and systems described herein may be embodied in various forms, some exemplary and non-limiting embodiments are shown in the drawings, and are described below. Some of the components described in this disclosure are optional, and some implementations may include additional, different, or fewer components from those expressly described in this disclosure.
[0019] The embodiments described herein are directed to configuring transmission speeds to memory devices. For example, Universal Flash Storage (UFS) devices support gear scaling where a gear mode can be switched between various gear scale levels. At a higher gear scale level (e.g., gear five) , the UFS memory device provides higher data throughput rates (e.g., memory reads, memory writes) than at a lower gear scale level (e.g., gear one) . The memory device tends to use greater power consumption when operating at a higher gear scale level than when operating at a lower gear scale level. Thus, in some examples, during higher memory device access demand time intervals, the memory device may be configured to operate at a higher gear scale level than during comparatively lower memory device access demand time intervals.
[0020] For example, in some applications, a processing device, such as a central processing unit (CPU) die or graphical processing unit (GPU) die, may execute one or more applications. These applications may each require access of a memory device. For example, the processing device may simultaneously host multiple clients, such as operating systems (OSs) , using virtualization environments, where each of the clients require access to the memory device. Conventionally, a host OS may configure the memory environment based on its own tasks without regard for the processing needs of the other OSs (e.g., guest OSs) . For instance, although one or more guest OSs may have higher throughput needs with regards to the memory device, the host OS may configure the memory device to a lowest gear based on the host OS’s own processing requirements. As such, the overall data throughput of a system (e.g., the SoC) may suffer.
[0021] To address various deficiencies with conventional processing methods, such as those discussed herein, the embodiments may employ an automatic gear scaling (AGS) mechanism that configures a memory device to a gear scale level based on overall processing needs (e.g., processing needs of any executing applications that require access to the memory device, such as the processing needs of the host OS as well as any guest OSs) . For example, a host controller (e.g., a UFS host controller) with AGS capability (i.e., the “AGS host controller” ) may receive requests to access the memory device via one or more doorbell registers. For instance, one or more executing applications (e.g., via a device) may write to a doorbell register to indicate a request to access the memory device. The host controller with AGS capability may periodically poll each doorbell register to determine if a request has been received, or may receive an interrupt when a doorbell register has been updated. The host controller with AGS capability may compute, for a temporal interval (e.g., a timing window) , a “busy time” for each of the one or more doorbell registers. The busy time may characterize a time during which data was being transferred to and / or from the memory device during the temporal interval. For instance, the AGS host controller may compute a busy time for a doorbell register, where the busy time characterizes an amount of time that begins when a corresponding memory device data access request is received, and completes when the corresponding memory device data transfer is complete and no other memory device data access requests are pending within the doorbell register. In some instances, the amount of time may end when the temporal interval ends, such as when the temporal interval ends before a memory device data access request completes.
[0022] Further, the AGS host controller may compute a corresponding busy time for each of the one or more doorbell registers during the temporal interval. Based on the computed busy time, the AGS host controller may configure the memory device to a particular gear scale level. For example, the AGS host controller may configure the memory device to a higher gear scale level (e.g., the highest gear scale level) when the busy time is above a corresponding threshold. In contrast, the AGS host controller may configure the memory device to a lower gear scale level (e.g., the lowest gear scale level) when the busy time is below a corresponding threshold. In some examples, the AGS host controller may leave the memory device configured at the current gear scale level when the busy time is within a range of thresholds (e.g., between a lower an upper threshold) .
[0023] In some instances, multiple doorbell registers are supported. In these examples, the AGS host controller may compute a busy time for each of the plurality of doorbell registers, and may determine an overall busy time based on computed busy times. The AGS host controller may, for example, add the busy time computed for each doorbell register to determine the overall busy time. Further, the AGS host controller may configure the memory device to a higher gear scale level (e.g., the highest gear scale level) when the overall busy time is above a corresponding threshold. In contrast, the AGS host controller may configure the memory device to a lower gear scale level (e.g., the lowest gear scale level) when the overall busy time is below a corresponding threshold. In some examples, the AGS host controller may leave the memory device configured at the current gear scale level when the overall busy time is within a range of thresholds (e.g., between a lower an upper threshold) .
[0024] Referring now to the drawings, FIG. 1 is a block diagram of an integrated circuit package 100 (e.g., die package) that includes various dies (e.g., chiplets) , such as non-volatile mass storage device 102, AGS host controller 104, central processing unit (CPU) die 106, graphical processing unit (GPU) die 108, input / output (I / O) die 110, and shared memory device 112. Non-volatile mass storage device 102 may be any suitable memory device that supports gear scaling (e.g., the ability to adjust its data throughput rate) . For instance, in some examples, non-volatile mass storage device 102 may be a UFS mass storage device. Shared memory device 112 may be a random access memory (RAM) die, a read-only memory (ROM) die, a non-volatile memory device, or any other suitable memory device.
[0025] Each of the various dies may be coupled to one or more other dies via interconnects. For example, AGS host controller 104 can be coupled to non-volatile mass storage device 102 over interconnect 103A. In some examples, interconnect 103A includes signals in accordance with the host interface layer of the UFS specification (e.g., UFS 2.0, UFS 2.1, UFS 3.0, UFS 3.1, UFS 4.0, etc. ) . For instance, interconnect 103A can include transmit signals, receive signals, a reset signal, and a reference clock signal. In some instances, AGS host controller 104 encrypts data for write operations to the non-volatile mass storage device 102, and decrypts data for read operations from the non-volatile mass storage device 102.
[0026] AGS host controller 104 can also be coupled to CPU die 106 via interconnect 103B. Interconnect 103B may, for example, provide signals in accordance with the UFS Host Controller Interface (UFSHCI) Specification by Additionally, CPU die 106 can be coupled to GPU die 108 via interconnect 120A, and to I / O die 110 via interconnect 120B. Further, each of GPU die 108, CPU die 106, and I / O die 110 can be coupled to shared memory device 112 via interconnects 120C, 120D, and 120E, respectively. For example, each of GPU die 108, CPU die 106, and I / O die 110 can write data to, or read data from, the shared memory device 112 via the interconnects 120C, 120D, and 120E, respectively. Each of the interconnects 103 and 120 may be, for example, Universal Chiplet Interconnect Express interconnects, or any other suitable interconnects.
[0027] Integrated circuit package 100 is merely exemplary, and in other embodiments, an integrated circuit package in accordance with these disclosures may include any other suitable dies which may replace, or be added in addition to, any of the dies illustrated with respect to integrated circuit package 100. In addition, integrated circuit package 100 may be coupled to one or more other integrated circuit packages. For instance, a first integrated circuit package 100 may be coupled, over one or more interconnects 120, to a second integrated circuit package 100. These integrated circuit packages, including integrated circuit package 100, may be implemented in various types of devices, such as within networking devices, telecommunication devices, smartphone devices, gaming devices, enterprise devices, storage devices (e.g., cloud storage devices) , and computing devices (e.g., cloud computing devices) , among other types of devices.
[0028] In some examples, CPU 106 may execute one or more applications, such as one or more operating systems (OSs) . For instance, CPU 106 may execute a host OS and one or more guest OSs (e.g., a virtual OS) . Each of the executing applications may require access to the non-volatile mass storage device 102. In some examples, GPU 108 and / or I / O 110 may also require access to the non-volatile mass storage device 102 via, e.g., an executing application of the CPU 106. To access the non-volatile mass storage device 102, each executing application may write to a doorbell register to indicate the memory request to the AGS host controller 104. Further, for each doorbell register, the AGS host controller 104 maintains (e.g., within an internal memory device) a corresponding “busy time” value. As described herein, the busy time value may characterize an amount of time during a corresponding temporal interval from when a request to access the non-volatile mass storage device 102, via the doorbell register, is received by the AGS host controller 104 (e.g., from CPU 106) to when a corresponding data transfer is complete, and there are no pending requests in the doorbell register to access the non-volatile mass storage device 102 or, in some instances, to the end of the temporal interval.
[0029] For example, as described further herein, the AGS host controller 104 may be configured to receive memory device access requests (e.g., read request, write request) from CPU 106 for the non-volatile mass storage device 102. The AGS host controller 104 may configure the non-volatile mass storage device 102 to operate at an initial gear scale level (e.g., the lowest gear scale level) , and may further configure a timer to expire after a predetermined amount of time (e.g., 10 milliseconds) . The AGS host controller 104 may start the timer, and may detect when a memory device request for a data transfer for the non-volatile mass storage device 102 is received from CPU 106, e.g., via a doorbell register, for any of a plurality of executing applications.
[0030] When a memory device access request is received from the CPU 106 (e.g., as indicated by a UFSHCI doorbell register) for an executing application, the AGS host controller 104 may begin to accumulate a busy time (e.g., within an internal memory device of the AGS host controller 104) for the corresponding doorbell register while the requested data transfer is in process. The AGS host controller 104 may further detect when the data transfer is complete and, in response to determining that the data transfer is complete, may determine whether there are any pending memory device access requests for the expected application. If there are no pending memory device access requests for the expected application, the AGS host controller 104 may end the busy time accumulation for the corresponding doorbell register. The AGS host controller 104 may continue to accumulate the busy time for the corresponding doorbell register at a later time (e.g., but before the timer expires) as additional memory device requests are received from the corresponding doorbell register. Similarly, the AGS host controller 104 may accumulate busy times for any additional doorbell registers from which one or more memory device access requests are received.
[0031] Once, however, the timer expires, the AGS host controller 104 stops accumulating the busy time for the doorbell register. For instance, upon the timer expiring, the AGS host controller 104 may receive an interrupt indicating that the timer has expired, and may stop accumulating the busy time. In addition, and in response to the timer expiring, the AGS host controller 104 may determine whether to adjust the current gear scale level of the non-volatile mass storage device 102 based on the accumulated busy time. For example, the AGS host controller 104 may compare the busy time to an upper threshold value. If the busy time is the same as or greater than the upper threshold value, the AGS host controller 104 may configure the non-volatile mass storage device 102 to operate an increased gear scale level (e.g., the greatest gear scale level available) , unless the non-volatile mass storage device 102 is currently operating at the highest gear scale level.
[0032] If, however, the busy time is less than the upper threshold value, the AGS host controller 104 may compare the busy time to a lower threshold value. If the busy time is the same as or less than the lower threshold value, the AGS host controller 104 may configure the non-volatile mass storage device 102 to operate an a decreased gear scale level (e.g., the lowest gear scale level available) , unless the non-volatile mass storage device 102 is currently operating at the lowest gear scale level. Otherwise, if the busy time is less than the upper threshold value and greater than the lower threshold value, the AGS host controller 104 may leave the non-volatile mass storage device 102 operating at the current gear level scale.
[0033] In some examples, the AGS host controller 104 may configure the non-volatile mass storage device 102 to operate at a corresponding gear level based on the busy time. For example, the AGS host controller 104 may configure the non-volatile mass storage device 102 to operate at a first gear scale level if the busy time falls within a first range. Similarly, the AGS host controller 104 may configure the non-volatile mass storage device 102 to operate at a second gear scale level if the busy time falls within a second range, and may configure the non-volatile mass storage device 102 to operate at a third gear scale level if the busy time falls within a third range. Although three ranges are described, the number of supported ranges may be less (e.g., two ranges) or more (e.g., five ranges) , and may be based on the number of gear scale levels supported by the non-volatile mass storage device 102. Moreover, as described herein, in some instances, more than one doorbell register is supported. In such examples, the AGS host controller 104 may compute an overall busy time based on the computed busy times for each of the doorbell registers, and may configure the non-volatile mass storage device 102 to operate at a gear scare level as described herein based on the overall busy time. As such, among other advantages, the AGS host controller 104 is operable to autonomously configure the gear scale level of the non-volatile mass storage device 102 based on overall data transfer needs by various executing applications for the non-volatile mass storage device 102.
[0034] FIG. 2 illustrates a die package 200 that includes an AGS UFS controller 214 electrically coupled to a UFS mass storage device 202. As illustrated, a UFS interconnect 215 of the AGS UFS controller 214 may be electrically coupled to a memory input / output (I / O) interface, such as UFS interconnect 203, of the UFS mass storage device 202 over a plurality of signals 205. For instance, the plurality of signals 205 may include transmit signals 205A, 205B, reference clock signal 205C, reset signal 206D, and receive signals 205E, 205F. The AGS UFS controller 214 may reset the UFS mass storage device 202 via the reset signal 206D. Further, the AGS UFS controller 214 may provide a reference clock (e.g., 52 Megahertz) to the UFS mass storage device 202 on the reference clock signal 205C. In addition, when writing data to the UFS mass storage device 202, the AGS UFS controller 214 may provide the data to be written on the transmit signals 205A, 205B. Similarly, when reading data from the UFS mass storage device 202, the UFS mass storage device 202 may provide the read data to the AGS UFS controller 214 on the read signals 205E, 205F.
[0035] The AGS UFS controller 214 also includes an AGS engine 216, one or more timers 218, a memory device 220, and a UFS host controller interface 217. The UFS host controller interface 217 provides for communications with, for instance, a UFS host controller driver executed by a processing device, such as the CPU 106 of FIG. 1. The UFS host controller driver may be part of an executed operating system, for instance. Further, AGS engine 216 may include one or more processing devices 224 that execute instructions, such as instructions stored in memory device 220. The one or more processing devices 224 may execute the instructions to perform various operations as described herein. Additionally, the AGS engine 216 may include registers 226. In this example, the registers 226 include an AGS control register 232, an AGS interrupt enable register 234, and an AGS interrupt status register 236.
[0036] For example, and based on a processing device 224 executing of instructions, the AGS engine 216 may configure a timer 218 to expire after an amount of time (e.g., 10 milliseconds) , where the amount of time characterizes a load monitor window. For instance, the AGS engine 216 may read a load monitor window value from the AGS control register 232, and may configure the timer 218 based on the load monitor window value, where the timer 218 may generate an interrupt to the AGS engine 216 upon expiration of the load monitor window.
[0037] The AGS engine 216 may start the timer 218 (e.g., thereby starting a load monitor window) , and may begin to detect if any memory device access requests for data transfers for the UFS mass storage device 202 are received. For instance, the AGS engine 216 may receive a memory device access request (e.g., data write request, data read request) for an executing application (e.g., host OS, guest OS, etc. ) from the UFS host controller interface 217 for data transfer to (e.g., a data write operation) or from (e.g., a data read operation) the UFS mass storage device 202. The AGS engine 216 may detect the memory device access request (e.g., based on reading a doorbell value from a doorbell register, such as a doorbell value from a UFS host controller interface 217 doorbell register) and, based on detecting the memory device access request, the AGS engine 216 may cause the UFS interconnect 215 to perform the data transfer (e.g., write the data provided in a data write request, or read the data requested in a data read request) . The AGS engine 216 may further begin to accumulate a busy time (e.g., within memory device 220) for the corresponding doorbell register. For example, the AGS engine 216 may read a value of a system clock, and store the read value as a start time. As another example, the AGS engine 216 may initiate (e.g., start) a second timer 218, where the initiation of the second timer 218 indicates the beginning of accumulated busy time. As described herein, the busy time characterizes, for a doorbell register, an amount of time that data transfers with the UFS mass storage device 202 are in progress based on memory access requests received via the doorbell register.
[0038] Further, the AGS engine 216 may detect when the data transfer is complete and, in response to determining that the data transfer is complete, may determine whether there are any pending memory device access requests in the corresponding doorbell register (e.g., as indicated by a UFS host controller interface 217 doorbell register) . If there are no pending memory device access requests, the AGS engine 216 may end the busy time accumulation for the corresponding doorbell register, as there are no data transfers in progress. For example, the AGS engine 216 may read another value of the system clock, and determine the accumulated busy time based on the read value and the stored value. Or, as another example, the AGS engine 216 may read the value of the second timer 218 to determine the accumulated busy time. The AGS engine 216 may continue to accumulate the busy time for the corresponding doorbell register if additional memory device requests are received from the doorbell register. Similarly, the AGS engine 216 may accumulate a busy time for any additional doorbell registers for which one or more memory device access requests are received.
[0039] Once, however, the timer 218 expires (e.g., thereby ending the load monitor window) , the AGS engine 216 stops accumulating the busy times. For instance, upon the timer 218 expiring, the AGS engine 216 may receive an interrupt indicating that the timer 218 has expired, and may stop accumulating the busy times for each doorbell register. In addition, and in response to the timer 218 expiring, the AGS engine 216 may determine whether to adjust (e.g., increase, decrease) a current gear scale level of the UFS mass storage device 202 based on the accumulated busy times. For example, and as described herein, the AGS engine 216 may compute an overall busy time based on the accumulated busy times.
[0040] Further, the AGS engine 216 may compare the overall busy time to an upper threshold. For instance, the AGS control register 232 may store the upper threshold, which may characterize a maximum percentage of the load monitor window (e.g., 90%) . The AGS engine 216 may signal the UFS mass storage device 202 (e.g., via the plurality of signals 205) to increase its gear scale level when the overall busy time is above the upper threshold (e.g., the overall busy time is greater than 90%of the load monitor window) . In some examples, the AGS engine 216 determines that the gear scale level increase has completed based on reading a status from the AGS interrupt status register 236.
[0041] If the overall busy time is not above the upper threshold, the AGS engine 216 may compare the overall busy time to a lower threshold. For instance, the AGS control register 232 may store the lower threshold, which may characterize a minimum percentage of the load monitor window (e.g., 10%) . The AGS engine 216 may signal the UFS mass storage device 202 (e.g., via the plurality of signals 205) to decrease its gear scale level when the overall busy time is below the lower threshold (e.g., the overall busy time is less than 10%of the load monitor window) .
[0042] In some instances, the AGS engine 216 may (e.g., at startup) enable an interrupt that is received upon successful completion of a gear scale level increase and / or gear scale level decrease. For example, if the AGS interrupt enable register 234 has a corresponding AGS decrease interrupt enabled, an interrupt is enabled indicating that the gear scale level of the memory device has been decreased. Similarly, if the AGS interrupt enable register 234 has a corresponding AGS increase interrupt enabled indicating that the gear scale level of the memory device has been increased. Based upon the corresponding gear scale level increase or decrease having successfully completed, the AGS engine 216 may receive the interrupt, and in response to the interrupt, may write to the AGS control register 232 to acknowledge (e.g., clear) the corresponding interrupt. In some examples, the AGS engine 216 may poll the AGS interrupt status register 236 to determine if the gear scale level of the memory device has completed being decreased or increased.
[0043] FIG. 3 illustrates a state machine 300 that may be implemented by an AGS host controller, such as AGS host controller 104 or AGS UFS controller 214. Beginning at disabled state 302, AGS functionality is disabled. For instance, disabled state 302 may correspond to an initialization state at startup (e.g., power-up) . The AGS host controller may initialize a gear scale of a corresponding memory device. For instance, the AGS host controller may configure the memory device to a lowest gear scale level (e.g., gear scale level 0) . From the disabled state 302, the state machine 300 may transition 321 to a load monitor state 304, where the AGS host controller may configure a load monitor window timer to start a load monitor window. For instance, and as described herein, the AGS UFS controller 214 may configure a timer 218 based on a load monitor window value read from the AGS control register 232.
[0044] During the load monitor state 304, the AGS host controller may accumulate busy times based on memory device access requests received for the corresponding memory device, such as those described herein with respect to non-volatile mass storage device 102 and UFS mass storage device 202. Once the load monitor window timer expires (e.g., the load monitor window ends) , the state machine 300 transitions 323 to the condition check state 306. During the condition check state 306, the AGS host controller may determine an overall busy time based on one or more accumulated busy times, and may determine whether to adjust the gear scale level of the memory device as described herein. Although illustrated as such merely for ease of readability, in some instances, the AGS interrupt enable register 234 and the AGS interrupt status register 236 are not exclusive registers within the AGS engine 216. Instead, their functionality may be implemented within existing registers, such as by using reserved bits of existing UFSHCI registers (e.g. UFSHCI. IS (Offset 20h) and UFSHCI. IE (Offset 24h) registers within the UFSHCI Specification) .
[0045] For example, the AGS host controller may determine whether to increase the gear scale level of the memory device based on the overall busy time and an upper threshold, such as the upper threshold stored in the AGS control register 232. If the AGS host controller determines not to increase the gear scale level of the memory device, the AGS host controller may determine whether to decrease the gear scale level of the memory device based on the overall busy time and a lower threshold, such as the lower threshold stored in the AGS control register 232. If the AGS host controller determines to adjust the gear scale level of the memory device, the state machine 300 transitions 325 to the gear scaling state 308. If, however, the AGS host controller determines not to adjust the gear scale level of the memory device, the state machine 300 transitions 327 back to the load monitor state 304 to start a new load monitor window.
[0046] At the gear scaling state 308, the AGS host controller may configure the memory device based on the determined adjustment to the gear scale (e.g., increase, or decrease) . The state machine 300 may then transition 333 back to the load monitor state 304 to start a new load monitor window. As illustrated, from each of the load monitor state 304, the condition check state 306, and the gear scaling state 308, the state machine 300 may transition 335, 329, 331, respectively, back to the disabled state 302. For instance, an executed host controller driver, such as an executed UFS host controller driver, may receive an indication to disable AGS functionality. In response, the executed host controller driver may signal the AGS host controller that AGS is to be disabled, and the AGS host controller may disable the AGS functionality (e.g., by writing to the AGS control register 232) .
[0047] FIG. 4 illustrates a computation of busy time, such as may be computed by AGS host controller 104 or AGS UFS controller 214. In this example, a busy time accumulation buffer 402 (e.g., a timer, a register) stores accumulated busy time for data transfers with a memory device, such as the non-volatile mass storage device 102 or the UFS mass storage device 202. In addition, a memory device access request buffer 404 (e.g., a UFSHCI doorbell register) stores pending requests for data transfers to the memory device (e.g., as received via a UFS host controller interface 217) . The busy time accumulation buffer 402 and memory device access request buffer 404 are illustrated at various stages A through F along a time axis 407. As illustrated, a first load monitor window 463 extends between a first start time 411 and first end time 413, and a second load monitor window 465 that extends between a second start time 415 and second end time 417.
[0048] As described herein, as soon as a load monitor window starts, such as the first load monitor window 463, busy time begins to accumulate when there are any outstanding memory device access requests (e.g., in the UFS host controller interface 217) , and stops to accumulate when all outstanding memory device access requests are completed, or when the load monitor window ends.
[0049] At stage A, which is at the beginning of the first load monitor window 463, the memory device access request buffer 404 is empty (i.e., no memory device requests are pending) , indicating no outstanding transactions. As such, the busy time accumulation buffer 402 has not begun to accumulate time. At stage B, two memory device access requests 441, 443 (e.g., transactions) have been received and are pending in the memory device access request buffer 404. As such, and as indicated by time arrow 423, the busy time accumulation buffer 402 begins to accumulate time.
[0050] Proceeding to stage C, the busy time accumulation buffer 402 has accumulated time as indicated by time arrows 425, and although memory device access request 443 has completed, memory device access request 441 is still pending in the memory device access request buffer 404. At stage D, the busy time accumulation buffer 402 has accumulated additional time since stage C as indicated by time arrows 427, but has stopped further time accumulation as memory device access request 441 has completed and there are no further memory device access requests pending in the memory device access request buffer 404.
[0051] Further, and at stage E, three additional memory device access requests 447, 449, 451 are received. Although the busy time accumulation buffer 402, as indicated by time arrows 429, indicates that no additional accumulated time has been accrued since stage D, the busy time accumulation buffer 402 will again begin to accumulate time based on receiving the three additional memory device access requests 447, 449, 451. Indeed, as illustrated at stage F, the busy time accumulation buffer 402 indicates that additional time has been accumulated since stage E. The memory device access request buffer 404 indicates that memory device access requests 447, 451 were completed, but memory device access request 449 is still pending. Although memory device access request 449 is still pending, the memory device access request buffer 404 stops accumulating time at the end of the first load monitor window 463 indicated by the first end time 413.
[0052] As described herein, an AGS host controller, such as AGS host controller 104 or AGS UFS controller 214, may determine whether to adjust a gear scale level of a corresponding memory device based on the accumulated time indicated by the busy time accumulation buffer 402 at stage F. The AGS host controller may then initiate another load monitor window to again determine whether the gear scale level of the corresponding memory device needs adjusting.
[0053] For instance, as illustrated in FIG. 4, stage G begins at the start of the second load monitor window 465, as indicated by the second start time 415. At the second start time 415, the busy time accumulation buffer 402 may be reset, as indicated by the time arrow 433 in stage G. The busy time accumulation buffer 402, however, begins to accumulate time after reset, as the memory device access request 449 is still pending in the memory device access request buffer 404. Further, at stage H, while the busy time accumulation buffer 402 has accumulated time based on processing the memory device access request 449, it stops accumulating time upon its completion as there are no more memory device access requests pending in the memory device access request buffer 404.
[0054] FIG. 5 illustrates a state machine 500 that that may be implemented by an AGS host controller, such as AGS host controller 104 or AGS UFS controller 214. In some examples, state machine 500 for may be sub-states within the condition check state 306 of FIG. 3.
[0055] The state machine 500 may begin with a transition 501 to state 502 to determine whether a gear scale level of a memory device is to be adjusted. The transition 501 may be, for instance, the transition 323 to the condition check state 306 of FIG. 3. At state 502, the AGS host controller may determine whether an accumulated busy time is greater than or equal to an upper threshold. For instance, and as described herein, the AGS host controller may read an upper threshold value from an AGS control register, such as AGS control register 232. In some examples, the upper threshold value identifies an upper threshold time of a load monitor window (e.g., 8 milliseconds of a 10 millisecond load monitor window) . In other examples, the upper threshold value identifies an upper threshold percentage of the load monitor window (e.g., 80%of a 10 millisecond load monitor window) . Other ways of identifying an upper threshold of the load monitor window are also contemplated herein.
[0056] Further, the AGS host controller may determine whether the gear scale level should be increased based on the accumulated busy time (e.g., overall busy time) and the upper threshold value. For instance, if the upper threshold value identifies an upper threshold time of the load monitor window, the AGS host controller may determine whether the accumulated busy time is greater than or equal to the upper threshold value. When the accumulated busy time is greater than or equal to the upper threshold value, the AGS host controller determines that the gear scale level should be increased; otherwise, the AGS host controller determines that the gear scale level is not to be increased. As another example, if the upper threshold value identifies an upper threshold percentage of the load monitor window, the AGS host controller may multiply the length of the load monitor window (e.g., 10 milliseconds) with the upper threshold percentage to compute an upper time threshold value, and may then determine whether the accumulated busy time is greater than or equal to the computed upper time threshold value. When the accumulated busy time is greater than or equal to the computed upper time threshold value, the AGS host controller determines that the gear scale level should be increased; otherwise, the AGS host controller determines that the gear scale level is not to be increased.
[0057] When the AGS host controller determines that the gear scale level should be increased, the state machine 500 transitions to state 506. At state 506, the AGS host controller determines whether the current gear scale level is already at a maximum gear scale level (e.g., gear scale level 5 of 5 gear scale levels) . If the current gear scale level is not at the maximum gear scale level, the state machine 500 transitions 513 out of state machine 500 and to, for example, a gear scaling state of a state machine (e.g., gear scaling state 308 of state machine 300) to increase the gear scale level of the memory device. If, however, the current gear scale level is at the maximum gear scale level, the state machine 500 transitions 511 out of state machine 500, such as the load monitor state 304 of state machine 300.
[0058] Back at state 502, if the AGS host controller determines that the gear scale level is not to be increased (e.g., the accumulated busy time is less than the upper threshold value) , the state machine 500 transitions to state 504. At state 504, the AGS host controller may determine whether an accumulated busy time is less than or equal to an upper threshold. For instance, and as described herein, the AGS host controller may read a lower threshold value from the AGS control register, such as AGS control register 232. In some examples, the lower threshold value identifies a lower threshold time of the load monitor window (e.g., 2 milliseconds of the 10 millisecond load monitor window) . In other examples, the lower threshold value identifies a lower threshold percentage of the load monitor window (e.g., 20%of a 10 millisecond load monitor window) . Other ways of identifying a lower threshold of the load monitor window are also contemplated herein.
[0059] Further, the AGS host controller may determine whether the gear scale level should be decreased based on the accumulated busy time (e.g., overall busy time) and the lower threshold value. For instance, if the lower threshold value identifies a lower threshold time of the load monitor window, the AGS host controller may determine whether the accumulated busy time is less than or equal to the lower threshold value. When the accumulated busy time is less than or equal to the lower threshold value, the AGS host controller determines that the gear scale level should be decreased; otherwise, the AGS host controller determines that the gear scale level is not to be decreased. As another example, if the lower threshold value identifies a lower threshold percentage of the load monitor window, the AGS host controller may multiply the length of the load monitor window (e.g., 10 milliseconds) with the lower threshold percentage to compute a lower time threshold value, and may then determine whether the accumulated busy time is lower than or equal to the computed lower time threshold value. When the accumulated busy time is less than or equal to the computed lower time threshold value, the AGS host controller determines that the gear scale level should be decreased; otherwise, the AGS host controller determines that the gear scale level is not to be increased.
[0060] When the AGS host controller determines that the gear scale level should be decreased, the state machine 500 transitions to state 508. At state 508, the AGS host controller determines whether the current gear scale level is already at a minimum gear scale level (e.g., gear scale level 1 of 5 gear scale levels) . If the current gear scale level is not at the minimum gear scale level, the state machine 500 transitions 515 out of state machine 500 and to, for example, a gear scaling state of a state machine (e.g., gear scaling state 308 of state machine 300) to decrease the gear scale level of the memory device. If, however, the current gear scale level is at the minimum gear scale level, the state machine 500 transitions 511 out of state machine 500, such as the load monitor state 304 of state machine 300.
[0061] Back at state 504, if the AGS host controller determines that the gear scale level is not to be decreased (e.g., the accumulated busy time is greater than the lower threshold value) , the state machine 500 transitions 511 out of state machine 500, such as the load monitor state 304 of state machine 300.
[0062] FIG. 6 illustrates a state machine 600 that that may be implemented by an AGS host controller, such as AGS host controller 104 or AGS UFS controller 214. In some examples, state machine 600 for may be sub-states within the gear scaling state 308 of FIG. 3.
[0063] The state machine 600 may begin with a transition 601 to state 602 to adjust a gear scale level of a memory device. The transition 601 may be, for instance, the transition 325 to the gear scaling state 308 of FIG. 3, or any of the transitions 513, 515 of FIG. 5 to increase, or decrease, respectively, the gear scale level of the memory device. At state 602, the AGS host controller disables the fetching of memory device access requests associated with the memory device. For example, and as to not be interrupted, the AGS host controller may disable a request interrupt (e.g., by writing to UFS host controller interface 217 register) that it may receive (e.g., from the UFS host controller interface 217) indicating that a memory device access request is available.
[0064] From state 602 the state machine 600 transitions to state 604, where the AGS host controller determines if any data transfers associated with the memory device are in flight, i.e., in process. If a data transfer is in process, the state machine 600 transitions to state 606, where the AGS host controller waits (e.g., delays) for an amount of time (e.g., a predetermined amount of time) to allow the in-process data transfers to complete.
[0065] For instance, the AGS host controller may configure a timer, such as a timer 218, to expire after the amount of time. In some examples, upon expiration of the amount of time (e.g., upon detecting the timer expired) , the state machine 600 transitions to state 610. In other examples, upon expiration of the amount of time, the state machine 600 transitions to state 608, where again the AGS host controller determines if any data transfers associated with the memory device are (e.g., still) in flight. If any data transfers are still in process, the state machine 600 transitions to state 630. If, however, no transitions are in process, the state machine 600 transitions to state 610.
[0066] At state 610, if the gear scale level of the memory device is to be decreased, the state machine 600 transitions to state 612, where the AGS host controller performs operations to decrease the gear scale level of the memory device. For example, and as described herein, the AGS host controller may decrease the gear scale level of the memory device to a predetermined level (e.g., the minimum gear scale level supported by the memory device, gear scale level 0) . In some examples, the AGS host controller may decrease the gear scale level of the memory device by a predetermined number of levels (e.g., 1, 4) , down to a minimum gear scale level.
[0067] Once the gear scale level of the memory device has been decreased, the state machine 600 transitions to state 614, where a determination is made as to whether to generate a corresponding interrupt. For instance, and as described herein, if the AGS interrupt enable register 234 has the corresponding interrupt enabled, an interrupt is enabled, which may be received by an executing application, indicating that the gear scale level of the memory device has been decreased. Further, at state 618, the executing application may acknowledge (e.g., clear) the interrupt, e.g., such as by writing to the AGS control register 232 to acknowledge the interrupt. The state machine may then transition to state 630. If at state 614, however, no interrupt is generated (e.g., the AGS interrupt enable register 234 does not have the corresponding interrupt enabled) , state machine 600 transitions to state 630.
[0068] Back at state 610, if the gear scale level of the memory device is not to be decreased (e.g., and thus increased) , the state machine 600 transitions to state 620, where a determination is made as to whether to generate an interrupt indicating that the gear scale level of the memory device will be increased. For instance, and as described herein, if the AGS interrupt enable register 234 has the corresponding interrupt enabled, an interrupt is enabled, which may be received by an executing application, indicating that the gear scale level of the memory device will be increased. For example, at state 624, the executing application may acknowledge (e.g., clear) the interrupt, e.g., such as by writing to the AGS control register 232 to acknowledge the interrupt. The state machine may then transition to state 626. If at state 620, however, no interrupt is generated (e.g., the AGS interrupt enable register 234 does not have the corresponding interrupt enabled) , state machine 600 transitions to state 626.
[0069] At state 626, the AGS host controller performs operations to increase the gear scale level of the memory device. For example, and as described herein, the AGS host controller may increase the gear scale level of the memory device to a predetermined level (e.g., the maximum gear scale level supported by the memory device, gear scale level 5) . In some examples, the AGS host controller may increase the gear scale level of the memory device by a predetermined number of levels (e.g., 1, 4) , up to a maximum gear scale level. Once the gear scale level of the memory device has been increased, the state machine 600 transitions to state 630.
[0070] At state 630, the AGS host controller re-enables the fetching of memory device access requests associated with the memory device. For example, the AGS host controller may re-enable the request interrupt that indicates that a memory device access request is available (e.g., by writing to the UFS host controller interface 217 register to re-enable the interrupt) . The state machine 600 may then transition 631 out of state machine 600, such as to the load monitor state 304 of state machine 300.
[0071] Although described herein, one or more of the states within box 650 are optional. As illustrated, box 650 includes the states 602, 604, 606, 608, and 630. Thus, in some examples, the transition 601 to state machine 600 enters state 610, rather than state 602. Moreover, rather than transitioning to state 630 from any of states 614, 618, and 626, state machine 600 transitions 631 out of the state machine 600.
[0072] FIGs. 7A, 7B, and 7C illustrate exemplary AGS registers that may be implemented within an AGS host controller, such as AGS host controller 104 or AGS UFS controller 214. Although, merely for exemplary reasons, each of the registers are described with respect to thirty-two bits, the registers can be implemented in various other configurations, such as in any suitable number of 8, 16, or 64 bit registers, or in any other suitable configuration, such as by combining one or more capabilities of two or more of the registers into a same register.
[0073] FIG. 7A illustrates an exemplary AGS control register 700, such as the AGS control register 232 of FIG. 2. Bits 31 to 26 of the AGS control register 700 are reserved (e.g., not used, available for other uses, etc. ) . Bits 25 and 24 define a timer scale value. For instance, a value of 0b00 may indicate a timer scale value of 1 millisecond, while a value of 0b01 may indicate a timer scale value of 10 milliseconds, and a value of 0b11 may indicate a timer scale value of 100 milliseconds. The timer scale value indicates a scale value of the load monitor window timer value defined by bits 23 to 18. For example, an AGS host controller may read the AGS control register 700 to obtain the load monitor window timer value from bits 23 to 18 and the timer scale value from bits 25 to 244, and may multiply the load monitor window timer value by the timer scale value to compute an absolute timer value. The AGS host controller may then configure a timer, such as a timer 218, with the absolute timer value to establish (e.g., initiate) a load monitor window.
[0074] Further, bits 17 to 14 define an upper threshold value, and bits 13 to 10 define a lower threshold value. As described herein, an AGS host controller may compare an accumulated busy time to one or more of the upper threshold value and the lower threshold value to determine whether to adjust a gear scale level of a memory device. In some instances, one or more of the upper threshold value and the lower threshold value characterize a percentage of a load monitor window.
[0075] Bits 6 to 1 define an in-flight request waiting time value, and bits 9 to 7 define a waiting time scale for the in-flight request waiting time value of bits 6 to 1. As described herein, in some examples, an AGS controller waits for an amount of time (e.g., a predetermined amount of time) to allow the in-process data transfers to complete (e.g., as in the state 606 of the state machine 600) . The amount of time may be defined by the in-flight request waiting time value of bits 6 to 1. In some instances, the AGS host controller may determine an absolute waiting time value by multiplying the in-flight request waiting time value with the waiting time scale of bits 9 to 7. The AGS host controller may configure a timer, such as a timer 218, to expire after the amount of time.
[0076] Further, bit 0 defines an auto gear scaling acknowledge bit that may indicate to an executing application that the gear scale level of a memory device has been, or will be, adjusted (e.g., decreased or increased) . For instance, as described herein, an interrupt may be generated indicating that the gear scale level of a memory device has been decreased (e.g., at state 616 of FIG. 6) . To acknowledge the interrupt, an executing application may write a first value (e.g., a 1) to the auto gear scaling acknowledge bit to acknowledge the interrupt (e.g., at state 618 of FIG. 6) . The AGS host controller may detect that the auto gear scaling acknowledge bit has been written and, in response, may write a second value (e.g., a 0) to the auto gear scaling acknowledge bit. Similarly, and as described herein, an interrupt may be generated indicating that the gear scale level of a memory device will be increased (e.g., at state 622 of FIG. 6) . To acknowledge the interrupt, an executing application may write a first value (e.g., a 1) to the auto gear scaling acknowledge bit to acknowledge the interrupt (e.g., at state 624 of FIG. 6) . The AGS host controller may detect that the auto gear scaling acknowledge bit has been written and, in response, may write a second value (e.g., a 0) to the auto gear scaling acknowledge bit.
[0077] FIG. 7B illustrates an exemplary AGS interrupt enable register 740, such as the AGS interrupt enable register 234 of FIG. 2. In this example, bits 31 to 2 are reserved. In addition, bit 1 defines whether an interrupt is enabled when a gear scale level of a memory device has been, or in some examples, will be, increased. For example, as described herein, at state 614 the AGS host controller may read bit 1 of the AGS interrupt enable register 740 to determine whether to generate an interrupt (e.g., to indicate to an executing application that the gear scale level has been decreased) . Similarly, bit 0 defines whether an interrupt is enabled when a gear scale level of the memory device has been, or in some examples, will be, decreased. For example, as described herein, at state 620 the AGS host controller may read bit 0 of the AGS interrupt enable register 740 to determine whether to generate an interrupt (e.g., to indicate to an executing application that the gear scale level will be increased) .
[0078] FIG. 7C illustrates an exemplary AGS interrupt status register 760, such as the AGS interrupt status register 236 of FIG. 2. In this example, bits 31 to 2 are reserved. In addition, bit 1 indicates whether a gear scale level of a memory device has been, or in some examples, will be, increased. Similarly, bit 0 indicates whether the gear scale level of the memory device has been, or in some examples, will be, decreased. An executing application may read bits 1 and 0 to determine whether the gear scale level of the memory device has been, or in some examples, will be, adjusted.
[0079] FIG. 8 is a flowchart of an exemplary process 800 for adjusting a gear scale level of a memory device, such as a UFS mass storage device. Exemplary process 800 may be carried out by an AGS host controller, such as the AGS host controller 104 of FIG. 1 or the AGS UFS controller 214 of FIG. 2.
[0080] Beginning at block 802, one or more memory device access requests for a memory device are detected during a load monitor window. For example, as described herein, the AGS host controller 104 may detect memory access device requests from the CPU 106 to access the non-volatile mass storage device 102. At block 804, a busy time value is generated based on durations of one or more data transfers associated with the detected memory device access requests. For example, the AGS host controller 104 may accumulate the amount of time the data transfers associated with the received memory access device requests consume.
[0081] Further, at block 806, an end of the load monitor window is detected. In addition, at block 808, in response to the detection of the end of the load monitor window, a gear scale level of the memory device is adjusted based on the busy time value and at least one threshold value. For instance, the AGS host controller 104 may receive an interrupt indicating the end of the load monitor window. In response to receiving the interrupt, the AGS host controller 104 may compare the accumulated amount of time of the data transfers with an upper threshold value. The AGS host controller 104 may increase a gear scale level of the non-volatile mass storage device 102 when the accumulated amount of time is greater than or equal to the upper threshold value. If the accumulated amount of time is less than the upper threshold value, the AGS host controller 104 may compare the accumulated amount of time of the data transfers with a lower threshold value. The AGS host controller 104 may decrease the gear scale level of the non-volatile mass storage device 102 when the accumulated amount of time is less than or equal to the lower threshold value.
[0082] From block 808, the method proceeds to block 810, where another load monitor window is initiated. For example, the AGS host controller 104 may configure a timer, such as a timer 218, to start a load monitor window timer. The method then proceeds back to block 802 to detect memory device access requests for the memory device.
[0083] Implementation examples are further described in the following numbered clauses:
[0084] 1. An apparatus comprising:
[0085] a processor; and
[0086] a host controller coupled to the processor and to a memory input / output (I / O) interface of a memory device, wherein the host controller is configured to:
[0087] detect one or more memory device access requests for the memory device during a load monitor window;
[0088] determine a busy time value based on a duration of each of one or more data transfers associated with the one or more memory device access requests;
[0089] detect an end of the load monitor window; and
[0090] in response to the detection of the end of the load monitor window, adjust a gear scale level of the memory device based on the busy time value and at least one threshold value.
[0091] 2. The apparatus of clause 1, wherein the host controller is configured to determine the duration of each of the one or more data transfers.
[0092] 3. The apparatus of any of clauses 1-2, wherein the host controller is configured to:
[0093] start a timer in response to the detection of a first memory device access request of the one or more memory device access requests;
[0094] detect a completion of a last data transfer of the one or more data transfers;
[0095] read a timer value from the timer in response to the detection of the last data transfer; and
[0096] determine the busy time value based on the timer value.
[0097] 4. The apparatus of clause 3, wherein the host controller is configured to:
[0098] detect a completion of a first data transfer of the one or more data transfers, wherein the first data transfer is associated with the first memory device access request; and
[0099] stop the timer in response to the completion of the first data transfer.
[0100] 5. The apparatus of clause 4, wherein the host controller is configured to:
[0101] detect a second memory device access request of the one or more memory device access requests after the first data transfer completes; and
[0102] re-start the timer in response to the detection of the second memory device access request.
[0103] 6. The apparatus of any of clauses 1-5, wherein the host controller is configured to:
[0104] read a doorbell value from a doorbell register; and
[0105] detect the one or more memory device access requests for the memory device based on the doorbell value.
[0106] 7. The apparatus of any of clauses 1-6, wherein the host controller is configured to:
[0107] configure a load monitor window timer to expire after an amount of time;
[0108] start the load monitor window timer;
[0109] receive an interrupt based on an expiration of the load monitor window timer; and
[0110] detect the end of the load monitor window based on the interrupt.
[0111] 8. The apparatus of any of clauses 1-7, wherein the at least one threshold value comprises an upper threshold value, and wherein the host controller is configured to:
[0112] compare the busy time value to the upper threshold value; and
[0113] increase the gear scale level of the memory device based on the comparison.
[0114] 9. The apparatus of any of clauses 1-8, wherein the at least one threshold value comprises a lower threshold value, and wherein the host controller is configured to:
[0115] compare the busy time value to the lower threshold value; and
[0116] decrease the gear scale level of the memory device based the comparison.
[0117] 10. The apparatus of any of clauses 1-9, wherein the at least one threshold value comprises an upper threshold value and a lower threshold value, and wherein the host controller is configured to:
[0118] determine that the busy time value is less than the upper threshold value;
[0119] in response, determine that the busy time value is less than or equal to the lower threshold value; and
[0120] in response, decrease the gear scale level of the memory device.
[0121] 11. The apparatus of any of clauses 1-10, wherein the host controller is configured to generate an interrupt based on a determination that the adjustment to the gear scale level of the memory device is complete.
[0122] 12. The apparatus of any of clauses 1-11, wherein the host controller is configured to:
[0123] in response to the detection of the end of the load monitor window:
[0124] determine that at least one of the one or more data transfers are in process;
[0125] configure a delay timer to expire after an amount of time;
[0126] start the delay timer;
[0127] receive an interrupt based on an expiration of the delay timer; and
[0128] adjust the gear scale level of the memory device in response to the reception of the interrupt.
[0129] 13. The apparatus of any of clauses 1-12, wherein the host controller is configured to:
[0130] add the durations of the one or more data transfers; and
[0131] determine the busy time value based on an addition of the durations of the one or more data transfers.
[0132] 14. A method by at least one processor, the method comprising:
[0133] detecting one or more memory device access requests for the memory device during a load monitor window;
[0134] determining a busy time value based on a duration of each of one or more data transfers associated with the one or more memory device access requests;
[0135] detecting an end of the load monitor window; and
[0136] in response to detecting the end of the load monitor window, adjusting a gear scale level of the memory device based on the busy time value and at least one threshold value.
[0137] 15. The method of clause 14, comprising determining the duration of each of the one or more data transfers.
[0138] 16. The method of any of clauses 14-15, comprising:
[0139] starting a timer in response to the detection of a first memory device access request of the one or more memory device access requests;
[0140] detecting a completion of a last data transfer of the one or more data transfers;
[0141] reading a timer value from the timer in response to the detection of the last data transfer; and
[0142] determining the busy time value based on the timer value.
[0143] 17. The method of clause 16, comprising:
[0144] detecting a completion of a first data transfer of the one or more data transfers, wherein the first data transfer is associated with the first memory device access request; and
[0145] stopping the timer in response to the completion of the first data transfer.
[0146] 18. The method of clause 17, comprising:
[0147] detecting a second memory device access request of the one or more memory device access requests after the first data transfer completes; and
[0148] re-starting the timer in response to the detection of the second memory device access request.
[0149] 19. The method of any of clauses 14-18, comprising:
[0150] reading a doorbell value from a doorbell register; and
[0151] detecting the one or more memory device access requests for the memory device based on the doorbell value.
[0152] 20. The method of any of clauses 14-19, comprising:
[0153] configuring a load monitor window timer to expire after an amount of time;
[0154] starting the load monitor window timer;
[0155] receiving an interrupt based on an expiration of the load monitor window timer; and
[0156] detecting the end of the load monitor window based on the interrupt.
[0157] 21. The method of any of clauses 14-20, wherein the at least one threshold value comprises an upper threshold value, the method comprising:
[0158] comparing the busy time value to the upper threshold value; and
[0159] increasing the gear scale level of the memory device based on the comparison.
[0160] 22. The method of any of clauses 14-21, wherein the at least one threshold value comprises a lower threshold value, the method comprising:
[0161] comparing the busy time value to the lower threshold value; and
[0162] decreasing the gear scale level of the memory device based on the comparison.
[0163] 23. The method of any of clauses 14-22, wherein the at least one threshold value comprises an upper threshold value and a lower threshold value, the method comprising:
[0164] determining that the busy time value is less than the upper threshold value;
[0165] in response, determining that the busy time value is less than or equal to the lower threshold value; and
[0166] in response, decreasing the gear scale level of the memory device.
[0167] 24. The method of any of clauses 14-23, comprising generating an interrupt based on a determination that the adjustment to the gear scale level of the memory device is complete.
[0168] 25. The method of any of clauses 14-24, comprising:
[0169] in response to detecting the end of the load monitor window:
[0170] determining that at least one of the one or more data transfers are in process;
[0171] configuring a delay timer to expire after an amount of time;
[0172] starting the delay timer;
[0173] receiving an interrupt based on an expiration of the delay timer; and
[0174] adjusting the gear scale level of the memory device in response to the reception of the interrupt.
[0175] 26. The method of any of clauses 14-25, comprising:
[0176] adding the durations of the one or more data transfers; and
[0177] determining the busy time value based on an addition of the durations of the one or more data transfer.
[0178] 27. A non-transitory, machine-readable storage medium storing instructions that, when executed by at least one processor, cause the at least one processor to:
[0179] detect one or more memory device access requests for the memory device during a load monitor window;
[0180] determine a busy time value based on a duration of each of one or more data transfers associated with the one or more memory device access requests;
[0181] detect an end of the load monitor window; and
[0182] in response to the detection of the end of the load monitor window, adjust a gear scale level of the memory device based on the busy time value and at least one threshold value.
[0183] 28. The non-transitory, machine-readable storage medium of clause 27, wherein the instructions, when executed by the at least one processor, cause the at least one processor to determine the duration of each of the one or more data transfers.
[0184] 29. The non-transitory, machine-readable storage medium of any of clauses 27-28, wherein the instructions, when executed by the at least one processor, cause the at least one processor to:
[0185] start a timer in response to the detection of a first memory device access request of the one or more memory device access requests;
[0186] detect a completion of a last data transfer of the one or more data transfers;
[0187] read a timer value from the timer in response to the detection of the last data transfer; and
[0188] determine the busy time value based on the timer value.
[0189] 30. The non-transitory, machine-readable storage medium of clause 29, wherein the instructions, when executed by the at least one processor, cause the at least one processor to:
[0190] detect a completion of a first data transfer of the one or more data transfers, wherein the first data transfer is associated with the first memory device access request; and
[0191] stop the timer in response to the completion of the first data transfer.
[0192] 31. The non-transitory, machine-readable storage medium of clause 30, wherein the instructions, when executed by the at least one processor, cause the at least one processor to:
[0193] detect a second memory device access request of the one or more memory device access requests after the first data transfer completes; and
[0194] re-start the timer in response to the detection of the second memory device access request.
[0195] 32. The non-transitory, machine-readable storage medium of any of clauses 27-31, wherein the instructions, when executed by the at least one processor, cause the at least one processor to:
[0196] read a doorbell value from a doorbell register; and
[0197] detect the one or more memory device access requests for the memory device based on the doorbell value.
[0198] 33. The non-transitory, machine-readable storage medium of any of clauses 27-32, wherein the instructions, when executed by the at least one processor, cause the at least one processor to:
[0199] configure a load monitor window timer to expire after an amount of time;
[0200] start the load monitor window timer;
[0201] receive an interrupt based on an expiration of the load monitor window timer; and
[0202] detect the end of the load monitor window based on the interrupt.
[0203] 34. The non-transitory, machine-readable storage medium of any of clauses 27-33, wherein the at least one threshold value comprises an upper threshold value, and wherein the instructions, when executed by the at least one processor, cause the at least one processor to:
[0204] compare the busy time value to the upper threshold value; and
[0205] increase the gear scale level of the memory device based on the comparison.
[0206] 35. The non-transitory, machine-readable storage medium of any of clauses 27-34, wherein the at least one threshold value comprises a lower threshold value, and wherein the instructions, when executed by the at least one processor, cause the at least one processor to:
[0207] compare the busy time value to the lower threshold value; and
[0208] decrease the gear scale level of the memory device based the comparison.
[0209] 36. The non-transitory, machine-readable storage medium of any of clauses 27-35, wherein the at least one threshold value comprises an upper threshold value and a lower threshold value, and wherein the instructions, when executed by the at least one processor, cause the at least one processor to:
[0210] determine that the busy time value is less than the upper threshold value;
[0211] in response, determine that the busy time value is less than or equal to the lower threshold value; and
[0212] in response, decrease the gear scale level of the memory device.
[0213] 37. The non-transitory, machine-readable storage medium of any of clauses 27-36, wherein the instructions, when executed by the at least one processor, cause the at least one processor to generate an interrupt based on a determination that the adjustment to the gear scale level of the memory device is complete.
[0214] 38. The non-transitory, machine-readable storage medium of any of clauses 27-37, wherein the instructions, when executed by the at least one processor, cause the at least one processor to:
[0215] in response to the detection of the end of the load monitor window:
[0216] determine that at least one of the one or more data transfers are in process;
[0217] configure a delay timer to expire after an amount of time;
[0218] start the delay timer;
[0219] receive an interrupt based on an expiration of the delay timer; and
[0220] adjust the gear scale level of the memory device in response to the reception of the interrupt.
[0221] 39. The non-transitory, machine-readable storage medium of any of clauses 27-38, wherein the instructions, when executed by the at least one processor, cause the at least one processor to:
[0222] add the durations of the one or more data transfers; and
[0223] determine the busy time value based on an addition of the durations of the one or more data transfers.
[0224] 40. An die comprising:
[0225] a mass storage device;
[0226] at least one register; and
[0227] a processor communicatively coupled to the mass storage device and the at least one register, wherein the at least one processor is configured to:
[0228] read a value from the at least one register;
[0229] detect, during a load monitor window, one or more memory device access requests for the mass storage device based on the value;
[0230] determine a busy time value based on a duration of each of one or more data transfers associated with the one or more memory device access requests;
[0231] detect an end of the load monitor window; and
[0232] in response to the detection of the end of the load monitor window, adjust a gear scale level of the mass storage device based on the busy time value and at least one threshold value.
[0233] 41. The die of clause 41, wherein the processor is configured to determine the duration of each of the one or more data transfers.
[0234] 42. The die of any of clauses 41-42, wherein the processor is configured to:
[0235] start a timer in response to the detection of a first memory device access request of the one or more memory device access requests;
[0236] detect a completion of a last data transfer of the one or more data transfers;
[0237] read a timer value from the timer in response to the detection of the last data transfer; and
[0238] determine the busy time value based on the timer value.
[0239] 43. The die of clause 42, wherein the processor is configured to:
[0240] detect a completion of a first data transfer of the one or more data transfers, wherein the first data transfer is associated with the first memory device access request; and
[0241] stop the timer in response to the completion of the first data transfer.
[0242] 44. The die of clause 43, wherein the processor is configured to:
[0243] detect a second memory device access request of the one or more memory device access requests after the first data transfer completes; and
[0244] re-start the timer in response to the detection of the second memory device access request.
[0245] 45. The die of any of clauses 40-44, wherein the processor is configured to:
[0246] read a doorbell value from a doorbell register; and
[0247] detect the one or more memory device access requests for the memory device based on the doorbell value.
[0248] 46. The die of any of clauses 40-45, wherein the processor is configured to:
[0249] configure a load monitor window timer to expire after an amount of time;
[0250] start the load monitor window timer;
[0251] receive an interrupt based on an expiration of the load monitor window timer; and
[0252] detect the end of the load monitor window based on the interrupt.
[0253] 47. The die of any of clauses 40-46, wherein the at least one threshold value comprises an upper threshold value, and wherein the processor is configured to:
[0254] compare the busy time value to the upper threshold value; and
[0255] increase the gear scale level of the memory device based on the comparison.
[0256] 48. The die of any of clauses 40-47, wherein the at least one threshold value comprises a lower threshold value, and wherein the processor is configured to:
[0257] compare the busy time value to the lower threshold value; and
[0258] decrease the gear scale level of the memory device based the comparison.
[0259] 49. The die of any of clauses 40-48, wherein the at least one threshold value comprises an upper threshold value and a lower threshold value, and wherein the processor is configured to:
[0260] determine that the busy time value is less than the upper threshold value;
[0261] in response, determine that the busy time value is less than or equal to the lower threshold value; and
[0262] in response, decrease the gear scale level of the memory device.
[0263] 50. The die of any of clauses 40-49, wherein the processor is configured to generate an interrupt based on a determination that the adjustment to the gear scale level of the memory device is complete.
[0264] 51. The die of any of clauses 40-50, wherein the processor is configured to:
[0265] in response to the detection of the end of the load monitor window:
[0266] determine that at least one of the one or more data transfers are in process;
[0267] configure a delay timer to expire after an amount of time;
[0268] start the delay timer;
[0269] receive an interrupt based on an expiration of the delay timer; and
[0270] adjust the gear scale level of the memory device in response to the reception of the interrupt.
[0271] Although the methods described above are with reference to the illustrated flowcharts, many other ways of performing the acts associated with the methods may be used. For example, the order of some operations may be changed, and some embodiments may omit one or more of the operations described and / or include additional operations.
[0272] In addition, the methods and system described herein may be at least partially embodied in the form of computer-implemented processes and apparatus for practicing those processes. The disclosed methods may also be at least partially embodied in the form of tangible, non-transitory machine-readable storage media encoded with computer program code that, when executed, causes a machine to fabricate at least one integrated circuit that performs one or more of the operations described herein. For example, the methods may be embodied in hardware, in executable instructions executed by a processor (e.g., software) , or a combination of the two. The media may include, for example, RAMs, ROMs, CD-ROMs, DVD-ROMs, BD-ROMs, hard disk drives, flash memories, or any other non-transitory machine-readable storage medium. When the computer program code is loaded into and executed by a computer, the computer becomes an apparatus for causing a machine to fabricate the integrated circuit. The methods may also be at least partially embodied in the form of a computer into which computer program code is loaded or executed, such that, the computer becomes a special purpose computer for causing a machine to fabricate the integrated circuit. For instance, when implemented on a general-purpose processor, computer program code segments can configure the processor to create specific logic circuits. The methods may alternatively be at least partially embodied in application specific integrated circuits or any other integrated circuits for performing the methods.
[0273] In addition, terms such as “circuit, ” “circuitry, ” “logic, ” and the like can include, alone or in combination, analog circuitry, digital circuitry, hardwired circuitry, programmable circuitry, processing circuitry, hardware logic circuitry, state machine circuitry, and any other suitable type of physical hardware components. Further, the embodiments described herein may be employed within various types of devices such as networking devices, telecommunication devices, smartphone devices, gaming devices, enterprise devices, storage devices (e.g., cloud storage devices) , and computing devices (e.g., cloud computing devices) , among other types of devices.
[0274] The subject matter has been described in terms of exemplary embodiments. Because they are only examples, the claimed inventions are not limited to these embodiments. Changes and modifications may be made without departing the spirit of the claimed subject matter. It is intended that the claims cover such changes and modifications.
Claims
1.An apparatus comprising:a processor; anda host controller coupled to the processor and to a memory input / output (I / O) interface of a memory device, wherein the host controller is configured to:detect one or more memory device access requests for the memory device during a load monitor window;determine a busy time value based on a duration of each of one or more data transfers associated with the one or more memory device access requests;detect an end of the load monitor window; andin response to the detection of the end of the load monitor window, adjust a gear scale level of the memory device based on the busy time value and at least one threshold value.2.The apparatus of claim 1, wherein the host controller is configured to determine the duration of each of the one or more data transfers.3.The apparatus of claim 1, wherein the host controller is configured to:start a timer in response to the detection of a first memory device access request of the one or more memory device access requests;detect a completion of a last data transfer of the one or more data transfers;read a timer value from the timer in response to the detection of the last data transfer; anddetermine the busy time value based on the timer value.4.The apparatus of claim 3, wherein the host controller is configured to:detect a completion of a first data transfer of the one or more data transfers, wherein the first data transfer is associated with the first memory device access request; andstop the timer in response to the completion of the first data transfer.5.The apparatus of claim 4, wherein the host controller is configured to:detect a second memory device access request of the one or more memory device access requests after the first data transfer completes; andre-start the timer in response to the detection of the second memory device access request.6.The apparatus of claim 1 wherein the host controller is configured to:read a doorbell value from a doorbell register; anddetect the one or more memory device access requests for the memory device based on the doorbell value.7.The apparatus of claim 1, wherein the host controller is configured to:configure a load monitor window timer to expire after an amount of time;start the load monitor window timer;receive an interrupt based on an expiration of the load monitor window timer; anddetect the end of the load monitor window based on the interrupt.8.The apparatus of claim 1, wherein the at least one threshold value comprises an upper threshold value, and wherein the host controller is configured to:compare the busy time value to the upper threshold value; andincrease the gear scale level of the memory device based on the comparison.9.The apparatus of claim 1, wherein the at least one threshold value comprises a lower threshold value, and wherein the host controller is configured to:compare the busy time value to the lower threshold value; anddecrease the gear scale level of the memory device based on the comparison.10.The apparatus of claim 1, wherein the at least one threshold value comprises an upper threshold value and a lower threshold value, and wherein the host controller is configured to:determine the busy time value is less than the upper threshold value;in response, determine that the busy time value is less than or equal to the lower threshold value; andin response, decrease the gear scale level of the memory device.11.The apparatus of claim 1, wherein the host controller is configured to generate an interrupt based on a determination that the adjustment to the gear scale level of the memory device is complete.12.The apparatus of claim 1, wherein the host controller is configured to :in response to the detection of the end of the load monitor window:determine that at least one of the one or more data transfers are in process;configure a delay timer to expire after an amount of time;start the delay timer;receive an interrupt based on an expiration of the delay timer; andadjust the gear scale level of the memory device in response to the reception of the interrupt.13.The apparatus of claim 1, wherein the host controller is configured to:add the durations of the one or more data transfers; anddetermine the busy time value based on an addition of the durations of the one or more data transfers.14.A method by at least one processor, the method comprising:detecting one or more memory device access requests for the memory device during a load monitor window;determining a busy time value based on a duration of each of one or more data transfers associated with the one or more memory device access requests;detecting an end of the load monitor window; andin response to detecting the end of the load monitor window, adjusting a gear scale level of the memory device based on the busy time value and at least one threshold value.15.The method of claim 14, comprising determining the duration of each of the one or more data transfers.16.The method of claim 14, comprising:starting a timer in response to the detection of a first memory device access request of the one or more memory device access requests;detecting a completion of a last data transfer of the one or more data transfers;reading a timer value from the timer in response to the detection of the last data transfer; anddetermining the busy time value based on the timer value.17.The method of claim 16, comprising:detecting a completion of a first data transfer of the one or more data transfers, wherein the first data transfer is associated with the first memory device access request; andstopping the timer in response to the completion of the first data transfer.18.The method of claim 17, comprising:detecting a second memory device access request of the one or more memory device access requests after the first data transfer completes; andre-starting the timer in response to the detection of the second memory device access request.19.The method of claim 14 wherein the at least one threshold value comprises an upper threshold value and a lower threshold value, the method comprising:comparing the busy time value to the upper threshold value;determining the busy time value is less than the upper threshold value;comparing the busy time value to the lower threshold value; anddecreasing the gear scale level of the memory device based on a determination that the busy time value is less than or equal to the lower threshold value.20.An die comprising:a mass storage device;at least one register; anda processor communicatively coupled to the mass storage device and the at least one register, wherein the processor is configured to:read a value from the at least one register;detect, during a load monitor window, one or more memory device access requests for the mass storage device based on the value;determine a busy time value based on a duration of each of one or more data transfers associated with the one or more memory device access requests;detect an end of the load monitor window; andin response to the detection of the end of the load monitor window, adjust a gear scale level of the mass storage device based on the busy time value and at least one threshold value.
Citation Information
Patent Citations
DRAM run frequency adjustment system and method
CN101620883A
Dynamic frequency adjustment method for internal memory, and electronic apparatus
CN112639675A
Low latency memory and bus frequency scaling based upon hardware monitoring
US20160342540A1