WO2022177561A1 - Data access processing agnostic to mapping unit size - Google Patents

Data access processing agnostic to mapping unit size Download PDF

Info

Publication number
WO2022177561A1
WO2022177561A1 PCT/US2021/018497 US2021018497W WO2022177561A1 WO 2022177561 A1 WO2022177561 A1 WO 2022177561A1 US 2021018497 W US2021018497 W US 2021018497W WO 2022177561 A1 WO2022177561 A1 WO 2022177561A1
Authority
WO
WIPO (PCT)
Prior art keywords
data
subset
power
storage device
entries
Prior art date
Application number
PCT/US2021/018497
Other languages
French (fr)
Inventor
Chun Liu
Chaohong Hu
Xin LIAO
Original Assignee
Futurewei Technologies, Inc.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Futurewei Technologies, Inc. filed Critical Futurewei Technologies, Inc.
Priority to PCT/US2021/018497 priority Critical patent/WO2022177561A1/en
Publication of WO2022177561A1 publication Critical patent/WO2022177561A1/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/21Employing a record carrier using a specific recording technology
    • G06F2212/214Solid state disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/312In storage controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks

Definitions

  • the present disclosure is related to the processing of ordered data accesses in computing devices.
  • Storage systems are often associated with processing inefficiencies for streaming partial or unaligned updates. For example, performing partial updates to a storage device, such as updates that are smaller than the device mapping unit, includes reading data that is larger than the partial updates, modifying the data, and storing back the modified data.
  • data volatility e.g., volatility once the data is read from the storage device
  • acknowledgment delays e.g., data update acknowledgment is communicated after the updated data is written back into storage.
  • a computer-implemented method for processing a stream of data accesses in a storage device includes detecting, by a storage controller of the storage device, a plurality of data entries within the stream received at the storage device, each data entry of the plurality of data entries including a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier.
  • the storage controller stores a subset of the plurality of data entries in a power- protected buffer of the storage device, each subset data entry in the subset of the plurality of data entries comprising a same data object identifier, the storing based on the same data object identifier.
  • the storage controller executes a data processing operation according to the data processing operation identifier.
  • the data processing operation is performed for each data entry in the subset of the plurality of data entries.
  • the data processing operation for each subset data entry in the subset is executed according to an execution order based on the sequence identifier.
  • the storage controller flushes the subset of the plurality of data entries from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries.
  • the storage device is one of a hard drive (HD) or a solid-state drive (SSD).
  • HD hard drive
  • SSD solid-state drive
  • the power- protected buffer is a coalescing buffer managed by the storage controller.
  • performing the flushing further includes detecting, by the storage controller, that the subset size of the subset of the plurality of data entries stored in the power- protected buffer is equal to a mapping unit size of the mapping unit of the storage device.
  • a power loss event associated with the storage device is detected.
  • the subset of the plurality of data entries stored in the power-protected buffer is padded based on the detecting of the power loss event to obtain a padded subset of the plurality of data entries.
  • the padding causes a size of the padded subset to be equal to a mapping unit size of the mapping unit of the storage device.
  • the padded subset of the plurality of data entries is flushed from the power-protected buffer into the mapping unit.
  • each subset data entry in the subset of the plurality of data entries includes a data packet
  • the method further includes executing, by the storage controller, the data processing operation using the data packet in each subset data entry in the subset.
  • the data processing operation is a data read operation, a data write operation, or a data verify operation.
  • the storing further includes storing, by the storage controller, each subset data entry in the power-protected buffer sequentially, based on the sequence identifier.
  • stored data is retrieved from the mapping unit of the storage device into a second power- protected buffer.
  • the subset size of the subset of the plurality of data entries stored in the power-protected buffer is detected as equal to a mapping unit size of the mapping unit of the storage device.
  • a logical operation is applied to the stored data in the second power-protected buffer and data packets within the subset of the plurality of data entries in the power-protected buffer to generate new data.
  • the new data is stored in the mapping unit of the storage device.
  • the data object identifier is associated with the power-protected buffer and the method further includes storing, by the storage controller, a second subset of the plurality of data entries in a second power-protected buffer of the storage device.
  • Each second subset data entry in the second subset of the plurality of data entries includes a second data object identifier.
  • the second data object identifier is different from the data object identifier associated with the power-protected buffer.
  • the storage controller detects that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a predefined size associated with an erasure coding operation.
  • the erasure coding operation is applied to one or more data entries in the subset of the plurality of data entries to generate data slices corresponding to the subset.
  • a parity value is generated based on the data slices.
  • the data slices or the parity value are stored in the mapping unit of the storage device.
  • an apparatus for processing a stream of data accesses in a storage device includes memory storing instructions, a power-protected buffer, and one or more processors in communication with the memory and the power-protected buffer.
  • the one or more processors execute the instructions to perform operations including detecting a plurality of data entries within the stream received at the storage device.
  • Each data entry of the plurality of data entries includes a data object identifier of at least one data object the data entry is associated with, a data processing operation, and a sequence identifier.
  • a subset of the plurality of data entries is stored in a power-protected buffer of the storage device.
  • Each subset data entry in the subset of the plurality of data entries includes a same data object identifier, and the storing is based on the same data object identifier.
  • a data processing operation is executed according to the data processing operation identifier.
  • the data processing operation is performed for each data entry in the subset of the plurality of data entries.
  • the data processing operation for each subset data entry in the subset is executed according to an execution order based on the sequence identifier.
  • the subset of the plurality of data entries is flushed from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries.
  • the storage device is one of a hard drive (HD) or a solid- state drive (SSD).
  • HD hard drive
  • SSD solid- state drive
  • the power-protected buffer is a coalescing buffer managed by the one or more processors.
  • the one or more processors are further configured to detect that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a mapping unit size of the mapping unit of the storage device.
  • the one or more processors are further configured to execute the instructions to perform operations including detecting a power loss event associated with the storage device.
  • the operations further include padding the subset of the plurality of data entries stored in the power-protected buffer based on the detecting of the power loss event to obtain a padded subset of the plurality of data entries.
  • the padding causes a size of the padded subset to be equal to a mapping unit size of the mapping unit of the storage device.
  • the operations further include flushing the padded subset of the plurality of data entries from the power-protected buffer into the mapping unit.
  • each subset data entry in the subset of the plurality of data entries includes a data packet and the one or more processors execute the instructions to perform operations including executing the data processing operation using the data packet in each subset data entry in the subset.
  • the data processing operation is a data read operation, a data write operation, or a data verify operation.
  • the one or more processors are further configured to store each subset data entry in the subset in the power-protected buffer sequentially, based on the sequence identifier.
  • the one or more processors are further configured to retrieve stored data from the mapping unit of the storage device into a second power-protected buffer.
  • the subset size of the subset of the plurality of data entries stored in the power- protected buffer is detected as equal to a mapping unit size of the mapping unit of the storage device.
  • a logical operation is applied to the stored data in the second power-protected buffer and data packets within the subset of the plurality of data entries in the power-protected buffer to generate new data.
  • the new data is stored in the mapping unit of the storage device.
  • the data object identifier is associated with the power-protected buffer
  • the one or more processors are further configured to store a second subset of the plurality of data entries in a second power-protected buffer of the storage device.
  • Each second subset data entry in the second subset of the plurality of data entries includes a second data object identifier.
  • the second data object identifier is different from the data object identifier associated with the power-protected buffer.
  • the one or more processors are further configured to detect that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a predefined size associated with an erasure coding operation.
  • the erasure coding operation is applied to one or more data entries in the subset of the plurality of data entries to generate data slices corresponding to the subset.
  • a parity value is generated based on the data slices.
  • the data slices or the parity value are stored in the mapping unit of the storage device.
  • a computer-readable medium storing instructions for processing a stream of data accesses in a storage device.
  • the instructions When executed by one or more processors, the instructions cause the one or more processors to perform operations including detecting a plurality of data entries within the stream received at the storage device.
  • Each data entry of the plurality of data entries includes a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier.
  • a subset of the plurality of data entries is stored in a power-protected buffer of the storage device.
  • Each subset data entry in the subset of the plurality of data entries includes a same data object identifier, and the storing is based on the same data object identifier.
  • a data processing operation is executed according to the data processing operation identifier.
  • the data processing operation is performed for each data entry in the subset of the plurality of data entries.
  • the data processing operation for each subset data entry in the subset is executed according to an execution order based on the sequence identifier.
  • the subset of the plurality of data entries is flushed from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries.
  • the storage device is one of a hard drive (HD) or a solid-state drive (SSD).
  • HD hard drive
  • SSD solid-state drive
  • the power-protected buffer is a coalescing buffer managed by the one or more processors.
  • executing the instructions causes the one or more processors to perform operations including detecting that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a mapping unit size of the mapping unit of the storage device.
  • the instructions further cause the one or more processors to perform operations including detecting a power loss event associated with the storage device.
  • the operations further include padding the subset of the plurality of data entries stored in the power-protected buffer based on the detecting of the power loss event to obtain a padded subset of the plurality of data entries, the padding causing a size of the padded subset to be equal to a mapping unit size of the mapping unit of the storage device.
  • the operations further include flushing the padded subset of the plurality of data entries from the power-protected buffer into the mapping unit.
  • each subset data entry in the subset of the plurality of data entries includes a data packet
  • the instructions further cause the one or more processors to perform operations including executing the data processing operation using the data packet in each subset data entry in the subset.
  • the data processing operation is a data read operation, a data write operation, or a data verify operation.
  • the storing further includes storing each subset data entry in the power-protected buffer sequentially, based on the sequence identifier.
  • the instructions further cause the one or more processors to perform operations including retrieving stored data from the mapping unit of the storage device into a second power-protected buffer.
  • the subset size of the subset of the plurality of data entries stored in the power-protected buffer is detected as equal to a mapping unit size of the mapping unit of the storage device.
  • a logical operation is applied to the stored data in the second power-protected buffer and data packets within the subset of the plurality of data entries in the power- protected buffer to generate new data.
  • the new data is stored in the mapping unit of the storage device.
  • the data object identifier is associated with the power-protected buffer and the instructions further cause the one or more processors to perform operations including storing a second subset of the plurality of data entries in a second power-protected buffer of the storage device. Each second subset data entry in the second subset of the plurality of data entries includes a second data object identifier. The second data object identifier is different from the data object identifier associated with the power-protected buffer.
  • the instructions further cause the one or more processors to perform operations including detecting that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a predefined size associated with an erasure coding operation.
  • the erasure coding operation is applied to one or more data entries in the subset of the plurality of data entries to generate data slices corresponding to the subset.
  • a parity value is generated based on the data slices.
  • the data slices or the parity value are stored in the mapping unit of the storage device.
  • a storage controller for processing a stream of data accesses in a storage device.
  • the storage controller includes a data entry detection module for detecting a plurality of data entries within the stream received at the storage device, each data entry of the plurality of data entries comprising a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier; a subset storage module for storing a subset of the plurality of data entries in a power-protected buffer of the storage device, each subset data entry in the subset of the plurality of data entries comprising a same data object identifier, the storing based on the same data object identifier; a data processing module for executing a data processing operation according to the data processing identifier, the data processing operation performed for each data entry in the subset of the plurality of data entries, the data processing operation for each subset data entry in the subset executed according to an execution order
  • FIG. 1 is a block diagram illustrating a computing device using a flusher module to perform data processing operations agnostic to mapping unit size, according to example embodiments.
  • FIG. 2A is a block diagram illustrating processing a plurality of data entries associated with the same data object identifier, according to example embodiments.
  • FIG. 2B is a block diagram illustrating processing a plurality of data entries associated with multiple data object identifiers, according to example embodiments.
  • FIG. 3A is a flowchart of a method for processing streaming data by a flusher module within a storage device, according to example embodiments.
  • FIG. 3B is a flowchart of a method for processing streaming data by a flusher module during a power loss, according to example embodiments.
  • FIG. 4 is a block diagram illustrating a flusher module configured to perform logical operations on streaming data within a storage device, according to example embodiments.
  • FIG. 5 is a block diagram illustrating a flusher module configured to perform erasure coding operations on streaming data within a storage device, according to example embodiments.
  • FIG. 6 is a flowchart of another method for processing a stream of data accesses within a storage device, according to example embodiments.
  • FIG. 7 is a block diagram illustrating a representative software architecture, which may be used in conjunction with various device hardware described herein, according to example embodiments.
  • FIG. 8 is a block diagram illustrating circuitry for a device that implements algorithms and performs methods, according to example embodiments.
  • data accesses or “ordered data accesses” refer to a stream of data entries used for accessing data objects at network-attached storage devices.
  • An example data entry may include a data object identifier (e.g., an identifier, or ID, of at least one data object that the data entry is associated with), a data processing operation identifier (e.g., an identifier representing a data processing operation to be performed on the data object), and a sequence identifier for ordering data processing operations associated with the same data object identifier.
  • the stream of data entries is also referred to as ordered data accesses.
  • the term “data processing operation” includes at least one of a Create data processing operation (to generate a data object at a storage device), a Read data processing operation (for reading a data object), a Modify data processing operation such as an Append data processing operation (for appending data to an existing data object), and a Delete data processing operation (for deleting a data object).
  • mapping units are often associated with processing inefficiencies for streaming partial or unaligned data object updates. For example, any partial (e.g., less than a mapping unit such as a sector) updates to the storage device will be performed using read-modify- write operations to carry out the updates.
  • read-modify-write operations an entire sector is read out from the storage device into a temporary buffer, the temporary data is modified with the partial update, and then the whole sector (including the updated portion) is written back to the storage device (an example read-modify-write operation is discussed in connection with FIG. 1).
  • read-modify-write operation is discussed in connection with FIG. 1).
  • the temporary data is outside of the storage device, thus may be volatile when stored in the temporary buffer (e.g., a memory buffer), and the new data may be susceptible to power loss, resulting in a data loss for all data stored in the temporary buffer.
  • the acknowledgment delay can be significant since an acknowledgment may not be sent until the full sector is written back into the storage device.
  • Storage systems may also be associated with processing inefficiencies when there are multiple partial updates to the same sector or adjacent sectors, and some of the updates are not sector aligned.
  • a solution to this issue is to employ a coalescing buffer outside the storage device for temporarily holding the updates, coalescing the partial updates into one full sector, then flushing the full sector back to the device. Even though such processing removes the long read-modify-write cycle, additional inefficiencies are introduced. For example, some of the inefficiencies are associated with the coalescing buffer. First, the coalescing buffer is volatile, and the stored data can be lost in the case of power loss or a software error. Second, since the write operation cannot be acknowledged until the buffer is fully flushed to the storage device, a potential indefinite delay in acknowledging the update may be introduced. Third, for a misaligned update spanning across multiple sectors, extra logic is needed to ensure the atomicity of the update.
  • Techniques disclosed herein can be used to perform processing of ordered data accesses that is agnostic to mapping unit size and may be used for efficiently processing partial or unaligned data object updates.
  • the disclosed techniques also eliminate (or reduce) the read-modify -write operations for partial updates, reduce data movement and bus bandwidth utilization, and reduce latency for individual update operations.
  • the disclosed techniques use a storage device (e.g., a hard disk drive or a solid-state drive) controller using a flusher module to process ordered data accesses including data entries for performing data object updates (e.g., partial and/or unaligned data object updates).
  • a storage device e.g., a hard disk drive or a solid-state drive
  • data object updates e.g., partial and/or unaligned data object updates
  • each of the data entries received as part of a stream of ordered data accesses may include a data object identifier (e.g., an ID of at least one data object that the data entry is associated with), a data processing operation identifier (e.g., an identifier representing a data processing operation to be performed on the data object such as a Create, Read, Write, Append, Verify, Delete, or another data modification operation), and a sequence identifier (e.g., sequence identifier SeqNum which can be used for ordering data processing operations associated with the same stream identifier).
  • a data object identifier e.g., an ID of at least one data object that the data entry is associated with
  • a data processing operation identifier e.g., an identifier representing a data processing operation to be performed on the data object such as a Create, Read, Write, Append, Verify, Delete, or another data modification operation
  • sequence identifier e.g., sequence identifier SeqNum which can be
  • a data entry received by the storage device controller is tagged with a unique ID for a particular data object and a sequence number (SeqNum) that can be used to order all the outstanding operations with regard to that data object.
  • the flusher module of the storage device controller is configured to manage an array of power-protected buffers (e.g., coalescing buffers or other types of buffers) to temporarily store the updates. With the help of the ⁇ ID, SeqNum> pair of each data entry with a data processing operation, the flusher module in the storage device controller can reconstruct the correct order of data processing operations and apply the operations to the data object in the correct order.
  • any operation that is a successor to a previously acknowledged operation can be acknowledged after its execution.
  • the power-protected buffer containing acknowledged updates exceeds the inherent mapping unit of the storage device (e.g., a sector), the buffer can be flushed out to make room for more operations.
  • the storage device controller can perform complex operations (e.g., one or more logical operations such as an XOR operation) on data within the received data entries (as well as data objects associated with the data entries), after the received data entries are arranged sequentially in the power-protected buffer according to the sequence identifier.
  • the storage device controller can further generate one or more parity values using the data entries stored in the power-protected buffer, and persist the one or more parity values in storage (e.g., for subsequent processing such as erasure coding).
  • the discussed techniques for processing ordered data accesses can be implemented, for example, using firmware that is executed by one or more processors on a storage device (e.g., a storage device controller of a computing device), or via hardware that is part of the storage device controller, and is used to facilitate the processing of the ordered data accesses.
  • a storage device e.g., a storage device controller of a computing device
  • hardware that is part of the storage device controller
  • Existing prior art techniques for processing ordered data accesses do not use power-protected buffers on storage devices.
  • Existing prior art techniques for processing ordered data accesses do not use the disclosed data entry format (including a data object identifier, a data processing operation identifier, and a sequence identifier) to process partial/unaligned data accesses to persistent media.
  • the disclosed techniques are also used to support multiple outstanding partial/unaligned data accesses to persistent media as well as other operations such as XOR or erasure coding related operations, which functionalities are not disclosed by the prior art techniques for the processing of ordered data accesses.
  • FIG. 1 is a block diagram illustrating a computer device 100 using a flusher module to perform data processing operations agnostic to mapping unit size, according to example embodiments.
  • computer device 100 can be a mobile device or another type of computing device such as a compute node or a storage node in a communication network.
  • the computer device 100 includes a processor 140 and volatile memory (e.g., dynamic random access memory, or DRAM) 102.
  • the computer device 100 further includes a storage device 104 (such as a solid-state drive (SSD), a hard drive (HD), or another type of storage device) with a storage controller 106.
  • Storage device 104 stores data separated as mapping units (e.g., sectors) 124, 126, 128, 130, and 132.
  • mapping units e.g., sectors
  • the storage controller 106 comprises suitable circuitry, logic, interfaces, and/or code and is configured to manage access to the storage device 104, including configuring and managing operations discussed herein for processing ordered data accesses.
  • the storage device 104 includes a flusher module 108 configured to perform the operations for processing ordered data accesses using one or more power-protected buffers, such as coalescing buffers.
  • the term “power-protected buffer” indicates a buffer implemented as part of a storage device or non-volatile memory, which buffer persists any stored information upon power failure.
  • the power-protected buffer 110 includes multiple storage areas that can be sized to match a mapping unit of the storage device 104.
  • the power-protected buffer 110 includes sector-sized storage areas 120 and 122 which match the size of the mapping unit (namely, a sector) of the storage device 104.
  • FIG. 1 partially illustrates the previously mentioned processing inefficiencies for streaming partial or unaligned updates. More specifically, a new data entry 118 (which can be part of a stream 101 of ordered data accesses formed by data entries 112, 114, 116, and 118) is received by the computer device 100 for a partial update of data (e.g., data objects) currently stored by the storage device 104 in sector 132. The partial update of the data is performed using the read-modify-write operations mentioned hereinabove. For example, processor 140 initiates a read operation 134 where the contents of sector 132 (associated with data entry 118) are read and temporarily stored in volatile memory 102 as sector 132A.
  • data e.g., data objects
  • processor 140 initiates a read operation 134 where the contents of sector 132 (associated with data entry 118) are read and temporarily stored in volatile memory 102 as sector 132A.
  • a modify operation 136 is performed to update portions of sector 132 A using data entry 118 (e.g., a data packet within the data entry 118) to generate an updated sector 132B.
  • a write operation 138 is performed to store the updated sector 132B as sector 132 in the storage device 104.
  • the drawbacks of using the read-modify-write operations include performing multiple data manipulation operations (e.g., separate read, modify, and write operations) on data stored in volatile memory, which increases latency and susceptibility to data loss. Additionally, acknowledgment to the update associated with data entry 118 is delayed until the updated sector 132B is written back into the storage device 104.
  • stream 101 formed by data entries 112, 114, 116, and 118 is received at the computer device 100.
  • a more detailed view of the data entries 112, 114, 116, and 118 of the stream 101 is illustrated in FIG. 2A.
  • FIG. 2A is a block diagram 200A illustrating processing the plurality of data entries 112-118 associated with stream 101 of ordered data accesses, according to example embodiments.
  • Each of the data entries 112 - 118 is configured to include a data object identifier of a data object the data entry is associated with, a data processing operation identifier (e.g., an identifier representing a data processing operation to be performed on the data object), a data packet (e.g., data for use with an Append data processing operation or another data modification operation), and a sequence identifier.
  • each of the data entries 112 - 118 includes the data object identifier (ID) 202 which identifies a data object the particular data entries are associated with.
  • ID data object identifier
  • FIG. 2A illustrates the data object ID 202 as a separate element outside of the data entries, such illustration is for simplicity, and each data entry 112 - 118 includes the data object ID 202.
  • Data entries 112, 114, 116, and 118 also include corresponding sequence identifiers (or sequence numbers) (referenced interchangeably as SEQ or SeqNum) 204, 206, 208, and 210, corresponding data packets 1 , 2, 3, and 4, as well as corresponding data processing operation identifiers (also referred to as data processing commands or CMDs) 205, 207, 209, and 211 to be performed using the corresponding data packets 1 - 4.
  • sequence identifiers or sequence numbers
  • the sequence identifiers 204 - 210 refer to the order that the corresponding data processing operations 205 - 211 (for data entries within stream 101 that are associated with data object ID 202) should be executed.
  • the data processing operation is Create data processing operation, a Read data processing operation, a Write data processing operation, an Append data processing operation, a Verify data processing operation, a Delete data processing operation, or another data modification operation to be performed on the identified data object.
  • each of the data entries 112 - 118 of the stream 101 further includes a sequence validator function (or SEQ VLDTR) 203.
  • the sequence validator function 203 is used to ensure that there are no duplicate data entries within a stream of ordered data accesses.
  • the flusher module 108 of the storage controller 106 can use the sequence validator function 203 to detect that one of the data entries 112 - 118 of the stream 101 is older than a corresponding flushed data entry stored within one of the sectors 124 - 132. Such detection would indicate that the incoming entry is a duplicate and the flusher module 108 can discard the incoming entry.
  • the flusher module 108 stores the corresponding data packets 1 - 4 in one or more storage areas (e.g., storage area 120) of the power-protected buffer 110.
  • data packets 1 - 4 are stored in the storage area 120 of the power- protected buffer 110 sequentially, based on the corresponding sequence identifiers 204 - 210.
  • the data packets 1 - 4 are stored in the correct order inside the storage area 120, and the flusher module 108 can apply corresponding data processing operations 205 - 211 in the order the data entries are arranged using the sequence identifiers 204 - 210. More specifically, the flusher module 108 executes the data processing operation for each of the data entries 112-118 according to an execution order based on the corresponding sequence identifier. As data processing operations are executed in order according to the sequence identifiers associated with the same data object ID, an acknowledgment can be communicated upon completion of the execution of each data processing operation. Example processing of data entries associated with multiple data streams of ordered data accesses is discussed in connection with FIG. 2B.
  • the storage area 120 may be a sector-size storage area, matching the mapping unit (namely, a sector) of the storage device 104. Additionally, as data packets associated with incoming data entries are stored in storage area 120, the last stored data packet may be partial. For example, as illustrated in FIG. 2A and FIG. 2B, data packet 3 may be only partially stored inside the storage area 120, and a remaining portion 234 of data packet 3 may be stored in another storage area of the power-protected buffer 110 managed by the flusher module 108 (or within the same storage area after the flusher module 108 flushes the store data into one of the sectors 124 - 132 of the storage device 104). An example flowchart illustrating processing of data entries including storing of partial data packets after flushing a storage area is illustrated in FIG. 3A.
  • storage area 120 contains corresponding data packets associated with acknowledged updates.
  • the flusher module 108 is further configured to detect when a size of stored data packets in the storage area 120 is equal to the size of the mapping unit of the storage device 104 (namely, when the size of the storage area 120 equals the size of a sector of the storage device 104), and flush the contents of the storage area 120 from the power-protected buffer 110 into the sector 124 of the storage device 104 based on the detecting.
  • FIG. 2B is a block diagram 200B illustrating processing a plurality of data entries associated with multiple data object identifiers, according to example embodiments.
  • data entries 214, 216, and 218 are associated with stream 240, along with a data object ID (ID_1) 212, while data entries 222, 224, 226, and 228 are associated with stream 242, along with a data object ID (ID_2) 220.
  • ID_1 data object ID
  • ID_2 data object ID
  • ID_2 data object ID
  • ID_2 data object ID
  • ID_2 data object ID
  • the flusher module 108 is configured to store data packets associated with the same data object ID in the same storage area inside the power-protected buffer 110. For example, data packets 1, 2, and 3 of data entries 214, 216, and 218 respectively are all stored in storage area 120 associated with data object ID 212 of stream 240. Similarly, data packets 4, 5, 6, and 7 of data entries 222, 224, 226, and 228 respectively are all stored in storage area 122 associated with data object ID 220 of stream 242.
  • different data entries associated with different data object identifiers can be received sequentially at the computer device 100 (e.g., data entries of streams 240 and 242 are received out of order and at different times).
  • the flusher module 108 is configured to detect the data object identifier of each received data entry and store the corresponding data packet in a corresponding storage area associated with the data object identifier of the data entry based on the sequence identifier of the data entry. As data packets are arranged sequentially inside the corresponding storage areas, the data processing operation indicated by each data entry can be executed and an acknowledgment can be communicated.
  • the flusher module 108 is configured to process a subset of a set of received data entries, where the subset is associated with the same data object identifier. Additionally, the data packet stored in storage areas 120 and 122, after the data processing operations have been executed, are flushed into sectors 232 and 230 of the storage device 104, based on storage areas 120 and 122 reaching a sector size with stored data.
  • FIG. 3A is a flowchart of a method 300A for processing streaming data by a flusher module within a storage device, according to example embodiments.
  • the method 300A includes operations 302, 304, 306, 308, 310, 312, and 314.
  • the method 300A is described as being performed by a storage controller (e.g., a flusher module such as flusher module 108 of FIG. 1 or other firmware or hardware of the storage controller 106), which can be configured to execute within a computer device (e.g., device 100 illustrated in FIG. 1 or device 800 illustrated in FIG. 8).
  • a storage controller e.g., a flusher module such as flusher module 108 of FIG. 1 or other firmware or hardware of the storage controller 106
  • a computer device e.g., device 100 illustrated in FIG. 1 or device 800 illustrated in FIG. 8.
  • a new data entry received by the computer device 100 is detected.
  • the storage controller 106 e.g., the flusher module 108 within the storage controller 106 detects a received data entry 114 associated with data object identifier 202.
  • a determination is made on whether the sequence identifier of the received data entry matches a sequence identifier for a next data packet that will be stored in a specific storage area. For example, a determination is made on whether the sequence identifier 206 of data entry 114 is the next sequence identifier for a next data packet that will be stored in storage area 120.
  • storage area 120 stores data packet 1 with sequence identifier 204, making sequence identifier 206 the next sequence identifier.
  • the data entry can be directed to a different storage area (e.g., a storage area for processing entries associated with the non-matching sequence identifier, as illustrated in FIG. 2B), and processing continues at operation 302. If the sequence identifier of the data entry matches the sequence identifier for a next data packet in the storage area, processing continues at operation 306, when the new data packet of the received data entry is stored in the storage area, and a variable S, indicating a total size of valid data stored in the storage area, is accumulated with the size of the new data packet.
  • a storage area e.g., a storage area for processing entries associated with the non-matching sequence identifier, as illustrated in FIG. 2B
  • data packet 2 is stored in storage area 120, and variable S is accumulated with the size of the data packet 2.
  • a determination is made on whether the current accumulated size S of the storage area is greater than or equal to a mapping unit size (e.g., a sector) of the storage device 104. If the current accumulated size S is not greater than or equal to the mapping unit size of the storage device 104, processing continues at operation 302. If the current accumulated size S is not greater than or equal to the mapping unit size of the storage device 104, processing continues at operation 310, when the storage area is flushed into a mapping unit of the storage device, which clears the storage area for subsequent data packet storage. Additionally, a byte size R of a remaining data packet portion is calculated.
  • a mapping unit size e.g., a sector
  • storage area 120 in FIG. 2B stores only a portion of data packet 3 before the storage area is flushed into sector 232, leaving a remaining portion 234 of data packet 3 for subsequent storage in storage area 120 after it has been flushed.
  • the byte size R of the remaining data packet portion is the size of the remaining portion 234 of data packet 3.
  • FIG. 3B is a flowchart of method 300B for processing streaming data by a flusher module during a power loss, according to example embodiments.
  • Method 300B includes operations 316, 318, and 320.
  • a storage controller e.g., a flusher module such as flusher module 108 of FIG. 1 or other firmware or hardware of the storage controller 106
  • a computer device e.g., device 100 illustrated in FIG. 1 or device 800 illustrated in FIG. 8.
  • storage controller 106 is configured to detect a power loss event of the storage device 104 and process data packets stored in the power-protected buffer 110 based on the detected power loss event. For example, at operation 316, a power loss event associated with the storage device is detected. At operation 318, padding is performed of a pending list of data packets in the power-protected buffer 110. For example, storage area 120 in the power-protected buffer 110 stores a pending list of data packets 1 and 2.
  • the storage controller 106 Upon detecting the power loss event associated with the storage device 104, the storage controller 106 (e.g., the flusher module 108) pads the pending list with zero-byte data so that the sector size of the storage area 120 is full with data.
  • the padded pending list is flushed into a mapping unit of the storage device. For example, the pending list including zero-byte data of the storage area 120 is flushed into sector 124 of the storage device 104.
  • FIG. 4 is a block diagram 400 illustrating a flusher module 108 configured to perform logical operations on streaming data within a storage device, according to example embodiments.
  • the plurality of data entries 404 - 410 are associated with received stream 401.
  • Each of the data entries 404 - 410 includes a data object identifier (IDx) of a data object the data entry is associated with, a data processing operation identifier (CMD), a data packet (e.g., 1, 2, 3, or 4), and a sequence identifier (SEQ).
  • CMD data processing operation identifier
  • SEQ sequence identifier
  • each of the data entries 404 - 410 includes the data object identifier (IDx) which identifies a data object the particular data entries of stream 401 are associated with.
  • the flusher module 108 is configured to perform different data processing operations (e.g., one or more logical operations) on data packets stored by the power-protected buffer 110.
  • the flusher module 108 retrieves stored data from the mapping unit of the storage device (e.g., from sector 124) and stores the retrieved data into a second power-protected buffer (e.g., buffer 412).
  • the flusher module 108 detects a size of the plurality of data packets stored in storage area 120 of the power-protected buffer 110 is equal to the size of the mapping unit of the storage device (namely, the storage area 120 includes data packets with a total size of one sector).
  • the flusher module 108 then applies a logical operation (e.g., XOR operation 416) to the stored data (e.g., the data packets stored in storage area 120) and data packets within the retrieved data stored in buffer 412 to generate new data.
  • the new data is stored in a third power-protected buffer 414 managed by the flusher module 108.
  • the flusher module 108 subsequently stores the new data in the mapping unit (e.g., sector 124) of the storage device.
  • FIG. 5 is a block diagram illustrating a flusher module 108 configured to perform erasure coding operations 502 and 504 on streaming data within a storage device to generate different parity values, according to example embodiments.
  • the plurality of data entries 524 - 530 are associated with received stream 501.
  • Each of the data entries 524 - 530 includes a data object identifier (IDx) of a data object the data entry is associated with, a data processing operation identifier (CMD), a data packet (e.g., 1, 2, 3, or 4), and a sequence identifier (SEQ).
  • each of the data entries 524 - 530 includes the data object identifier (IDx) which identifies a data object the particular data entries of stream 501 are associated with.
  • data packets from corresponding data entries are stored in the storage area 506 of a power-protected buffer, and are managed by the flusher module 108.
  • the flusher module 108 is configured to generate data chunks (or data slices) 508, 510, and 512 using data stored in storage area 506 (the stored data being also referred to in FIG. 5 as “trunk”).
  • parity values P and Q may be generated using the same data in storage area 506, by applying parity value generation techniques associated with erasure coding techniques. As the parity values P 518 and Q 519 are generated, they may be stored in sector 520 of the storage device.
  • the flusher module 108 detects a size of data entries stored in the storage area 506 of the power-protected buffer is equal to a predefined size associated with an erasure coding operation (e.g., the data generated by such operation will render a size greater than a size of a mapping unit, such as a sector of the storage device, for example, 12KB in the 3+2 erasure coding scheme and mapping unit is 4KB).
  • the flusher module 108 applies the erasure coding operation (e.g., a logical operation, a byte-shifting operation, or another type of erasure coding operation) to data entries stored in the storage area 506 to generate data slices.
  • the flusher module 108 generates a parity value (e.g., parity value P 518 or Q 519) based on the data slices, and stores the data slices or the parity value in the mapping unit of the storage device.
  • FIG. 6 is a flowchart of another method 600 for processing a stream of data accesses within a storage device, according to example embodiments.
  • Method 600 includes operations 602, 604, 606, and 608.
  • a storage device controller e.g., a flusher module such as flusher module 108 of FIG. 1 or other firmware or hardware of the storage controller 106
  • a plurality of data entries is detected within the streaming received at the storage device.
  • computer device 100 receives multiple data entries associated with streams 240 and 242 of ordered data accesses, as illustrated in FIG.
  • Each data entry of the plurality of data entries includes a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier.
  • data entries 214 - 218 include data object identifier 212
  • data entries 222 - 228 include a data object identifier 220.
  • a subset of the plurality of data entries is stored in a power-protected buffer of the storage device.
  • Each subset data entry in the subset of the plurality of data entries includes a same data object identifier, and the storing is based on the same data object identifier.
  • a subset of the received data entries can include data entries 214, 216, and 218 associated with data object identifier 212 of stream 240.
  • the data entries 214 - 218 may be stored in storage area 120 of power-protected buffer 110.
  • the data processing operation for each data entry in the subset of the plurality of data entries is executed according to the data processing operation identifier.
  • the data processing operation (or CMD) for each data entry in the subset of data entries associated with the data object identifier 212 is executed according to an execution order based on the corresponding sequence identifier (or SEQ) within each data entry.
  • the subset of the plurality of data entries is flushed from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries. For example, after the data processing operation for each data entry in the subset is executed and after the storage area 120 is full with data packets up to a mapping unit size of the storage device (e.g., when the storage area 120 is full with data packets up to a sector size), the flusher module 108 flushes the contents of the storage area 120 into sector 232 of the storage device 104.
  • FIG. 7 is a block diagram illustrating a representative software architecture, which may be used in conjunction with various device hardware described herein, according to example embodiments.
  • FIG. 7 is merely a non limiting example of a software architecture 702 and it will be appreciated that many other architectures may be implemented to facilitate the functionality described herein.
  • the software architecture 702 executes on hardware, such as computer device 100 in FIG. 1 which can be the same as device 800 of FIG. 8 that includes, among other things, processor 805, memory 810, storage 815 and/or 820, and I/O interfaces 825 and 830.
  • a representative hardware layer 704 is illustrated and can represent, for example, the device 800 of FIG. 8.
  • the representative hardware layer 704 comprises one or more processing units 706 having associated executable instructions 708.
  • Executable instructions 708 represent the executable instructions of the software architecture 702, including implementation of the methods, modules, and so forth of FIGS. 1-6.
  • Hardware layer 704 also includes memory or storage modules 710, which also have executable instructions 708.
  • Hardware layer 704 may also comprise other hardware 712, which represents any other hardware of the hardware layer 704, such as the other hardware illustrated as part of device 800.
  • the memory or storage modules 710 can include storage devices (e.g., storage device 104) with firmware implementing the flusher module (FM) 760.
  • the FM 760 comprises suitable circuitry, logic, interfaces, or code and can be configured to perform one or more of the ordered data access processing functions performed by the FM 108 and discussed in connection with FIGS. 1-6.
  • the software architecture 702 may be conceptualized as a stack of layers where each layer provides particular functionality.
  • the software architecture 702 may include layers such as an operating system 714, libraries 716, frameworks/middleware 718, applications 720, and presentation layer 744.
  • the applications 720 or other components within the layers may invoke application programming interface (API) calls 724 through the software stack and receive a response, returned values, and so forth, illustrated as messages 726 in response to the API calls 724.
  • API application programming interface
  • the layers illustrated in FIG. 7 are representative in nature and not all software architectures 702 have all layers. For example, some mobile or special purpose operating systems may not provide frameworks/middleware 718, while others may provide such a layer. Other software architectures may include additional or different layers.
  • the operating system 714 may manage hardware resources and provide common services.
  • the operating system 714 may include, for example, a kernel 728, services 730, and drivers 732.
  • the kernel 728 may act as an abstraction layer between the hardware and the other software layers. For example, kernel 728 may be responsible for memory management, processor management (e.g., scheduling), component management, networking, security settings, and so on.
  • the services 730 may provide other common services for the other software layers.
  • Drivers 732 may be responsible for controlling or interfacing with the underlying hardware.
  • the drivers 732 may include display drivers, camera drivers, Bluetooth® drivers, flash memory drivers, serial communication drivers (e.g., Universal Serial Bus (USB) drivers), Wi-Fi® drivers, audio drivers, power management drivers, and so forth, depending on the hardware configuration.
  • serial communication drivers e.g., Universal Serial Bus (USB) drivers
  • USB Universal Serial Bus
  • Wi-Fi® drivers audio drivers
  • power management drivers and so forth, depending on the hardware configuration.
  • Libraries 716 may provide a common infrastructure that may be utilized by the applications 720 or other components or layers. Libraries 716 typically provide functionality that allows other software modules to perform tasks more easily than to interface directly with the underlying operating system 714 functionality (e.g., kernel 728, services 730, or drivers 732). Libraries 716 may include system libraries 734 (e.g., C standard library) that may provide functions such as memory allocation functions, string manipulation functions, mathematic functions, and the like.
  • system libraries 734 e.g., C standard library
  • libraries 716 may include API libraries 736 such as media libraries (e.g., libraries to support presentation and manipulation of various media format such as MPEG4, H.264, MP3, AAC, AMR, JPG, PNG), graphics libraries (e.g., an OpenGL framework that may be used to render 2D and 3D in a graphic content on a display), database libraries (e.g., SQLite that may provide various relational database functions), web libraries (e.g., WebKit that may provide web browsing functionality), and the like.
  • libraries 716 may also include a wide variety of other libraries 738 to provide many other APIs to the applications 720 and other software components/modules .
  • the frameworks/middleware 718 may provide a higher-level common infrastructure that may be utilized by the applications 720 or other software components/modules.
  • the frameworks/middleware 718 may provide various graphical user interface (GUI) functions, high-level resource management, high-level location services, and so forth.
  • GUI graphical user interface
  • the frameworks/middleware 718 may provide a broad spectrum of other APIs that may be utilized by the applications 720 or other software components/modules, some of which may be specific to a particular operating system 714 or platform.
  • Applications 720 include built-in applications 740, and third- party applications 742.
  • built-in applications 740 may include but are not limited to, a contacts application, a browser application, a book reader application, a location application, a media application, a messaging application, or a game application.
  • Third-party applications 742 may include any of the built-in applications 740 as well as a broad assortment of other applications.
  • the third-party application 742 e.g., an application developed using the AndroidTM or iOSTM software development kit (SDK) by an entity other than the vendor of the particular platform
  • SDK software development kit
  • the third-party application 742 may invoke the API calls 724 provided by the mobile operating system such as operating system 714 to facilitate functionality described herein.
  • the applications 720 may utilize built-in operating system functions (e.g., kernel 728, services 730, and drivers 732), libraries (e.g., system libraries 734, API libraries 736, and other libraries 738), and frameworks/middleware 718 to create user interfaces to interact with users of the system.
  • built-in operating system functions e.g., kernel 728, services 730, and drivers 732
  • libraries e.g., system libraries 734, API libraries 736, and other libraries 738
  • frameworks/middleware 718 e.g., frameworks/middleware 718 to create user interfaces to interact with users of the system.
  • interactions with a user may occur through a presentation layer, such as presentation layer 744.
  • presentation layer 744 such as presentation layer 744.
  • the application/module "logic" can be separated from the aspects of the application/module that interact with a user.
  • Some software architectures utilize virtual machines.
  • virtual machine 748 A virtual machine creates a software environment where applications/modules can execute as if they were executing on a hardware machine (such as the device 800 of FIG. 8, for example).
  • a virtual machine 748 is hosted by a host operating system (e.g., operating system 714) and typically, although not always, has a virtual machine monitor 746, which manages the operation of the virtual machine 748 as well as the interface with the host operating system (i.e., operating system 714).
  • a software architecture 702 executes within the virtual machine 748 such as an operating system 750, libraries 752, frameworks/middleware 754, applications 756, or presentation layer 758. These layers of software architecture executing within the virtual machine 748 can be the same as corresponding layers previously described or may be different.
  • FIG. 8 is a block diagram illustrating circuitry for a device that implements algorithms and performs methods, according to example embodiments. All components need not be used in various embodiments. For example, clients, servers, and cloud-based network devices may each use a different set of components, or in the case of servers, larger storage devices.
  • One example computing device in the form of a computer 800 may include a processor 805, memory 810, removable storage 815, non removable storage 820, input interface 825, the output interface 830, and communication interface 835, all connected by a bus 840.
  • a processor 805 may include a processor 805
  • memory 810 may include a processor 805
  • removable storage 815 may include a processor 805
  • non removable storage 820 may include a processor 805
  • input interface 825 may be used to communicated to a bus 840.
  • the example computing device may be in different forms in different embodiments.
  • the memory 810 may include volatile memory 845 and non volatile memory 850 and may store a program 855.
  • the computing device 800 may include - or have access to a computing environment that includes - a variety of computer-readable media, such as the volatile memory 845, the non volatile memory 850, the removable storage 815, and the non-removable storage 820.
  • Computer storage includes random-access memory (RAM), read-only memory (ROM), erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM), flash memory or other memory technologies, compact disc read-only memory (CD ROM), digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium capable of storing computer-readable instructions.
  • Computer-readable instructions stored on a computer-readable medium e.g., the program 855 stored in the memory 810) are executable by the processor 805 of the computing device 800.
  • a hard drive, CD-ROM, and RAM are some examples of articles including a non-transitory computer-readable medium such as a storage device.
  • Computer-readable medium and “storage device” do not include carrier waves to the extent that carrier waves are deemed too transitory.
  • “Computer-readable non-transitory media” includes all types of computer-readable media, including magnetic storage media, optical storage media, flash media, and solid-state storage media.
  • software can be installed in and sold with a computer. Alternatively, the software can be obtained and loaded into the computer, including obtaining the software through a physical medium or distribution system, including, for example, from a server owned by the software creator or from a server not owned but used by the software creator. The software can be stored on a server for distribution over the Internet, for example.
  • the terms “computer-readable medium” and “machine-readable medium” are interchangeable.
  • Program 855 may utilize a flusher module 860 which may be the same as or similar to the flusher module 108 of FIG. 1.
  • Any one or more of the modules described herein may be implemented using hardware (e.g., a processor of a machine, an application-specific integrated circuit (ASIC), field-programmable gate array (FPGA), or any suitable combination thereof). Moreover, any two or more of these modules may be combined into a single module, and the functions described herein for a single module may be subdivided among multiple modules. Furthermore, according to various example embodiments, modules described herein as being implemented within a single machine, database, or device may be distributed across multiple machines, databases, or devices.
  • hardware e.g., a processor of a machine, an application- specific integrated circuit (ASIC), field-programmable gate array (FPGA), or any suitable combination thereof.
  • ASIC application- specific integrated circuit
  • FPGA field-programmable gate array
  • software including one or more computer-executable instructions that facilitate processing and operations as described above regarding any one or all of the steps of the disclosure can be installed in and sold with one or more computing devices consistent with the disclosure.
  • the software can be obtained and loaded into one or more computing devices, including obtaining the software through a physical medium or distribution system, including, for example, from a server owned by the software creator or from a server not owned but used by the software creator.
  • the software can be stored on a server for distribution over the Internet, for example.
  • the components of the illustrative devices, systems, and methods employed by the illustrated embodiments can be implemented, at least in part, in digital electronic circuitry, analog electronic circuitry, or computer hardware, firmware, software, or in combinations of them. These components can be implemented, for example, as a computer program product such as a computer program, program code, or computer instructions tangibly embodied in an information carrier, or a machine-readable storage device, for execution by, or to control the operation of, data processing apparatus such as a programmable processor, a computer, or multiple computers.
  • a computer program product such as a computer program, program code, or computer instructions tangibly embodied in an information carrier, or a machine-readable storage device, for execution by, or to control the operation of, data processing apparatus such as a programmable processor, a computer, or multiple computers.
  • a computer program can be written in any form of programming language, including compiled or interpreted languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other units suitable for use in a computing environment.
  • a computer program can be deployed to be executed on one computer or multiple computers at one site or distributed across multiple sites and interconnected by a communication network.
  • functional programs, codes, and code segments for accomplishing the techniques described herein can be easily construed as within the scope of the claims by programmers skilled in the art to which the techniques described herein pertain.
  • Method steps associated with the illustrative embodiments can be performed by one or more programmable processors executing a computer program, code, or instructions to perform functions (e.g., by operating on input data or generating an output). Method steps can also be performed by, and apparatus for performing the methods can be implemented as, special purpose logic circuitry, e.g., an FPGA (field-programmable gate array) or an ASIC (application-specific integrated circuit), for example.
  • FPGA field-programmable gate array
  • ASIC application-specific integrated circuit
  • DSP digital signal processor
  • a general-purpose processor may be a microprocessor, but in the alternative, the processor may be any processor, controller, microcontroller, or state machine.
  • a processor may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration.
  • processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer.
  • a processor will receive instructions and data from a read-only memory or a random-access memory or both.
  • the required elements of a computer are a processor for executing instructions and one or more memory devices for storing instructions and data.
  • a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto-optical disks, or optical disks.
  • Information carriers suitable for embodying computer program instructions and data include all forms of non-volatile memory, including by way of example, semiconductor memory devices, e.g., electrically programmable read-only memory or ROM (EPROM), electrically erasable programmable ROM (EEPROM), flash memory devices, or data storage disks (e.g., magnetic disks, internal hard disks, or removable disks, magneto-optical disks, or CD-ROM and DVD-ROM disks).
  • semiconductor memory devices e.g., electrically programmable read-only memory or ROM (EPROM), electrically erasable programmable ROM (EEPROM), flash memory devices, or data storage disks (e.g., magnetic disks, internal hard disks, or removable disks, magneto-optical disks, or CD-ROM and DVD-ROM disks).
  • EPROM electrically programmable read-only memory
  • EEPROM electrically erasable programmable ROM
  • flash memory devices e.g., electrically erasable
  • machine-readable medium comprises a device able to store instructions and data temporarily or permanently and may include, but is not limited to, random- access memory (RAM), read-only memory (ROM), buffer memory, flash memory, optical media, magnetic media, cache memory, other types of storage (e.g., Erasable Programmable Read-Only Memory (EEPROM)), or any suitable combination thereof.
  • RAM random- access memory
  • ROM read-only memory
  • buffer memory flash memory
  • optical media magnetic media
  • cache memory other types of storage
  • EEPROM Erasable Programmable Read-Only Memory
  • machine-readable medium shall also be taken to include any medium or a combination of multiple media, that is capable of storing instructions for execution by one or more processors, such that the instructions, when executed by one or more processors, cause the one or more processors to perform any one or more of the methodologies described herein. Accordingly, a “machine- readable medium” refers to a single storage apparatus or device, as well as “cloud-based” storage systems or storage networks that include multiple storage apparatus or devices. The term “machine-readable medium” as used herein excludes signals per se.
  • the computing device 800 includes a data entry detection module for detecting a plurality of data entries within the stream received at the storage device, each data entry of the plurality of data entries comprising a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier; a subset storage module for storing a subset of the plurality of data entries in a power-protected buffer of the storage device, each subset data entry in the subset of the plurality of data entries comprising a same data object identifier, the storing based on the same data object identifier; a data processing module for executing a data processing operation according to the data processing identifier, the data processing operation performed for each data entry in the subset of the plurality of data entries, the data processing operation for each subset data entry in the subset executed according to an execution order based on the sequence identifier; and a subset flush module for flushing the subset of the plurality of data entries

