Method and system for zero-copy disk IO using sector unaligned buffers
First Claim
1. A system for transferring data between a requesting application and a storage device, the system comprising:
- a processor-based input/output management system executed on a computer system and configured to;
receive from the requesting application a scatter-gather list having a plurality of scatter-gather elements referencing data buffers for a data transfer operation;
query at least one layered block device driver coupled between the requesting application and the storage device to determine an input/output constraint imposed by the layered block device driver, the constraint not including alignment of data with a boundary;
examine each scatter-gather element to determine whether there will be a violation of the input/output constraint;
generate at least one input/output request responsive to the examination; and
issue the input/output request to the storage device, wherein the input/output request comprises at least a portion of a data buffer referenced by a scatter-gather element.
9 Assignments
0 Petitions
Accused Products
Abstract
Data is transferred between a requesting application and a storage device by passing the application IO buffer to the disk driver. Techniques are provided to avoid data copying to an intermediate sector aligned buffer and passing the intermediate buffer to the disk driver. The techniques allow the use of layered block device drivers such as a Logical Volume Manager (LVM), Distributed Replicated Block Device (DRBD), or both. A look-ahead can determine the IO constraints imposed by the layered block device drivers. Based on the constraints, an entire portion of the buffer may be added to an IO request, or the buffer may be split into a first portion and a second portion. The first portion may be added to a first IO request. The second portion may be added to a second IO request, different from the first IO request.
-
Citations
20 Claims
-
1. A system for transferring data between a requesting application and a storage device, the system comprising:
-
a processor-based input/output management system executed on a computer system and configured to; receive from the requesting application a scatter-gather list having a plurality of scatter-gather elements referencing data buffers for a data transfer operation; query at least one layered block device driver coupled between the requesting application and the storage device to determine an input/output constraint imposed by the layered block device driver, the constraint not including alignment of data with a boundary; examine each scatter-gather element to determine whether there will be a violation of the input/output constraint; generate at least one input/output request responsive to the examination; and issue the input/output request to the storage device, wherein the input/output request comprises at least a portion of a data buffer referenced by a scatter-gather element. - View Dependent Claims (2, 3, 4, 5, 6)
-
-
7. A method for transferring data between a requesting application and a storage device comprising:
-
receiving from the requesting application a scatter-gather list having a plurality of scatter-gather elements referencing data buffers for a data transfer operation; querying at least one layered block device driver coupled between the requesting application and the storage device to determine an input/output constraint imposed by the layered block device driver, the constraint not including alignment of data with a boundary; examining each scatter-gather element to determine whether there will be a violation of the input/output constraint; generating at least one input/output request responsive to the examination; and issuing the input/output request to the storage device, wherein the input/output request comprises at least a portion of a data buffer referenced by a scatter-gather element. - View Dependent Claims (8, 9, 10, 11, 12, 13, 14)
-
-
15. A computer program product, comprising a non-transitory computer-readable medium having a computer-readable program code embodied therein, the computer-readable program code adapted to be executed by one or more processors to implement a method comprising:
-
receiving from the requesting application a scatter-gather list having a plurality of scatter-gather elements referencing data buffers for a data transfer operation; querying at least one layered block device driver coupled between the requesting application and the storage device to determine an input/output constraint imposed by the layered block device driver, the constraint not including alignment of data with a boundary; examining each scatter-gather element to determine whether there will be a violation of the input/output constraint; generating at least one input/output request responsive to the examination; and issuing the input/output request to the storage device, wherein the input/output request comprises at least a portion of a data buffer referenced by a scatter-gather element. - View Dependent Claims (16, 17, 18, 19, 20)
-
Specification