linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [PATCH] f2fs: reduce lock overhead of extent node releasing
@ 2015-07-02 12:40 Chao Yu
  2015-07-04  7:03 ` Jaegeuk Kim
  0 siblings, 1 reply; 3+ messages in thread
From: Chao Yu @ 2015-07-02 12:40 UTC (permalink / raw)
  To: 'Jaegeuk Kim'; +Cc: linux-kernel, linux-f2fs-devel

>From e5c6600d01c4462c4e1ee0c70ec1d9319862077d Mon Sep 17 00:00:00 2001
From: Chao Yu <chao2.yu@samsung.com>
Date: Thu, 2 Jul 2015 18:52:46 +0800
Subject: [PATCH] f2fs: reduce lock overhead of extent node releasing

Open and close critical section for each extent node when traversing rb-tree
results in high overhead of cpu, slows thing down.

This patch alternates to batch mode for removing extent nodes under spin lock.

Signed-off-by: Chao Yu <chao2.yu@samsung.com>
---
 fs/f2fs/data.c | 28 ++++++++++++++++++++--------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 6a706dd..7fb56a0 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -441,19 +441,31 @@ static unsigned int __free_extent_tree(struct f2fs_sb_info *sbi,
 	struct extent_node *en;
 	unsigned int count = et->count;
 
-	node = rb_first(&et->root);
-	while (node) {
-		next = rb_next(node);
-		en = rb_entry(node, struct extent_node, rb_node);
+	if (!et->count)
+		return 0;
+
+	/* 1. remove all extent nodes in global lru list */
+	if (free_all) {
+		spin_lock(&sbi->extent_lock);
+		node = rb_first(&et->root);
+		while (node) {
+			next = rb_next(node);
+			en = rb_entry(node, struct extent_node, rb_node);
 
-		if (free_all) {
-			spin_lock(&sbi->extent_lock);
 			if (!list_empty(&en->list))
 				list_del_init(&en->list);
-			spin_unlock(&sbi->extent_lock);
+			node = next;
 		}
+		spin_unlock(&sbi->extent_lock);
+	}
+
+	/* 2. release all extent nodes which are not in global lru list */
+	node = rb_first(&et->root);
+	while (node) {
+		next = rb_next(node);
+		en = rb_entry(node, struct extent_node, rb_node);
 
-		if (free_all || list_empty(&en->list)) {
+		if (list_empty(&en->list)) {
 			__detach_extent_node(sbi, et, en);
 			kmem_cache_free(extent_node_slab, en);
 		}
-- 
2.4.2


------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-07-06 12:28 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-02 12:40 [PATCH] f2fs: reduce lock overhead of extent node releasing Chao Yu
2015-07-04  7:03 ` Jaegeuk Kim
2015-07-06 12:28   ` [f2fs-dev] " Chao Yu

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).