Abstract

A storage controller (106) detects a plurality of data entries within a stream of data accesses received at a storage device (104), each data entry including a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier. A subset of the data entries is stored in a power-protected buffer (110) of the storage device, each subset data entry in the subset including a same data object identifier, and the storing based on the same data object identifier. A data processing operation according to the data processing identifier is executed for each data entry in the subset according to an execution order based on the sequence identifier. The storage controller flushes the subset from the power-protected buffer into a mapping unit (124) of the storage device based on a subset size of the subset.

Description

DATA ACCESS PROCESSING AGNOSTIC TO MAPPING UNIT SIZE
TECHNICAL FIELD
[0001] The present disclosure is related to the processing of ordered data accesses in computing devices.
BACKGROUND
[0002] Storage systems are often associated with processing inefficiencies for streaming partial or unaligned updates. For example, performing partial updates to a storage device, such as updates that are smaller than the device mapping unit, includes reading data that is larger than the partial updates, modifying the data, and storing back the modified data. There are drawbacks with this approach, including data volatility (e.g., volatility once the data is read from the storage device) as well as acknowledgment delays (e.g., data update acknowledgment is communicated after the updated data is written back into storage).
SUMMARY
[0003] Various examples are now described to introduce a selection of concepts in a simplified form, which are further described below in the detailed description. The Summary is not intended to identify key or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
[0004] According to a first aspect of the present disclosure, there is provided a computer-implemented method for processing a stream of data accesses in a storage device. The method includes detecting, by a storage controller of the storage device, a plurality of data entries within the stream received at the storage device, each data entry of the plurality of data entries including a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier. The storage controller stores a subset of the plurality of data entries in a power- protected buffer of the storage device, each subset data entry in the subset of the plurality of data entries comprising a same data object identifier, the storing based on the same data object identifier. The storage controller executes a data processing operation according to the data processing operation identifier. The data processing operation is performed for each data entry in the subset of the plurality of data entries. The data processing operation for each subset data entry in the subset is executed according to an execution order based on the sequence identifier. The storage controller flushes the subset of the plurality of data entries from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries.
[0005] In a first implementation form of the method according to the first aspect as such, the storage device is one of a hard drive (HD) or a solid-state drive (SSD).
[0006] In a second implementation form of the method according to the first aspect as such or any implementation form of the first aspect, the power- protected buffer is a coalescing buffer managed by the storage controller.
[0007] In a third implementation form of the method according to the first aspect as such or any implementation form of the first aspect, where performing the flushing further includes detecting, by the storage controller, that the subset size of the subset of the plurality of data entries stored in the power- protected buffer is equal to a mapping unit size of the mapping unit of the storage device.
[0008] In a fourth implementation form of the method according to the first aspect as such or any implementation form of the first aspect, a power loss event associated with the storage device is detected. The subset of the plurality of data entries stored in the power-protected buffer is padded based on the detecting of the power loss event to obtain a padded subset of the plurality of data entries. The padding causes a size of the padded subset to be equal to a mapping unit size of the mapping unit of the storage device. The padded subset of the plurality of data entries is flushed from the power-protected buffer into the mapping unit.
[0009] In a fifth implementation form of the method according to the first aspect as such or any implementation form of the first aspect, each subset data entry in the subset of the plurality of data entries includes a data packet, and the method further includes executing, by the storage controller, the data processing operation using the data packet in each subset data entry in the subset.
[0010] In a sixth implementation form of the method according to the first aspect as such or any implementation form of the first aspect, the data processing operation is a data read operation, a data write operation, or a data verify operation.
[0011] In a seventh implementation form of the method according to the first aspect as such or any implementation form of the first aspect, the storing further includes storing, by the storage controller, each subset data entry in the power-protected buffer sequentially, based on the sequence identifier.
[0012] In an eighth implementation form of the method according to the first aspect as such or any implementation form of the first aspect, stored data is retrieved from the mapping unit of the storage device into a second power- protected buffer. The subset size of the subset of the plurality of data entries stored in the power-protected buffer is detected as equal to a mapping unit size of the mapping unit of the storage device. A logical operation is applied to the stored data in the second power-protected buffer and data packets within the subset of the plurality of data entries in the power-protected buffer to generate new data. The new data is stored in the mapping unit of the storage device.
[0013] In a ninth implementation form of the method according to the first aspect as such or any implementation form of the first aspect, the data object identifier is associated with the power-protected buffer and the method further includes storing, by the storage controller, a second subset of the plurality of data entries in a second power-protected buffer of the storage device. Each second subset data entry in the second subset of the plurality of data entries includes a second data object identifier. The second data object identifier is different from the data object identifier associated with the power-protected buffer.
[0014] In a tenth implementation form of the method according to the first aspect as such or any implementation form of the first aspect, the storage controller detects that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a predefined size associated with an erasure coding operation. The erasure coding operation is applied to one or more data entries in the subset of the plurality of data entries to generate data slices corresponding to the subset. A parity value is generated based on the data slices. The data slices or the parity value are stored in the mapping unit of the storage device.
[0015] According to a second aspect of the present disclosure, there is provided an apparatus for processing a stream of data accesses in a storage device. The system includes memory storing instructions, a power-protected buffer, and one or more processors in communication with the memory and the power-protected buffer. The one or more processors execute the instructions to perform operations including detecting a plurality of data entries within the stream received at the storage device. Each data entry of the plurality of data entries includes a data object identifier of at least one data object the data entry is associated with, a data processing operation, and a sequence identifier. A subset of the plurality of data entries is stored in a power-protected buffer of the storage device. Each subset data entry in the subset of the plurality of data entries includes a same data object identifier, and the storing is based on the same data object identifier. A data processing operation is executed according to the data processing operation identifier. The data processing operation is performed for each data entry in the subset of the plurality of data entries. The data processing operation for each subset data entry in the subset is executed according to an execution order based on the sequence identifier. The subset of the plurality of data entries is flushed from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries.
[0016] In a first implementation form of the apparatus according to the second aspect as such, the storage device is one of a hard drive (HD) or a solid- state drive (SSD).
[0017] In a second implementation form of the apparatus according to the second aspect as such, the power-protected buffer is a coalescing buffer managed by the one or more processors.
[0018] In a third implementation form of the apparatus according to the second aspect as such or any implementation form of the second aspect, where to perform the flushing, the one or more processors are further configured to detect that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a mapping unit size of the mapping unit of the storage device.
[0019] In a fourth implementation form of the apparatus according to the second aspect as such or any implementation form of the second aspect, the one or more processors are further configured to execute the instructions to perform operations including detecting a power loss event associated with the storage device. The operations further include padding the subset of the plurality of data entries stored in the power-protected buffer based on the detecting of the power loss event to obtain a padded subset of the plurality of data entries. The padding causes a size of the padded subset to be equal to a mapping unit size of the mapping unit of the storage device. The operations further include flushing the padded subset of the plurality of data entries from the power-protected buffer into the mapping unit.
[0020] In a fifth implementation form of the apparatus according to the second aspect as such or any implementation form of the second aspect, each subset data entry in the subset of the plurality of data entries includes a data packet and the one or more processors execute the instructions to perform operations including executing the data processing operation using the data packet in each subset data entry in the subset.
[0021] In a sixth implementation form of the apparatus according to the second aspect as such or any implementation form of the second aspect, the data processing operation is a data read operation, a data write operation, or a data verify operation.
[0022] In a seventh implementation form of the apparatus according to the second aspect as such or any implementation form of the second aspect, the one or more processors are further configured to store each subset data entry in the subset in the power-protected buffer sequentially, based on the sequence identifier.
[0023] In an eighth implementation form of the apparatus according to the second aspect as such or any implementation form of the second aspect, the one or more processors are further configured to retrieve stored data from the mapping unit of the storage device into a second power-protected buffer. The subset size of the subset of the plurality of data entries stored in the power- protected buffer is detected as equal to a mapping unit size of the mapping unit of the storage device. A logical operation is applied to the stored data in the second power-protected buffer and data packets within the subset of the plurality of data entries in the power-protected buffer to generate new data. The new data is stored in the mapping unit of the storage device.
[0024] In a ninth implementation form of the apparatus according to the second aspect as such or any implementation form of the second aspect, the data object identifier is associated with the power-protected buffer, and the one or more processors are further configured to store a second subset of the plurality of data entries in a second power-protected buffer of the storage device. Each second subset data entry in the second subset of the plurality of data entries includes a second data object identifier. The second data object identifier is different from the data object identifier associated with the power-protected buffer.
[0025] In a tenth implementation form of the apparatus according to the second aspect as such or any implementation form of the second aspect, the one or more processors are further configured to detect that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a predefined size associated with an erasure coding operation. The erasure coding operation is applied to one or more data entries in the subset of the plurality of data entries to generate data slices corresponding to the subset. A parity value is generated based on the data slices. The data slices or the parity value are stored in the mapping unit of the storage device.
[0026] According to a third aspect of the present disclosure, there is provided a computer-readable medium storing instructions for processing a stream of data accesses in a storage device. When executed by one or more processors, the instructions cause the one or more processors to perform operations including detecting a plurality of data entries within the stream received at the storage device. Each data entry of the plurality of data entries includes a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier. A subset of the plurality of data entries is stored in a power-protected buffer of the storage device. Each subset data entry in the subset of the plurality of data entries includes a same data object identifier, and the storing is based on the same data object identifier. A data processing operation is executed according to the data processing operation identifier. The data processing operation is performed for each data entry in the subset of the plurality of data entries. The data processing operation for each subset data entry in the subset is executed according to an execution order based on the sequence identifier. The subset of the plurality of data entries is flushed from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries.
[0027] In a first implementation form of the computer-readable medium according to the third aspect as such, the storage device is one of a hard drive (HD) or a solid-state drive (SSD).
[0028] In a second implementation form of the computer-readable medium according to the third aspect as such or any implementation form of the third aspect, the power-protected buffer is a coalescing buffer managed by the one or more processors.
[0029] In a third implementation form of the computer-readable medium according to the third aspect as such or any implementation form of the third aspect, executing the instructions causes the one or more processors to perform operations including detecting that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a mapping unit size of the mapping unit of the storage device.
[0030] In a fourth implementation form of the computer-readable medium according to the third aspect as such or any implementation form of the third aspect, the instructions further cause the one or more processors to perform operations including detecting a power loss event associated with the storage device. The operations further include padding the subset of the plurality of data entries stored in the power-protected buffer based on the detecting of the power loss event to obtain a padded subset of the plurality of data entries, the padding causing a size of the padded subset to be equal to a mapping unit size of the mapping unit of the storage device. The operations further include flushing the padded subset of the plurality of data entries from the power-protected buffer into the mapping unit.
[0031] In a fifth implementation form of the computer-readable medium according to the third aspect as such or any implementation form of the third aspect, each subset data entry in the subset of the plurality of data entries includes a data packet, and the instructions further cause the one or more processors to perform operations including executing the data processing operation using the data packet in each subset data entry in the subset.
[0032] In a sixth implementation form of the computer-readable medium according to the third aspect as such or any implementation form of the third aspect, the data processing operation is a data read operation, a data write operation, or a data verify operation.
[0033] In a seventh implementation form of the computer-readable medium according to the third aspect as such or any implementation form of the third aspect, the storing further includes storing each subset data entry in the power-protected buffer sequentially, based on the sequence identifier.
[0034] In an eighth implementation form of the computer-readable medium according to the third aspect as such or any implementation form of the third aspect, the instructions further cause the one or more processors to perform operations including retrieving stored data from the mapping unit of the storage device into a second power-protected buffer. The subset size of the subset of the plurality of data entries stored in the power-protected buffer is detected as equal to a mapping unit size of the mapping unit of the storage device. A logical operation is applied to the stored data in the second power-protected buffer and data packets within the subset of the plurality of data entries in the power- protected buffer to generate new data. The new data is stored in the mapping unit of the storage device.
[0035] In a ninth implementation form of the computer-readable medium according to the third aspect as such or any implementation form of the third aspect, the data object identifier is associated with the power-protected buffer and the instructions further cause the one or more processors to perform operations including storing a second subset of the plurality of data entries in a second power-protected buffer of the storage device. Each second subset data entry in the second subset of the plurality of data entries includes a second data object identifier. The second data object identifier is different from the data object identifier associated with the power-protected buffer.
[0036] In a tenth implementation form of the computer-readable medium according to the third aspect as such or any implementation form of the third aspect, the instructions further cause the one or more processors to perform operations including detecting that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a predefined size associated with an erasure coding operation. The erasure coding operation is applied to one or more data entries in the subset of the plurality of data entries to generate data slices corresponding to the subset. A parity value is generated based on the data slices. The data slices or the parity value are stored in the mapping unit of the storage device.
[0037] According to a fourth aspect of the present disclosure, there is provided a storage controller for processing a stream of data accesses in a storage device. The storage controller includes a data entry detection module for detecting a plurality of data entries within the stream received at the storage device, each data entry of the plurality of data entries comprising a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier; a subset storage module for storing a subset of the plurality of data entries in a power-protected buffer of the storage device, each subset data entry in the subset of the plurality of data entries comprising a same data object identifier, the storing based on the same data object identifier; a data processing module for executing a data processing operation according to the data processing identifier, the data processing operation performed for each data entry in the subset of the plurality of data entries, the data processing operation for each subset data entry in the subset executed according to an execution order based on the sequence identifier; and a subset flush module for flushing the subset of the plurality of data entries from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries. [0038] Any of the foregoing examples may be combined with any one or more of the other foregoing examples to create a new embodiment within the scope of the present disclosure.
BRIEF DESCRIPTION OF THE DRAWINGS
[0039] In the drawings, like numerals may describe similar components in different views. The drawings illustrate generally, by way of example, but not by way of limitation, various embodiments discussed in the present document.
[0040] FIG. 1 is a block diagram illustrating a computing device using a flusher module to perform data processing operations agnostic to mapping unit size, according to example embodiments.
[0041] FIG. 2A is a block diagram illustrating processing a plurality of data entries associated with the same data object identifier, according to example embodiments.
[0042] FIG. 2B is a block diagram illustrating processing a plurality of data entries associated with multiple data object identifiers, according to example embodiments.
[0043] FIG. 3A is a flowchart of a method for processing streaming data by a flusher module within a storage device, according to example embodiments.
[0044] FIG. 3B is a flowchart of a method for processing streaming data by a flusher module during a power loss, according to example embodiments.
[0045] FIG. 4 is a block diagram illustrating a flusher module configured to perform logical operations on streaming data within a storage device, according to example embodiments.
[0046] FIG. 5 is a block diagram illustrating a flusher module configured to perform erasure coding operations on streaming data within a storage device, according to example embodiments.
[0047] FIG. 6 is a flowchart of another method for processing a stream of data accesses within a storage device, according to example embodiments.
[0048] FIG. 7 is a block diagram illustrating a representative software architecture, which may be used in conjunction with various device hardware described herein, according to example embodiments. [0049] FIG. 8 is a block diagram illustrating circuitry for a device that implements algorithms and performs methods, according to example embodiments.
DETAILED DESCRIPTION
[0050] It should be understood at the outset that although an illustrative implementation of one or more embodiments is provided below, the disclosed systems and methods described with respect to FIGS. 1-8 may be implemented using any number of techniques, whether currently known or not yet in existence. The disclosure should in no way be limited to the illustrative implementations, drawings, and techniques illustrated below, including the exemplary designs and implementations illustrated and described herein, but may be modified within the scope of the appended claims along with their full scope of equivalents.
[0051] In the following description, reference is made to the accompanying drawings that form a part hereof, and in which are shown, by way of illustration, specific embodiments that may be practiced. These embodiments are described in sufficient detail to enable those skilled in the art to practice the inventive subject matter, and it is to be understood that other embodiments may be utilized, and that structural, logical, and electrical changes may be made without departing from the scope of the present disclosure. The following description of example embodiments is, therefore, not to be taken in a limiting sense, and the scope of the present disclosure is defined by the appended claims.
[0052] As used herein, the terms “data accesses” or “ordered data accesses” refer to a stream of data entries used for accessing data objects at network-attached storage devices. An example data entry may include a data object identifier (e.g., an identifier, or ID, of at least one data object that the data entry is associated with), a data processing operation identifier (e.g., an identifier representing a data processing operation to be performed on the data object), and a sequence identifier for ordering data processing operations associated with the same data object identifier. Since the data entries (in the stream of data entries) may be ordered according to, e.g., the data object identifier, the stream of data entries is also referred to as ordered data accesses. As used herein, the term “data processing operation” includes at least one of a Create data processing operation (to generate a data object at a storage device), a Read data processing operation (for reading a data object), a Modify data processing operation such as an Append data processing operation (for appending data to an existing data object), and a Delete data processing operation (for deleting a data object).
[0053] Storage systems, most of which have inherent mapping units, are often associated with processing inefficiencies for streaming partial or unaligned data object updates. For example, any partial (e.g., less than a mapping unit such as a sector) updates to the storage device will be performed using read-modify- write operations to carry out the updates. During read-modify-write operations, an entire sector is read out from the storage device into a temporary buffer, the temporary data is modified with the partial update, and then the whole sector (including the updated portion) is written back to the storage device (an example read-modify-write operation is discussed in connection with FIG. 1). There are several drawbacks to this approach. First, the temporary data is outside of the storage device, thus may be volatile when stored in the temporary buffer (e.g., a memory buffer), and the new data may be susceptible to power loss, resulting in a data loss for all data stored in the temporary buffer. Second, if an acknowledgment for the data update is communicated upon writing the updated data back into the storage device, the acknowledgment delay can be significant since an acknowledgment may not be sent until the full sector is written back into the storage device.
[0054] Storage systems may also be associated with processing inefficiencies when there are multiple partial updates to the same sector or adjacent sectors, and some of the updates are not sector aligned. A solution to this issue is to employ a coalescing buffer outside the storage device for temporarily holding the updates, coalescing the partial updates into one full sector, then flushing the full sector back to the device. Even though such processing removes the long read-modify-write cycle, additional inefficiencies are introduced. For example, some of the inefficiencies are associated with the coalescing buffer. First, the coalescing buffer is volatile, and the stored data can be lost in the case of power loss or a software error. Second, since the write operation cannot be acknowledged until the buffer is fully flushed to the storage device, a potential indefinite delay in acknowledging the update may be introduced. Third, for a misaligned update spanning across multiple sectors, extra logic is needed to ensure the atomicity of the update.
[0055] Techniques disclosed herein can be used to perform processing of ordered data accesses that is agnostic to mapping unit size and may be used for efficiently processing partial or unaligned data object updates. The disclosed techniques also eliminate (or reduce) the read-modify -write operations for partial updates, reduce data movement and bus bandwidth utilization, and reduce latency for individual update operations.
[0056] The disclosed techniques use a storage device (e.g., a hard disk drive or a solid-state drive) controller using a flusher module to process ordered data accesses including data entries for performing data object updates (e.g., partial and/or unaligned data object updates). More specifically and as explained above, each of the data entries received as part of a stream of ordered data accesses may include a data object identifier (e.g., an ID of at least one data object that the data entry is associated with), a data processing operation identifier (e.g., an identifier representing a data processing operation to be performed on the data object such as a Create, Read, Write, Append, Verify, Delete, or another data modification operation), and a sequence identifier (e.g., sequence identifier SeqNum which can be used for ordering data processing operations associated with the same stream identifier). In this regard, a data entry received by the storage device controller is tagged with a unique ID for a particular data object and a sequence number (SeqNum) that can be used to order all the outstanding operations with regard to that data object. Additionally, the flusher module of the storage device controller is configured to manage an array of power-protected buffers (e.g., coalescing buffers or other types of buffers) to temporarily store the updates. With the help of the <ID, SeqNum> pair of each data entry with a data processing operation, the flusher module in the storage device controller can reconstruct the correct order of data processing operations and apply the operations to the data object in the correct order. As data processing operations are arranged and executed in the correct order, any operation that is a successor to a previously acknowledged operation can be acknowledged after its execution. When the power-protected buffer containing acknowledged updates exceeds the inherent mapping unit of the storage device (e.g., a sector), the buffer can be flushed out to make room for more operations.
[0057] In example aspects, the storage device controller can perform complex operations (e.g., one or more logical operations such as an XOR operation) on data within the received data entries (as well as data objects associated with the data entries), after the received data entries are arranged sequentially in the power-protected buffer according to the sequence identifier. In other aspects, the storage device controller can further generate one or more parity values using the data entries stored in the power-protected buffer, and persist the one or more parity values in storage (e.g., for subsequent processing such as erasure coding).
[0058] The discussed techniques for processing ordered data accesses can be implemented, for example, using firmware that is executed by one or more processors on a storage device (e.g., a storage device controller of a computing device), or via hardware that is part of the storage device controller, and is used to facilitate the processing of the ordered data accesses.
[0059] Existing prior art techniques for processing ordered data accesses do not use power-protected buffers on storage devices. Existing prior art techniques for processing ordered data accesses do not use the disclosed data entry format (including a data object identifier, a data processing operation identifier, and a sequence identifier) to process partial/unaligned data accesses to persistent media. The disclosed techniques are also used to support multiple outstanding partial/unaligned data accesses to persistent media as well as other operations such as XOR or erasure coding related operations, which functionalities are not disclosed by the prior art techniques for the processing of ordered data accesses.
[0060] FIG. 1 is a block diagram illustrating a computer device 100 using a flusher module to perform data processing operations agnostic to mapping unit size, according to example embodiments. Referring to FIG. 1, computer device 100 can be a mobile device or another type of computing device such as a compute node or a storage node in a communication network. The computer device 100 includes a processor 140 and volatile memory (e.g., dynamic random access memory, or DRAM) 102. The computer device 100 further includes a storage device 104 (such as a solid-state drive (SSD), a hard drive (HD), or another type of storage device) with a storage controller 106. Storage device 104 stores data separated as mapping units (e.g., sectors) 124, 126, 128, 130, and 132.
[0061] The storage controller 106 comprises suitable circuitry, logic, interfaces, and/or code and is configured to manage access to the storage device 104, including configuring and managing operations discussed herein for processing ordered data accesses. For example, the storage device 104 includes a flusher module 108 configured to perform the operations for processing ordered data accesses using one or more power-protected buffers, such as coalescing buffers. As used herein, the term “power-protected buffer” indicates a buffer implemented as part of a storage device or non-volatile memory, which buffer persists any stored information upon power failure. The power-protected buffer 110 includes multiple storage areas that can be sized to match a mapping unit of the storage device 104. For example, the power-protected buffer 110 includes sector-sized storage areas 120 and 122 which match the size of the mapping unit (namely, a sector) of the storage device 104.
[0062] FIG. 1 partially illustrates the previously mentioned processing inefficiencies for streaming partial or unaligned updates. More specifically, a new data entry 118 (which can be part of a stream 101 of ordered data accesses formed by data entries 112, 114, 116, and 118) is received by the computer device 100 for a partial update of data (e.g., data objects) currently stored by the storage device 104 in sector 132. The partial update of the data is performed using the read-modify-write operations mentioned hereinabove. For example, processor 140 initiates a read operation 134 where the contents of sector 132 (associated with data entry 118) are read and temporarily stored in volatile memory 102 as sector 132A. A modify operation 136 is performed to update portions of sector 132 A using data entry 118 (e.g., a data packet within the data entry 118) to generate an updated sector 132B. A write operation 138 is performed to store the updated sector 132B as sector 132 in the storage device 104. The drawbacks of using the read-modify-write operations include performing multiple data manipulation operations (e.g., separate read, modify, and write operations) on data stored in volatile memory, which increases latency and susceptibility to data loss. Additionally, acknowledgment to the update associated with data entry 118 is delayed until the updated sector 132B is written back into the storage device 104.
[0063] In an example embodiment, the following operations for processing the stream 101 of ordered data accesses in the storage device 104 may be used instead of the techniques described above. In operation, stream 101 formed by data entries 112, 114, 116, and 118 is received at the computer device 100. A more detailed view of the data entries 112, 114, 116, and 118 of the stream 101 is illustrated in FIG. 2A.
[0064] FIG. 2A is a block diagram 200A illustrating processing the plurality of data entries 112-118 associated with stream 101 of ordered data accesses, according to example embodiments. Each of the data entries 112 - 118 is configured to include a data object identifier of a data object the data entry is associated with, a data processing operation identifier (e.g., an identifier representing a data processing operation to be performed on the data object), a data packet (e.g., data for use with an Append data processing operation or another data modification operation), and a sequence identifier. For example, each of the data entries 112 - 118 includes the data object identifier (ID) 202 which identifies a data object the particular data entries are associated with.
Even though FIG. 2A illustrates the data object ID 202 as a separate element outside of the data entries, such illustration is for simplicity, and each data entry 112 - 118 includes the data object ID 202. Data entries 112, 114, 116, and 118 also include corresponding sequence identifiers (or sequence numbers) (referenced interchangeably as SEQ or SeqNum) 204, 206, 208, and 210, corresponding data packets 1 , 2, 3, and 4, as well as corresponding data processing operation identifiers (also referred to as data processing commands or CMDs) 205, 207, 209, and 211 to be performed using the corresponding data packets 1 - 4. The sequence identifiers 204 - 210 refer to the order that the corresponding data processing operations 205 - 211 (for data entries within stream 101 that are associated with data object ID 202) should be executed. In an example embodiment, the data processing operation is Create data processing operation, a Read data processing operation, a Write data processing operation, an Append data processing operation, a Verify data processing operation, a Delete data processing operation, or another data modification operation to be performed on the identified data object.
[0065] In an example embodiment, each of the data entries 112 - 118 of the stream 101 further includes a sequence validator function (or SEQ VLDTR) 203. The sequence validator function 203 is used to ensure that there are no duplicate data entries within a stream of ordered data accesses. For example, the flusher module 108 of the storage controller 106 can use the sequence validator function 203 to detect that one of the data entries 112 - 118 of the stream 101 is older than a corresponding flushed data entry stored within one of the sectors 124 - 132. Such detection would indicate that the incoming entry is a duplicate and the flusher module 108 can discard the incoming entry.
[0066] As data entries 112 - 118 of the stream 101 are detected by the storage controller 106 as associated with the same data object ID 202, the flusher module 108 stores the corresponding data packets 1 - 4 in one or more storage areas (e.g., storage area 120) of the power-protected buffer 110. In an example embodiment, data packets 1 - 4 are stored in the storage area 120 of the power- protected buffer 110 sequentially, based on the corresponding sequence identifiers 204 - 210. In this way, the data packets 1 - 4 are stored in the correct order inside the storage area 120, and the flusher module 108 can apply corresponding data processing operations 205 - 211 in the order the data entries are arranged using the sequence identifiers 204 - 210. More specifically, the flusher module 108 executes the data processing operation for each of the data entries 112-118 according to an execution order based on the corresponding sequence identifier. As data processing operations are executed in order according to the sequence identifiers associated with the same data object ID, an acknowledgment can be communicated upon completion of the execution of each data processing operation. Example processing of data entries associated with multiple data streams of ordered data accesses is discussed in connection with FIG. 2B.
[0067] The storage area 120 may be a sector-size storage area, matching the mapping unit (namely, a sector) of the storage device 104. Additionally, as data packets associated with incoming data entries are stored in storage area 120, the last stored data packet may be partial. For example, as illustrated in FIG. 2A and FIG. 2B, data packet 3 may be only partially stored inside the storage area 120, and a remaining portion 234 of data packet 3 may be stored in another storage area of the power-protected buffer 110 managed by the flusher module 108 (or within the same storage area after the flusher module 108 flushes the store data into one of the sectors 124 - 132 of the storage device 104). An example flowchart illustrating processing of data entries including storing of partial data packets after flushing a storage area is illustrated in FIG. 3A.
[0068] After the data processing operations associated with data entries
112 - 118 are executed, storage area 120 contains corresponding data packets associated with acknowledged updates. The flusher module 108 is further configured to detect when a size of stored data packets in the storage area 120 is equal to the size of the mapping unit of the storage device 104 (namely, when the size of the storage area 120 equals the size of a sector of the storage device 104), and flush the contents of the storage area 120 from the power-protected buffer 110 into the sector 124 of the storage device 104 based on the detecting.
[0069] FIG. 2B is a block diagram 200B illustrating processing a plurality of data entries associated with multiple data object identifiers, according to example embodiments. Referring to FIG. 2B, there are illustrated data entries associated with multiple data streams received at the computer device 100. For example, data entries 214, 216, and 218 are associated with stream 240, along with a data object ID (ID_1) 212, while data entries 222, 224, 226, and 228 are associated with stream 242, along with a data object ID (ID_2) 220.
[0070] In an example embodiment when streams of ordered data accesses associated with different data object identifiers are received at computer device 100, the flusher module 108 is configured to store data packets associated with the same data object ID in the same storage area inside the power-protected buffer 110. For example, data packets 1, 2, and 3 of data entries 214, 216, and 218 respectively are all stored in storage area 120 associated with data object ID 212 of stream 240. Similarly, data packets 4, 5, 6, and 7 of data entries 222, 224, 226, and 228 respectively are all stored in storage area 122 associated with data object ID 220 of stream 242. [0071] In an example embodiment, different data entries associated with different data object identifiers can be received sequentially at the computer device 100 (e.g., data entries of streams 240 and 242 are received out of order and at different times). The flusher module 108 is configured to detect the data object identifier of each received data entry and store the corresponding data packet in a corresponding storage area associated with the data object identifier of the data entry based on the sequence identifier of the data entry. As data packets are arranged sequentially inside the corresponding storage areas, the data processing operation indicated by each data entry can be executed and an acknowledgment can be communicated. In this regard, the flusher module 108 is configured to process a subset of a set of received data entries, where the subset is associated with the same data object identifier. Additionally, the data packet stored in storage areas 120 and 122, after the data processing operations have been executed, are flushed into sectors 232 and 230 of the storage device 104, based on storage areas 120 and 122 reaching a sector size with stored data.
[0072] FIG. 3A is a flowchart of a method 300A for processing streaming data by a flusher module within a storage device, according to example embodiments. The method 300A includes operations 302, 304, 306, 308, 310, 312, and 314. By way of example and not limitation, the method 300A is described as being performed by a storage controller (e.g., a flusher module such as flusher module 108 of FIG. 1 or other firmware or hardware of the storage controller 106), which can be configured to execute within a computer device (e.g., device 100 illustrated in FIG. 1 or device 800 illustrated in FIG. 8).
[0073] Referring to FIG. 2 A and FIG. 3 A, at operation 302, a new data entry received by the computer device 100 is detected. For example, the storage controller 106 (e.g., the flusher module 108 within the storage controller 106) detects a received data entry 114 associated with data object identifier 202. At operation 304, a determination is made on whether the sequence identifier of the received data entry matches a sequence identifier for a next data packet that will be stored in a specific storage area. For example, a determination is made on whether the sequence identifier 206 of data entry 114 is the next sequence identifier for a next data packet that will be stored in storage area 120. Before receiving data entry 114, storage area 120 stores data packet 1 with sequence identifier 204, making sequence identifier 206 the next sequence identifier.
[0074] If the sequence identifier of the data entry does not match a sequence identifier for a next data packet in the storage area, the data entry can be directed to a different storage area (e.g., a storage area for processing entries associated with the non-matching sequence identifier, as illustrated in FIG. 2B), and processing continues at operation 302. If the sequence identifier of the data entry matches the sequence identifier for a next data packet in the storage area, processing continues at operation 306, when the new data packet of the received data entry is stored in the storage area, and a variable S, indicating a total size of valid data stored in the storage area, is accumulated with the size of the new data packet. For example, data packet 2 is stored in storage area 120, and variable S is accumulated with the size of the data packet 2. At operation 308, a determination is made on whether the current accumulated size S of the storage area is greater than or equal to a mapping unit size (e.g., a sector) of the storage device 104. If the current accumulated size S is not greater than or equal to the mapping unit size of the storage device 104, processing continues at operation 302. If the current accumulated size S is not greater than or equal to the mapping unit size of the storage device 104, processing continues at operation 310, when the storage area is flushed into a mapping unit of the storage device, which clears the storage area for subsequent data packet storage. Additionally, a byte size R of a remaining data packet portion is calculated. For example, storage area 120 in FIG. 2B stores only a portion of data packet 3 before the storage area is flushed into sector 232, leaving a remaining portion 234 of data packet 3 for subsequent storage in storage area 120 after it has been flushed. In this case, the byte size R of the remaining data packet portion is the size of the remaining portion 234 of data packet 3.
[0075] At operation 312, a determination is made on whether the byte size R of the remaining data packet is greater than zero. If it is not greater than zero (e.g., there is no remaining data packet), processing continues at operation 302. If the byte size R of the remaining data packet is greater than zero, at operation 314, the remaining data packet is stored in the cleared storage area. For example, the remaining portion 234 of data packet 3 is stored in storage area 120 after it has been flushed into sector 124.
[0076] FIG. 3B is a flowchart of method 300B for processing streaming data by a flusher module during a power loss, according to example embodiments. Method 300B includes operations 316, 318, and 320. By way of example and not limitation, method 300B is described as being performed by a storage controller (e.g., a flusher module such as flusher module 108 of FIG. 1 or other firmware or hardware of the storage controller 106), which can be configured to execute within a computer device (e.g., device 100 illustrated in FIG. 1 or device 800 illustrated in FIG. 8).
[0077] In an example embodiment, storage controller 106 is configured to detect a power loss event of the storage device 104 and process data packets stored in the power-protected buffer 110 based on the detected power loss event. For example, at operation 316, a power loss event associated with the storage device is detected. At operation 318, padding is performed of a pending list of data packets in the power-protected buffer 110. For example, storage area 120 in the power-protected buffer 110 stores a pending list of data packets 1 and 2.
Upon detecting the power loss event associated with the storage device 104, the storage controller 106 (e.g., the flusher module 108) pads the pending list with zero-byte data so that the sector size of the storage area 120 is full with data. At operation 320, the padded pending list is flushed into a mapping unit of the storage device. For example, the pending list including zero-byte data of the storage area 120 is flushed into sector 124 of the storage device 104.
[0078] FIG. 4 is a block diagram 400 illustrating a flusher module 108 configured to perform logical operations on streaming data within a storage device, according to example embodiments. Referring to FIG. 4, the plurality of data entries 404 - 410 are associated with received stream 401. Each of the data entries 404 - 410 includes a data object identifier (IDx) of a data object the data entry is associated with, a data processing operation identifier (CMD), a data packet (e.g., 1, 2, 3, or 4), and a sequence identifier (SEQ). For example, each of the data entries 404 - 410 includes the data object identifier (IDx) which identifies a data object the particular data entries of stream 401 are associated with. [0079] In an example embodiment, the flusher module 108 is configured to perform different data processing operations (e.g., one or more logical operations) on data packets stored by the power-protected buffer 110. For example, the flusher module 108 retrieves stored data from the mapping unit of the storage device (e.g., from sector 124) and stores the retrieved data into a second power-protected buffer (e.g., buffer 412). The flusher module 108 detects a size of the plurality of data packets stored in storage area 120 of the power-protected buffer 110 is equal to the size of the mapping unit of the storage device (namely, the storage area 120 includes data packets with a total size of one sector). The flusher module 108 then applies a logical operation (e.g., XOR operation 416) to the stored data (e.g., the data packets stored in storage area 120) and data packets within the retrieved data stored in buffer 412 to generate new data. The new data is stored in a third power-protected buffer 414 managed by the flusher module 108. The flusher module 108 subsequently stores the new data in the mapping unit (e.g., sector 124) of the storage device.
[0080] FIG. 5 is a block diagram illustrating a flusher module 108 configured to perform erasure coding operations 502 and 504 on streaming data within a storage device to generate different parity values, according to example embodiments. Referring to FIG. 5, the plurality of data entries 524 - 530 are associated with received stream 501. Each of the data entries 524 - 530 includes a data object identifier (IDx) of a data object the data entry is associated with, a data processing operation identifier (CMD), a data packet (e.g., 1, 2, 3, or 4), and a sequence identifier (SEQ). For example, each of the data entries 524 - 530 includes the data object identifier (IDx) which identifies a data object the particular data entries of stream 501 are associated with.
[0081] As illustrated in FIG. 5, data packets from corresponding data entries are stored in the storage area 506 of a power-protected buffer, and are managed by the flusher module 108. In an example embodiment, the flusher module 108 is configured to generate data chunks (or data slices) 508, 510, and 512 using data stored in storage area 506 (the stored data being also referred to in FIG. 5 as “trunk”).
[0082] Erasure coding may be performed on data that is larger than a mapping unit of a storage device. For example, a 3+2 erasure coding on a 4KB mapping unit device will use 3*4K=12KB data to work on, then generate five pieces of data (or data chunks), 4KB each, which can be stored on five storage devices for redundancy. As used herein, “3+2” indicates three pieces of data and two pieces of error correction coded data (or a parity value).
[0083] In the example erasure coding operation 502, the flusher module
108 generates a parity value P 518 using data stored in storage area 506. In the example erasure coding operation 504, the flusher module 108 generates a parity value Q 518 using data stored in storage area 506. In an example embodiment, parity values P and Q maybe generated using the same data in storage area 506, by applying parity value generation techniques associated with erasure coding techniques. As the parity values P 518 and Q 519 are generated, they may be stored in sector 520 of the storage device.
[0084] In an example embodiment, the flusher module 108 detects a size of data entries stored in the storage area 506 of the power-protected buffer is equal to a predefined size associated with an erasure coding operation (e.g., the data generated by such operation will render a size greater than a size of a mapping unit, such as a sector of the storage device, for example, 12KB in the 3+2 erasure coding scheme and mapping unit is 4KB). In some aspects, the flusher module 108 applies the erasure coding operation (e.g., a logical operation, a byte-shifting operation, or another type of erasure coding operation) to data entries stored in the storage area 506 to generate data slices. The flusher module 108 generates a parity value (e.g., parity value P 518 or Q 519) based on the data slices, and stores the data slices or the parity value in the mapping unit of the storage device.
[0085] FIG. 6 is a flowchart of another method 600 for processing a stream of data accesses within a storage device, according to example embodiments. Method 600 includes operations 602, 604, 606, and 608. By way of example and not limitation, method 600 is described as being performed by a storage device controller (e.g., a flusher module such as flusher module 108 of FIG. 1 or other firmware or hardware of the storage controller 106), which can be configured to execute within a computer device such as device 100 illustrated in FIG. 1 or device 800 illustrated in FIG. 8. [0086] At operation 602, a plurality of data entries is detected within the streaming received at the storage device. For example, computer device 100 receives multiple data entries associated with streams 240 and 242 of ordered data accesses, as illustrated in FIG. 2B. Each data entry of the plurality of data entries includes a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier. For example, data entries 214 - 218 include data object identifier 212, and data entries 222 - 228 include a data object identifier 220.
[0087] At operation 604, a subset of the plurality of data entries is stored in a power-protected buffer of the storage device. Each subset data entry in the subset of the plurality of data entries includes a same data object identifier, and the storing is based on the same data object identifier. For example, a subset of the received data entries can include data entries 214, 216, and 218 associated with data object identifier 212 of stream 240. The data entries 214 - 218 may be stored in storage area 120 of power-protected buffer 110.
[0088] At operation 606, the data processing operation for each data entry in the subset of the plurality of data entries is executed according to the data processing operation identifier. For example, the data processing operation (or CMD) for each data entry in the subset of data entries associated with the data object identifier 212 is executed according to an execution order based on the corresponding sequence identifier (or SEQ) within each data entry.
[0089] At operation 608, the subset of the plurality of data entries is flushed from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries. For example, after the data processing operation for each data entry in the subset is executed and after the storage area 120 is full with data packets up to a mapping unit size of the storage device (e.g., when the storage area 120 is full with data packets up to a sector size), the flusher module 108 flushes the contents of the storage area 120 into sector 232 of the storage device 104.
[0090] FIG. 7 is a block diagram illustrating a representative software architecture, which may be used in conjunction with various device hardware described herein, according to example embodiments. FIG. 7 is merely a non limiting example of a software architecture 702 and it will be appreciated that many other architectures may be implemented to facilitate the functionality described herein. The software architecture 702 executes on hardware, such as computer device 100 in FIG. 1 which can be the same as device 800 of FIG. 8 that includes, among other things, processor 805, memory 810, storage 815 and/or 820, and I/O interfaces 825 and 830.
[0091] A representative hardware layer 704 is illustrated and can represent, for example, the device 800 of FIG. 8. The representative hardware layer 704 comprises one or more processing units 706 having associated executable instructions 708. Executable instructions 708 represent the executable instructions of the software architecture 702, including implementation of the methods, modules, and so forth of FIGS. 1-6. Hardware layer 704 also includes memory or storage modules 710, which also have executable instructions 708. Hardware layer 704 may also comprise other hardware 712, which represents any other hardware of the hardware layer 704, such as the other hardware illustrated as part of device 800. The memory or storage modules 710 can include storage devices (e.g., storage device 104) with firmware implementing the flusher module (FM) 760. In some aspects, the FM 760 comprises suitable circuitry, logic, interfaces, or code and can be configured to perform one or more of the ordered data access processing functions performed by the FM 108 and discussed in connection with FIGS. 1-6.
[0092] In the example architecture of FIG. 7, the software architecture
702 may be conceptualized as a stack of layers where each layer provides particular functionality. For example, the software architecture 702 may include layers such as an operating system 714, libraries 716, frameworks/middleware 718, applications 720, and presentation layer 744. Operationally, the applications 720 or other components within the layers may invoke application programming interface (API) calls 724 through the software stack and receive a response, returned values, and so forth, illustrated as messages 726 in response to the API calls 724. The layers illustrated in FIG. 7 are representative in nature and not all software architectures 702 have all layers. For example, some mobile or special purpose operating systems may not provide frameworks/middleware 718, while others may provide such a layer. Other software architectures may include additional or different layers. [0093] The operating system 714 may manage hardware resources and provide common services. The operating system 714 may include, for example, a kernel 728, services 730, and drivers 732. The kernel 728 may act as an abstraction layer between the hardware and the other software layers. For example, kernel 728 may be responsible for memory management, processor management (e.g., scheduling), component management, networking, security settings, and so on. The services 730 may provide other common services for the other software layers. Drivers 732 may be responsible for controlling or interfacing with the underlying hardware. For instance, the drivers 732 may include display drivers, camera drivers, Bluetooth® drivers, flash memory drivers, serial communication drivers (e.g., Universal Serial Bus (USB) drivers), Wi-Fi® drivers, audio drivers, power management drivers, and so forth, depending on the hardware configuration.
[0094] Libraries 716 may provide a common infrastructure that may be utilized by the applications 720 or other components or layers. Libraries 716 typically provide functionality that allows other software modules to perform tasks more easily than to interface directly with the underlying operating system 714 functionality (e.g., kernel 728, services 730, or drivers 732). Libraries 716 may include system libraries 734 (e.g., C standard library) that may provide functions such as memory allocation functions, string manipulation functions, mathematic functions, and the like. In addition, libraries 716 may include API libraries 736 such as media libraries (e.g., libraries to support presentation and manipulation of various media format such as MPEG4, H.264, MP3, AAC, AMR, JPG, PNG), graphics libraries (e.g., an OpenGL framework that may be used to render 2D and 3D in a graphic content on a display), database libraries (e.g., SQLite that may provide various relational database functions), web libraries (e.g., WebKit that may provide web browsing functionality), and the like. Libraries 716 may also include a wide variety of other libraries 738 to provide many other APIs to the applications 720 and other software components/modules .
[0095] The frameworks/middleware 718 (also sometimes referred to as middleware) may provide a higher-level common infrastructure that may be utilized by the applications 720 or other software components/modules. For example, the frameworks/middleware 718 may provide various graphical user interface (GUI) functions, high-level resource management, high-level location services, and so forth. The frameworks/middleware 718 may provide a broad spectrum of other APIs that may be utilized by the applications 720 or other software components/modules, some of which may be specific to a particular operating system 714 or platform.
[0096] Applications 720 include built-in applications 740, and third- party applications 742. Examples of representative built-in applications 740 may include but are not limited to, a contacts application, a browser application, a book reader application, a location application, a media application, a messaging application, or a game application. Third-party applications 742 may include any of the built-in applications 740 as well as a broad assortment of other applications. In a specific example, the third-party application 742 (e.g., an application developed using the Android™ or iOS™ software development kit (SDK) by an entity other than the vendor of the particular platform) may be mobile software running on a mobile operating system such as iOS™,
Android™, Windows® Phone, or other mobile operating systems. In this example, the third-party application 742 may invoke the API calls 724 provided by the mobile operating system such as operating system 714 to facilitate functionality described herein.
[0097] The applications 720 may utilize built-in operating system functions (e.g., kernel 728, services 730, and drivers 732), libraries (e.g., system libraries 734, API libraries 736, and other libraries 738), and frameworks/middleware 718 to create user interfaces to interact with users of the system. Alternatively, or additionally, in some systems, interactions with a user may occur through a presentation layer, such as presentation layer 744. In these systems, the application/module "logic" can be separated from the aspects of the application/module that interact with a user.
[0098] Some software architectures utilize virtual machines. In the example of FIG. 7, this is illustrated by virtual machine 748. A virtual machine creates a software environment where applications/modules can execute as if they were executing on a hardware machine (such as the device 800 of FIG. 8, for example). A virtual machine 748 is hosted by a host operating system (e.g., operating system 714) and typically, although not always, has a virtual machine monitor 746, which manages the operation of the virtual machine 748 as well as the interface with the host operating system (i.e., operating system 714). A software architecture 702 executes within the virtual machine 748 such as an operating system 750, libraries 752, frameworks/middleware 754, applications 756, or presentation layer 758. These layers of software architecture executing within the virtual machine 748 can be the same as corresponding layers previously described or may be different.
[0099] FIG. 8 is a block diagram illustrating circuitry for a device that implements algorithms and performs methods, according to example embodiments. All components need not be used in various embodiments. For example, clients, servers, and cloud-based network devices may each use a different set of components, or in the case of servers, larger storage devices.
[00100] One example computing device in the form of a computer 800 (also referred to as computing device 800, computer system 800, or computer 800) may include a processor 805, memory 810, removable storage 815, non removable storage 820, input interface 825, the output interface 830, and communication interface 835, all connected by a bus 840. Although the example computing device is illustrated and described as the computer 800, the computing device may be in different forms in different embodiments.
[00101] The memory 810 may include volatile memory 845 and non volatile memory 850 and may store a program 855. The computing device 800 may include - or have access to a computing environment that includes - a variety of computer-readable media, such as the volatile memory 845, the non volatile memory 850, the removable storage 815, and the non-removable storage 820. Computer storage includes random-access memory (RAM), read-only memory (ROM), erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM), flash memory or other memory technologies, compact disc read-only memory (CD ROM), digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium capable of storing computer-readable instructions. [00102] Computer-readable instructions stored on a computer-readable medium (e.g., the program 855 stored in the memory 810) are executable by the processor 805 of the computing device 800. A hard drive, CD-ROM, and RAM are some examples of articles including a non-transitory computer-readable medium such as a storage device. The terms “computer-readable medium” and “storage device” do not include carrier waves to the extent that carrier waves are deemed too transitory. “Computer-readable non-transitory media” includes all types of computer-readable media, including magnetic storage media, optical storage media, flash media, and solid-state storage media. It should be understood that software can be installed in and sold with a computer. Alternatively, the software can be obtained and loaded into the computer, including obtaining the software through a physical medium or distribution system, including, for example, from a server owned by the software creator or from a server not owned but used by the software creator. The software can be stored on a server for distribution over the Internet, for example. As used herein, the terms “computer-readable medium” and “machine-readable medium” are interchangeable.
[00103] Program 855 may utilize a flusher module 860 which may be the same as or similar to the flusher module 108 of FIG. 1.
[00104] Any one or more of the modules described herein may be implemented using hardware (e.g., a processor of a machine, an application- specific integrated circuit (ASIC), field-programmable gate array (FPGA), or any suitable combination thereof). Moreover, any two or more of these modules may be combined into a single module, and the functions described herein for a single module may be subdivided among multiple modules. Furthermore, according to various example embodiments, modules described herein as being implemented within a single machine, database, or device may be distributed across multiple machines, databases, or devices.
[00105] Although a few embodiments have been described in detail above, other modifications are possible. For example, the logic flows depicted in the figures do not require the particular order shown, or sequential order, to achieve desirable results. Other steps may be provided, or steps may be eliminated, from the described flows, and other components may be added to, or removed from, the described systems. Other embodiments may be within the scope of the following claims.
[00106] It should be further understood that software including one or more computer-executable instructions that facilitate processing and operations as described above regarding any one or all of the steps of the disclosure can be installed in and sold with one or more computing devices consistent with the disclosure. Alternatively, the software can be obtained and loaded into one or more computing devices, including obtaining the software through a physical medium or distribution system, including, for example, from a server owned by the software creator or from a server not owned but used by the software creator. The software can be stored on a server for distribution over the Internet, for example.
[00107] Also, it will be understood by one skilled in the art that this disclosure is not limited in its application to the details of construction and the arrangement of components outlined in the description or illustrated in the drawings. The embodiments herein are capable of other embodiments and capable of being practiced or carried out in various ways. Also, it will be understood that the phraseology and terminology used herein is for description and should not be regarded as limiting. The use of “including,” “comprising,” or “having” and variations thereof herein is meant to encompass the items listed thereafter and equivalents thereof as well as additional items. Unless limited otherwise, the terms “connected,” “coupled,” and “mounted,” and variations thereof herein are used broadly and encompass direct and indirect connections, couplings, and mountings. In addition, the terms “connected” and “coupled,” and variations thereof, are not restricted to physical or mechanical connections or couplings. Further, terms such as up, down, bottom, and top are relative, and are employed to aid illustration, but are not limiting.
[00108] The components of the illustrative devices, systems, and methods employed by the illustrated embodiments can be implemented, at least in part, in digital electronic circuitry, analog electronic circuitry, or computer hardware, firmware, software, or in combinations of them. These components can be implemented, for example, as a computer program product such as a computer program, program code, or computer instructions tangibly embodied in an information carrier, or a machine-readable storage device, for execution by, or to control the operation of, data processing apparatus such as a programmable processor, a computer, or multiple computers.
[00109] A computer program can be written in any form of programming language, including compiled or interpreted languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other units suitable for use in a computing environment. A computer program can be deployed to be executed on one computer or multiple computers at one site or distributed across multiple sites and interconnected by a communication network. Also, functional programs, codes, and code segments for accomplishing the techniques described herein can be easily construed as within the scope of the claims by programmers skilled in the art to which the techniques described herein pertain. Method steps associated with the illustrative embodiments can be performed by one or more programmable processors executing a computer program, code, or instructions to perform functions (e.g., by operating on input data or generating an output). Method steps can also be performed by, and apparatus for performing the methods can be implemented as, special purpose logic circuitry, e.g., an FPGA (field-programmable gate array) or an ASIC (application-specific integrated circuit), for example.
[00110] The various illustrative logical blocks, modules, and circuits described in connection with the embodiments disclosed herein may be implemented or performed with a general-purpose processor, a digital signal processor (DSP), an ASIC, an FPGA or other programmable logic device, discrete gate, or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A general-purpose processor may be a microprocessor, but in the alternative, the processor may be any processor, controller, microcontroller, or state machine. A processor may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration.
[00111] Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read-only memory or a random-access memory or both. The required elements of a computer are a processor for executing instructions and one or more memory devices for storing instructions and data. Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto-optical disks, or optical disks. Information carriers suitable for embodying computer program instructions and data include all forms of non-volatile memory, including by way of example, semiconductor memory devices, e.g., electrically programmable read-only memory or ROM (EPROM), electrically erasable programmable ROM (EEPROM), flash memory devices, or data storage disks (e.g., magnetic disks, internal hard disks, or removable disks, magneto-optical disks, or CD-ROM and DVD-ROM disks). The processor and the memory can be supplemented by or incorporated in special purpose logic circuitry.
[00112] Those of skill in the art understand that information and signals may be represented using any of a variety of different technologies and techniques. For example, data, instructions, commands, information, signals, bits, symbols, and chips that may be referenced throughout the above description may be represented by voltages, currents, electromagnetic waves, magnetic fields or particles, optical fields or particles, or any combination thereof.
[00113] As used herein, “machine-readable medium” (or “computer- readable medium”) comprises a device able to store instructions and data temporarily or permanently and may include, but is not limited to, random- access memory (RAM), read-only memory (ROM), buffer memory, flash memory, optical media, magnetic media, cache memory, other types of storage (e.g., Erasable Programmable Read-Only Memory (EEPROM)), or any suitable combination thereof. The term “machine-readable medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, or associated caches and servers) able to store processor instructions. The term “machine-readable medium” shall also be taken to include any medium or a combination of multiple media, that is capable of storing instructions for execution by one or more processors, such that the instructions, when executed by one or more processors, cause the one or more processors to perform any one or more of the methodologies described herein. Accordingly, a “machine- readable medium” refers to a single storage apparatus or device, as well as “cloud-based” storage systems or storage networks that include multiple storage apparatus or devices. The term “machine-readable medium” as used herein excludes signals per se.
[00114] In an example embodiment, the computing device 800 includes a data entry detection module for detecting a plurality of data entries within the stream received at the storage device, each data entry of the plurality of data entries comprising a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier; a subset storage module for storing a subset of the plurality of data entries in a power-protected buffer of the storage device, each subset data entry in the subset of the plurality of data entries comprising a same data object identifier, the storing based on the same data object identifier; a data processing module for executing a data processing operation according to the data processing identifier, the data processing operation performed for each data entry in the subset of the plurality of data entries, the data processing operation for each subset data entry in the subset executed according to an execution order based on the sequence identifier; and a subset flush module for flushing the subset of the plurality of data entries from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries.
[00115] In addition, techniques, systems, subsystems, and methods described and illustrated in the various embodiments as discrete or separate may be combined or integrated with other systems, modules, techniques, or methods without departing from the scope of the present disclosure. Other items shown or discussed as coupled or directly coupled or communicating with each other may be indirectly coupled or communicating through some interface, device, or intermediate component whether electrically, mechanically, or otherwise. Other examples of changes, substitutions, and alterations are ascertainable by one skilled in the art and could be made without departing from the scope disclosed herein. [00116] Although the present disclosure has been described concerning specific features and embodiments thereof, it is evident that various modifications and combinations can be made thereto without departing from the scope of the disclosure. For example, other components may be added to, or removed from, the described systems. The specification and drawings are, accordingly, to be regarded simply as an illustration of the disclosure as defined by the appended claims, and are contemplated to cover any modifications, variations, combinations, or equivalents that fall within the scope of the present disclosure. Other aspects may be within the scope of the following claims. Finally, as used herein, the conjunction “or” refers to a non-exclusive “or,” unless specifically stated otherwise.

