~ubuntu-branches/ubuntu/saucy/lvm2/saucy

« back to all changes in this revision

Viewing changes to doc/kernel/service-time.txt

  • Committer: Package Import Robot
  • Author(s): Dmitrijs Ledkovs
  • Date: 2012-08-14 14:35:57 UTC
  • mfrom: (3.1.25 sid)
  • Revision ID: package-import@ubuntu.com-20120814143557-93aill2tp3kf3o30
Tags: 2.02.95-4ubuntu1
* Merge from Debian unstable, remaining changes:
  - debian/patches/avoid-dev-block.patch: Prefer any other device name over
    names in /dev/block/ since lvm.conf won't handle this.
  - debian/rules:
    - copy .po file to .pot file for Rosetta (Ubuntu specific).
  - debian/{dmsetup,lvm2}-udeb.install:
    - install initramfs and udev hooks in udebs (Debian bug 504341).
  - auto-start VGs as their PVs are discovered (Ubuntu specific):
    - add debian/tree/lvm2/lib/udev/rules.d/85-lvm2.rules: use watershed plus
      the sledgehammer of vgscan/vgchange to turn on VGs as they come online.
    - debian/tree/lvm2/usr/share/initramfs-tools/scripts/hooks/lvm2:
      - add 85-lvm2.rules to the list of udev rules to copy.
      - depend on udev.
    - debian/control:
      - add versioned Depend on watershed in lvm2 for udev rules.
      - add Depends on watershed-udeb in lvm2-udeb for udev rules.
      - add versioned Depend/Breaks on udev in dmsetup for udev rules.
      - add Depend on initramfs-tools in dmsetup so system is not potentially
        rendered unbootable by out-of-order dpkg configuration.
    - debian/rules:
      - do not install local-top scripts since Ubuntu mounts root using udev.
      - do not install init scripts for lvm2, since udev starts LVM.
    - debian/lvm2.postinst: handle missing lvm2 init script.
    - debian/tree/dmsetup/lib/udev/rules.d/60-persistent-storage-dm.rules:
      watch dm devices for changes with inotify
  - add mountroot failure hooks to help fix bad boots (Debian bug 468115):
    - debian/tree/lvm2/usr/share/initramfs-tools/scripts/init-premount/lvm2
  - remaining changes to upstream event manager packages (Debian bug 514706):
    - debian/rules:
      - enable dmeventd during configure.
    - debian/dmeventd.{8,manpages}: install dmeventd files.
  - rename debian/clvm.defaults to debian/clvm.default so it is installed
    correctly.
  - debian/control: add dmsetup-udeb to libdevmapper1.02.1-udeb recommends.
  - debian/rules: make sure dmsetup and lvm2 initramfs-tools scripts are
    executable.  When the Ubuntu-specific ones are added with a patch,
    they may lose their executable bit.
  - Add and install clvmd resource agent
  - Add dependency on libudev-dev to libdevmapper-dev so that the .pc file
    works.
  - debian/{clvmd.ra,clvm.init}:
    - create /run/lvm if it doesn't exist.
  - debian/clvm.init:
    - exit 3 if not running on status action.
  - Call dh_installman so that our dmeventd manpage actually gets installed
  - Install the missing fsadm manpage.

 * libdevmapper-dev:
  - move .so symlinks and pkgconfig files to multiarched locations.
  - mark libdevmapper-dev M-A: same

 * libdevmapper-event1.02.1:
  - Add Breaks: dmeventd (<< 2.02.95-4ubuntu1) due to debian symbol rename

 * debian/lvm2.{preinst,postinst,postrm}:
  - Implement removal of obsolete /etc/init.d/lvm2 conffile, which
    should not have been re-introduced in Quantal.

 * Dropped Changes, included in Debian:
  - Mostly included packages for upstream event manager (Debian bug 514706).
  - debian/patches/rules-subdir.patch: removed as reordering will cause
    build failure with dmeventd.
  - debian/patches/libdm-event-static.patch: removed as other static libs
    aren't being built anymore either.
  - Update symbols for libdevmapper-event.
  - Update libdevmapper-event, dmeventd descriptions to match Debian
    boilerplate.

 * Disappeared Changes:
  - Don't install documentation in udebs. No diff found, but no docs are
    installed into udebs either.

 * Resurected Changes:
  - corrected dropping the wrong init script. Now clvm.init is shipped
    and lvm2.init is dropped in favor of udev rules as per original
    intention (LP: #1037033).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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