Sequential flow detection method and flash memory device
By using the first hash table and linked list combination method in the solid-state drive to identify the sequential flow of concurrent sequential flow and the sequential flow interfered by the random flow, the problem of low efficiency of sequential flow detection in the prior art is solved and the performance of the SSD is improved.
Patent Information
- Application Number
- CN202411583294.5
- Authority / Receiving Office
- CN · China
- Patent Type
- Patents(China)
- Current Assignee / Owner
- Filing Date
- 2024-11-07
- Publication Date
- 2025-10-17
- Estimated Expiration
- 2044-11-07
AI Technical Summary
Existing technologies cannot effectively identify concurrent sequential flows and sequential flows interfered with by random flows in solid-state drives, resulting in low efficiency in sequential flow detection and failure to meet the requirements of high-performance SSDs.
A combination method of the first hash table, the non-sequential flow linked list, and the sequential flow linked list is adopted to identify the sequential flow by querying the starting address and merging the request length, thereby improving the recognition efficiency.
The recognition efficiency of sequential flows is improved, and the concurrent sequential flows and sequential flows interfered with by random flows can be effectively identified, thereby improving the performance of SSD.
Smart Images

Figure CN119620937B_ABST
Abstract
Description
Technical Field
[0001] The present application relates to the field of storage device applications, and in particular to a sequential flow detection method and a flash memory device. Background Art
[0002] A prefetch algorithm, also known as a read-ahead algorithm, is a technique used to improve computer system performance. This algorithm reduces access latency to slow storage devices (such as hard drives or network storage) by loading data into cache or memory before it's needed. Prefetch algorithms play a key role in a variety of applications, including operating systems and databases. Prefetch algorithms are equally important in solid-state drives (SSDs), where effective prefetching significantly improves SSD sequential read performance.
[0003] Sequence flow detection is the core processing component of the prefetching algorithm, used to filter out request sequences that meet the requirements. Currently, sequence flow detection relies on information provided by the host for identification, such as grouping sequence flows by the host's submission queue ID or namespace ID. However, this identification method can only support a maximum of one sequence flow per submission queue or namespace, and sequence flow information is lost when the same sequence flow is sent to different submission queues. Furthermore, because queue IDs and flow identifiers are not strongly correlated with sequence flows, time-localized requests in the same queue may have concurrent sequence flows, and requests under the same flow identifier may be completely random, sequence flows that are interfered with by random flows cannot be identified, resulting in inefficient sequence flow identification. Summary of the Invention
[0004] An embodiment of the present application provides a sequential flow detection method and a flash memory device, which detects the current read request through a first hash table, a non-sequential flow linked list and a sequential flow linked list. The present application can identify sequential flows interfered with by random flows, thereby improving the efficiency of sequential flow recognition.
[0005] The embodiments of this application provide the following technical solutions:
[0006] In a first aspect, an embodiment of the present application provides a method for detecting a sequential flow, the method comprising:
[0007] Get the current read request, where the current read request corresponds to a start address and an end address;
[0008] According to the starting address, query the first hash table to determine whether the starting address exists in the first hash table;
[0009] If the starting address does not exist in the first hash table, determining that the current read request is a non-sequential flow request, and inserting the current read request into a non-sequential flow linked list, wherein the non-sequential flow linked list is used to store historical requests for non-sequential flows;
[0010] If the start address already exists in the first hash table, merging the current read request with the historical requests and increasing the request length of the historical requests of the non-sequential stream linked list;
[0011] Determining whether the request length of the historical requests of the non-sequential stream linked list is greater than the length threshold;
[0012] If yes, determining that the current read request is a sequential stream request, and inserting the current read request into the sequential stream linked list, wherein the sequential stream linked list is used to store the historical requests of the sequential stream;
[0013] If no, determining that the current read request is a non-sequential stream request, and inserting the current read request into the non-sequential stream linked list.
[0014] In some embodiments,
[0015] The non-sequential stream linked list includes a first LRU table, and the sequential stream linked list includes a second LRU table;
[0016] After inserting the current read request into the non-sequential stream linked list, the method further includes:
[0017] If the non-sequential stream linked list is overflowed, obtaining a start address and an end address corresponding to a last read request of the non-sequential stream linked list;
[0018] According to the start address corresponding to the last read request, querying the second hash table to determine whether the start address corresponding to the last read request exists in the second hash table;
[0019] If yes, obtaining a previous read request of the last read request;
[0020] If no, deleting the current read request of the non-sequential stream linked list, and inserting the end address of the current read request into the second hash table.
[0021] In some embodiments,
[0022] The method further includes:
[0023] After obtaining the previous read request of the last read request, repeatedly querying the second hash table to determine whether a start address of the previous read request of the last read request exists in the second hash table;
[0024] If the start address of the previous read request of the last read request exists in the second hash table, repeatedly querying the second hash table until all read requests of the non-sequential stream linked list are traversed;
[0025] If all read requests of the non-sequential stream linked list are traversed, deleting the last read request of the non-sequential stream linked list.
[0026] In some embodiments,
[0027] Merging the current read request with the historical requests comprises:
[0028] Obtaining a first historical request with a same start address as the current read request;
[0029] Modifying an end address of the first historical request to an end address of the current read request to obtain a second historical request;
[0030] The method further comprises:
[0031] Inserting the second historical request into the non-sequential stream linked list and deleting the first historical request.
[0032] In some embodiments,
[0033] The method further comprises:
[0034] After inserting the current read request into the sequential stream linked list, if the sequential stream linked list is overflowed, deleting a last read request of the sequential stream linked list.
[0035] In some embodiments,
[0036] The sequential stream linked list corresponds to a plurality of sequential streams.
[0037] The method further comprises:
[0038] If the current read request is inserted into the sequential stream linked list, updating a latest update time of a sequential stream corresponding to the current read request;
[0039] If a difference between the latest update time of a certain sequential stream and a current time is greater than a time threshold, deleting the certain sequential stream.
[0040] In some embodiments, the first hash table is used to store key-value pairs corresponding to logical block addresses, wherein the key-value pairs comprise keys and hash values, and determining whether the start address exists in the first hash table comprises:
[0041] Calculating a first key corresponding to the start address;
[0042] According to the first key, calculating a first hash value;
[0043] Determining whether the first hash value exists in the first hash table;
[0044] If the first hash value exists in the first hash table, it is determined that the start address exists in the first hash table;
[0045] If the first hash value does not exist in the first hash table, it is determined that the start address does not exist in the first hash table.
[0046] In some embodiments, calculating the first key corresponding to the start address comprises:
[0047] determining a binary value corresponding to the logical block number according to the logical block number corresponding to the start address;
[0048] right shifting the binary value corresponding to the logical block number by M bits to obtain a right-shifted binary value, wherein M is a positive integer;
[0049] converting the right-shifted binary value into a decimal value, and determining the converted decimal value as a first key corresponding to the start address.
[0050] In some embodiments,
[0051] The method further comprises:
[0052] calculating a second key corresponding to an end address of the current read request;
[0053] calculating a second hash value according to the second key;
[0054] if the second hash value is not equal to the first hash value and the second hash value exists in the first hash table, discarding the current read request.
[0055] In some embodiments,
[0056] After obtaining the current read request, the method further comprises:
[0057] obtaining a current detection mode, wherein the detection mode comprises a random stream filtering mode or a sequential stream detection mode;
[0058] if the current detection mode is the random stream filtering mode and it is identified that the current read request is a sequential stream request, switching to the sequential stream detection mode, wherein the sequential stream detection mode comprises: performing the steps after obtaining the current read request;
[0059] if the current detection mode is the sequential stream detection mode and the number of current sequential streams is zero, switching to the random stream filtering mode.
[0060] In some embodiments,
[0061] The random stream filtering mode comprises:
[0062] querying the second hash table according to a start address of the current read request to determine whether the start address exists in the second hash table;
[0063] if the start address exists in the second hash table, merging the current read request with a historical request to obtain a merged request;
[0064] if the start address does not exist in the second hash table, inserting an end address of the current read request into the second hash table.
[0065] In some embodiments, the second hash table is configured to store key-value pairs corresponding to logical block addresses, wherein each key-value pair includes a key and a hash value, and the key is a logical block address, and each slot of the second hash table can store only one key-value pair;
[0066] determining whether the start address exists in the second hash table, including:
[0067] obtaining a third key corresponding to the start address;
[0068] calculating a third hash value according to the third key;
[0069] determining whether the third hash value exists in the second hash table;
[0070] if yes, determining that the start address exists in the second hash table;
[0071] if no, determining that the start address does not exist in the second hash table.
[0072] In some embodiments,
[0073] The method further includes:
[0074] when inserting the end address of the current read request into the second hash table, if a hash collision occurs, replacing the key in the second hash table with the end address, wherein the space of the second hash table is greater than the space of the non-sequential flow linked list, and the space of the second hash table is greater than the space of the sequential flow linked list.
[0075] In a second aspect, the embodiments of the present application provide a flash memory device, including:
[0076] a processor and a memory, the processor being configured to execute executable program codes in the memory, and when the executable program codes are executed, the processor executes instructions of the sequential flow identification method according to the first aspect.
[0077] The beneficial effects of the embodiments of the present application are: different from the prior art, the sequence flow detection method provided by the embodiments of the present application comprises: obtaining a current read request, wherein the current read request corresponds to a starting address and an ending address; querying a first hash table according to the starting address, and determining whether the starting address exists in the first hash table; if the starting address does not exist in the first hash table, it is determined that the current read request is a non-sequential flow request, and the current read request is inserted into a non-sequential flow linked list, wherein the non-sequential flow linked list is used to store historical requests of non-sequential flow; if the starting address already exists in the first hash table, the current read request is combined with the historical request, and the request length of the historical request of the non-sequential flow linked list is increased; it is determined whether the request length of the historical request of the non-sequential flow linked list is greater than a length threshold; if yes, it is determined that the current read request is a sequential flow request, and the current read request is inserted into a sequential flow linked list, wherein the sequential flow linked list is used to store historical requests of sequential flow; if no, it is determined that the current read request is a non-sequential flow request, and the current read request is inserted into the non-sequential flow linked list.
[0078] By querying the first hash table through the starting address of the current read request, if it is determined that the current read request is a non-sequential flow request, the current read request is inserted into the non-sequential flow linked list; and in combination with the request length of the historical request of the non-sequential flow linked list, it is determined whether the current read request is a sequential flow request, and the current read request is inserted into the sequential flow linked list, the application can identify the sequential flow disturbed by the random flow, and improve the identification efficiency of the sequential flow. BRIEF DESCRIPTION OF DRAWINGS
[0079] One or more embodiments are illustrated by way of example in the figures that are part of this disclosure and which are illustrative, but not restrictive, of the embodiments, wherein elements having the same reference number designates like elements throughout the various figures, unless otherwise expressly provided for in the drawings, the figures in the drawings do not constitute a proportional limitation.
[0080] Figure 1 is a structural schematic diagram of a flash memory device provided by the embodiments of the present application;
[0081] Figure 2 is a flowchart of a sequence flow detection method provided by the embodiments of the present application;
[0082] Figure 3 is Figure 2 is a detailed flowchart of step S203 in
[0083] Figure 4 is Figure 2 is a detailed flowchart of step S204 in
[0084] Figure 5 is another flowchart of a sequence flow detection method provided by the embodiments of the present application;
[0085] Figure 6 is a flowchart of a switching detection mode provided by an embodiment of the present application;
[0086] Figure 7 is a schematic diagram of a sequential flow detection mode provided by an embodiment of the present application;
[0087] Figure 8 is a flowchart of a random flow filtering mode provided by an embodiment of the present application;
[0088] Figure 9 is a schematic diagram of a second hash table provided by an embodiment of the present application;
[0089] Figure 10 is a refinement flowchart of step S802 in Figure 8
[0090] Figure 11 is a schematic diagram of a whole flow of a sequential flow detection method provided by an embodiment of the present application;
[0091] Figure 12 is a schematic diagram of another flash memory device provided by an embodiment of the present application.
[0092] BRIEF DESCRIPTION OF THE DRAWINGS
[0093] Reference Name Reference Name 100 Flash memory device 200 Host 110 Flash memory media 120 Controller 121 Processor 122 Memory 123 Flash memory controller 124 Interface DETAILED DESCRIPTION
[0094] In order to make the objectives, technical solutions and advantages of the present application clearer, the present application will be further described in detail below with reference to the accompanying drawings and embodiments. It should be understood that the specific embodiments described herein are only used to explain the present application and should not be used to limit the present application. Based on the embodiments in the present application, all other embodiments obtained by those of ordinary skill in the art without creative labor fall within the scope of the present application.
[0095] It should be noted that each feature in the embodiments of the present application can be combined with each other, and all fall within the scope of the present application. In addition, although the functional modules are divided in the schematic diagram of the device, and the logical order is shown in the flowchart, in some cases, the steps shown or described can be executed in a different order from the module division in the device or the order in the flowchart. Furthermore, the "first", "second", "third" and the like used in the present application do not limit the data and execution order, but only distinguish the same items or similar items with basically the same function and effect.
[0096] Sequential Flow generally refers to a series of tasks, activities or commands executed in a specific order. Sequential flow detection is a core processing part in prefetching algorithms, which is used to filter out request sequences that meet the conditions. For example: in a set of time-ordered I / O requests, extract a continuous interval of address requests, where continuous refers to the logical address seen by the host. According to the characteristics of the address in this continuous interval, it can be simply divided into the following categories:
[0097] (1) Random flow: The address segment of a certain interval request sequence has no obvious order relationship (such as 1919, 114, 810, 514…).
[0098] (2) Strictly continuous increasing sequential flow: The address segment of a certain interval request sequence differs by 1 (such as 1, 2, 3, 4, 5…).
[0099] (3) Non-strict continuous increasing sequential flow: The two consecutive address segments of a certain interval request sequence are not necessarily increasing, but multiple consecutive address segments are increasing (such as 1, 3, 2, 4, 5… (1, 3, 2 is not continuously increasing, but ignoring 3, they are continuously increasing)) or continuously increasing but the difference between consecutive address segments is not 1 (1, 4, 7, 8, 9…).
[0100] (4) Concurrent sequential flow: The address segment of a certain request contains several sequential flows (such as 1, 101, 2, 102, 3, 103…).
[0101] (5) Sequential flow disturbed by random flow: Sequential flow (including 2, 3, 4) contains random flow (such as 1, 541, 2, 312, 3, 4, 4586, 5…).
[0102] With the evolution of SSD technology, random read performance is improving, and some sequential flow detection algorithms cannot keep up with the request processing speed of SSD. Taking an enterprise-level PCIe Gen5 SSD as an example, the number of 4KB random read Input / Output Operations Per Second (IOPS) is large, and if the sequential flow detection speed in the SSD is lower than the maximum IOPS, the prefetching algorithm will miss the cache overflow and unprocessed requests.
[0103] Related technologies include: a simple prefetch algorithm, which monitors all file access requests online and records the last read information of the file. When a new request arrives, in addition to performing normal sequential flow judgment, it is also necessary to judge a variety of abnormal situations, including whether the prefetch function is disabled, whether the peripheral is too busy to prefetch, whether the memory pressure is too high, etc. These abnormal situations make this algorithm complex and inefficient. However, its sequential flow detection logic is relatively simple. The existing SSD prefetch algorithm refers to this strategy, recording the previous request issued by the host and judging whether the current request is continuous with the previous one. If it is continuous, a prefetch is initiated. Because the simple prefetch algorithm only records one historical request, the algorithm cannot capture the sequential flow interfered by concurrent sequential flows and random flows, and cannot identify non-strictly continuous increasing sequential flows.
[0104] Related technologies also include file-based prefetching algorithms, such as the Linux system's on-demand prefetching algorithm, which is used to optimize the performance of concurrent sequential flows. The on-demand prefetching algorithm is logically divided into two parts: a monitoring / triggering part and a matching / execution part. The monitoring part is embedded in the read request process and checks whether prefetch conditions are met before accessing a page. The prefetching condition is accessing a cache-missed page or a prefetch-marked page. The matching part consists of a set of judgment modules that detect patterns such as initial reads, subsequent reads, interleaved reads, and random reads. The Linux kernel maintains a prefetch window for each file, recording the location of the last read request, the start and length of the prefetched page, and the advance amount for asynchronous prefetching. The algorithm memorizes a number of windows equal to the number of files. The prefetch window is updated when a file header is read, a sequential flow is captured, or a prefetch marker is accessed. While this algorithm can effectively capture sequential flows that are disrupted by concurrent sequential flows and random flows, its dependence on the Linux operating system environment makes it difficult to deploy on SSDs.
[0105] Related technologies also include prefetch algorithms that use arrays or skip lists to record historical windows. However, these approaches have high algorithm complexity and low performance. Furthermore, the ability to resist random flow interference and detect concurrent sequential flows is affected by the window size. A larger window improves detection but increases computational complexity, making it difficult to strike a balance between the two.
[0106] Related technologies also include prefetching algorithms that rely on information provided by the host, such as grouping sequence flows by the host's submission queue ID or namespace ID. However, this identification method can only support a single sequence flow per submission queue or namespace, and sequence flow information is lost when the same sequence flow is sent to different submission queues. Furthermore, because queue IDs and flow identifiers are not strongly correlated with sequence flows, and temporally localized requests in the same queue may have concurrent sequence flows, and requests under the same flow identifier may be completely random, sequence flows interfering with random flows cannot be identified, resulting in inefficient sequence flow identification.
[0107] Therefore, the embodiment of the present application provides a sequential flow detection method and a flash memory device. The current read request is detected through a first hash table, a non-sequential flow linked list and a sequential flow linked list, so as to improve the identification efficiency of the sequential flow.
[0108] The technical solutions of the present application will be described below in detail with reference to the accompanying drawings:
[0109] The sequential flow detection method in the embodiment of the present application is applied to a flash memory device, for example, a U disk, an SD card, a microSD card, a CF card, a solid state disk (SSD) and the like. The flash memory device is a storage device taking a semiconductor flash memory (NAND Flash) as a medium. The main components of the flash memory device include a flash memory medium, a flash memory controller, a dynamic random access memory (DRAM) and the like. An important function of the flash memory controller is to act as a driver of the flash memory chip to perform storage operations. The main operations include erasing, writing and reading.
[0110] Please refer to Figure 1 , Figure 1 which is a structural schematic diagram of a flash memory device provided by the embodiment of the present application.
[0111] As shown in Figure 1 , the flash memory device 100 includes a flash memory medium 110 and a controller 120 connected with the flash memory medium 110. The flash memory device 100 is connected with a host 200 in a wired or wireless manner to realize data interaction. For example, the host 200 sends a read request to the flash memory device 100. The read request corresponds to a request pair, which includes a start address and an end address, so that the host 200 can read the data at the corresponding position of the flash memory device 100.
[0112] The flash memory medium 110 is a storage medium of the flash memory device 100, also known as a flash memory, a NAND Flash, a Flash memory or a Flash particle. It is a kind of storage device and a kind of non-volatile memory. It can save data for a long time without current supply. Its storage characteristics are equivalent to a hard disk, so that the flash memory medium 110 can become the basis of the storage medium of various portable digital devices.
[0113] The controller 120 includes a processor 121, a memory 122, a flash memory controller 123 and an interface 124.
[0114] The processor 121 is connected with the memory 122, the flash memory controller 123 and the interface 124 respectively, wherein the processor 121 can be connected with the memory 122, the flash memory controller 123 and the interface 124 through a bus or other manners, and the processor is used for running the non-volatile software programs, instructions and modules stored in the memory 122, so as to realize any one method embodiment of the present application. On this basis, through the development of firmware, the processor is also used for being responsible for the core processing of the flash translation layer (FTL).
[0115] The memory 122 is mainly used for caching the read / write instructions sent by the host 200, and caching the read data or write data obtained from the flash medium 110 according to the read / write instructions sent by the host 200.
[0116] The flash memory controller 123 is connected with the flash medium 110, the processor 121 and the memory 122, and is used for accessing the back-end flash medium 110 and managing various parameters and data I / O of the flash medium 110.
[0117] The interface 124 is connected with the host 200, the processor 121 and the memory 122, and is used for receiving the data sent by the host 200 or receiving the data sent by the processor 121, realizing the data transmission between the host 200 and the processor 121, and the interface 124 can be a SATA-2 interface, a SATA-3 interface, a SAS interface, a MSATA interface, a PCI-E interface, a NGFF interface, a CFast interface, a SFF-8639 interface and an M.2 NVME / SATA protocol.
[0118] Please refer to Figure 2 , Figure 2 is a flowchart of a sequential flow detection method provided by the embodiment of the present application.
[0119] As Figure 2 shown, the flow of the sequential flow detection method includes:
[0120] Step S201: obtaining a current read request, wherein the current read request corresponds to a start address and an end address.
[0121] Specifically, the current read request is sent by a host to a flash device, the current read request corresponds to a request pair, and the request pair includes a start address and an end address, wherein the start address and the end address are logical block addresses (LBA), and the logical block address can be represented by a logical block number.
[0122] Step S202: querying a first hash table according to the start address.
[0123] Specifically, the first hash table is a sequential flow hash table, and the first hash table is used to store a key-value pair corresponding to a logical block address, the key-value pair including a key and a hash value.
[0124] Step S203: determining whether the start address exists in the first hash table.
[0125] Specifically, please refer to Figure 3 , Figure 3 is Figure 2 the detailed flowchart of step S203.
[0126] As shown in Figure 3 , the step S203 includes:
[0127] Step S2031: calculating a first key corresponding to the start address.
[0128] Specifically, the start address corresponds to a logical block number, that is, the start address is represented by a logical block number, and calculating the first key corresponding to the start address includes the following steps (1)-(3):
[0129] Step (1): determining a binary value corresponding to the logical block number according to the logical block number corresponding to the start address.
[0130] Specifically, the logical block number is a decimal value, and determining the binary value corresponding to the logical block number includes converting the decimal value corresponding to the logical block number into a binary value, for example, the logical block number is 3, and the binary value is 11.
[0131] Step (2): right shifting the binary value corresponding to the logical block number by M bits to obtain a right-shifted binary value, wherein M is a positive integer.
[0132] It can be understood that the right shift operation is for the binary value, for example, the logical block number is 3 in decimal, and the binary value is 11, and right shifting one bit becomes 1.
[0133] In the embodiments of the present application, M is a positive integer, M is the number of bits of right shift, and the value of M can be set according to specific needs, for example, M=1 or 2, and preferably, the value of M is 1.
[0134] Step (3): converting the right-shifted binary value into a decimal value, and determining the converted decimal value as the first key corresponding to the start address.
[0135] For example, the right-shifted binary value is 1, and the converted decimal value is also 1, and at this time, the first key corresponding to the start address is 1.
[0136] In the embodiment of the present application, the value obtained by right shifting the binary value corresponding to the start address by M bits is taken as the first key (key). Due to the determinacy of the hash function, the same key (key) is input into the hash function, and the hash value (value) calculated is the same, so that the hash values of the logical block addresses (LBAs) in a certain range are determined to be the same, and the sequential stream in the form of non-strictly continuous increment can be identified, for example:
[0137] Suppose M=1, that is, the logical block number is right shifted by 1 bit to obtain the key. Suppose that there is a non-strictly continuous increment stream at this time, and the logical block numbers are (1, 3, 4, 5, 6, 7, 9…). At this time, the corresponding binary numbers are (01, 11, 100, 101, 110, 111, 1001…). After right shifting by 1 bit, the binary numbers obtained are (0, 1, 10, 10, 11, 11, 100…). The keys corresponding to the binary numbers are (0, 1, 2, 2, 3, 3, 4…). At this time, the keys corresponding to the logical block numbers 4 and 5 are the same, and the keys corresponding to the logical block numbers 6 and 7 are also the same. Suppose that the next logical block number is 11 at this time. For a simple prefetch algorithm, since there is no logical block number 10 in the historical request, the current logical block number cannot be considered to form a sequential stream with the historical request. However, according to the present application, the key (key) of the historical request is checked, for example, the key corresponding to the logical block number 11 is 5. At this time, it is determined that there is 4 in the first hash table, and the key corresponding to 9 is 4, so it is determined to be continuous, and thus the sequential stream is identified, and the identification accuracy of the sequential stream is improved.
[0138] Step S2032: calculating a first hash value according to the first key.
[0139] Specifically, the first key is calculated by using a hash function to obtain the first hash value.
[0140] It can be understood that the hash function is an algorithm for converting input data (such as a string, a number, etc.) into a hash value. For the same input, the hash function always returns the same hash value, that is, the same hash value (value) can be calculated according to the same key (key).
[0141] In the embodiment of the present application, the hash function includes a simple hash function, an addition hash function, a multiplication hash function, a string hash function, a cryptography hash function, etc.
[0142] Step S2033: determining whether the first hash value exists in the first hash table.
[0143] The first hash table is used to record a logical block address corresponding to a historical request. Specifically, the first hash table is used to store a key value pair corresponding to a logical block address, i.e., a key and a hash value. It can be understood that the historical request refers to a historical read request.
[0144] By searching the first hash table, if the first hash table contains the first hash value, it is determined that the first hash value exists in the first hash table, which means that the key corresponding to the start address exists in the first hash table. At this time, step S2033 is entered.
[0145] If the first hash table does not contain the first hash value, it is determined that the first hash value does not exist in the first hash table, which means that the key corresponding to the start address does not exist in the first hash table. At this time, step S2034 is entered.
[0146] Step S2033: determining that the start address exists in the first hash table.
[0147] Specifically, if the first hash value exists in the first hash table, it is determined that the start address exists in the first hash table. It can be understood that if the first hash value exists in the first hash table, it means that the current read request can be corresponded to a historical request, i.e., the start addresses of the current read request and the historical request are the same. At this time, the current read request and the historical request can be merged.
[0148] Step S2034: determining that the start address does not exist in the first hash table.
[0149] Specifically, if the first hash value does not exist in the first hash table, it is determined that the start address does not exist in the first hash table.
[0150] Step S204: merging the current read request and the historical request.
[0151] Specifically, if the start address exists in the first hash table, the current read request and the historical request are merged.
[0152] Specifically, please refer to Figure 4 , Figure 4 is Figure 2 the detailed flowchart of step S204 in
[0153] As shown in Figure 4 , the step S204 includes:
[0154] Step S2041: obtaining a first historical request with the same start address as the current read request.
[0155] Specifically, according to the start address of the current read request, a first historical request with the same start address as the current read request is searched from the non-sequential flow linked list.
[0156] Step S2042: modifying the end address of the first historical request as the end address of the current read request to obtain a second historical request.
[0157] Specifically, after obtaining the first historical request, the end address of the first historical request is modified as the end address of the current read request to obtain a second historical request, wherein the request pair corresponding to the second historical request is (the start address of the current read request, the end address of the current read request).
[0158] In the embodiment of the present application, after obtaining the second historical request, the method further comprises:
[0159] inserting the second historical request into the non-sequential stream linked list and deleting the first historical request.
[0160] By deleting the first historical request and inserting the second historical request into the non-sequential stream linked list, the historical requests in the non-sequential stream linked list can be updated, which is conducive to the identification of the sequential stream.
[0161] Step S205: increasing the request length of the historical request of the non-sequential stream linked list.
[0162] Specifically, the non-sequential stream linked list corresponds to a request length, which is used to record the number of times of hits of the historical request in the non-sequential stream linked list, for example: when the historical request is hit once, the request length is increased by one, thereby obtaining the updated request length. In the embodiment of the present application, the initial request length can be set according to specific needs, for example: set to zero.
[0163] After the current read request is merged with the historical request, i.e., the current read request is merged with the first historical request, the request length of the historical request of the non-sequential stream linked list is increased.
[0164] Step S206: judging whether the request length of the historical request of the non-sequential stream linked list is greater than a length threshold value.
[0165] Specifically, the length threshold value is set according to specific needs, for example: it can be set according to the number of commands of the sequential stream in the business model or business process, wherein the number of commands refers to the number of specific tasks or activities that need to be executed in the entire business model or business process, for example: in the business process, the number of commands of the sequential stream can directly reflect the number of specific tasks that need to be executed by the participants, at this time, the length threshold value can be set to be the same as the number of commands of the sequential stream in the business model or business process, for example: if the number of commands is 8, the length threshold value is set to 8. By judging whether the request length of the historical request of the non-sequential stream linked list is greater than the length threshold value, if the request length is greater than the length threshold value, it means that the historical request in the non-sequential stream linked list is hit multiple times, at this time, it is determined that the current read request is a sequential stream request, i.e., step S209 is entered.
[0166] Step S207: determining that the current read request is a non-sequential stream request.
[0167] Specifically, if the request length of the historical requests in the non-sequential stream list is less than or equal to the length threshold, it is determined that the current read request is a non-sequential stream request.
[0168] Step S208: inserting the current read request into the non-sequential stream list.
[0169] Specifically, if it is determined that the current read request is a non-sequential stream request, the current read request is inserted into the non-sequential stream list.
[0170] Step S209: determining that the current read request is a sequential stream request.
[0171] Specifically, if the request length of the historical requests in the non-sequential stream list is greater than the length threshold, it is determined that the current read request is a sequential stream request.
[0172] Step S210: inserting the current read request into the sequential stream list.
[0173] Specifically, if it is determined that the current read request is a sequential stream request, the current read request is inserted into the sequential stream list.
[0174] In the embodiments of the present application, after the current read request is inserted into the sequential stream list, it is further determined whether the sequential stream list is overflowed, so as to perform corresponding operations.
[0175] Specifically, after the current read request is inserted into the sequential stream list, if the sequential stream list is overflowed, the last read request in the sequential stream list is deleted. Specifically, the sequential stream list is overflowed, including that the request length of the historical requests in the sequential stream list exceeds the maximum length of the sequential stream list.
[0176] In the embodiments of the present application, the sequential stream list includes a second LRU table, and the last read request in the sequential stream list is the least recently used read request in the second LRU table, for example, the historical request that is added to the second LRU table earliest.
[0177] In the embodiments of the present application, the sequential stream list corresponds to multiple sequential streams, one sequential stream corresponds to one stream object, and after processing the current read request, various related information can be saved into the created or merged stream object. The present application also records the number of created stream objects in real time, and records whether a certain stream object is a sequential stream, and whether the request length of each stream object exceeds the length threshold.
[0178] In the embodiments of the present application, since only the logical address information, i.e. the logical block address, of the current read request is relied on, the present application can more effectively identify the sequential stream, and improve the identification efficiency.
[0179] In the embodiment of the present application, after the current read request is inserted into the non-sequential flow linked list, it is further judged whether the non-sequential flow linked list is overflowed, and corresponding operation is performed.
[0180] Specifically, please refer to Figure 5 , Figure 5 is another flow chart of the detection method of the sequential flow provided by the embodiment of the present application.
[0181] As Figure 5 shown, another flow of the detection method of the sequential flow includes:
[0182] Step S501: inserting a current read request into a non-sequential flow linked list.
[0183] Step S502: if the non-sequential flow linked list is overflowed, obtaining a start address and an end address corresponding to a last read request of the non-sequential flow linked list.
[0184] Specifically, the non-sequential flow linked list is used for storing non-sequential flow requests, and the maximum length of the non-sequential flow linked list is limited. After the current read request is inserted into the non-sequential flow linked list, if the non-sequential flow linked list is overflowed, specifically, the non-sequential flow linked list is overflowed, including that the length of the historical request of the non-sequential flow linked list exceeds the maximum length of the non-sequential flow linked list. If the length of the historical request at this time exceeds the maximum length of the non-sequential flow linked list, the start address and the end address corresponding to the last read request of the non-sequential flow linked list are obtained.
[0185] Step S503: querying a second hash table according to the start address corresponding to the read request.
[0186] Specifically, the second hash table is a non-sequential flow hash table or a random flow hash table, and the second hash table is used for storing logical block addresses. The logical block address in the second hash table is a hash value of the second hash table, and each slot of the second hash table can store only one key-value pair.
[0187] Step S504: judging whether the start address corresponding to the read request exists in the second hash table.
[0188] Specifically, the last read request is taken as the current read request, and it is judged whether the start address corresponding to the current read request exists in the second hash table, that is, whether the current read request hits the second hash table. If the start address corresponding to the current read request exists in the second hash table, step S505 is entered.
[0189] If the start address corresponding to the current read request does not exist in the second hash table, step S506 is entered.
[0190] Step S505: judging whether all read requests of the non-sequential flow linked list are traversed.
[0191] Specifically, after the current read request hits the second hash table, the previous read request of the current read request needs to be obtained in the non-sequential flow linked list. Therefore, it is necessary to determine whether all read requests in the non-sequential flow linked list are traversed, so as to confirm whether the previous read request of the current read request can be obtained.
[0192] If all read requests in the non-sequential flow linked list are traversed, step S508 of deleting the last read request in the non-sequential flow linked list is performed.
[0193] If all read requests in the non-sequential flow linked list are not traversed, it means that the previous read request of the current read request can be obtained. At this time, step S506 of obtaining the previous read request of the read request is performed.
[0194] Step S506 of obtaining the previous read request of the read request is performed.
[0195] Specifically, if all read requests in the non-sequential flow linked list are not traversed, the previous read request of the current read request is obtained in the non-sequential flow linked list, and the previous read request of the current read request is taken as a new current read request, so as to further repeat step S503 and steps subsequent to step S503.
[0196] Step S507 of deleting the current read request in the non-sequential flow linked list is performed.
[0197] Specifically, if the start address corresponding to the current read request does not exist in the second hash table, the current read request in the non-sequential flow linked list is deleted.
[0198] Step S508 of deleting the last read request in the non-sequential flow linked list is performed.
[0199] Specifically, if all read requests in the non-sequential flow are traversed, the last read request in the non-sequential flow linked list is deleted.
[0200] In the embodiment of the present application, when the read request is eliminated in the non-sequential flow linked list, the second hash table records the historical requests eliminated in the past. When the elimination is performed, the non-sequential flow linked list is traversed from the end, that is, the last read request in the non-sequential flow linked list is searched, the first read request that fails to hit the second hash table is found, is recorded and eliminated, so that the potential sequential flow can be preferentially retained, and the probability of identifying the sequential flow can be improved under a higher random flow ratio.
[0201] In the embodiment of the present application, in order to optimize the scenario of only random read requests and accelerate the processing speed of the algorithm, two different detection modes are set. When certain conditions are met, the detection modes need to be switched to perform detection.
[0202] Specifically, please refer to Figure 6 ,Figure 6 is a flowchart of a switching detection mode provided by an embodiment of the present application.
[0203] As shown in the flowchart of the switching detection mode, Figure 6 comprises the following steps.
[0204] Step S601: Obtain the current detection mode.
[0205] The detection mode comprises a random stream filtering mode or a sequential stream detection mode. When starting detection, the default detection mode is the random stream filtering mode. That is, in the initial state, the detection mode is the random stream filtering mode. If a sequential stream request is identified in the random stream filtering mode, the random stream filtering mode is switched to the sequential stream detection mode.
[0206] Step S602: Determine whether the current detection mode is the random stream filtering mode.
[0207] Specifically, if the current detection mode is the random stream filtering mode, proceed to step S603: Identify that the current read request is a sequential stream request.
[0208] Step S603: Identify that the current read request is a sequential stream request.
[0209] Specifically, if the start address of the current read request already exists in the first hash table, and the request length of the historical request of the non-sequential stream linked list is greater than the length threshold, it is determined that the current read request is a sequential stream request. At this time, proceed to step S604.
[0210] It can be understood that the specific content of identifying whether the current read request is a sequential stream request can refer to the related content in the above embodiments, which will not be described here.
[0211] Step S604: Switch to the sequential stream detection mode.
[0212] Specifically, if the current read request is a sequential stream request, switch to the sequential stream detection mode. The sequential stream detection mode comprises the following steps.
[0213] According to the start address of the current read request, query the first hash table to determine whether the start address exists in the first hash table.
[0214] If the start address does not exist in the first hash table, it is determined that the current read request is a non-sequential stream request, and the current read request is inserted into the non-sequential stream linked list. The non-sequential stream linked list is used to store the historical requests of the non-sequential stream.
[0215] If the start address already exists in the first hash table, the current read request is combined with the historical request, and the request length of the historical request of the non-sequential stream linked list is increased.
[0216] determining whether the request length of the history request of the non-sequential flow linked list is greater than a length threshold.
[0217] If yes, determining that the current read request is a sequential flow request, and inserting the current read request into a sequential flow linked list, wherein the sequential flow linked list is used to store history requests of sequential flows.
[0218] If no, determining that the current read request is a non-sequential flow request, and inserting the current read request into a non-sequential flow linked list.
[0219] It can be understood that in the sequential flow detection mode, all failed read requests will create new history requests, unless there is a coincident history request. The coincident history request refers to a request with the same start address and end address.
[0220] In order to improve the detection capability of sequential flows with random flow interference under limited resources, the sequential flow detection mode corresponds to a sequential flow linked list and a non-sequential flow linked list, wherein the non-sequential flow linked list includes a first LRU table, and the sequential flow linked list includes a second LRU table.
[0221] In the sequential flow detection mode, a newly created read request is inserted into the non-sequential flow linked list. Only when the length of a history request in the non-sequential flow linked list exceeds a threshold, the history request is identified as a sequential flow, and is allocated with a cache and other resources and hung in the sequential flow linked list. Therefore, if a flow has been identified as a sequential flow, only a new sequential flow can eliminate it, and a random flow can only eliminate a history request that has not formed a sequential flow.
[0222] Please refer to Figure 7 , Figure 7 is a schematic diagram of a sequential flow detection mode provided by an embodiment of the present application.
[0223] As shown in Figure 7 , the sequential flow detection mode corresponds to a sequential flow linked list and a non-sequential flow linked list. In the initial state, the sequential flow linked list and the non-sequential flow linked list are empty. When a read request is obtained, a second hash table, i.e., a non-sequential flow hash table, is queried. If no history request is found, i.e., the start address of the current read request does not exist in the second hash table, the end address of the current read request is inserted into the second hash table. When the second hash table is inserted, a node of the second hash table will point to the current read request.
[0224] After the logical block address (LBA) is right shifted, a key is obtained, wherein the sequential flow detection mode corresponds to a first hash table, the first hash table includes a plurality of slots, each slot includes at least one node, and each node is used to store a key-value pair including the key and a hash value. By comparing the hash value corresponding to the starting address of the current read request with the hash value in the first hash table, it can be determined whether the current read request hits the first hash table, and further combined with the request length of the historical request of the non-sequential flow linked list, to determine whether to insert the current read request into the non-sequential flow linked list or the sequential flow linked list. The application can identify the sequential flow disturbed by the random flow, and improve the identification efficiency of the sequential flow.
[0225] The working process of the sequential flow detection mode will be described in detail below, including the following steps:
[0226] (1) The starting address of the input current read request is queried in the first hash table. If it hits, that is, the starting address of the current read request is located in the first hash table, step (2) is entered. If it does not hit, that is, the starting address of the current read request is not located in the first hash table, step (5) is entered.
[0227] (2) The current read request is merged with the historical request in the non-sequential flow linked list, the corresponding historical request in the non-sequential flow linked list is deleted, and the request length of the historical request in the non-sequential flow linked list is increased.
[0228] (3) It is judged whether the request length of the historical request of the non-sequential flow linked list is greater than the length threshold. If yes, step (4) is entered. If no, step (5) is entered.
[0229] (4) The current read request is inserted into the sequential flow linked list, and the sequential flow request pair is output. If the sequential flow linked list overflows, the last read request of the sequential flow linked list is eliminated, and step (7) is entered.
[0230] (5) The current read request is inserted into the non-sequential flow linked list. If the non-sequential flow linked list overflows, the request pair corresponding to the last read request of the non-sequential flow linked list is obtained, and step (6) is entered. If the non-sequential flow linked list does not overflow, step (7) is entered.
[0231] (6) The starting address of the current read request is queried in the second hash table, wherein the last read request of the non-sequential flow linked list is the current read request. If it hits, that is, the starting address of the last read request is located in the second hash table, the last read request of the non-sequential flow linked list is deleted, and step (6) is repeated. If it hits, but all read requests of the non-sequential flow linked list have been traversed, the last read request of the non-sequential flow linked list is directly deleted.
[0232] If not hit, i.e. the start address of the last read request is not located in the second hash table, the current read request of the non-sequential flow linked list is deleted, and the end address of the current read request is inserted in the second hash table.
[0233] In the embodiments of the present application, the potential sequential flow can be retained through the elimination mechanism, thereby improving the sequential flow identification capability in the scenario where there are a large number of random flows.
[0234] In the embodiments of the present application, in the sequential flow detection mode, the sequential flow linked list corresponds to a plurality of sequential flows, and the method further comprises:
[0235] If the current read request is inserted into the sequential flow linked list, the latest update time of the sequential flow corresponding to the current read request is updated; if the difference between the latest update time of a certain sequential flow and the current time is greater than a time threshold, the sequential flow is deleted.
[0236] Specifically, if the current read request is inserted into the sequential flow linked list, the latest update time of the sequential flow corresponding to the current read request is updated to the current time, and the difference between the latest update time and the current time is calculated in real time; if the difference between the latest update time of a certain sequential flow and the current time is greater than a time threshold, the sequential flow is deleted.
[0237] It can be understood that when a flow that has been identified as a sequential flow receives a new request, i.e. the new request is combined with the historical request, it indicates that the flow still exists, and the time of the flow is updated.
[0238] In the embodiments of the present application, a timer is set to record the latest update time of each sequential flow, so as to determine the difference between the latest update time of each sequential flow and the current time. It can be understood that the timer is triggered upon power-on and always exists, for example, it is triggered once per second; when the timer is triggered, the timer related function is executed to detect the state of the sequential flow; if the current time of a certain sequential flow is more than a time threshold from the last update time, for example, the time threshold is 5 seconds, if the current time of a certain sequential flow is more than 5 seconds from the last update time, the flow is eliminated.
[0239] The sequential flow that is not updated for a long time is determined by the time threshold, so as to eliminate the sequential flow that is not updated for a long time, and release the cache and other resources in time, thereby improving the hit rate of prefetching.
[0240] Further, after all the resources corresponding to the sequential flows are released, the current detection mode is switched from the sequential flow detection mode to the random flow filtering mode.
[0241] In the embodiments of the present application, in the sequential flow detection mode, there may be abnormal scenarios, therefore, the abnormal scenarios need to be processed, for example:
[0242] When two or more different sequential streams or random streams have the same read address at a certain moment, the following scenario can occur: the hash values of the start address and the end address of the current read request are not equal, and the hash value corresponding to the end address can hit the hash table, at which time a new historical request cannot be created to the non-sequential stream linked list, and the current read request needs to be discarded.
[0243] Specifically, a first hash value corresponding to the start address of the current read request is calculated, and a second hash value corresponding to the end address of the current read request is calculated; if the second hash value is not equal to the first hash value, and the second hash value exists in the first hash table, the current read request is discarded.
[0244] It can be understood that the judgment method of whether the second hash value exists in the first hash table is the same as the judgment method of whether the first hash value exists in the first hash table, which will not be repeated here.
[0245] In the embodiments of the present application, in the scenario where the hash values of the start address and the end address of the current read request are not equal, and the hash value corresponding to the end address can hit the hash table, the plurality of sequential streams only need to be identified as one sequential stream, and the principle of prefetching is to take the data to the cache in advance. Since the trigger condition of prefetching is relatively loose, for example, if two streams read the same range, if lba3 already exists, regardless of which stream creates it, a pre-reading can be triggered to read the data to the cache. Therefore, at this time, the current read request can be discarded directly, thereby avoiding more complex calculation overheads and improving the identification efficiency of the sequential stream.
[0246] It can be understood that in the concurrent sequential stream scenario, since there is a resource upper limit, for example, the cache resource is limited, therefore, the sequential stream needs to be eliminated.
[0247] For example, in the concurrent sequential stream scenario, assuming that the maximum number of identifiable sequential streams is N, when the number of sequential streams exceeds N, the completely interleaved sequential streams will cause the sequential stream linked list to jitter, and the sequential stream cannot be effectively identified. However, when the sequential stream resource is insufficient, the existing sequential stream can be retained, and the newly identified sequential stream does not eliminate the old sequential stream, and the old sequential stream is only eliminated after timeout. Therefore, when the number of sequential streams exceeds the allowed resource upper limit, a suitable elimination strategy needs to be selected according to the actual scenario, for example, when the current read request is inserted into the sequential stream linked list, if the number of sequential streams exceeds N, at this time, the sequential stream linked list will not eliminate the existing stream, and the new stream will not be put into the sequential stream linked list due to insufficient resources, and continue to be retained in the non-sequential stream linked list for updating.
[0248] Through the elimination strategy, the prefetching of N sequential streams can be retained to prevent the sequential stream linked list from jittering, so as to effectively identify the sequential stream, which is beneficial to improve the identification efficiency of the sequential stream.
[0249] (7) End the workflow of sequential stream detection.
[0250] Step S605: The number of current sequential streams is zero.
[0251] Specifically, if the number of current sequential streams is zero, i.e., the number of sequential streams in the sequential stream linked list is zero, it means that there is no sequential stream at this time, and all are random streams, at this time, the random stream filtering mode can be switched to.
[0252] Step S606: Switch to the random stream filtering mode.
[0253] Specifically, if the current detection mode is not the random stream filtering mode, i.e., the current detection mode is the sequential stream detection mode, at this time, if the number of current sequential streams is zero, the sequential stream detection mode is switched to the random stream filtering mode.
[0254] Specifically, please refer to Figure 8 , Figure 8 is a flowchart of a random stream filtering mode provided by an embodiment of the present application.
[0255] As Figure 8 shown, the flowchart of the random stream filtering mode includes:
[0256] Step S801: According to the starting address of the current read request, query the second hash table.
[0257] The second hash table is a non-sequential stream hash table or a random stream hash table, and the second hash table is used to store the key-value pair corresponding to the logical block address.
[0258] Please refer to Figure 9 , Figure 9 is a schematic diagram of a second hash table provided by an embodiment of the present application.
[0259] As Figure 9 shown, the logical block address (lba) is the key (key) of the second hash table, the second hash table includes multiple slots (slots), each slot can store only one node (node), and each node is used to store a key-value pair, the key-value pair includes the key (key) and the hash value (value), i.e., each slot (slot) can store only one key-value pair.
[0260] In the embodiment of the present application, in the random stream filtering mode, in order to avoid identifying a certain range of logical block addresses (lb a) as continuous, the logical block address itself is taken as the hash value.
[0261] Step S802: Determine whether the starting address exists in the second hash table.
[0262] Please refer to Figure 10 , Figure 10 yes Figure 8 Detailed flowchart of step S802 in .
[0263] like Figure 10 As shown, step S802 includes:
[0264] Step S8021: Obtain the third key corresponding to the starting address.
[0265] Specifically, the starting address corresponds to a logical block number, that is, the starting address is represented by the logical block number. Since the key in the second hash table is the logical block address itself, the logical block number corresponding to the starting address is directly used as the third key.
[0266] Step S8022: Calculate a third hash value based on the third key.
[0267] Specifically, the third key is calculated using a hash function to obtain a third hash value.
[0268] Step S8023: Determine whether the third hash value exists in the second hash table.
[0269] The second hash table is used to record the logical block addresses corresponding to the historical requests. Specifically, the second hash table is used to record the key-value pairs corresponding to the logical block addresses corresponding to the historical requests, that is, the keys and the hash values. Each slot of the second hash table can store only one key-value pair.
[0270] By searching the second hash table, it is determined whether the third hash value, that is, the logical block number corresponding to the logical block address, exists in the second hash table.
[0271] If the third hash value exists in the second hash table, it means that the key corresponding to the starting address exists in the second hash table. At this time, the process proceeds to step S8024: determining whether the starting address exists in the second hash table.
[0272] If the third hash value does not exist in the second hash table, it means that the key corresponding to the starting address does not exist in the second hash table. In this case, the process proceeds to step S8025: determining whether the starting address exists in the second hash table.
[0273] Step S8024: Determine whether the start address exists in the second hash table.
[0274] Specifically, if the third hash value exists in the second hash table, it is determined that the start address exists in the second hash table.
[0275] Step S8025: Determine whether the start address exists in the second hash table.
[0276] Specifically, if the third hash value does not exist in the second hash table, it is determined that the start address does not exist in the second hash table.
[0277] Step S803: merging the current read request with the historical request to obtain a merged request.
[0278] Specifically, if the start address exists in the second hash table, the current read request is merged with the historical request to obtain a merged request.
[0279] Specifically, merging the current read request with the historical request to obtain a merged request comprises:
[0280] According to the start address of the current read request, searching for a historical request with the same start address as the current read request from the non-sequential stream linked list; modifying the end address of the historical request to the end address of the current read request to obtain a merged historical request.
[0281] In the embodiment of the present application, if the start address exists in the second hash table, it means that the current read request is continuous with the historical request in the non-random stream linked list, at this time, it is necessary to switch to the sequential stream detection mode, that is, the merged request is detected through the sequential stream detection mode, and the specific detection content can refer to the related content mentioned in the above embodiment, which will not be described here.
[0282] Step S804: inserting the end address of the current read request into the second hash table.
[0283] Specifically, if the start address does not exist in the second hash table, the end address of the current read request is inserted into the second hash table.
[0284] It can be understood that since the hash value corresponding to the end address of the current read request may have a hash conflict with the hash value corresponding to the key in the second hash table, that is, the hash value calculated by taking the end address of the current read request as the key is repeated with a certain hash value in the second hash table, at this time, since a slot can only save one key-value pair, the original slot is directly overwritten, that is, the key-value pair corresponding to the end address of the current read request is saved to the node of the slot in the second hash table to update the node of the original slot corresponding to the hash conflict, thereby realizing the hash table with conflict coverage.
[0285] It can be understood that the hash value is an integer value of a fixed size calculated by a hash function from the input key. The hash value is used to determine the storage location (i.e. slot or index) of the key in the hash table.
[0286] In the random stream filtering mode, the algorithm does not strictly save the past N historical requests, but uses a second hash table, i.e., a collision-override hash table, to record the historical requests instead of the LRU table. It should be noted that collision override means that the size of the slot of the hash table is only 1, and when the hash table is inserted, if the position to be inserted already exists a valid element, the element is directly overwritten. The application uses hash collision to replace the history window of first-in-first-out, although the collision override is not the longest-unvisited request, but it can guarantee the fast insertion of new requests.
[0287] In order to improve the hit rate, the space of the second hash table is greater than that of the non-sequential stream linked list, and greater than that of the sequential stream linked list, for example: the size of the second hash table is set to X times (X>1) of the size of the non-sequential stream linked list, and X is an adjustable parameter. The second hash table is a non-sequential stream hash table or a random stream hash table, and the non-sequential stream linked list is an LRU table.
[0288] In the application embodiment, in the scenario of sequential stream, it is assumed that the number of concurrent sequential streams is M. In some extreme cases, all concurrent sequential stream requests are completely interleaved, i.e., there is no spatiotemporal continuous request, and the first request of each stream all occurs hash collision, which makes the collision override the information of the first M-1 sequential streams. In this extreme case, the second hash table, i.e., the random stream hash table, only remembers the request of the last sequential stream, which is assumed to be lba_m.
[0289] At this time, when the second request of each sequential stream arrives, the first M-1 requests all miss the sequential request, but because the logical block number itself is used as the key, it can be guaranteed that lba_m will not be overwritten. Therefore, the Mth sequential stream will be detected, and then switched to the sequential stream detection mode, which strictly maintains the historical requests through the LRU table. Although 2×(M-1) requests are lost in the random stream filtering mode, after switching to the detection mode, all sequential streams will be identified, and only the request length is lost. In the extreme case of the scenario of random stream interfering with sequential stream, a hash collision non-sequential stream request or a random stream request is inserted between every two sequential stream requests, and the random stream filtering mode will degenerate to a simple prefetching algorithm, i.e., only the last request is remembered. In this case, the switching of the detection mode is triggered depending on the spatiotemporal continuous request.
[0290] In practice, the scenario of random stream interfering with sequential stream will always be in the sequential stream detection mode after switching to the sequential stream detection mode, and the sequential stream can always be detected after the sequential stream is switched to the sequential stream mode through the random stream filtering mode, and the early lost request will not affect the detection effect of the sequential stream.
[0291] In the embodiment of the present application, it is assumed that the historical requests are all stored in the array a[n], and the current request is a read (113, 114), the starting address of the request is 113, and the ending address is 114, it is assumed that the hash key corresponding to 113 is 13, and the key corresponding to 113 is 14, then the stream passes through the random stream detection mode, first accesses a
[13] once, because it is a random request, the value stored in a
[13] is not 113, so it is not equal; then, a
[14] is accessed once, and a
[14] is set to 114, and the end. Therefore, the random stream filtering mode accesses the array twice in total. Since the random stream filtering mode only needs to perform two array accesses, the processing speed is relatively fast, thereby reducing the processing pressure of the SSD when performing high-speed random reading. Through the random stream filtering mode, the random stream is quickly judged, thereby avoiding the large overhead caused by maintaining the random stream historical information.
[0292] In the embodiment of the present application, different detection modes are switched to better detect and improve the identification efficiency of the sequential stream.
[0293] Please refer to Figure 10 , Figure 10 which is a whole flowchart of a sequential stream detection method provided in the embodiment of the present application.
[0294] As shown in the figure, Figure 10 the whole flowchart of the sequential stream detection method comprises the following steps.
[0295] Start.
[0296] Step S101: Obtain a read request.
[0297] Specifically, the read request is obtained, wherein the read request comprises a request pair, and the request pair comprises a starting address and an ending address of the read request.
[0298] Step S102: Determine the current mode.
[0299] Specifically, the current mode is the current detection mode, wherein the current detection mode comprises a random stream filtering mode or a sequential stream detection mode.
[0300] In the embodiment of the present application, the initial detection mode is the random stream filtering mode by default.
[0301] Step S103: Query the starting address through a second hash table.
[0302] The second hash table is a non-sequential stream hash table or a random stream hash table, wherein the second hash table stores nodes through collision coverage, and the starting address is queried through the second hash table to determine whether the starting address of the current read request is located in the second hash table.
[0303] Step S104: determining whether a hit is made.
[0304] Specifically, it is determined whether the start address of the current read request is located in the second hash table. If yes, step S105 of merging the historical request and switching to the sequential flow filtering mode is entered.
[0305] If no, step S120 of inserting the end address into the second hash table is entered.
[0306] In some embodiments, the determining whether a hit is made includes: determining whether a hit is made continuously m times, i.e., whether the start address of the current read request hits the multiple hash values in the second hash table, i.e., whether the hash value corresponding to the start address of the current read request is same as the multiple hash values in the second hash table. If yes, it is determined that a hit is made, and at this time, step S105 of merging the historical request and switching to the sequential flow detection mode is entered.
[0307] If no, it is determined that a hit is not made, and at this time, step S120 of inserting the end address into the second hash table is entered.
[0308] Step S105: merging the historical request and switching to the sequential flow detection mode.
[0309] Specifically, the current read request is merged with the historical request, and the current detection mode is switched from the random flow filtering mode to the sequential flow detection mode.
[0310] Step S106: querying the start address through the first hash table.
[0311] Specifically, the first hash table is a sequential flow hash table, and the start address is queried through the sequential flow hash table to determine whether the start address exists in the first hash table.
[0312] Step S107: determining whether a hit is made.
[0313] Specifically, it is determined whether the start address hits the first hash table, i.e., whether the hash value corresponding to the start address exists in the first hash table. If yes, it is determined that the start address hits the first hash table, and at this time, step S108 of merging and deleting the historical request is entered.
[0314] If no, it is determined that the start address does not hit the first hash table, and at this time, step S112 of inserting the read request into the non-sequential flow linked list is entered.
[0315] Step S108: merging and deleting the historical request.
[0316] Specifically, if the start address hits the first hash table, the current read request is merged with the historical request, and the historical request is deleted.
[0317] Step S109: whether the length of the request exceeds a threshold.
[0318] Specifically, it is determined whether the length of the non-sequential stream linked list is greater than the length threshold. If yes, step S110 is entered, in which the read request is inserted into the sequential stream linked list.
[0319] If no, step S112 is entered, in which the read request is inserted into the non-sequential stream linked list.
[0320] Step S110: the read request is inserted into the sequential stream linked list.
[0321] Specifically, the current read request is inserted into the sequential stream linked list, for example, the sequential stream linked list includes a sequential stream LRU table, and the current read request is inserted into the sequential stream LRU table according to the chronological order.
[0322] It can be understood that the LRU table (Least Recently Used, LRU) is a commonly used cache replacement algorithm, which is used to manage data in the cache. When the cache is full and needs to replace data, the data that is least recently used is preferentially replaced.
[0323] Step S111: the sequential stream request pair is output.
[0324] Specifically, after the current read request is inserted into the sequential stream linked list, the request pair of the sequential stream corresponding to the current read request is output, wherein the request pair includes the start address and the end address of the sequential stream.
[0325] Further, before the sequential stream request pair is output, the method further includes:
[0326] After the current read request is inserted into the sequential stream linked list, it is determined whether the sequential stream linked list is overflowed. If yes, the last read request of the sequential stream linked list is deleted. If no, the request pair of the sequential stream corresponding to the current read request is output.
[0327] Step S112: the read request is inserted into the non-sequential stream linked list.
[0328] Specifically, the current read request is inserted into the non-sequential stream linked list, for example, the non-sequential stream linked list includes a non-sequential stream LRU table, and the current read request is inserted into the non-sequential stream LRU table according to the chronological order.
[0329] Step S113: whether the non-sequential stream linked list is overflowed.
[0330] Specifically, it is determined whether the non-sequential stream linked list is overflowed, for example, it is determined whether the current length of the non-sequential stream linked list is greater than the maximum length. If yes, it is determined that the non-sequential stream linked list is overflowed, and at this time, step S114 is entered, in which the last read request of the non-sequential stream linked list is obtained.
[0331] If the non-sequential flow linked list is not overflowed, end.
[0332] Step S114: Acquire the last read request of the non-sequential flow linked list.
[0333] Specifically, the request pair of the last read request of the non-sequential flow linked list is acquired, i.e., the start address and the end address of the last read request.
[0334] It can be understood that if the non-sequential flow linked list includes the first LRU table, the last read request is the least recently used read request, i.e., the historical request that is earliest to join the first LRU table.
[0335] Step S115: Query the start address through the second hash table.
[0336] Specifically, the start address of the last read request of the non-sequential flow linked list is queried through the second hash table to determine whether the start address of the last read request exists in the second hash table.
[0337] Step S116: Determine whether a hit is made.
[0338] Specifically, it is determined whether the start address of the last read request of the non-sequential flow linked list hits the second hash table, i.e., whether the start address of the last read request of the non-sequential flow linked list exists in the second hash table, and if so, proceed to step S117: Acquire the previous request of the request.
[0339] It can be understood that if the non-sequential flow linked list includes the first LRU table, the last read request is the least recently used read request, for example, the historical request that is earliest to join the first LRU table, and the previous request is a historical request that is closest in time to a certain request and is earlier to join the first LRU table, i.e., the previous least recently used historical request.
[0340] If the start address of the last read request of the non-sequential flow linked list does not exist in the second hash table, proceed to step S118: Insert the end address into the second hash table.
[0341] Step S117: Acquire the previous request of the request.
[0342] Specifically, the start address of the previous read request of the last read request is acquired, and further returned to step S115, i.e., the start address of the previous read request of the last read request is queried through the second hash table to determine whether the start address of the previous read request of the last read request exists in the second hash table. In this way, all historical requests of the non-sequential flow linked list are traversed.
[0343] Step S118: inserting the end address into the second hash table.
[0344] Specifically, if the start address of the last read request of the non-sequential flow linked list does not exist in the second hash table, the end address of the current read request is inserted into the second hash table.
[0345] Step S119: eliminating the current read request.
[0346] Specifically, after the end address of the current read request is inserted into the second hash table, the current read request is eliminated.
[0347] Through the mechanism of eliminating the current read request, the potential sequential flow can be preferentially retained, and the probability of identifying the sequential flow can be improved under a high proportion of random flows.
[0348] Step S120: inserting the end address into the second hash table.
[0349] Specifically, if the start address of the current read request does not exist in the second hash table, the end address of the current read request is inserted into the second hash table.
[0350] End.
[0351] It should be noted that the specific content of the above steps can refer to the related content in the above embodiments, which will not be repeated here.
[0352] In the embodiments of the present application, since the efficient sequential flow detection mode is adopted, the historical requests are maintained through the LRU table, and the read request is accelerated through the hash table, the two steps of sequential flow detection are realized as O(1) operation, the window size is decoupled from the algorithm complexity, and the window size can be flexibly expanded to cope with different number of sequential flow workloads. At the same time, the double LRU table and the unique elimination mechanism provided can efficiently identify potential sequential flows from a large number of random interference flows.
[0353] And since the fast random flow filtering mode is adopted, the hash table with conflict coverage is used to replace the historical window through a loose constraint condition, the random requests are quickly filtered within an acceptable request loss range, and the performance bottleneck under random requests is avoided.
[0354] And by dynamically switching the random flow filtering mode and the sequential flow detection mode, different detection modes can be executed according to the random situation of real-time requests, so that pure random flows can be effectively distinguished.
[0355] And by judging the hash values of the logical addresses within a certain range as the same, the sequential flow in the form of non-strict continuous increment can be identified, and the out-of-order problem of logical addresses caused by various reasons can be effectively avoided.
[0356] And, the application effectively solves the sequential stream loss problem caused by multi-stream concurrency and random stream interference through an efficient sequential stream detection method with a time complexity of O(1) and a space complexity of O(n). In a performance-limited embedded environment, the request processing speed of a PCIe Gen5 enterprise-level SSD can be achieved, and the cache hit rate can be effectively improved through correct detection results, thereby enhancing the SSD performance under multi-stream concurrency.
[0357] In the embodiment of the application, a sequential stream detection method is provided, including: obtaining a current read request, wherein the current read request corresponds to a start address and an end address; querying a first hash table according to the start address to determine whether the start address exists in the first hash table; if the start address does not exist in the first hash table, determining that the current read request is a non-sequential stream request, and inserting the current read request into a non-sequential stream linked list, wherein the non-sequential stream linked list is used to store historical requests of non-sequential streams; if the start address already exists in the first hash table, merging the current read request with the historical requests, and increasing the request length of the historical requests of the non-sequential stream linked list; determining whether the request length of the historical requests of the non-sequential stream linked list is greater than a length threshold; if yes, determining that the current read request is a sequential stream request, and inserting the current read request into a sequential stream linked list, wherein the sequential stream linked list is used to store historical requests of sequential streams; if no, determining that the current read request is a non-sequential stream request, and inserting the current read request into the non-sequential stream linked list.
[0358] By querying the first hash table through the start address of the current read request, if it is determined that the current read request is a non-sequential stream request, the current read request is inserted into the non-sequential stream linked list; and in combination with the request length of the historical requests of the non-sequential stream linked list, it is determined whether the current read request is a sequential stream request, and the current read request is inserted into the sequential stream linked list, so that the application can identify the sequential stream disturbed by the random stream and improve the identification efficiency of the sequential stream.
[0359] Please refer to Figure 12 , Figure 12 which is another structural schematic diagram of a flash memory device provided by the embodiment of the application.
[0360] As Figure 12 shown, the flash memory device 100 includes one or more processors 121 and a memory 122. Figure 12 In the embodiment, the processor 121 is taken as an example.
[0361] The processor 121 and the memory 122 can be connected through a bus or other means, Figure 12 In the embodiment, the connection through the bus is taken as an example.
[0362] The processor 121 is configured to provide computing and control capabilities to control the flash memory device 100 to perform corresponding tasks, for example, to control the flash memory device 100 to perform the sequential flow detection method in any one of the above method embodiments, including: obtaining a current read request, wherein the current read request corresponds to a start address and an end address; querying the first hash table according to the start address to determine whether the start address exists in the first hash table; if the start address does not exist in the first hash table, determining that the current read request is a non-sequential flow request, and inserting the current read request into a non-sequential flow linked list, wherein the non-sequential flow linked list is configured to store historical requests of non-sequential flow; if the start address already exists in the first hash table, merging the current read request with the historical requests, and increasing the request length of the historical requests of the non-sequential flow linked list; determining whether the request length of the historical requests of the non-sequential flow linked list is greater than a length threshold; if yes, determining that the current read request is a sequential flow request, and inserting the current read request into a sequential flow linked list, wherein the sequential flow linked list is configured to store historical requests of sequential flow; if no, determining that the current read request is a non-sequential flow request, and inserting the current read request into the non-sequential flow linked list.
[0363] The first hash table is queried through the start address of the current read request, if it is determined that the current read request is a non-sequential flow request, the current read request is inserted into the non-sequential flow linked list; and in combination with the request length of the historical requests of the non-sequential flow linked list, it is determined whether the current read request is a sequential flow request, and the current read request is inserted into the sequential flow linked list, the sequential flow disturbed by random flow can be identified, and the identification efficiency of the sequential flow is improved.
[0364] The processor 121 can be a general-purpose processor, including a central processing unit (CPU), a network processor (NP), a hardware chip, or any combination thereof; and can also be a digital signal processor (DSP), an application specific integrated circuit (ASIC), a programmable logic device (PLD), or a combination thereof. The above-mentioned PLD can be a complex programmable logic device (CPLD), a field-programmable gate array (FPGA), a generic array logic (GAL), or any combination thereof.
[0365] The memory 122, as a non-transitory computer readable storage medium, can be used to store non-transitory software programs, non-transitory computer executable programs and modules, such as program instructions / modules corresponding to the sequential flow detection method in the embodiments of the present application. The processor 121 can implement the sequential flow detection method in any one of the method embodiments described below by running the non-transitory software programs, instructions and modules stored in the memory 122. Specifically, the memory 122 can include a volatile memory (VM), such as a random access memory (RAM); the memory 122 can also include a non-volatile memory (NVM), such as a read-only memory (ROM), a flash memory, a hard disk drive (HDD) or a solid-state drive (SSD) or other non-transitory solid-state storage device; and the memory 122 can further include a combination of the above types of memories.
[0366] The memory 122 can include a high-speed random access memory, and can also include a non-volatile memory, such as at least one disk storage device, a flash memory device, or other non-volatile solid-state storage device. In some embodiments, the memory 122 can optionally include a memory disposed remotely relative to the processor 121, and these remote memories can be connected to the processor 121 through a network. Examples of the above network include, but are not limited to, the Internet, an intranet, a local area network, a mobile communication network, and a combination thereof.
[0367] One or more modules are stored in the memory 122, and when executed by the one or more processors 121, perform the sequential flow detection method in any one of the method embodiments described above, for example, perform the above-described Figure 2 each of the steps shown.
[0368] In the embodiments of the present application, the flash device 100 can also have a wired or wireless network interface, a keyboard and an input / output interface, etc., to perform input / output, and the flash device 100 can further include other components for implementing device functions, which are not described herein.
[0369] The embodiments of the present application further provide a computer readable storage medium, for example, a memory including program codes, which can be executed by a processor to complete the sequential flow detection method in the above embodiments. For example, the computer readable storage medium can be a Read-Only Memory (ROM), a Random Access Memory (RAM), a Compact Disc Read-Only Memory (CDROM), a magnetic tape, a floppy disk and an optical data storage device, etc.
[0370] The embodiments of the present application further provide a computer program product including one or more program codes stored in a computer readable storage medium. The processor of the flash memory device reads the program codes from the computer readable storage medium, and the processor executes the program codes to complete the method steps of the sequential flow detection method provided in the above embodiments.
[0371] Those skilled in the art can understand that all or part of the steps of the above embodiments can be completed by hardware, or by program codes related hardware, and the program can be stored in a computer readable storage medium. The storage medium mentioned above can be a Read-Only Memory, a magnetic disk or an optical disk, etc.
[0372] Through the above description of the embodiments, those skilled in the art can clearly understand that the embodiments can be implemented by means of software plus a general hardware platform, and of course, can also be implemented by hardware. Those skilled in the art can understand that all or part of the processes in the above embodiments can be completed by a computer program to instruct related hardware, and the program can be stored in a computer readable storage medium. When the program is executed, it can include the processes of the above embodiments. The storage medium can be a magnetic disk, an optical disk, a Read-Only Memory (ROM) or a Random Access Memory (RAM), etc.
[0373] Finally, it should be noted that: the above examples are only used to illustrate the technical solutions of the present application, but not to limit them; under the idea of the present application, the technical features in the above examples or different embodiments can also be combined, the steps can be implemented in any order, and there are many other changes of different aspects of the present application as described above, which are not provided in detail for simplicity; although the present application has been described in detail with reference to the foregoing examples, those skilled in the art should understand that: it can still modify the technical solutions recorded in the foregoing examples, or make equivalent replacement for part of the technical features; and these modifications or replacements do not make the essence of the corresponding technical solutions deviate from the scope of the technical solutions of the embodiments of the present application.
Claims
1. A method for detecting a sequential flow, characterized in that: The method comprises: Get the current read request, where the current read request corresponds to a start address and an end address; According to the starting address, query the first hash table to determine whether the starting address exists in the first hash table; If the starting address does not exist in the first hash table, determining that the current read request is a non-sequential flow request, and inserting the current read request into a non-sequential flow linked list, wherein the non-sequential flow linked list is used to store historical requests for non-sequential flows; If the starting address already exists in the first hash table, merging the current read request with the historical requests of the non-sequential flow, and increasing the request length of the historical requests of the non-sequential flow linked list; Determine whether the request length of the historical request of the non-sequential flow linked list is greater than a length threshold; If so, determining that the current read request is a sequential flow request, and inserting the current read request into a sequential flow linked list, wherein the sequential flow linked list is used to store historical sequential flow requests; If not, determining that the current read request is a non-sequential flow request, and inserting the current read request into the non-sequential flow linked list; The non-sequential flow linked list includes a first LRU table, and the sequential flow linked list includes a second LRU table; After inserting the current read request into the non-sequential stream linked list, the method further includes: If the non-sequential flow linked list overflows, obtaining the start address and end address corresponding to the last read request of the non-sequential flow linked list; According to the starting address corresponding to the last read request, query the second hash table to determine whether the starting address corresponding to the last read request exists in the second hash table; If yes, get the previous read request of the last read request; If not, deleting the current read request of the non-sequential stream linked list and inserting the end address of the current read request into the second hash table; The method further comprises: After obtaining the previous read request of the last read request, repeatedly querying the second hash table to determine whether the starting address of the previous read request of the last read request exists in the second hash table; If the starting address of the previous read request of the last read request exists in the second hash table, repeatedly querying the second hash table until all read requests of the non-sequential stream linked list are traversed; If all read requests in the non-sequential flow linked list are traversed, the last read request in the non-sequential flow linked list is deleted.
2. The method according to claim 1, characterized in that The merging of the current read request with the historical requests of the non-sequential stream includes: Obtaining a first historical request having the same starting address as the current read request; Modifying the end address of the first historical request to the end address of the current read request to obtain a second historical request; The method further comprises: Insert the second historical request into the non-sequential flow linked list, and delete the first historical request.
3. The method according to claim 1, characterized in that The method further comprises: After the current read request is inserted into the sequential flow linked list, if the sequential flow linked list overflows, the last read request of the sequential flow linked list is deleted.
4. The method according to claim 1, wherein The sequence flow linked list corresponds to multiple sequence flows; The method further comprises: If the current read request is inserted into the sequence flow linked list, then the latest update time of the sequence flow corresponding to the current read request is updated; If the difference between the latest update time of a sequence flow and the current time is greater than the time threshold, the sequence flow will be deleted.
5. The method according to claim 1, wherein The first hash table is used to store key-value pairs corresponding to logical block addresses, wherein the key-value pairs include a key and a hash value, and determining whether the starting address exists in the first hash table includes: Calculating a first key corresponding to the starting address; Calculate a first hash value based on the first key; Determine whether the first hash value exists in the first hash table; If the first hash value exists in the first hash table, determining that the start address exists in the first hash table; If the first hash value does not exist in the first hash table, it is determined that the start address does not exist in the first hash table.
6. The method according to claim 5, characterized in that The calculating the first key corresponding to the starting address includes: Determine, according to the logical block number corresponding to the starting address, a binary value corresponding to the logical block number; Shifting the binary value corresponding to the logic block number right by M bits to obtain a right-shifted binary value, where M is a positive integer; The binary value after right shift is converted into a decimal value, and the converted decimal value is determined as the first key corresponding to the starting address.
7. The method according to claim 5, characterized in that The method further comprises: Calculating a second key corresponding to the end address of the current read request; Calculating a second hash value based on the second key; If the second hash value is not equal to the first hash value, and the second hash value exists in the first hash table, the current read request is discarded.
8. The method according to claim 1, characterized in that After obtaining the current read request, the method further includes: Obtain the current detection mode, where the detection mode includes a random flow filtering mode or a sequential flow detection mode; If the current detection mode is the random stream filtering mode, and the current read request is identified as a sequential stream request, switching to the sequential stream detection mode, wherein the sequential stream detection mode includes: executing the steps after obtaining the current read request as claimed in claim 1; If the current detection mode is the sequential flow detection mode and the number of current sequential flows is zero, the mode is switched to the random flow filtering mode.
9. The method according to claim 8, characterized in that The random flow filtering mode includes: According to the starting address of the current read request, query the second hash table to determine whether the starting address exists in the second hash table; If the starting address exists in the second hash table, merging the current read request with the historical requests of the non-sequential stream to obtain a merged request; If the starting address does not exist in the second hash table, the ending address of the current read request is inserted into the second hash table.
10. The method according to claim 9, characterized in that The second hash table is used to store key-value pairs corresponding to the logical block address, wherein the key-value pair includes a key and a hash value, the logical block address is the key of the second hash table, and each slot of the second hash table can only store one key-value pair; The determining whether the starting address exists in the second hash table includes: Obtaining the third key corresponding to the starting address; Calculating a third hash value based on the third key; Determine whether the third hash value exists in the second hash table; If so, determining that the starting address exists in the second hash table; If not, it is determined that the start address does not exist in the second hash table.
11. The method according to claim 10, characterized in that The method further comprises: When inserting the end address of the current read request into the second hash table, if a hash conflict occurs, the end address replaces the key in the second hash table, wherein the space of the second hash table is larger than the space of the non-sequential stream linked list, and the space of the second hash table is larger than the space of the sequential stream linked list.
12. A flash memory device, characterized in that: include: A processor and a memory, wherein the processor is configured to execute an executable program code in the memory; when the executable program code is executed, the processor executes instructions of the sequential flow detection method according to any one of claims 1 to 11.
Citation Information
Patent Citations
Service quality control method and device, electronic equipment and storage medium
CN109992217A
METHOD, APPARATUS, AND COMPUTER PROGRAM PRODUCT FOR MANAGING Hash TABLES
CN110109915A