[pve-devel] r5235 - pve-kernel-2.6.35/trunk
svn-commits at proxmox.com
svn-commits at proxmox.com
Thu Oct 7 15:19:37 CEST 2010
Author: dietmar
Date: 2010-10-07 13:19:37 +0000 (Thu, 07 Oct 2010)
New Revision: 5235
Added:
pve-kernel-2.6.35/trunk/fsync-perf-fix.patch
Modified:
pve-kernel-2.6.35/trunk/Makefile
pve-kernel-2.6.35/trunk/changelog.Debian
Log:
Modified: pve-kernel-2.6.35/trunk/Makefile
===================================================================
--- pve-kernel-2.6.35/trunk/Makefile 2010-10-07 09:05:30 UTC (rev 5234)
+++ pve-kernel-2.6.35/trunk/Makefile 2010-10-07 13:19:37 UTC (rev 5235)
@@ -1,7 +1,7 @@
RELEASE=1.6
KERNEL_VER=2.6.35
-PKGREL=2
+PKGREL=3
KREL=1
@@ -82,6 +82,8 @@
tar xf scst-modules.tar -C tmp/lib/modules/${KVNAME}/extra/scst
# remove firmware
rm -rf tmp/lib/firmware
+ # strip debug info
+ find tmp/lib/modules -name \*.ko -print | while read f ; do strip --strip-debug "$$f"; done
# finalize
depmod -b tmp/ ${KVNAME}
mv tmp data
@@ -106,6 +108,7 @@
cd ${KERNEL_SRC}; patch -p1 <../bridge-patch.diff
cd ${KERNEL_SRC}; patch -p1 <../scst-src/scst/kernel/scst_exec_req_fifo-2.6.35.patch
cd ${KERNEL_SRC}; patch -p1 <../scst-src/iscsi-scst/kernel/patches/put_page_callback-2.6.35.patch
+ cd ${KERNEL_SRC}; patch -p1 <../fsync-perf-fix.patch
sed -i ${KERNEL_SRC}/Makefile -e 's/^EXTRAVERSION.*$$/EXTRAVERSION=${EXTRAVERSION}/'
touch $@
Modified: pve-kernel-2.6.35/trunk/changelog.Debian
===================================================================
--- pve-kernel-2.6.35/trunk/changelog.Debian 2010-10-07 09:05:30 UTC (rev 5234)
+++ pve-kernel-2.6.35/trunk/changelog.Debian 2010-10-07 13:19:37 UTC (rev 5235)
@@ -1,3 +1,11 @@
+pve-kernel-2.6.35 (2.6.35-3) unstable; urgency=low
+
+ * fix fsync performance: fsync-perf-fix.patch
+
+ * strip debug symbols
+
+ -- Proxmox Support Team <support at proxmox.com> Thu, 07 Oct 2010 15:18:13 +0200
+
pve-kernel-2.6.35 (2.6.35-2) unstable; urgency=low
* disable HPSA driver
Added: pve-kernel-2.6.35/trunk/fsync-perf-fix.patch
===================================================================
--- pve-kernel-2.6.35/trunk/fsync-perf-fix.patch (rev 0)
+++ pve-kernel-2.6.35/trunk/fsync-perf-fix.patch 2010-10-07 13:19:37 UTC (rev 5235)
@@ -0,0 +1,106 @@
+From: Corrado Zoccolo <czoccolo at gmail.com>
+Date: Mon, 20 Sep 2010 13:24:50 +0000 (+0200)
+Subject: cfq: improve fsync performance for small files
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Faxboe%2Flinux-2.6-block.git;a=commitdiff_plain;h=749ef9f8423054e326f3a246327ed2db4b6d395f
+
+cfq: improve fsync performance for small files
+
+Fsync performance for small files achieved by cfq on high-end disks is
+lower than what deadline can achieve, due to idling introduced between
+the sync write happening in process context and the journal commit.
+
+Moreover, when competing with a sequential reader, a process writing
+small files and fsync-ing them is starved.
+
+This patch fixes the two problems by:
+- marking journal commits as WRITE_SYNC, so that they get the REQ_NOIDLE
+ flag set,
+- force all queues that have REQ_NOIDLE requests to be put in the noidle
+ tree.
+
+Having the queue associated to the fsync-ing process and the one associated
+ to journal commits in the noidle tree allows:
+- switching between them without idling,
+- fairness vs. competing idling queues, since they will be serviced only
+ after the noidle tree expires its slice.
+
+Acked-by: Vivek Goyal <vgoyal at redhat.com>
+Reviewed-by: Jeff Moyer <jmoyer at redhat.com>
+Tested-by: Jeff Moyer <jmoyer at redhat.com>
+Signed-off-by: Corrado Zoccolo <czoccolo at gmail.com>
+Signed-off-by: Jens Axboe <jaxboe at fusionio.com>
+---
+
+diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
+index b9f8619..6845926 100644
+--- a/block/cfq-iosched.c
++++ b/block/cfq-iosched.c
+@@ -216,7 +216,6 @@ struct cfq_data {
+ enum wl_type_t serving_type;
+ unsigned long workload_expires;
+ struct cfq_group *serving_group;
+- bool noidle_tree_requires_idle;
+
+ /*
+ * Each priority tree is sorted by next_request position. These
+@@ -2126,7 +2125,6 @@ static void choose_service_tree(struct cfq_data *cfqd, struct cfq_group *cfqg)
+ slice = max_t(unsigned, slice, CFQ_MIN_TT);
+ cfq_log(cfqd, "workload slice:%d", slice);
+ cfqd->workload_expires = jiffies + slice;
+- cfqd->noidle_tree_requires_idle = false;
+ }
+
+ static struct cfq_group *cfq_get_next_cfqg(struct cfq_data *cfqd)
+@@ -3108,7 +3106,9 @@ cfq_update_idle_window(struct cfq_data *cfqd, struct cfq_queue *cfqq,
+ if (cfqq->queued[0] + cfqq->queued[1] >= 4)
+ cfq_mark_cfqq_deep(cfqq);
+
+- if (!atomic_read(&cic->ioc->nr_tasks) || !cfqd->cfq_slice_idle ||
++ if (cfqq->next_rq && (cfqq->next_rq->cmd_flags & REQ_NOIDLE))
++ enable_idle = 0;
++ else if (!atomic_read(&cic->ioc->nr_tasks) || !cfqd->cfq_slice_idle ||
+ (!cfq_cfqq_deep(cfqq) && CFQQ_SEEKY(cfqq)))
+ enable_idle = 0;
+ else if (sample_valid(cic->ttime_samples)) {
+@@ -3333,14 +3333,7 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq)
+ else if (sync && cfqq_empty &&
+ !cfq_close_cooperator(cfqd, cfqq)) {
+ cfqd->noidle_tree_requires_idle |= !rq_noidle(rq);
+- /*
+- * Idling is enabled for SYNC_WORKLOAD.
+- * SYNC_NOIDLE_WORKLOAD idles at the end of the tree
+- * only if we processed at least one !rq_noidle request
+- */
+- if (cfqd->serving_type == SYNC_WORKLOAD
+- || cfqd->noidle_tree_requires_idle
+- || cfqq->cfqg->nr_cfqq == 1)
++ if (cfqd->noidle_tree_requires_idle)
+ cfq_arm_slice_timer(cfqd);
+ }
+ }
+diff --git a/fs/jbd/commit.c b/fs/jbd/commit.c
+index 95d8c11..3f030e9 100644
+--- a/fs/jbd/commit.c
++++ b/fs/jbd/commit.c
+@@ -318,7 +318,7 @@ void journal_commit_transaction(journal_t *journal)
+ int first_tag = 0;
+ int tag_flag;
+ int i;
+- int write_op = WRITE;
++ int write_op = WRITE_SYNC;
+
+ /*
+ * First job: lock down the current transaction and wait for
+diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
+index 7c068c1..80910f5 100644
+--- a/fs/jbd2/commit.c
++++ b/fs/jbd2/commit.c
+@@ -360,7 +360,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
+ int tag_bytes = journal_tag_bytes(journal);
+ struct buffer_head *cbh = NULL; /* For transactional checksums */
+ __u32 crc32_sum = ~0;
+- int write_op = WRITE;
++ int write_op = WRITE_SYNC;
+
+ /*
+ * First job: lock down the current transaction and wait for
More information about the pve-devel
mailing list