linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org, jejb@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
	Zwane Mwaikambo <zwane@arm.linux.org.uk>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Dave Jones <davej@redhat.com>,
	Chuck Wolber <chuckw@quantumlinux.com>,
	Chris Wedgwood <reviews@ml.cw.f00f.org>,
	Michael Krufky <mkrufky@linuxtv.org>,
	Chuck Ebbert <cebbert@redhat.com>,
	Domenico Andreoli <cavokz@gmail.com>, Willy Tarreau <w@1wt.eu>,
	Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
	Jake Edge <jake@lwn.net>, Eugene Teo <eteo@redhat.com>,
	torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk, Jan Blunck <jblunck@suse.de>,
	Kazuo Ito <ito.kazuo@oss.ntt.co.jp>,
	Alasdair G Kergon <agk@redhat.com>
Subject: [patch 09/27] dm kcopyd: avoid queue shuffle
Date: Thu, 23 Oct 2008 21:34:09 -0700	[thread overview]
Message-ID: <20081024043409.GJ30828@kroah.com> (raw)
In-Reply-To: <20081024043303.GA30828@kroah.com>

[-- Attachment #1: dm-kcopyd-avoid-queue-shuffle.patch --]
[-- Type: text/plain, Size: 3408 bytes --]

2.6.27-stable review patch.  If anyone has any objections, please let us 
know.

------------------
From: Kazuo Ito <ito.kazuo@oss.ntt.co.jp>

commit b673c3a8192e28f13e2050a4b82c1986be92cc15 upstream

Write throughput to LVM snapshot origin volume is an order
of magnitude slower than those to LV without snapshots or
snapshot target volumes, especially in the case of sequential
writes with O_SYNC on.

The following patch originally written by Kevin Jamieson and
Jan Blunck and slightly modified for the current RCs by myself
tries to improve the performance by modifying the behaviour
of kcopyd, so that it pushes back an I/O job to the head of
the job queue instead of the tail as process_jobs() currently
does when it has to wait for free pages. This way, write
requests aren't shuffled to cause extra seeks.

I tested the patch against 2.6.27-rc5 and got the following results.
The test is a dd command writing to snapshot origin followed by fsync
to the file just created/updated.  A couple of filesystem benchmarks
gave me similar results in case of sequential writes, while random
writes didn't suffer much.

dd if=/dev/zero of=<somewhere on snapshot origin> bs=4096 count=...
   [conv=notrunc when updating]

1) linux 2.6.27-rc5 without the patch, write to snapshot origin,
average throughput (MB/s)
                     10M     100M    1000M
create,dd         511.46   610.72    11.81
create,dd+fsync     7.10     6.77     8.13
update,dd         431.63   917.41    12.75
update,dd+fsync     7.79     7.43     8.12

compared with write throughput to LV without any snapshots,
all dd+fsync and 1000 MiB writes perform very poorly.

                     10M     100M    1000M
create,dd         555.03   608.98   123.29
create,dd+fsync   114.27    72.78    76.65
update,dd         152.34  1267.27   124.04
update,dd+fsync   130.56    77.81    77.84

2) linux 2.6.27-rc5 with the patch, write to snapshot origin,
average throughput (MB/s)

                     10M     100M    1000M
create,dd         537.06   589.44    46.21
create,dd+fsync    31.63    29.19    29.23
update,dd         487.59   897.65    37.76
update,dd+fsync    34.12    30.07    26.85

Although still not on par with plain LV performance -
cannot be avoided because it's copy on write anyway -
this simple patch successfully improves throughtput
of dd+fsync while not affecting the rest.

Signed-off-by: Jan Blunck <jblunck@suse.de>
Signed-off-by: Kazuo Ito <ito.kazuo@oss.ntt.co.jp>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/md/dm-kcopyd.c |   13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

--- a/drivers/md/dm-kcopyd.c
+++ b/drivers/md/dm-kcopyd.c
@@ -268,6 +268,17 @@ static void push(struct list_head *jobs,
 	spin_unlock_irqrestore(&kc->job_lock, flags);
 }
 
+
+static void push_head(struct list_head *jobs, struct kcopyd_job *job)
+{
+	unsigned long flags;
+	struct dm_kcopyd_client *kc = job->kc;
+
+	spin_lock_irqsave(&kc->job_lock, flags);
+	list_add(&job->list, jobs);
+	spin_unlock_irqrestore(&kc->job_lock, flags);
+}
+
 /*
  * These three functions process 1 item from the corresponding
  * job list.
@@ -398,7 +409,7 @@ static int process_jobs(struct list_head
 			 * We couldn't service this job ATM, so
 			 * push this job back onto the list.
 			 */
-			push(jobs, job);
+			push_head(jobs, job);
 			break;
 		}
 

