aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2026-08-28 23:44:44 +0000
committerAlexander Motin <mav@FreeBSD.org>2026-08-29 00:32:15 +0000
commit7dc4284615495464d6e18123ad6726ed5a9fe798 (patch)
treefea660de7ac7ee93fbdf0fe48baf7da08a84f8d8 /lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
parent7ac94594260f6be72216159afd226d614aedb45a (diff)
gstripe: Increase children I/O sizesHEADmain
Originally gstripe created a separate child I/O for every accessed stripe, making it very inefficient for small stripe sizes. Later introduced "fast" mode reduced that count for read/write requests by copying the data to/from temporary contiguous buffers, wasting memory bandwidth and CPU time. This commit implements alternative method, utilizing unmapped I/O mechanism to assemble children I/Os from pages of the original I/O, avoiding any copying. This method though has some limitations, such as stripe size can not be smaller than CPU page size, or buffer and offset page phases should match (may be page aligned, but not necessarily). But those limitations are not an issue in many cases, since ZFS, for example, can often align its buffers (BTW, dd doesn't). Plus, unlike "fast" method, this one can receive (and even prefers) unmapped I/Os. While there, re-implement also BIO_DELETE. Since they don't have any data, there is no any reason to create more than one child I/O per disk. It also dramatically improves performance there. And for dessert, add rotation rate attribute support, reporting one if all the children report the same. ZFS is using it more and more.
Diffstat (limited to 'lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp')
0 files changed, 0 insertions, 0 deletions