Claims

CLAIMS What is claimed is:
1. A computer-implemented method for processing a stream of data accesses in a storage device, the method comprising: detecting, by a storage controller of the storage device, a plurality of data entries within the stream received at the storage device, each data entry of the plurality of data entries comprising a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier; storing, by the storage controller, a subset of the plurality of data entries in a power-protected buffer of the storage device, each subset data entry in the subset of the plurality of data entries comprising a same data object identifier, the storing based on the same data object identifier; executing, by the storage controller, a data processing operation according to the data processing operation identifier, the data processing operation performed for each data entry in the subset of the plurality of data entries, the data processing operation for each subset data entry in the subset executed according to an execution order based on the sequence identifier; and flushing, by the storage controller, the subset of the plurality of data entries from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries.
2. The computer-implemented method of claim 1, wherein the storage device is one of a hard drive (HD) or a solid-state drive (SSD).
3. The computer-implemented method of claim 1, wherein the power- protected buffer is a coalescing buffer managed by the storage controller.
4. The computer-implemented method of claim 1, wherein performing the flushing further comprises: detecting, by the storage controller, that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a mapping unit size of the mapping unit of the storage device.
5. The computer-implemented method of claim 1, further comprising: detecting, by the storage controller, a power loss event associated with the storage device; padding, by the storage controller, the subset of the plurality of data entries stored in the power-protected buffer based on the detecting of the power loss event to obtain a padded subset of the plurality of data entries, the padding causing a size of the padded subset to be equal to a mapping unit size of the mapping unit of the storage device; and flushing, by the storage controller, the padded subset of the plurality of data entries from the power-protected buffer into the mapping unit.
6. The computer-implemented method of claim 1, wherein each subset data entry in the subset of the plurality of data entries includes a data packet, and the method further comprises: executing, by the storage controller, the data processing operation using the data packet in each subset data entry in the subset.
7. The computer-implemented method of claim 1, wherein the data processing operation is a data read operation, a data write operation, or a data verify operation.
8. The computer-implemented method of claim 1, wherein the storing further comprises: storing, by the storage controller, each subset data entry in the subset in the power-protected buffer sequentially, based on the sequence identifier.
9. The computer-implemented method of claim 1, further comprising: retrieving, by the storage controller, stored data from the mapping unit of the storage device into a second power-protected buffer; detecting, by the storage controller, the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a mapping unit size of the mapping unit of the storage device; applying, by the storage device, a logical operation to the stored data in the second power-protected buffer and data packets within the subset of the plurality of data entries in the power-protected buffer to generate new data; and storing the new data in the mapping unit of the storage device.
10. The computer-implemented method of claim 1, wherein the data object identifier is associated with the power-protected buffer and the method further comprises: storing, by the storage controller, a second subset of the plurality of data entries in a second power-protected buffer of the storage device, wherein each second subset data entry in the second subset of the plurality of data entries comprises a second data object identifier, and wherein the second data object identifier is different from the data object identifier associated with the power- protected buffer.
11. The computer-implemented method of claim 1, further comprising: detecting, by the storage controller, that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a predefined size associated with an erasure coding operation; applying, by the storage controller, the erasure coding operation to one or more data entries in the subset of the plurality of data entries to generate data slices corresponding to the subset; generating, by the storage controller, a parity value based on the data slices; and storing, by the storage controller, the data slices or the parity value in the mapping unit of the storage device.
12. An apparatus for processing a stream of data accesses in a storage device, the apparatus comprising: a memory storing instructions; a power-protected buffer; and one or more processors in communication with the memory and the power-protected buffer, wherein the one or more processors execute the instructions to perform operations comprising: detecting a plurality of data entries within the stream received at the storage device, each data entry of the plurality of data entries comprising a data object identifier of at least one data object the data entry is associated with, a data processing operation, and a sequence identifier; storing a subset of the plurality of data entries in a power- protected buffer of the storage device, each subset data entry in the subset of the plurality of data entries comprising a same data object identifier, the storing based on the same data object identifier; executing a data processing operation according to the data processing operation identifier, the data processing operation performed for each data entry in the subset of the plurality of data entries, the data processing operation for each subset data entry in the subset executed according to an execution order based on the sequence identifier; and flushing the subset of the plurality of data entries from the power- protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries.
13. The apparatus of claim 12, wherein the storage device is one of a hard drive (HD) or a solid-state drive (SSD).
14. The apparatus of claim 12, wherein the power-protected buffer is a coalescing buffer managed by the one or more processors.
15. The apparatus of claim 12, wherein to perform the flushing, the one or more processors execute the instructions to perform operations comprising: detecting that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a mapping unit size of the mapping unit of the storage device.
16. The apparatus of claim 12, wherein the one or more processors execute the instructions to perform operations comprising: detecting a power loss event associated with the storage device; padding the subset of the plurality of data entries stored in the power- protected buffer based on the detecting of the power loss event to obtain a padded subset of the plurality of data entries, the padding causing a size of the padded subset to be equal to a mapping unit size of the mapping unit of the storage device; and flushing the padded subset of the plurality of data entries from the power- protected buffer into the mapping unit.
17. The apparatus of claim 12, wherein each subset data entry in the subset of the plurality of data entries includes a data packet and wherein the one or more processors execute the instructions to perform operations comprising: executing the data processing operation using the data packet in each subset data entry in the subset.
18. The apparatus of claim 12, wherein the data processing operation is a data read operation, a data write operation, or a data verify operation.
19. The apparatus of claim 12, wherein the one or more processors execute the instructions to perform operations comprising: storing each subset data entry in the subset in the power-protected buffer sequentially, based on the sequence identifier.
20. The apparatus of claim 12, wherein the one or more processors execute the instructions to perform operations comprising: retrieving stored data from the mapping unit of the storage device into a second power-protected buffer; detecting the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a mapping unit size of the mapping unit of the storage device; applying a logical operation to the stored data in the second power- protected buffer and data packets within the subset of the plurality of data entries in the power-protected buffer to generate new data; and storing the new data in the mapping unit of the storage device.
21. The apparatus of claim 12, wherein the data object identifier is associated with the power-protected buffer and wherein the one or more processors execute the instructions to perform operations comprising: storing a second subset of the plurality of data entries in a second power- protected buffer of the storage device, wherein each second subset data entry in the second subset of the plurality of data entries comprises a second data object identifier, and wherein the second data object identifier is different from the data object identifier associated with the power-protected buffer.
22. The apparatus of claim 12, wherein the one or more processors execute the instructions to perform operations comprising: detecting that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a predefined size associated with an erasure coding operation; applying the erasure coding operation to one or more data entries in the subset of the plurality of data entries to generate data slices corresponding to the subset; generating a parity value based on the data slices; and storing the data slices or the parity value in the mapping unit of the storage device.
23. A computer-readable medium storing computer instructions for processing a stream of data accesses in a storage device, wherein the instructions when executed by one or more processors of the storage device, cause the one or more processors to perform operations comprising: detecting a plurality of data entries within the stream received at the storage device, each data entry of the plurality of data entries comprising a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier; storing a subset of the plurality of data entries in a power-protected buffer of the storage device, each subset data entry in the subset of the plurality of data entries comprising a same data object identifier, the storing based on the same data object identifier; executing a data processing operation according to the data processing operation identifier, the data processing operation performed for each data entry in the subset of the plurality of data entries, the data processing operation for each subset data entry in the subset executed according to an execution order based on the sequence identifier; and flushing the subset of the plurality of data entries from the power- protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries.
24. The computer-readable medium of claim 23, wherein the storage device is one of a hard drive (HD) or a solid-state drive (SSD).
25. The computer-readable medium of claim 23, wherein the power- protected buffer is a coalescing buffer managed by the one or more processors.
26. The computer-readable medium of claim 23, wherein executing the instructions causes the one or more processors to perform operations comprising: detecting that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a mapping unit size of the mapping unit of the storage device.
27. The computer-readable medium of claim 23, wherein executing the instructions causes the one or more processors to perform operations comprising: detecting a power loss event associated with the storage device; padding the subset of the plurality of data entries stored in the power- protected buffer based on the detecting of the power loss event to obtain a padded subset of the plurality of data entries, the padding causing a size of the padded subset to be equal to a mapping unit size of the mapping unit of the storage device; and flushing the padded subset of the plurality of data entries from the power- protected buffer into the mapping unit.
28. The computer-readable medium of claim 23, wherein each subset data entry in the subset of the plurality of data entries includes a data packet and wherein executing the instructions causes the one or more processors to perform operations comprising: executing the data processing operation using the data packet in each subset data entry in the subset.
29. The computer-readable medium of claim 23, wherein the data processing operation is a data read operation, a data write operation, or a data verify operation.
30. The computer-readable medium of claim 23, wherein executing the instructions causes the one or more processors to perform operations comprising: storing each subset data entry in the subset in the power-protected buffer sequentially, based on the sequence identifier.
31. The computer-readable medium of claim 23, wherein executing the instructions causes the one or more processors to perform operations comprising: retrieving stored data from the mapping unit of the storage device into a second power-protected buffer; detecting the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a mapping unit size of the mapping unit of the storage device; applying a logical operation to the stored data in the second power- protected buffer and data packets within the subset of the plurality of data entries in the power-protected buffer to generate new data; and storing the new data in the mapping unit of the storage device.
32. The computer-readable medium of claim 23, wherein the data object identifier is associated with the power-protected buffer and wherein executing the instructions causes the one or more processors to perform operations comprising: storing a second subset of the plurality of data entries in a second power- protected buffer of the storage device, wherein each second subset data entry in the second subset of the plurality of data entries comprises a second data object identifier, and wherein the second data object identifier is different from the data object identifier associated with the power-protected buffer.
33. The computer-readable medium of claim 23, wherein executing the instructions causes the one or more processors to perform operations comprising: detecting that the subset size of the subset of the plurality of data entries stored in the power-protected buffer is equal to a predefined size associated with an erasure coding operation; applying the erasure coding operation to one or more data entries in the subset of the plurality of data entries to generate data slices corresponding to the subset; generating a parity value based on the data slices; and storing the data slices or the parity value in the mapping unit of the storage device.
34. A storage controller for processing a stream of data accesses in a storage device, the storage controller comprising: a data entry detection module for detecting a plurality of data entries within the stream received at the storage device, each data entry of the plurality of data entries comprising a data object identifier of at least one data object the data entry is associated with, a data processing operation identifier, and a sequence identifier; a subset storage module for storing a subset of the plurality of data entries in a power-protected buffer of the storage device, each subset data entry in the subset of the plurality of data entries comprising a same data object identifier, the storing based on the same data object identifier; a data processing module for executing a data processing operation according to the data processing identifier, the data processing operation performed for each data entry in the subset of the plurality of data entries, the data processing operation for each subset data entry in the subset executed according to an execution order based on the sequence identifier; and a subset flush module for flushing the subset of the plurality of data entries from the power-protected buffer into a mapping unit of the storage device based on a subset size of the subset of the plurality of data entries.
PCT/US2021/018497 2021-02-18 2021-02-18 Data access processing agnostic to mapping unit size WO2022177561A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/US2021/018497 WO2022177561A1 (en) 2021-02-18 2021-02-18 Data access processing agnostic to mapping unit size

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2021/018497 WO2022177561A1 (en) 2021-02-18 2021-02-18 Data access processing agnostic to mapping unit size

