Simulating a slow disk with nbd
Michael Foord
michael.foord at canonical.com
Thu Sep 4 12:31:56 UTC 2014
Hey all,
I've been diagnosing some replicaset issues that particularly show up on
systems with slow disks, particularly our CI infrastructure. To simulate
a slow disk I've been using nbd (Network block device [1]), with
trickle. This provides a "remote mounted" disk (actually local served
over the loopback) that is rate limited. I then run the tests inside an
lxc container with its filesystem on the rate limited disk.
Getting this working was tricky, so I thought I'd share the information.
In particular I couldn't get nbd-server to read a configuration file, so
I force it to skip loading the config file and specify the parameters at
the command line. This is deprecated, but works fine.
The sequence of commands to create the nbd drive and create / start the
lxc container are as follows:
sudo apt-get install trickle nbd-server nbd-client
# create a 10GB file to act as the disk.
dd if=/dev/zero of=/path/to/some/file bs=1024 count=10000000
# create a file system on it
mke2fs /path/to/some/file
# start nbd-server under trickle
trickle -d 2000 -u 2000 nbd-server -C " " 1234 /path/to/some/file
# start the client
sudo nbd-client localhost 1234 /dev/nbd0
# create mount point
sudo mkdir /mnt/nbd
# mount the nbd device
sudo mount /dev/nbd0 /mnt/nbd
# create the lxc container
sudo lxc-create -t ubuntu -n nbd --dir=/mnt/nbd
# start the container
sudo lxc-start --name nbd
The "-d 2000 -u 2000" parameters to trickle tell it to rate limit access
to nbd-server to 2000 kB/s. Adjust this appropriately for a
faster/slower system.
Something worth noting is that when shutting down it matters what order
you do things. If you shut down things in the wrong order you can end up
with an lxc container that you can't restart or a device that you can't
unmount / remount.
The right order to (un)do things is:
Shut down lxc container
Unmount device
Kill nbd-client / server
I hope this is helpful to anyone else who may want to simulate a system
with slow i/o performance.
All the best,
Michael Foord
[1] http://nbd.sourceforge.net/
More information about the Juju-dev
mailing list