-- 

  parent reply	other threads:[~2008-10-24  4:42 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20081024042023.054190751@mini.kroah.org>
2008-10-24  4:33 ` [patch 00/27] 2.6.27.4-stable review Greg KH
2008-10-24  4:33   ` [patch 01/27] gpiolib: fix oops in gpio_get_value_cansleep() Greg KH
2008-10-24  4:33   ` [patch 02/27] edac cell: fix incorrect edac_mode Greg KH
2008-10-24  4:33   ` [patch 03/27] x86 ACPI: fix breakage of resume on 64-bit UP systems with SMP kernel Greg KH
2008-10-24  4:33   ` [patch 04/27] sched: fix the wrong mask_len Greg KH
2008-10-24  4:33   ` [patch 05/27] USB: cdc-wdm: make module autoload work Greg KH
2008-10-24  4:33   ` [patch 06/27] USB: dont rebind drivers after failed resume or reset Greg KH
2008-10-24  4:33   ` [patch 07/27] USB: fix memory leak in cdc-acm Greg KH
2008-10-24  4:34   ` [patch 08/27] USB: Speedtouch: add pre_reset and post_reset routines Greg KH
2008-10-24  4:34   ` Greg KH [this message]
2008-10-24  4:34   ` [patch 10/27] dm snapshot: fix primary_pe race Greg KH
2008-10-24  4:34   ` [patch 11/27] dm exception store: refactor zero_area Greg KH
2008-10-24  5:36     ` Greg KH
2008-10-25  1:40       ` Mikulas Patocka
2008-10-25 20:28         ` Greg KH
2008-10-24  4:34   ` [patch 12/27] dm exception store: fix misordered writes Greg KH
2008-10-24  4:34   ` [patch 13/27] amd_iommu: fix nasty bug that caused ILLEGAL_DEVICE_TABLE_ENTRY errors Greg KH
2008-10-24  4:34   ` [patch 14/27] CIFS: fix saving of resume key before CIFSFindNext Greg KH
2008-10-24  4:34   ` [patch 15/27] ext: Avoid printk floods in the face of directory corruption (CVE-2008-3528) Greg KH
2008-10-24  4:34   ` [patch 16/27] netfilter: xt_iprange: fix range inversion match Greg KH
2008-10-24  4:34   ` [patch 17/27] netfilter: snmp nat leaks memory in case of failure Greg KH
2008-10-24  4:34   ` [patch 18/27] netfilter: restore lost ifdef guarding defrag exception Greg KH
2008-10-24  4:34   ` [patch 19/27] anon_vma_prepare: properly lock even newly allocated entries Greg KH
2008-10-24  4:34   ` [patch 20/27] hvc_console: Fix free_irq in spinlocked section Greg KH
2008-10-24  4:35   ` [patch 21/27] ACPI Suspend: Enable ACPI during resume if SCI_EN is not set Greg KH
2008-10-24  4:35   ` [patch 22/27] ACPI suspend: Blacklist HP xw4600 Workstation for old code ordering Greg KH
2008-10-24  4:35   ` [patch 23/27] ACPI suspend: Always use the 32-bit waking vector Greg KH
2008-10-24  4:35   ` [patch 24/27] proc: fix vma display mismatch between /proc/pid/{maps,smaps} Greg KH
2008-10-24  4:35   ` [patch 25/27] SCSI: scsi_dh: add Dell product information into rdac device handler Greg KH
2008-10-24  4:35   ` [patch 26/27] PCI hotplug: cpqphp: fix kernel NULL pointer dereference Greg KH
2008-10-24  4:35   ` [patch 27/27] ath5k: fix suspend-related oops on rmmod Greg KH
2008-10-24 20:36     ` Elias Oltmanns
2008-10-24 21:10       ` Bob Copeland
2008-10-24 21:28       ` Greg KH
2008-10-24  5:41   ` [patch 00/27] 2.6.27.4-stable review Greg KH
2008-10-24 21:38     ` [stable] " Greg KH
2008-10-24 21:40       ` [patch 28/27] V4L/DVB (9300): pvrusb2: Fix deadlock problem Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20081024043409.GJ30828@kroah.com \
    --to=gregkh@suse.de \
    --cc=agk@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=cavokz@gmail.com \
    --cc=cebbert@redhat.com \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=eteo@redhat.com \
    --cc=ito.kazuo@oss.ntt.co.jp \
    --cc=jake@lwn.net \
    --cc=jblunck@suse.de \
    --cc=jejb@kernel.org \
    --cc=jmforbes@linuxtx.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mkrufky@linuxtv.org \
    --cc=rbranco@la.checkpoint.com \
    --cc=rdunlap@xenotime.net \
    --cc=reviews@ml.cw.f00f.org \
    --cc=stable@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=tytso@mit.edu \
    --cc=w@1wt.eu \
    --cc=zwane@arm.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).