1 ================================
2 Device-mapper "unstriped" target
3 ================================
8 The device-mapper "unstriped" target provides a transparent mechanism to
9 unstripe a device-mapper "striped" target to access the underlying disks
10 without having to touch the true backing block-device. It can also be
11 used to unstripe a hardware RAID-0 to access backing disks.
14 <number of stripes> <chunk size> <stripe #> <dev_path> <offset>
17 The number of stripes in the RAID 0.
20 The amount of 512B sectors in the chunk striping.
23 The block device you wish to unstripe.
26 The stripe number within the device that corresponds to physical
27 drive you wish to unstripe. This must be 0 indexed.
33 An example of undoing an existing dm-stripe
34 -------------------------------------------
36 This small bash script will setup 4 loop devices and use the existing
37 striped target to combine the 4 devices into one. It then will use
38 the unstriped target ontop of the striped device to access the
39 individual backing loop devices. We write data to the newly exposed
40 unstriped devices and verify the data written matches the correct
41 underlying device on the striped array::
45 MEMBER_SIZE=$((128 * 1024 * 1024))
51 RAID_SIZE=$((${MEMBER_SIZE}*${NUM}/512))
52 DM_PARMS="0 ${RAID_SIZE} striped ${NUM} ${CHUNK}"
53 COUNT=$((${MEMBER_SIZE} / ${BS}))
55 for i in $(seq 0 ${SEQ_END}); do
56 dd if=/dev/zero of=member-${i} bs=${MEMBER_SIZE} count=1 oflag=direct
57 losetup /dev/loop${i} member-${i}
58 DM_PARMS+=" /dev/loop${i} 0"
61 echo $DM_PARMS | dmsetup create raid0
62 for i in $(seq 0 ${SEQ_END}); do
63 echo "0 1 unstriped ${NUM} ${CHUNK} ${i} /dev/mapper/raid0 0" | dmsetup create set-${i}
66 for i in $(seq 0 ${SEQ_END}); do
67 dd if=/dev/urandom of=/dev/mapper/set-${i} bs=${BS} count=${COUNT} oflag=direct
68 diff /dev/mapper/set-${i} member-${i}
71 for i in $(seq 0 ${SEQ_END}); do
72 dmsetup remove set-${i}
77 for i in $(seq 0 ${SEQ_END}); do
78 losetup -d /dev/loop${i}
85 Intel NVMe drives contain two cores on the physical device.
86 Each core of the drive has segregated access to its LBA range.
87 The current LBA model has a RAID 0 128k chunk on each core, resulting
88 in a 256k stripe across the two cores::
96 The purpose of this unstriping is to provide better QoS in noisy
97 neighbor environments. When two partitions are created on the
98 aggregate drive without this unstriping, reads on one partition
99 can affect writes on another partition. This is because the partitions
100 are striped across the two cores. When we unstripe this hardware RAID 0
101 and make partitions on each new exposed device the two partitions are now
102 physically separated.
104 With the dm-unstriped target we're able to segregate an fio script that
105 has read and write jobs that are independent of each other. Compared to
106 when we run the test on a combined drive with partitions, we were able
107 to get a 92% reduction in read latency using this device mapper target.
110 Example dmsetup usage
111 =====================
113 unstriped ontop of Intel NVMe device that has 2 cores
114 -----------------------------------------------------
118 dmsetup create nvmset0 --table '0 512 unstriped 2 256 0 /dev/nvme0n1 0'
119 dmsetup create nvmset1 --table '0 512 unstriped 2 256 1 /dev/nvme0n1 0'
121 There will now be two devices that expose Intel NVMe core 0 and 1
127 unstriped ontop of striped with 4 drives using 128K chunk size
128 --------------------------------------------------------------
132 dmsetup create raid_disk0 --table '0 512 unstriped 4 256 0 /dev/mapper/striped 0'
133 dmsetup create raid_disk1 --table '0 512 unstriped 4 256 1 /dev/mapper/striped 0'
134 dmsetup create raid_disk2 --table '0 512 unstriped 4 256 2 /dev/mapper/striped 0'
135 dmsetup create raid_disk3 --table '0 512 unstriped 4 256 3 /dev/mapper/striped 0'