I’ve just released the first official version of IOschedd via PyPI. From the Readme:

ioschedd allows a user to fine-tune their IO scheduler on a per-device basis without having to deal with writing crazy udev rules for all of your devices.

This is particularly handy in the following scenarios:

Your server boot of a slow on-board IDE drive, but stores all of its data on a fancy RAID controller. In this case, you likely want CFQ or deadline on hda, but noop on sd*

Perhaps your server is hosted somewhere out of your control and you don’t have access to change boot parameters (say, it’s netbooted by your provider) and you’d like to make sure your IO scheduler is changed before your application is launched

Devices can be specified by either devpath (/dev/sd*, etc) or by syspath (/sys/devices/pci0000:00/…). Blacklists are also supported, allowing you to set one scheduler by default for a given pattern (let’s say /dev/sd*) but use the default for a given device(s) (blacklist: devpath=/dev/sdb).

The GitHub project includes an example config file and an upstart script.

There’s also a separate GitHub project for a chef cookbook to configure the service.

The recipes support storing device configurations in node[“ioschedd”][“devices”] blocks as well as node[‘ceph’][‘osd_devices’] which is where the ceph cookbooks store their OSD device configurations.