From 93a94f503b058a1452cc8b1eef389cbec5975863 Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Fri, 14 Dec 2018 06:39:59 -0800 Subject: [PATCH] Enable direct-io on LVM loop devices This enables direct-io on the loop devices that we create for LVM backing stores. The goal here is to reduce the buffer cache overhead involved with loop mounting a very large file on a filesystem, as well as potentially providing a little more block-device-like behavior for things that expect them. We are hoping this will address some of the very long LVM calls that cinder does, which randomly take a very long time, causing timeouts. The loop direct-io support was added in kernel 4.4.0, which was xenial, but the losetup binary does not have the required flag. Thus, this patch checks the "losetup -h" output for the flag before deciding to enable it. Change-Id: Idc69cf3598d6ed6646c0145733c90ad0b1b60883 --- lib/lvm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/lvm b/lib/lvm index f0471816bf..d9e78a016f 100644 --- a/lib/lvm +++ b/lib/lvm @@ -99,8 +99,15 @@ function _create_lvm_volume_group { if ! sudo vgs $vg; then # Only create if the file doesn't already exists [[ -f $backing_file ]] || truncate -s $size $backing_file + + local directio="" + # Check to see if we can do direct-io + if losetup -h | grep -q direct-io; then + directio="--direct-io=on" + fi + local vg_dev - vg_dev=`sudo losetup -f --show $backing_file` + vg_dev=$(sudo losetup -f --show $directio $backing_file) # Only create volume group if it doesn't already exist if ! sudo vgs $vg; then