cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dm-service-time.rst (3306B)


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