From 35b44f0b7fa7d6600c2e65bb4bdfaaa289154dea Mon Sep 17 00:00:00 2001 From: Jan Vcelak Date: Fri, 7 Jan 2011 17:00:22 +0100 Subject: [PATCH] udev: add rules for scheduler tuning --- udev/80-tuned-iosched.rules | 14 +++++++++++++ udev/80-tuned-mpath-iosched.rules | 9 ++++++++ udev/tuned-mpath-iosched | 34 +++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 udev/80-tuned-iosched.rules create mode 100644 udev/80-tuned-mpath-iosched.rules create mode 100755 udev/tuned-mpath-iosched diff --git a/udev/80-tuned-iosched.rules b/udev/80-tuned-iosched.rules new file mode 100644 index 0000000..163f240 --- /dev/null +++ b/udev/80-tuned-iosched.rules @@ -0,0 +1,14 @@ +# +# CFQ's default tunings are geared towards slow SATA disks. If we detect +# anything else, we change the tunings to drive deeper queue depths and +# keep the device busy. +# +SUBSYSTEM!="block", GOTO="end_iosched" +KERNEL=="dm-*", GOTO="end_iosched" +ENV{DEVTYPE}=="partition", GOTO="end_iosched" +ACTION!="add|change", GOTO="end_iosched" +ENV{ID_BUS}=="ata", GOTO="end_iosched" +ATTR{queue/scheduler}!="*\[cfq\]", GOTO="end_iosched" +ATTR{queue/iosched/slice_idle}="0" +ATTR{queue/iosched/quantum}="32" +LABEL="end_iosched" diff --git a/udev/80-tuned-mpath-iosched.rules b/udev/80-tuned-mpath-iosched.rules new file mode 100644 index 0000000..0d65806 --- /dev/null +++ b/udev/80-tuned-mpath-iosched.rules @@ -0,0 +1,9 @@ +SUBSYSTEM!="block", GOTO="end_mpath_iosched" +ENV{DEVTYPE}=="partition", GOTO="end_mpath_iosched" +KERNEL!="dm-*", GOTO="end_mpath_iosched" +ACTION!="change", GOTO="end_mpath_iosched" +ATTR{queue/scheduler}!="*\[cfq\]", GOTO="end_mpath_iosched" +ENV{DM_UUID}!="mpath-?*", GOTO="end_mpath_iosched" +ENV{DM_ACTION}=="PATH_FAILED", GOTO="end_mpath_iosched" +RUN+="tuned-mpath-iosched.sh" +LABEL="end_mpath_iosched" diff --git a/udev/tuned-mpath-iosched b/udev/tuned-mpath-iosched new file mode 100755 index 0000000..78445b5 --- /dev/null +++ b/udev/tuned-mpath-iosched @@ -0,0 +1,34 @@ +#!/bin/sh +# +# For the request-based multipath driver, the I/O scheduler runs on the +# multipath device, not the underlying "slave" devices. This script +# checks the ID_BUS attribute for each of the slave devices. If it finds +# an ata device, it leaves the I/O scheduler tunings alone. For any other +# device, we tune the I/O scheduler to try to keep the device busy. +# + +if [ -z "$DEVPATH" ]; then + logger "$0: DEVPATH is not set" + exit 1 +fi + +if [ ! -d /sys/${DEVPATH}/slaves ]; then + logger "$0: 'slaves' directory under '$DEVPATH' does not exist" + exit 1 +fi + +needs_tuning=1 +for slave in $(command ls /sys/${DEVPATH}/slaves/* 2>/dev/null); do + bus_type=$(/sbin/udevadm info --query=property --path=$slave | grep -m1 ID_BUS | cut -d= -2) + if [ "$bus_type" = "ata" ]; then + needs_tuning=0 + break + fi +done + +if [ $needs_tuning -eq 1 ]; then + echo 0 > /sys/${DEVPATH}/queue/iosched/slice_idle + echo 32 > /sys/${DEVPATH}/queue/iosched/quantum +fi + +exit 0