Abstract:
A method for executing a selected input/output (I/O) command from a plurality of I/O commands based on a dependency graph of I/O commands includes building the dependency graph of I/O commands, wherein the dependency graph is built by requiring all children of the selected I/O command to be ready before the selected I/O command is ready, and executing the I/O command based on the dependency graph, wherein execution of the selected I/O command is completed when all of the children of the selected I/O command finish execution.
Abstract:
A method for writing data to a storage pool includes receiving a write operation to write a logical block of data to the storage pool, determining a number (n−1) of physical blocks required to store the logical block of data, generating a parity block using the logical block of data, allocating n physical blocks in the storage pool, writing the parity block in the first of n allocated physical block, and writing the logical block of data across the remaining n−1 allocated physical blocks, where n is less than a number of disks in the storage pool, and where each of the n allocated physical blocks is located on a different disk in the storage pool.
Abstract:
A computer readable medium includes executable instructions for resilvering a hierarchical block tree in a storage pool by traversing a branch of the hierarchical block tree only if a birth time of a parent block of the branch is greater than or equal to a lowest birth time on a dirty time log (DTL), and resilvering a child block in the branch only if the DTL comprises a birth time of the child block.
Abstract:
A method for writing a data block to a storage pool. The method including receiving a write operation for a block, determining whether the block comprises metadata, and if the block comprises metadata: determining a first replication type for the block, and writing the block to the storage pool in accordance with the first replication type. If the block does not comprise metadata: determining a second replication type for the block and writing the block to the storage pool in accordance with the second replication type.
Abstract:
A method for writing a logical block into a storage pool includes receiving a request to write the logical block, selecting a block allocation policy, by a file system associated with the storage pool, from a set of allocation policies, obtaining a list of free physical blocks in the storage pool, allocating a physical block from the list of free physical blocks, based on the block allocation policy, and writing the logical block to the physical block.
Abstract:
A method for writing data to a storage pool, involving receiving a first write operation to write a first block to the storage pool, determining a first replication type for the first block using a first replication policy associated with the first block, determining a first number of physical blocks required to write the first block to the storage pool using a size of the first block and the first replication type, and writing the first block, in accordance with the first replication policy, to the storage pool by filling in the first number of physical blocks.
Abstract:
A system includes a storage pool including a first disk and a second disk, a data management unit (DMU), and a storage pool allocator (SPA). The SPA is configured to receive a request from the DMU to write a logical block, allocate a first physical block on the first disk, attempt to write the logical block to the first physical block, and allocate a second physical block on the second disk, if the attempt to write the logical block to the first physical block fails.
Abstract:
A computer readable medium includes executable instructions for writing a logical block in a storage pool by receiving a request to write the logical block, obtaining a first latency associated with a first disk in the storage pool and a second latency associated with a second disk in the storage pool, obtaining a list of free physical blocks, where the list of free physical blocks identifies free physical blocks on the first disk and the second disk, allocating a physical block from the list of free physical blocks based on the first latency and the second latency, and writing the logical block to the physical block.
Abstract:
A method for writing data to a storage pool, including receiving a first write operation for a first block, determining a first replication type for the first block, determining a number of physical blocks (n1) required to write the first block to the storage pool using a size of the first block and the first replication type, if n1 is not a multiple of the maximum supported replication level of the storage pool: allocating a number of padded physical blocks (p1) to n1 until n1+p1 is a multiple of a maximum supported replication level of the storage pool, and writing the first block to the storage pool by filling in the n1 physical blocks.
Abstract:
A method for storing a data block in a storage pool, including receiving a write operation for the data block, writing the data block into the storage pool, determining a first indirect block to store in the storage pool, wherein the first indirect block references the data block, writing the first indirect block to a first location in the storage pool, creating a copy of the first indirect block, and writing the copy of first indirect block to a second location in the storage pool.