[stgt] tgtd memory usage

FUJITA Tomonori fujita.tomonori at lab.ntt.co.jp
Fri Apr 1 03:04:47 CEST 2011


On Wed, 30 Mar 2011 22:12:23 +0400
Степан Фёдоров <stepan.fedorov at clodo.ru> wrote:

> Thanks all for attension, but question remains open: what can we do,
> to serve 1500-3000 LUNs from one node with no more then 24Gb of
> memory?

I'm away from the lab so I can work on this now but I'll.

Maybe the following patch works for you.


diff --git a/usr/bs_rdwr.c b/usr/bs_rdwr.c
index 77d52e3..9abec59 100644
--- a/usr/bs_rdwr.c
+++ b/usr/bs_rdwr.c
@@ -148,18 +148,23 @@ static void bs_rdwr_close(struct scsi_lu *lu)
 	close(lu->fd);
 }
 
+static struct bs_thread_info rdwr_bst_info;
+
 static int bs_rdwr_init(struct scsi_lu *lu)
 {
-	struct bs_thread_info *info = BS_THREAD_I(lu);
+	static int init;
+
+	if (!init) {
+		bs_thread_open(&rdwr_bst_info,
+			       bs_rdwr_request, NR_WORKER_THREADS);
+		init = 1;
+	}
 
-	return bs_thread_open(info, bs_rdwr_request, NR_WORKER_THREADS);
+	return 0;
 }
 
 static void bs_rdwr_exit(struct scsi_lu *lu)
 {
-	struct bs_thread_info *info = BS_THREAD_I(lu);
-
-	bs_thread_close(info);
 }
 
 static int bs_rdwr_cmd_done(struct scsi_cmd *cmd)
@@ -177,6 +182,7 @@ static struct backingstore_template rdwr_bst = {
 	.bs_cmd_submit		= bs_thread_cmd_submit,
 	.bs_cmd_done		= bs_rdwr_cmd_done,
 	.bs_oflags_supported    = O_SYNC | O_DIRECT,
+	.bs_private		= (char *)&rdwr_bst_info,
 };
 
 __attribute__((constructor)) static void bs_rdwr_constructor(void)
diff --git a/usr/bs_thread.h b/usr/bs_thread.h
index d460032..c47690e 100644
--- a/usr/bs_thread.h
+++ b/usr/bs_thread.h
@@ -1,4 +1,4 @@
-#define NR_WORKER_THREADS	4
+#define NR_WORKER_THREADS	16
 
 typedef void (request_func_t) (struct scsi_cmd *);
 
@@ -21,7 +21,7 @@ struct bs_thread_info {
 
 static inline struct bs_thread_info *BS_THREAD_I(struct scsi_lu *lu)
 {
-	return (struct bs_thread_info *) ((char *)lu + sizeof(*lu));
+	return (struct bs_thread_info *)lu->bst->bs_private;
 }
 
 extern int bs_thread_open(struct bs_thread_info *info, request_func_t *rfn,
diff --git a/usr/tgtd.h b/usr/tgtd.h
index 37943d2..ea2414f 100644
--- a/usr/tgtd.h
+++ b/usr/tgtd.h
@@ -126,6 +126,7 @@ struct backingstore_template {
 	int (*bs_cmd_submit)(struct scsi_cmd *cmd);
 	int (*bs_cmd_done)(struct scsi_cmd *cmd);
 	int bs_oflags_supported;
+	char *bs_private;
 
 	struct list_head backingstore_siblings;
 };
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the stgt mailing list