Enhancement of data prefetching
The auto data prefetch scheme with a read booster buffer and prefetch hints addresses inefficiencies in flash memory data prefetching, enhancing performance and reducing resource overhead by automatically prefetching data in sequential read scenarios.
Patent Information
- Authority / Receiving Office
- WO · WO
- Patent Type
- Applications
- Current Assignee / Owner
- QUALCOMM INC
- Filing Date
- 2025-01-20
- Publication Date
- 2026-07-23
AI Technical Summary
Existing data prefetching techniques in information processing systems, particularly in flash memory, incur resource overhead and inefficiencies, especially in sequential read scenarios and small data chunks, leading to processor stalls and increased energy consumption.
Implementing a configurable auto data prefetch scheme with a read booster buffer and prefetch hints in the UFS protocol, utilizing SLC NAND technology to enhance data prefetching capabilities beyond volatile cache limitations.
Reduces processor latency and energy consumption by efficiently prefetching data without explicit commands, improving performance in sequential read scenarios and overcoming volatile cache size limitations.
Smart Images

Figure CN2025073241_23072026_PF_FP_ABST
Abstract
Description
ENHANCEMENT OF DATA PREFETCHINGTECHNICAL FIELD
[0001] This disclosure relates generally to the field of information processing systems, and, in particular, to enhancement of data prefetching.BACKGROUND
[0002] Information processing systems include a plurality of processors and a plurality of storage devices. The plurality of storage devices may be organized as a memory hierarchy with multiple hierarchical levels. One type of memory in the memory hierarchy is a flash storage device or a flash memory where processor instructions and data may be retrieved more rapidly than from other storage devices. Efficient data prefetching technique by minimizing resource overhead in many operational scenarios would be desirable.SUMMARY
[0003] The following presents a simplified summary of one or more aspects of the present disclosure, in order to provide a basic understanding of such aspects. This summary is not an extensive overview of all contemplated features of the disclosure, and is intended neither to identify key or critical elements of all aspects of the disclosure nor to delineate the scope of any or all aspects of the disclosure. Its sole purpose is to present some concepts of one or more aspects of the disclosure in a simplified form as a prelude to the more detailed description that is presented later.
[0004] In one aspect, the disclosure provides enhanced data prefetch. Accordingly, the present disclosure discloses a method including: determining if a current command is a read command; determining if a prefetch of one or more subsequent commands should be performed; and initiating the prefetch of the one or more subsequent commands from a flash memory to a local non-transitory memory.
[0005] Another aspect of the disclosure provides an apparatus including: a first non-transitory memory operating at a first speed; a second non-transitory memory operating at a second speed; a third non-transitory memory operating at a third speed, wherein the first speed is at a first higher rate than the second speed, and the second speed is at a second higher rate than the third speed; and a host processor coupled to the first non-transitory memory, the second non-transitory memory and the third non-transitory memory, wherein the host processor is configured to: determine if a current command is a read command; determine if a prefetch of one or more subsequent commands should be performed; and initiate the prefetch of the one or more subsequent commands from the second non-transitory memory to the first non-transitory memory.
[0006] Another aspect of the disclosure provides an apparatus for enhancing data prefetching, the apparatus including: means for fetching a current command with a command data format from a command queue in a flash memory, wherein the current command is placed into a local memory; means for determining if the current command is a read command; means for determining if a prefetch of one or more subsequent commands should be performed; means for initiating the prefetch of the one or more subsequent commands from the flash memory to the local memory; and means for executing the current command and the one or more subsequent commands using a host processor.
[0007] These and other aspects of the present disclosure will become more fully understood upon a review of the detailed description, which follows. Other aspects, features, and implementations of the present disclosure will become apparent to those of ordinary skill in the art, upon reviewing the following description of specific, exemplary implementations of the present invention in conjunction with the accompanying figures. While features of the present invention may be discussed relative to certain implementations and figures below, all implementations of the present invention can include one or more of the advantageous features discussed herein. In other words, while one or more implementations may be discussed as having certain advantageous features, one or more of such features may also be used in accordance with the various implementations of the invention discussed herein. In similar fashion, while exemplary implementations may be discussed below as device, system, or method implementations it should be understood that such exemplary implementations can be implemented in various devices, systems, and methods.BRIEF DESCRIPTION OF THE DRAWINGS
[0008] FIG. 1 illustrates an example prefetch command structure in an information processing system for a prefetch command.
[0009] FIG. 2 illustrates an example flash memory command queue.
[0010] FIG. 3 illustrates an example sequence flow diagram for auto data prefetch.
[0011] FIG. 4 illustrates an example updated attributes and flag table.
[0012] FIG. 5 illustrates a first example updated command data format.
[0013] FIG. 6 illustrates a first example extra header segment (EHS) contents table.
[0014] FIG. 7 illustrates an example storage test benchmark.
[0015] FIG. 8 illustrates an example information processing system with a read booster buffer.
[0016] FIG. 9 illustrates a second example updated command data format.
[0017] FIG. 10 illustrates a second example extra header segment (EHS) contents table.
[0018] FIG. 11 illustrates an example flag table portion associated with a read booster buffer.
[0019] FIG. 12 illustrates an example flow diagram for implementing execution of enhanced data prefetch in a flash memory.DETAILED DESCRIPTION
[0020] The detailed description set forth below in connection with the appended drawings is intended as a description of various configurations and is not intended to represent the only configurations in which the concepts described herein may be practiced. The detailed description includes specific details for the purpose of providing a thorough understanding of various concepts. However, it will be apparent to those skilled in the art that these concepts may be practiced without these specific details. In some instances, well known structures and components are shown in block diagram form in order to avoid obscuring such concepts.
[0021] While for purposes of simplicity of explanation, the methodologies are shown and described as a series of acts, it is to be understood and appreciated that the methodologies are not limited by the order of acts, as some acts may, in accordance with one or more aspects, occur in different orders and / or concurrently with other acts from that shown and described herein. For example, those skilled in the art will understand and appreciate that a methodology could alternatively be represented as a series of interrelated states or events, such as in a state diagram. Moreover, not all illustrated acts may be required to implement a methodology in accordance with one or more aspects.
[0022] In one example, an information processing system may have a memory hierarchy with different levels of memory access times and storage capacity. In one example, a memory with larger storage capacity has a slower memory access time and a memory with smaller storage capacity has a faster memory access time. In one example, a bulk memory is a memory device with large storage capacity but slow memory access time which may be more suitable for bulk storage applications. In one example, a local memory is a memory device with small storage capacity but fast memory access time which may be more suitable for immediate processing applications. In one example, the memory is a non-transitory memory.
[0023] One type of memory with relatively large storage capacity is a flash storage device or flash memory. In one example, the flash memory has relatively slow memory access time and its usage may result in a processor stall (i.e., a period of time where a processor is waiting for memory access either for reading or writing) .
[0024] In one example, prefetching is a commonly used technique in an information processing system where program instructions and data to be executed by a processor are retrieved from bulk memory (e.g., flash memory) and placed into local memory (e.g., cache memory) ahead of their need. In one example, prefetching is performed to minimize processor execution latency. One example of prefetching is prefetching program instructions and data from bulk memory. In one example, the overall goal of prefetching is a reduction of latency or delay in processing or transport of data.
[0025] In one example, a joint electron device engineering council (JEDEC) produces a flash memory specification known as a Universal Flash Storage (UFS) standard. In one example, the UFS standard includes a prefetch command which is used by host software to direct a data transfer of logical data blocks from flash memory to a local memory, e.g., volatile cache memory. In one example, the logical data block to be transferred are specified by a logical block address (LBA) . In one example, a subsequent read command to the same LBA is executed more rapidly since its data is retrieved from the local memory (i.e., cache memory) directly.
[0026] FIG. 1 illustrates an example prefetch command structure 100 in an information processing system for a prefetch command. The example prefetch command structure 100 includes a logical block address (LBA) field 110 and a prefetch length field 120. In one example, the LBA field 110 provides a memory address to a desired logical block of data to be transferred and the prefetch length field 120 specifies a quantity of logical blocks to be transferred.
[0027] In one example, usage of the example prefetch command may be limited since host software may instead send a read command to pre-read the desired logical block of data directly. That is, if the host software is able to determine which LBAs should be read next, there is no need for a prefetch command which represents undesired overhead.
[0028] In one example, if the local memory (e.g., volatile cache memory) size is limited and if the host software sends a prefetch command with a large LBA range to the flash memory, the flash memory may not be able to completely prefetch all desired logical blocks of data associated with the large LBA range. In one example, the host software may instead need to send the prefetch command a plurality of times, with a restricted LBA range.
[0029] In one example, the prefetch command transmission itself adds overhead to the information processing system with additional transactional delay and wasted energy consumption. In one example, usage of the prefetch command may incur a cost greater than its benefits, particularly in random memory read for a small data chunk.
[0030] In one example, three modifications to a prefetching scheme may be used to improve performance. For example, a first modification is a configurable rule for auto data prefetch, specifically for a sequential read scenario (i.e., for consecutive logical blocks) . For example, a second modification is an addition of prefetch hints to a command data format (e.g., a UFS protocol information unit (UPIU) extra head segment (EHS) ) to initiate data prefetch using UFS commands. That is, data prefetch may be performed without explicitly sending a prefetch command. For example, a third modification is an introduction of a read booster buffer as a secondary nonvolatile cache memory. For example, the read booster buffer may be implemented using single level cell (SLC) NAND circuitry. For example, the read booster buffer extends the data prefetch capability beyond the size limitation of the volatile cache memory.
[0031] In one example, in a sequential read scenario, host software may send large data sizes (e.g., 256 kB, 512 kB, 1024 kB, or larger) and read commands with consecutive LBAs (i.e., block count of previous read command + LBA of previous read command = LBA of current read command) to a flash memory. In one example, this sequential read scenario pattern may be detected by the flash memory.
[0032] In one example, the flash memory may execute an auto data prefetch directive when the sequential read scenario pattern is detected. In one example, host software may intervene in the auto data prefetch directive by configuring (1) sequential read command count threshold and (2) auto data prefetch block count. In one example, the sequential read command count threshold determines when the flash memory initiates the auto data prefetch by comparing a count of sequential read commands which are received against the sequential read command count threshold. And, the initiation occurs when the count of sequential read commands which are received exceeds the sequential read command count threshold. In one example, the auto data prefetch block count indicates a quantity of logical data blocks to be prefetched at one time.
[0033] In one example, usage of auto data prefetch directive allows the flash memory to preload data individually prior to transmission of read commands. In one example, the auto data prefetch directive may be specific to a logical unit or may be device wide.
[0034] FIG. 2 illustrates an example flash memory command queue 200. In one example, the example flash memory command queue 200 includes a plurality of commands with a first command 201, a second command 202, a third command 203, a fourth command 204, a fifth command 205, a sixth command 206, a seventh command 207 and an eighth command 208. In one example, the first command 201, the fourth command 204, the fifth command 205, the sixth command 206 and the eighth command 208 are read commands. In one example, the second command 202, the third command 203 and the seventh command 207 are non-read commands.
[0035] FIG. 3 illustrates an example sequence flow diagram 300 for auto data prefetch. In step 310, fetch a command from a command queue. In step 320, determine whether or not the fetched command is a read command. If yes, then proceed to step 330. If no, then return to step 310.
[0036] In step 330, determine whether or not the fetched command is sequential to a previous read command. If yes, then proceed to step 340. If no, then proceed to step 370. In 370, set a sequential read command count value to zero (i.e., set seq_read_command_count =0) and return to step 310.
[0037] In step 340, increment the sequential read command count value by one (i.e., after a sequential read pattern has been detected) . In step 350, compare the sequential read command count value to a sequential read command count threshold value. If the sequential read command count value is greater than or equal to the sequential read command count threshold value, then proceed to step 360. If the sequential read command count value is less than the sequential read command count threshold value, then return to step 310.
[0038] In step 360, perform a data prefetch operation (i.e., after determining the sequential read command count threshold value has been reached by the sequential read command count value) .
[0039] FIG. 4 illustrates an example updated attributes and flag table 400. In one example, the updated attributes and flag table 400 includes an attributes table portion 410 and a flag table portion 420. In one example, the attributes table portion 410 includes a prefetch sequential read command count threshold attribute 411 and a prefetch block count attribute 412. In one example, the flag table portion 420 includes an auto data prefetch enable flag 421. In one example, the auto data prefetch enable flag 421 is a binary value, either disabled or enabled.
[0040] FIG. 5 illustrates a first example updated command data format 500. In one example, the first updated command data format 500 includes a UFS protocol information unit (UPIU) format 510. In one example, the UPIU format 510 includes an extra header segment (EHS) 511 to accommodate additional information in the UPIU format 510.
[0041] FIG. 6 illustrates a first example extra header segment (EHS) contents table 600. In one example, EHS contents 610 of the EHS contents table 600 includes a plurality of EHS elements. In one example, the plurality of EHS elements includes a Length field 611, a EHS Type field 612, a EHS SubType field 613, a Number of Prefetch Hints field 614, a Logical Block Address field 615 and a Prefetch Length field 616.
[0042] In one example, a EHS entry format description table 620 (associated with the EHS contents 610) specifies details for the plurality of EHS elements. For example, the Length field 621 specifies a size of the EHS in 32 byte units. For example, the EHS Type field 622 specifies a EHS type. For example, the EHS type includes a prefetch hint (e.g., with identification index 02h) . For example, the EHS Sub Type field 623 specifies a EHS sub type (i.e., a subset of the EHS type) . For example, the EHS Data field 624 includes data contents which depend on the EHS type and EHS sub type.
[0043] In one example, the volatile cache memory size may be limited which results in a limited logical block address (LBA) range. In one example, the volatile cache memory size limitation may be mitigated through usage of a read booster buffer. In one example, the read booster buffer may function as a secondary non-volatile cache memory to enhance data prefetch performance. For example, the read booster buffer may be implemented using SLC NAND technology. For example, SLC NAND technology facilitates a larger non-volatile flash memory size while providing a faster (e.g., roughly a factor of two) random read performance than triple level cell (TLC) NAND technology.
[0044] FIG. 7 illustrates an example storage test benchmark 700. In one example, the storage test benchmark 700 indicates a random read performance metric, in megabytes per second (MB / s) , for two NAND technologies: SLC NAND technology 710 and TLC NAND technology 720. In one example, the SLC NAND technology 710 performs at approximately 2100 MB / sand the TLC NAND technology 720 performs at approximately 1300 MB / sfor random read operations.
[0045] In one example, the read booster buffer allows the flash memory to execute a data prefetch for a large LBA range. For example, while host software reads data from the flash memory, fetching data from the read booster buffer mitigates a memory size limitation of the flash memory. In one example, usage of SLC NAND technology has a faster random read performance than other NAND technologies (e.g., multi-level cell, such as triple level cell (TLC) , quad level cell (QLC) , TLC NAND, QLC NAND or multi-level cell NAND technologies) .
[0046] In one example, a size of the read booster buffer may be provisioned by host software. For example, there may be a plurality of read booster buffers with varying assignment with different logical units. For example, a single shared read booster buffer may be assigned to a plurality of logical units. In one example, a logical unit is a physical partition on a memory device (e.g., UFS device) . For example, each logical unit is an externally addressable, independent processing entity which processes commands and executes task management functions.
[0047] FIG. 8 illustrates an example information processing system 800 with a read booster buffer. In one example, a host processor 810 includes a read interface 811 for reading data from a plurality of memory devices. In one example, the plurality of memory devices includes a volatile cache memory 820, a read booster buffer 830 and a normal storage device 840. In one example, the read booster buffer 830 is implemented using SLC NAND technology. In one example, the normal storage device is implemented using TLD NAND or QLC NAND technology. In one example, the plurality of memory devices serves as a storage device to retrieve data (i.e., a read buffer) .
[0048] In one example, the read interface 811 includes a fastest read interface 812 to the volatile cache memory 820, a faster read interface 813 to the read booster buffer 830 and a slowest read interface 814 to the normal storage device 840. In one example, the volatile cache memory 820 also includes a first prefetch interface 821 and a first expel interface 822 with the read booster buffer 830. In one example, the read booster buffer 830 also includes a second prefetch interface 831 and a flush interface 832 with the normal storage device 840. In one example, the volatile cache memory 820 also includes a third prefetch interface 841 and a second expel interface 842 with the normal storage device 840.
[0049] In one example, the read booster buffer 830 may also serve as a write buffer (i.e., a storage device to deposit data) . For example, if the host processor 810 writes new data to LBAs which have been prefetched to the read booster buffer 830, the host processor 810 may decide to maintain the new data in the read booster buffer 830 or to move the new data and LBAs to either the normal storage device 840 or a write booster buffer (not shown) .
[0050] In one example, the information processing system 800 may also operate with a device descriptor table 850. In one example, the device descriptor table 850 includes operational parameters for the plurality of memory devices. For example, the device descriptor table 850 includes a Number of Read Booster Allocated Units parameter 851 to specify a memory side for the shared read booster buffer configuration.
[0051] In one example, in addition to using the read booster buffer 830 to store prefetched data using auto prefetch or prefetch hints, the read booster buffer 830 may also be used with other operations. For example, based on a data temperature metric (i.e., a measure of data access frequency) , the host processor 810 may automatically move hot data (i.e., data accessed more frequently) to the read booster buffer 830. For example, the host processor 810 may automatically move cold data (i.e., data accessed less frequently) out of the read booster buffer 830. In one example, the data temperature metric implementation may be vendor implementation specific.
[0052] In one example, a hint in a command data format, for example, in the extra header segment (EHS) in the UPIU format, may be defined to allow host software to indicate that data being read or accessed by a read command should be moved to the read booster buffer. In one example, a Force Read Booster Enable flag may be utilized such that when its value is enabled (e.g., set to 1) , any data accessed by read commands shall be moved to the read booster buffer.
[0053] In one example, the read interface 811 is a multiplex databus. In one example, the fastest read interface 812 is a first databus. In one example, the faster read interface 813 is a second databus. In one example, the slowest read interface 814 is a third databus. In one example, the first databus operates at a first speed, the second databus operates at a second speed and the third databus operates at a third speed. And, in one example, the multiplex databus operates at an aggregate speed. In one example, the aggregate speed equals the sum of the first speed, the second speed and the third speed.
[0054] FIG. 9 illustrates a second example updated command data format 900. In one example, the second updated command data format 900 includes a UFS protocol information unit (UPIU) format 910. In one example, the UPIU format 910 includes an extra header segment (EHS) 911 to accommodate additional information in the UPIU format 910.
[0055] FIG. 10 illustrates a second extra header segment (EHS) contents table 1000. In one example, EHS contents 1010 of the EHS contents table 1000 includes a plurality of EHS elements. In one example, the plurality of EHS elements includes a Length field 1011, a EHS Type field 1012, a EHS SubType field 1013, and a EHS data field 1014.
[0056] In one example, a EHS entry format description table 1020 (associated with the EHS contents 1010) specifies details for the plurality of EHS elements. For example, the Length field 1021 specifies a size of the EHS in 32 byte units. For example, the EHS Type field 1022 specifies a EHS type. For example, the EHS type includes a prefetch hint (e.g., with identification index 02h) and a read to read booster buffer hint (e.g., with identification index 03h) . For example, the EHS Sub Type field 1023 specifies a EHS sub type (i.e., a subset of the EHS type) . For example, the EHS Data field 1024 includes data contents which depend on the EHS type and EHS sub type.
[0057] FIG. 11 illustrates an example flag table portion 1100 associated with a read booster buffer. In one example, the flag table portion 1100 includes a force read booster buffer enable flag 1110. In one example, the force read booster buffer enable flag 1110 is a binary value, either disabled or enabled. In one example, the flag table portion 1100 includes a read booster buffer flush enable flag 1120. In one example, the read booster buffer flush enable flag 1120 is a binary value, either disable a flush operation in the read booster buffer or enable a flush operation in the read booster buffer.
[0058] FIG. 12 illustrates an example flow diagram 1200 for implementing execution of enhanced data prefetch in a flash memory. In block 1210, fetch a current command with a command data format from a command queue in a flash memory, wherein the current command is placed into a local memory. In one example, a current command is fetched, the current command includes a command data format from a command queue in a flash memory, wherein the current command is placed into a local memory.
[0059] For example, the local memory is a volatile cache memory. In one example, the current command is executed by a host processor coupled to the local memory. In one example, the step of block 1210 is performed by a processing engine, a microcontroller, a microprocessor, a system on a chip (SoC) , a central processing unit (CPU) , a host processor plus a local memory, including a cache memory or a random access memory, etc.
[0060] In block 1220, determine if the current command is a read command. In one example, a determination is made on if the current command is a read command. If the command is a read command, then proceed to block 1230. If the command is not a read command, then return to block 1210 and resume operation. In one example, the step of block 1220 is performed by a processing engine, a microcontroller, a microprocessor, a system on a chip (SoC) , a central processing unit (CPU) , a host processor plus a local memory, including a cache memory or a random access memory, etc.
[0061] In block 1230, determine if a prefetch of one or more subsequent commands should be performed. In one example, a determination is made to see if a prefetch of one or more subsequent commands should be performed. In one example, the prefetch of the one or more subsequent commands is determined to be performed if a prefetch hint type is detected in the current command. In one example, the prefetch hint type is contained within a header segment of the command data format. In one example, the prefetch of the one or more subsequent commands is determined to be performed if a read to read booster buffer type is detected in the current command. In one example, the read to read booster buffer type is contained within the header segment of the command data format.
[0062] In one example, the prefetch of the one or more subsequent commands is determined to be performed if a sequential command pattern is detected. In one example, the sequential command pattern is detected when the current command is sequential to a plurality of previous read commands. In one example, a command is sequential if it is adjacent to another command in the command queue. In one example, the sequential command pattern is detected when a sequential read command count value equals or exceeds a sequential read command count threshold value. In one example, the step of block 1230 is performed by a processing engine, a microcontroller, a microprocessor, a system on a chip (SoC) , a central processing unit (CPU) , a host processor plus a local memory, including a cache memory or a random access memory, etc.
[0063] In block 1240, initiate the prefetch of the one or more subsequent commands from the flash memory to the local memory. In one example, the prefetch of the one or more subsequent commands is initiated from the flash memory to the local memory. In one example, the initiation of the prefetch of the one or more subsequent commands uses an auxiliary memory. In one example, the auxiliary memory is a secondary non-volatile cache memory. In one example, the auxiliary memory is a read booster buffer implemented with a single level cell (SLC) NAND technology. In one example, the auxiliary memory is a read booster buffer implemented with a triple level cell (TLC) or quad level cell (QLC) NAND technology. In one example, the step of block 1240 is performed by a processing engine, a microcontroller, a microprocessor, a system on a chip (SoC) , a central processing unit (CPU) , a host processor plus a local memory, including a cache memory or a random access memory, etc.
[0064] In block 1250, execute the current command and the one or more subsequent commands using a host processor. In one example, the current command and the one or more subsequent commands are executed using a host processor. In one example, the execution of the current command and the subsequent commands do not rely on usage of explicit prefetch commands. In one example, the step of block 1250 is performed by a processing engine, a microcontroller, a microprocessor, a system on a chip (SoC) , a central processing unit (CPU) , a host processor plus a local memory, including a cache memory or a random access memory, etc.
[0065] In one example, the prefetch of the one or more subsequent commands is determined to be performed if a prefetch hint type is detected in the current command. In one example, the prefetch hint type is contained within a header segment of a command data format. In one example, the prefetch of the one or more subsequent commands is determined to be performed if a read to read booster buffer type is detected in the current command. In one example, the read to read booster buffer type is contained within a header segment of a command data format. In one example, the prefetch of the one or more subsequent commands is determined to be performed if a sequential command pattern is detected. In one example, the sequential command pattern is detected when the current command is sequential to a plurality of previous read commands. In one example, the sequential command pattern is detected when a sequential read command count value equals or exceeds a sequential read command count threshold value.
[0066] In one example, the method further includes executing the current command and the one or more subsequent commands using a host processor. In one example, the method further includes fetching the current command with a command data format from a command queue in the flash memory, wherein the current command is placed into the local non-transitory memory. In one example, the method further includes using an auxiliary memory for the initiating the prefetch of the one or more subsequent commands.
[0067] In one example, the auxiliary memory is a secondary non-volatile cache memory. In one example, the auxiliary memory is a read booster buffer implemented with a single level cell (SLC) NAND technology. In one example, the auxiliary memory is a read booster buffer implemented with a multi-level cell NAND technology.
[0068] In one example, the apparatus further includes a multiplex databus coupling the host processor to the first non-transitory memory, the second non-transitory memory and the third non-transitory memory. In one example, the multiplex databus is an aggregation of a first databus, a second databus and a third databus, and wherein the first databus couples the first non-transitory memory to the host processor, the second databus couples the second non-transitory memory to the host processor, and the third databus couples the third non-transitory memory to the host processor. In one example, the first databus operates at the first speed, the second databus operates at the second speed and the third databus operates at the third speed. In one example, the multiplex databus operates at an aggregate speed which equals the sum of the first speed, the second speed and the third speed.
[0069] In one aspect, one or more of the steps for providing enhancement of data prefetching in FIG. 12 may be executed by one or more processors which may include hardware, software, firmware, etc. The one or more processors, for example, may be used to execute software or firmware needed to perform the steps in the flow diagram of FIG. 12. Software shall be construed broadly to mean instructions, instruction sets, code, code segments, program code, programs, subprograms, software modules, applications, software applications, software packages, routines, subroutines, objects, executables, threads of execution, procedures, functions, etc., whether referred to as software, firmware, middleware, microcode, hardware description language, or otherwise.
[0070] The software may reside on a computer-readable medium. The computer-readable medium may be a non-transitory computer-readable medium. A non-transitory computer-readable medium includes, by way of example, a magnetic storage device (e.g., hard disk, floppy disk, magnetic strip) , an optical disk (e.g., a compact disc (CD) or a digital versatile disc (DVD) ) , a smart card, a flash memory (e.g., a card, a stick, or a key drive) , a random access memory (RAM) , a read only memory (ROM) , a programmable ROM (PROM) , an erasable PROM (EPROM) , an electrically erasable PROM (EEPROM) , a register, a removable disk, and any other suitable medium for storing software and / or instructions that may be accessed and read by a computer. The computer-readable medium may also include, by way of example, a carrier wave, a transmission line, and any other suitable medium for transmitting software and / or instructions that may be accessed and read by a computer. The computer-readable medium may reside in a processing system, external to the processing system, or distributed across multiple entities including the processing system. The computer-readable medium may be embodied in a computer program product. By way of example, a computer program product may include a computer-readable medium in packaging materials. The computer-readable medium may include software or firmware. Those skilled in the art will recognize how best to implement the described functionality presented throughout this disclosure depending on the particular application and the overall design constraints imposed on the overall system.
[0071] Any circuitry included in the processor (s) is merely provided as an example, and other means for carrying out the described functions may be included within various aspects of the present disclosure, including but not limited to the instructions stored in the computer-readable medium, or any other suitable apparatus or means described herein, and utilizing, for example, the processes and / or algorithms described herein in relation to the example flow diagram.
[0072] Within the present disclosure, the word “exemplary” is used to mean “serving as an example, instance, or illustration. ” Any implementation or aspect described herein as “exemplary” is not necessarily to be construed as preferred or advantageous over other aspects of the disclosure. Likewise, the term “aspects” does not require that all aspects of the disclosure include the discussed feature, advantage or mode of operation. The term “coupled” is used herein to refer to the direct or indirect coupling between two objects. For example, if object A physically touches object B, and object B touches object C, then objects A and C may still be considered coupled to one another-even if they do not directly physically touch each other. The terms “circuit” and “circuitry” are used broadly, and intended to include both hardware implementations of electrical devices and conductors that, when connected and configured, enable the performance of the functions described in the present disclosure, without limitation as to the type of electronic circuits, as well as software implementations of information and instructions that, when executed by a processor, enable the performance of the functions described in the present disclosure.
[0073] One or more of the components, steps, features and / or functions illustrated in the figures may be rearranged and / or combined into a single component, step, feature or function or embodied in several components, steps, or functions. Additional elements, components, steps, and / or functions may also be added without departing from novel features disclosed herein. The apparatus, devices, and / or components illustrated in the figures may be configured to perform one or more of the methods, features, or steps described herein. The novel algorithms described herein may also be efficiently implemented in software and / or embedded in hardware.
[0074] It is to be understood that the specific order or hierarchy of steps in the methods disclosed is an illustration of exemplary processes. Based upon design preferences, it is understood that the specific order or hierarchy of steps in the methods may be rearranged. The accompanying method claims present elements of the various steps in a sample order, and are not meant to be limited to the specific order or hierarchy presented unless specifically recited therein.
[0075] The previous description is provided to enable any person skilled in the art to practice the various aspects described herein. Various modifications to these aspects will be readily apparent to those skilled in the art, and the principles defined herein may be applied to other aspects. Thus, the claims are not intended to be limited to the aspects shown herein, but are to be accorded the full scope consistent with the language of the claims, wherein reference to an element in the singular is not intended to mean “one and only one” unless specifically so stated, but rather “one or more. ” Unless specifically stated otherwise, the term “some” refers to one or more. A phrase referring to “at least one of” a list of items refers to any combination of those items, including single members. As an example, “at least one of: a, b, or c” is intended to cover: a; b; c; a and b; a and c; b and c; and a, b and c. All structural and functional equivalents to the elements of the various aspects described throughout this disclosure that are known or later come to be known to those of ordinary skill in the art are expressly incorporated herein by reference and are intended to be encompassed by the claims. Moreover, nothing disclosed herein is intended to be dedicated to the public regardless of whether such disclosure is explicitly recited in the claims. No claim element is to be construed under the provisions of 35 U.S.C. §112, sixth paragraph, unless the element is expressly recited using the phrase “means for” or, in the case of a method claim, the element is recited using the phrase “step for. ”
[0076] One skilled in the art would understand that various features of different embodiments may be combined or modified and still be within the spirit and scope of the present disclosure.
Claims
1.A method comprising:determining if a current command is a read command;determining if a prefetch of one or more subsequent commands should be performed; andinitiating the prefetch of the one or more subsequent commands from a flash memory to a local non-transitory memory.2.The method of claim 1, wherein the prefetch of the one or more subsequent commands is determined to be performed if a prefetch hint type is detected in the current command.3.The method of claim 2, wherein the prefetch hint type is contained within a header segment of a command data format.4.The method of claim 1, wherein the prefetch of the one or more subsequent commands is determined to be performed if a read to read booster buffer type is detected in the current command.5.The method of claim 4, wherein the read to read booster buffer type is contained within a header segment of a command data format.6.The method of claim 1, wherein the prefetch of the one or more subsequent commands is determined to be performed if a sequential command pattern is detected.7.The method of claim 6, wherein the sequential command pattern is detected when the current command is sequential to a plurality of previous read commands.8.The method of claim 6, wherein the sequential command pattern is detected when a sequential read command count value equals or exceeds a sequential read command count threshold value.9.The method of claim 1, further comprising executing the current command and the one or more subsequent commands using a host processor.10.The method of claim 9, further comprising fetching the current command with a command data format from a command queue in the flash memory, wherein the current command is placed into the local non-transitory memory.11.The method of claim 10, further comprising using an auxiliary memory for the initiating the prefetch of the one or more subsequent commands.12.The method of claim 11, wherein the auxiliary memory is a secondary non-volatile cache memory.13.The method of claim 11, wherein the auxiliary memory is a read booster buffer implemented with a single level cell (SLC) NAND technology.14.The method of claim 11, wherein the auxiliary memory is a read booster buffer implemented with a multi-level cell NAND technology.15.An apparatus comprising:a first non-transitory memory operating at a first speed;a second non-transitory memory operating at a second speed;a third non-transitory memory operating at a third speed, wherein the first speed is at a first higher rate than the second speed, and the second speed is at a second higher rate than the third speed; anda host processor coupled to the first non-transitory memory, the second non-transitory memory and the third non-transitory memory, wherein the host processor is configured to:determine if a current command is a read command;determine if a prefetch of one or more subsequent commands should be performed; andinitiate the prefetch of the one or more subsequent commands from the second non-transitory memory to the first non-transitory memory.16.The apparatus of claim 15, further comprising a multiplex databus coupling the host processor to the first non-transitory memory, the second non-transitory memory and the third non-transitory memory.17.The apparatus of claim 16, wherein the multiplex databus is an aggregation of a first databus, a second databus and a third databus, and wherein the first databus couples the first non-transitory memory to the host processor, the second databus couples the second non-transitory memory to the host processor, and the third databus couples the third non-transitory memory to the host processor.18.The apparatus of claim 17, wherein first databus operates at the first speed, the second databus operates at the second speed and the third databus operates at the third speed.19.The apparatus of claim 18, wherein the multiplex databus operates at an aggregate speed which equals the sum of the first speed, the second speed and the third speed.20.An apparatus for enhancing data prefetching, the apparatus comprising:means for fetching a current command with a command data format from a command queue in a flash memory, wherein the current command is placed into a local memory;means for determining if the current command is a read command;means for determining if a prefetch of one or more subsequent commands should be performed;means for initiating the prefetch of the one or more subsequent commands from the flash memory to the local memory; andmeans for executing the current command and the one or more subsequent commands using a host processor.