[PATCH 1/8] dm-ioband: Introduction

From: Ryo Tsuruta
Date: Wed Nov 12 2008 - 22:11:19 EST


What's am-ioband all about?
===========================

dm-ioband is an I/O bandwidth controller implemented as a device-mapper
driver, which gives specified bandwidth to each job running on the
same block device. A job is a group of processes with the same pid or
pgrp or uid or a virtual machine such as KVM or Xen. A job can also be
a cgroup by applying the bio-cgroup patch.

Setup and Installation
======================

Build a kernel with these options enabled:

CONFIG_MD
CONFIG_BLK_DEV_DM
CONFIG_DM_IOBAND

If compiled as module, use modprobe to load dm-ioband.

# make modules
# make modules_install
# depmod -a
# modprobe dm-ioband

"dmsetup targets" command shows all available device-mapper
targets. "ioband" and the version number are displayed when dm-ioband
has been loaded.

# dmsetup targets | grep ioband
ioband v1.9.0

Getting started
===============

The following is a brief description how to control the I/O bandwidth
of disks. In this description, we'll take one disk with two partitions
as an example target.

Create and map ioband devices
-----------------------------

Create two ioband devices "ioband1" and "ioband2". "ioband1" is mapped
to "/dev/sda1" and has a weight of 40. "ioband2" is mapped to "/dev/sda2"
and has a weight of 10. "ioband1" can use 80% --- 40/(40+10)*100 ---
of the bandwidth of the physical disk "/dev/sda" while "ioband2" can use 20%.

# echo "0 $(blockdev --getsize /dev/sda1) ioband /dev/sda1 1 0 0 none" \
"weight 0 :40" | dmsetup create ioband1
# echo "0 $(blockdev --getsize /dev/sda2) ioband /dev/sda2 1 0 0 none" \
"weight 0 :10" | dmsetup create ioband2

If the commands are successful then the device files "/dev/mapper/ioband1"
and "/dev/mapper/ioband2" will have been created.

Additional bandwidth control
----------------------------

In this example two extra ioband groups are created on "ioband1". The
first group consists of all the processes with user-id 1000 and the
second group consists of all the processes with user-id 2000. Their
weights are 30 and 20 respectively.

# dmsetup message ioband1 0 type user
# dmsetup message ioband1 0 attach 1000
# dmsetup message ioband1 0 attach 2000
# dmsetup message ioband1 0 weight 1000:30
# dmsetup message ioband1 0 weight 2000:20

Now the processes in the user-id 1000 group can use 30%
--- 30/(30+20+40+10)*100 --- of the bandwidth of the physical disk.

Table 1. Weight assignments
ioband device ioband group ioband weight
ioband1 user id 1000 30
ioband1 user id 2000 20
ioband1 default group 40
ioband2 default group 10

Remove the ioband devices
-------------------------

Remove the ioband devices when no longer used.

# dmsetup remove ioband1
# dmsetup remove ioband2
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/