linux/Documentation/device-mapper/dm-service-time.txt
<<
>>
Prefs
   1dm-service-time
   2===============
   3
   4dm-service-time is a path selector module for device-mapper targets,
   5which selects a path with the shortest estimated service time for
   6the incoming I/O.
   7
   8The service time for each path is estimated by dividing the total size
   9of in-flight I/Os on a path with the performance value of the path.
  10The performance value is a relative throughput value among all paths
  11in a path-group, and it can be specified as a table argument.
  12
  13The path selector name is 'service-time'.
  14
  15Table 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
  27Status 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
  36Algorithm
  37=========
  38
  39dm-service-time adds the I/O size to 'in-flight-size' when the I/O is
  40dispatched and subtracts when completed.
  41Basically, dm-service-time selects a path having minimum service time
  42which is calculated by:
  43
  44        ('in-flight-size' + 'size-of-incoming-io') / 'relative_throughput'
  45
  46However, some optimizations below are used to reduce the calculation
  47as 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
  59If such optimizations can't be applied, calculate service time, and
  60compare service time.
  61If calculated service time is equal, the path having maximum
  62'relative_throughput' may be better.  So compare 'relative_throughput'
  63then.
  64
  65
  66Examples
  67========
  68In case that 2 paths (sda and sdb) are used with repeat_count == 128
  69and 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
  76test: 0 10 multipath 0 0 1 1 service-time 0 2 2 8:0 128 1 8:16 128 4
  77#
  78# dmsetup status
  79test: 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
  82Or '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
  88test: 0 10 multipath 0 0 1 1 service-time 0 2 2 8:0 128 2 8:16 128 8
  89#
  90# dmsetup status
  91test: 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
  92
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.