Publications (1)

Publication Number Publication Date
WO2022177561A1 true WO2022177561A1 (en) 2022-08-25

Family

ID=74867678

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2021/018497 WO2022177561A1 (en) 2021-02-18 2021-02-18 Data access processing agnostic to mapping unit size

Country Status (1)

Country Link
WO (1) WO2022177561A1 (en)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015020811A1 (en) * 2013-08-09 2015-02-12 Fusion-Io, Inc. Persistent data structures
CN103488578B (en) * 2012-12-28 2016-05-25 晶天电子(深圳)有限公司 Virtual memory facilities (VMD) application/driver
US20200125548A1 (en) * 2018-10-19 2020-04-23 Oracle International Corporation Efficient write operations for database management systems
US20200192599A1 (en) * 2018-12-12 2020-06-18 SK Hynix Inc. Storage device and method of operating the same

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488578B (en) * 2012-12-28 2016-05-25 晶天电子(深圳)有限公司 Virtual memory facilities (VMD) application/driver
WO2015020811A1 (en) * 2013-08-09 2015-02-12 Fusion-Io, Inc. Persistent data structures
US20200125548A1 (en) * 2018-10-19 2020-04-23 Oracle International Corporation Efficient write operations for database management systems
US20200192599A1 (en) * 2018-12-12 2020-06-18 SK Hynix Inc. Storage device and method of operating the same

