[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Cluster-devel] cluster/gfs gfs_mkfs/fs_geometry.c gfs_mkfs/ma ...



CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	rpeterso sourceware org	2006-11-29 17:25:45

Modified files:
	gfs/gfs_mkfs   : fs_geometry.c main.c mkfs_gfs.h 
	gfs/man        : gfs_mkfs.8 

Log message:
	Resolves: bz213763: mkdir takes more time on larger file systems.
	Made gfs_mkfs use RG sizes based on size of file system to maximize
	performance.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/gfs_mkfs/fs_geometry.c.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/gfs_mkfs/main.c.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/gfs_mkfs/mkfs_gfs.h.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/man/gfs_mkfs.8.diff?cvsroot=cluster&r1=1.3&r2=1.4

--- cluster/gfs/gfs_mkfs/fs_geometry.c	2006/08/21 19:11:22	1.3
+++ cluster/gfs/gfs_mkfs/fs_geometry.c	2006/11/29 17:25:44	1.4
@@ -42,13 +42,23 @@
 	uint64 nrgrp;
 	unsigned int min = (comline->expert) ? 1 : 4;
 
-	nrgrp = DIV_RU(sdev->length, (comline->rgsize << 20) / comline->bsize);
+	while (TRUE) {
+		nrgrp = DIV_RU(sdev->length, (comline->rgsize << 20) / comline->bsize);
 
-	if (nrgrp < min)
-		nrgrp = min;
+		if (nrgrp < min)
+			nrgrp = min;
+
+		if (comline->rgsize_specified || /* If user specified an rg size or */
+			nrgrp <= MKFS_EXCESSIVE_RGS || /* not an excessive # of rgs or  */
+			comline->rgsize >= 2048)     /* we've reached the max rg size */
+			break;
+
+		comline->rgsize += MKFS_DEFAULT_RGSIZE; /* Try again w/bigger rgs */
+	}
 
 	if (comline->debug)
-		printf("  nrgrp = %"PRIu64"\n", nrgrp);
+		printf("  rg sz = %"PRIu32"\n  nrgrp = %"PRIu64"\n", comline->rgsize,
+			   nrgrp);
 
 	return nrgrp;
 }
@@ -118,9 +128,9 @@
 
 		for (tmp = rlist->next; tmp != rlist; tmp = tmp->next) {
 			rl = osi_list_entry(tmp, rgrp_list_t, list);
-			printf("subdevice %u:  rg_o = %"PRIu64", rg_l = %"PRIu64"\n",
-				   rl->subdevice,
-				   rl->rg_offset, rl->rg_length);
+			printf("subdevice %u:  rg_o = %"PRIu64", rg_l = %"PRIu64" blocks (%"PRIu64"MB)\n",
+				   rl->subdevice, rl->rg_offset, rl->rg_length, 
+				   rl->rg_length * comline->bsize / (1024 * 1024));
 		}
 	}
 }
--- cluster/gfs/gfs_mkfs/main.c	2006/08/21 19:11:22	1.5
+++ cluster/gfs/gfs_mkfs/main.c	2006/11/29 17:25:44	1.6
@@ -82,7 +82,6 @@
   int cont = TRUE;
   int optchar;
 
-
   while (cont)
   {
     optchar = getopt(argc, argv, OPTION_STRING);
@@ -133,6 +132,7 @@
 
 
     case 'r':
+      comline->rgsize_specified = TRUE;
       comline->rgsize = atoi(optarg);
       break;
 
@@ -303,6 +303,7 @@
 	comline.seg_size = MKFS_DEFAULT_SEG_SIZE;
 	comline.jsize = MKFS_DEFAULT_JSIZE;
 	comline.rgsize = MKFS_DEFAULT_RGSIZE;
+	comline.rgsize_specified = FALSE;
 
 	decode_arguments(argc, argv, &comline);
 
--- cluster/gfs/gfs_mkfs/mkfs_gfs.h	2006/07/10 23:39:35	1.4
+++ cluster/gfs/gfs_mkfs/mkfs_gfs.h	2006/11/29 17:25:44	1.5
@@ -102,6 +102,7 @@
   uint32 journals;          /*  Number of journals  */
   uint32 jsize;             /*  Size of journals  */
   uint32 rgsize;            /*  The Resource Group size  */
+  int rgsize_specified;     /*  Did the user specify a rg size? */
 
   int debug;                /*  Print out debugging information?  */
   int quiet;                /*  No messages  */
@@ -156,7 +157,7 @@
 #define MKFS_DEFAULT_SEG_SIZE       (16)
 #define MKFS_DEFAULT_JSIZE          (128)
 #define MKFS_DEFAULT_RGSIZE         (256)
-
+#define MKFS_EXCESSIVE_RGS          (10000)
 
 /*  device_geometry.c  */
 
--- cluster/gfs/man/gfs_mkfs.8	2005/04/20 05:26:37	1.3
+++ cluster/gfs/man/gfs_mkfs.8	2006/11/29 17:25:44	1.4
@@ -52,8 +52,12 @@
 Be quiet.  Don't print anything.
 .TP
 \fB-r\fP \fIMegaBytes\fR
-gfs_mkfs will try to make Resource Groups about this big.
-The default is 256 MB.
+gfs_mkfs will try to make Resource Groups (RGs) about this big.
+Minimum RG size is 32 MB.  Maximum RG size is 2048 MB.
+A large RG size may increase performance on very large file systems.
+If not specified, gfs_mkfs will choose the RG size based on the size
+of the file system: average size file systems will have 256 MB RGs, and
+bigger file systems will have bigger RGs for better performance.
 .TP
 \fB-s\fP \fIBlocks\fR 
 Journal segment size in filesystem blocks.  This value must be at


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]