€•bAŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ7/translations/zh_CN/admin-guide/device-mapper/unstriped”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/zh_TW/admin-guide/device-mapper/unstriped”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/it_IT/admin-guide/device-mapper/unstriped”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/ja_JP/admin-guide/device-mapper/unstriped”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/ko_KR/admin-guide/device-mapper/unstriped”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/pt_BR/admin-guide/device-mapper/unstriped”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ7/translations/sp_SP/admin-guide/device-mapper/unstriped”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ Device-mapper "unstriped" target”h]”hŒ$Device-mapper “unstriped†target”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/admin-guide/device-mapper/unstriped.rst”h´Kubh¶)”}”(hhh]”(h»)”}”(hŒ Introduction”h]”hŒ Introduction”…””}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)”}”(hXThe device-mapper "unstriped" target provides a transparent mechanism to unstripe a device-mapper "striped" target to access the underlying disks without having to touch the true backing block-device. It can also be used to unstripe a hardware RAID-0 to access backing disks.”h]”hXThe device-mapper “unstriped†target provides a transparent mechanism to unstripe a device-mapper “striped†target to access the underlying disks without having to touch the true backing block-device. It can also be used to unstripe a hardware RAID-0 to access backing disks.”…””}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)”}”(hŒKParameters: ”h]”hŒKParameters: ”…””}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K hhËh²hubhŒdefinition_list”“”)”}”(hhh]”(hŒdefinition_list_item”“”)”}”(hŒ9 The number of stripes in the RAID 0. ”h]”(hŒterm”“”)”}”(hŒ”h]”hŒ”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÊh´KhjubhŒ definition”“”)”}”(hhh]”hÝ)”}”(hŒ$The number of stripes in the RAID 0.”h]”hŒ$The number of stripes in the RAID 0.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÿh³hÊh´Khhüubj)”}”(hŒ? The amount of 512B sectors in the chunk striping. ”h]”(j)”}”(hŒ ”h]”hŒ ”…””}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÊh´Khj4ubj)”}”(hhh]”hÝ)”}”(hŒ1The amount of 512B sectors in the chunk striping.”h]”hŒ1The amount of 512B sectors in the chunk striping.”…””}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÿh³hÊh´Khhüh²hubj)”}”(hŒ2 The block device you wish to unstripe. ”h]”(j)”}”(hŒ ”h]”hŒ ”…””}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÊh´Khjcubj)”}”(hhh]”hÝ)”}”(hŒ&The block device you wish to unstripe.”h]”hŒ&The block device you wish to unstripe.”…””}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÿh³hÊh´Khhüh²hubj)”}”(hŒ‚ The stripe number within the device that corresponds to physical drive you wish to unstripe. This must be 0 indexed. ”h]”(j)”}”(hŒ ”h]”hŒ ”…””}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÊh´Khj’ubj)”}”(hhh]”hÝ)”}”(hŒuThe stripe number within the device that corresponds to physical drive you wish to unstripe. This must be 0 indexed.”h]”hŒuThe stripe number within the device that corresponds to physical drive you wish to unstripe. This must be 0 indexed.”…””}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÿh³hÊh´Khhüh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1húhhËh²hh³hÊh´Nubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒWhy use this module?”h]”hŒWhy use this module?”…””}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÏh²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒ+An example of undoing an existing dm-stripe”h]”hŒ+An example of undoing an existing dm-stripe”…””}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjàh²hh³hÊh´K"ubhÝ)”}”(hXyThis small bash script will setup 4 loop devices and use the existing striped target to combine the 4 devices into one. It then will use the unstriped target on top of the striped device to access the individual backing loop devices. We write data to the newly exposed unstriped devices and verify the data written matches the correct underlying device on the striped array::”h]”hXxThis small bash script will setup 4 loop devices and use the existing striped target to combine the 4 devices into one. It then will use the unstriped target on top of the striped device to access the individual backing loop devices. We write data to the newly exposed unstriped devices and verify the data written matches the correct underlying device on the striped array:”…””}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K$hjàh²hubhŒ literal_block”“”)”}”(hX„#!/bin/bash MEMBER_SIZE=$((128 * 1024 * 1024)) NUM=4 SEQ_END=$((${NUM}-1)) CHUNK=256 BS=4096 RAID_SIZE=$((${MEMBER_SIZE}*${NUM}/512)) DM_PARMS="0 ${RAID_SIZE} striped ${NUM} ${CHUNK}" COUNT=$((${MEMBER_SIZE} / ${BS})) for i in $(seq 0 ${SEQ_END}); do dd if=/dev/zero of=member-${i} bs=${MEMBER_SIZE} count=1 oflag=direct losetup /dev/loop${i} member-${i} DM_PARMS+=" /dev/loop${i} 0" done echo $DM_PARMS | dmsetup create raid0 for i in $(seq 0 ${SEQ_END}); do echo "0 1 unstriped ${NUM} ${CHUNK} ${i} /dev/mapper/raid0 0" | dmsetup create set-${i} done; for i in $(seq 0 ${SEQ_END}); do dd if=/dev/urandom of=/dev/mapper/set-${i} bs=${BS} count=${COUNT} oflag=direct diff /dev/mapper/set-${i} member-${i} done; for i in $(seq 0 ${SEQ_END}); do dmsetup remove set-${i} done dmsetup remove raid0 for i in $(seq 0 ${SEQ_END}); do losetup -d /dev/loop${i} rm -f member-${i} done”h]”hX„#!/bin/bash MEMBER_SIZE=$((128 * 1024 * 1024)) NUM=4 SEQ_END=$((${NUM}-1)) CHUNK=256 BS=4096 RAID_SIZE=$((${MEMBER_SIZE}*${NUM}/512)) DM_PARMS="0 ${RAID_SIZE} striped ${NUM} ${CHUNK}" COUNT=$((${MEMBER_SIZE} / ${BS})) for i in $(seq 0 ${SEQ_END}); do dd if=/dev/zero of=member-${i} bs=${MEMBER_SIZE} count=1 oflag=direct losetup /dev/loop${i} member-${i} DM_PARMS+=" /dev/loop${i} 0" done echo $DM_PARMS | dmsetup create raid0 for i in $(seq 0 ${SEQ_END}); do echo "0 1 unstriped ${NUM} ${CHUNK} ${i} /dev/mapper/raid0 0" | dmsetup create set-${i} done; for i in $(seq 0 ${SEQ_END}); do dd if=/dev/urandom of=/dev/mapper/set-${i} bs=${BS} count=${COUNT} oflag=direct diff /dev/mapper/set-${i} member-${i} done; for i in $(seq 0 ${SEQ_END}); do dmsetup remove set-${i} done dmsetup remove raid0 for i in $(seq 0 ${SEQ_END}); do losetup -d /dev/loop${i} rm -f member-${i} done”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jÿh³hÊh´K+hjàh²hubeh}”(h]”Œ+an-example-of-undoing-an-existing-dm-stripe”ah ]”h"]”Œ+an example of undoing an existing dm-stripe”ah$]”h&]”uh1hµhjÏh²hh³hÊh´K"ubh¶)”}”(hhh]”(h»)”}”(hŒAnother example”h]”hŒAnother example”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KSubhÝ)”}”(hŒèIntel NVMe drives contain two cores on the physical device. Each core of the drive has segregated access to its LBA range. The current LBA model has a RAID 0 128k chunk on each core, resulting in a 256k stripe across the two cores::”h]”hŒçIntel NVMe drives contain two cores on the physical device. Each core of the drive has segregated access to its LBA range. The current LBA model has a RAID 0 128k chunk on each core, resulting in a 256k stripe across the two cores:”…””}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KUhjh²hubj)”}”(hŒz Core 0: Core 1: __________ __________ | LBA 512| | LBA 768| | LBA 0 | | LBA 256| ---------- ----------”h]”hŒz Core 0: Core 1: __________ __________ | LBA 512| | LBA 768| | LBA 0 | | LBA 256| ---------- ----------”…””}”hj8sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jÿh³hÊh´KZhjh²hubhÝ)”}”(hX¯The purpose of this unstriping is to provide better QoS in noisy neighbor environments. When two partitions are created on the aggregate drive without this unstriping, reads on one partition can affect writes on another partition. This is because the partitions are striped across the two cores. When we unstripe this hardware RAID 0 and make partitions on each new exposed device the two partitions are now physically separated.”h]”hX¯The purpose of this unstriping is to provide better QoS in noisy neighbor environments. When two partitions are created on the aggregate drive without this unstriping, reads on one partition can affect writes on another partition. This is because the partitions are striped across the two cores. When we unstripe this hardware RAID 0 and make partitions on each new exposed device the two partitions are now physically separated.”…””}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K`hjh²hubhÝ)”}”(hXWith the dm-unstriped target we're able to segregate an fio script that has read and write jobs that are independent of each other. Compared to when we run the test on a combined drive with partitions, we were able to get a 92% reduction in read latency using this device mapper target.”h]”hX!With the dm-unstriped target we’re able to segregate an fio script that has read and write jobs that are independent of each other. Compared to when we run the test on a combined drive with partitions, we were able to get a 92% reduction in read latency using this device mapper target.”…””}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khhjh²hubeh}”(h]”Œanother-example”ah ]”h"]”Œanother example”ah$]”h&]”uh1hµhjÏh²hh³hÊh´KSubeh}”(h]”Œwhy-use-this-module”ah ]”h"]”Œwhy use this module?”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒExample dmsetup usage”h]”hŒExample dmsetup usage”…””}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjrh²hh³hÊh´Koubh¶)”}”(hhh]”(h»)”}”(hŒ6unstriped on top of Intel NVMe device that has 2 cores”h]”hŒ6unstriped on top of Intel NVMe device that has 2 cores”…””}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjƒh²hh³hÊh´Krubj)”}”(hŒdmsetup create nvmset0 --table '0 512 unstriped 2 256 0 /dev/nvme0n1 0' dmsetup create nvmset1 --table '0 512 unstriped 2 256 1 /dev/nvme0n1 0'”h]”hŒdmsetup create nvmset0 --table '0 512 unstriped 2 256 0 /dev/nvme0n1 0' dmsetup create nvmset1 --table '0 512 unstriped 2 256 1 /dev/nvme0n1 0'”…””}”hj”sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jÿh³hÊh´Kvhjƒh²hubhÝ)”}”(hŒPThere will now be two devices that expose Intel NVMe core 0 and 1 respectively::”h]”hŒOThere will now be two devices that expose Intel NVMe core 0 and 1 respectively:”…””}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kyhjƒh²hubj)”}”(hŒ'/dev/mapper/nvmset0 /dev/mapper/nvmset1”h]”hŒ'/dev/mapper/nvmset0 /dev/mapper/nvmset1”…””}”hj°sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jÿh³hÊh´K|hjƒh²hubeh}”(h]”Œ6unstriped-on-top-of-intel-nvme-device-that-has-2-cores”ah ]”h"]”Œ6unstriped on top of intel nvme device that has 2 cores”ah$]”h&]”uh1hµhjrh²hh³hÊh´Krubh¶)”}”(hhh]”(h»)”}”(hŒ?unstriped on top of striped with 4 drives using 128K chunk size”h]”hŒ?unstriped on top of striped with 4 drives using 128K chunk size”…””}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÆh²hh³hÊh´K€ubj)”}”(hXGdmsetup create raid_disk0 --table '0 512 unstriped 4 256 0 /dev/mapper/striped 0' dmsetup create raid_disk1 --table '0 512 unstriped 4 256 1 /dev/mapper/striped 0' dmsetup create raid_disk2 --table '0 512 unstriped 4 256 2 /dev/mapper/striped 0' dmsetup create raid_disk3 --table '0 512 unstriped 4 256 3 /dev/mapper/striped 0'”h]”hXGdmsetup create raid_disk0 --table '0 512 unstriped 4 256 0 /dev/mapper/striped 0' dmsetup create raid_disk1 --table '0 512 unstriped 4 256 1 /dev/mapper/striped 0' dmsetup create raid_disk2 --table '0 512 unstriped 4 256 2 /dev/mapper/striped 0' dmsetup create raid_disk3 --table '0 512 unstriped 4 256 3 /dev/mapper/striped 0'”…””}”hj×sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jÿh³hÊh´K„hjÆh²hubeh}”(h]”Œ?unstriped-on-top-of-striped-with-4-drives-using-128k-chunk-size”ah ]”h"]”Œ?unstriped on top of striped with 4 drives using 128k chunk size”ah$]”h&]”uh1hµhjrh²hh³hÊh´K€ubeh}”(h]”Œexample-dmsetup-usage”ah ]”h"]”Œexample dmsetup usage”ah$]”h&]”uh1hµhh·h²hh³hÊh´Koubeh}”(h]”Œdevice-mapper-unstriped-target”ah ]”h"]”Œ device-mapper "unstriped" target”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(júj÷jÌjÉjojljjjgjdjòjïjÃjÀjêjçuŒ nametypes”}”(jú‰j̉jo‰j‰jg‰jò‰jÉjê‰uh}”(j÷h·jÉhËjljÏjjàjdjjïjrjÀjƒjçjÆuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.