Similar Documents

Publication Publication Date Title
US11681441B2 (en) Input/output processing in a distributed storage node with RDMA
US10983955B2 (en) Data unit cloning in memory-based file systems
US9405483B1 (en) Optimized write performance at block-based storage during volume snapshot operations
TW201227517A (en) Storing and resuming application runtime state
US10838857B2 (en) Multi-section garbage collection
US9164856B2 (en) Persistent messaging mechanism
CN108733311B (en) Method and apparatus for managing storage system
US10853237B2 (en) Write cache system and method for data chunk bypass and acknowledgment of write of data chunk
US10552403B2 (en) Using checksums to reduce the write latency of logging
US10855818B2 (en) Apparatus and methods for optimizing dirty memory pages in embedded devices
US9952771B1 (en) Method and system for choosing an optimal compression algorithm
US10564883B2 (en) Efficient migration to distributed storage
WO2021022274A1 (en) Deduplication based on consolidation of data fingerprints
US10997040B1 (en) System and method for weight based data protection
US9977599B2 (en) Data deduplication with support for both thick and thin provisioning of storage objects
WO2022177561A1 (en) Data access processing agnostic to mapping unit size
US9342419B2 (en) Persistent messaging mechanism
US11513951B2 (en) System and method for improving write performance for log structured storage systems
WO2022177566A1 (en) Data access processing on network-attached storage devices
JP2012185605A (en) Virtual machine system, virtual disk management method and virtual disk management program
WO2022177563A1 (en) Ordered access for network-attached storage devices
WO2022177564A1 (en) Distributed naming scheme for network-attached storage devices
WO2021062428A1 (en) Data consistency management across data storage devices
US11861201B2 (en) System and method for inline recovery of a file system resource allocator
US20220012215A1 (en) System and Method for Early Tail-Release in a Log Structure Log Using Multi-Line PLB Structure Supporting Multiple Partial Transactions

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 21711139

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 21711139

Country of ref document: EP

Kind code of ref document: A1