Based on kernel version 4.16.1. Page generated on 2018-04-09 11:52 EST.
1 dm-service-time 2 =============== 3 4 dm-service-time is a path selector module for device-mapper targets, 5 which selects a path with the shortest estimated service time for 6 the incoming I/O. 7 8 The service time for each path is estimated by dividing the total size 9 of in-flight I/Os on a path with the performance value of the path. 10 The performance value is a relative throughput value among all paths 11 in a path-group, and it can be specified as a table argument. 12 13 The path selector name is 'service-time'. 14 15 Table parameters for each path: [<repeat_count> [<relative_throughput>]] 16 <repeat_count>: The number of I/Os to dispatch using the selected 17 path before switching to the next path. 18 If not given, internal default is used. To check 19 the default value, see the activated table. 20 <relative_throughput>: The relative throughput value of the path 21 among all paths in the path-group. 22 The valid range is 0-100. 23 If not given, minimum value '1' is used. 24 If '0' is given, the path isn't selected while 25 other paths having a positive value are available. 26 27 Status for each path: <status> <fail-count> <in-flight-size> \ 28 <relative_throughput> 29 <status>: 'A' if the path is active, 'F' if the path is failed. 30 <fail-count>: The number of path failures. 31 <in-flight-size>: The size of in-flight I/Os on the path. 32 <relative_throughput>: The relative throughput value of the path 33 among all paths in the path-group. 34 35 36 Algorithm 37 ========= 38 39 dm-service-time adds the I/O size to 'in-flight-size' when the I/O is 40 dispatched and subtracts when completed. 41 Basically, dm-service-time selects a path having minimum service time 42 which is calculated by: 43 44 ('in-flight-size' + 'size-of-incoming-io') / 'relative_throughput' 45 46 However, some optimizations below are used to reduce the calculation 47 as much as possible. 48 49 1. If the paths have the same 'relative_throughput', skip 50 the division and just compare the 'in-flight-size'. 51 52 2. If the paths have the same 'in-flight-size', skip the division 53 and just compare the 'relative_throughput'. 54 55 3. If some paths have non-zero 'relative_throughput' and others 56 have zero 'relative_throughput', ignore those paths with zero 57 'relative_throughput'. 58 59 If such optimizations can't be applied, calculate service time, and 60 compare service time. 61 If calculated service time is equal, the path having maximum 62 'relative_throughput' may be better. So compare 'relative_throughput' 63 then. 64 65 66 Examples 67 ======== 68 In case that 2 paths (sda and sdb) are used with repeat_count == 128 69 and sda has an average throughput 1GB/s and sdb has 4GB/s, 70 'relative_throughput' value may be '1' for sda and '4' for sdb. 71 72 # echo "0 10 multipath 0 0 1 1 service-time 0 2 2 8:0 128 1 8:16 128 4" \ 73 dmsetup create test 74 # 75 # dmsetup table 76 test: 0 10 multipath 0 0 1 1 service-time 0 2 2 8:0 128 1 8:16 128 4 77 # 78 # dmsetup status 79 test: 0 10 multipath 2 0 0 0 1 1 E 0 2 2 8:0 A 0 0 1 8:16 A 0 0 4 80 81 82 Or '2' for sda and '8' for sdb would be also true. 83 84 # echo "0 10 multipath 0 0 1 1 service-time 0 2 2 8:0 128 2 8:16 128 8" \ 85 dmsetup create test 86 # 87 # dmsetup table 88 test: 0 10 multipath 0 0 1 1 service-time 0 2 2 8:0 128 2 8:16 128 8 89 # 90 # dmsetup status 91 test: 0 10 multipath 2 0 0 0 1 1 E 0 2 2 8:0 A 0 0 2 8:16 A 0 0 8