[DRBD-cvs] svn commit by phil - r2216 - in branches/drbd-0.7: documentation drbd drbd/linux scripts user - Added a new run time configuration parameter (bdev-tres

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Fri May 26 15:20:52 CEST 2006


Author: phil
Date: 2006-05-26 15:20:48 +0200 (Fri, 26 May 2006)
New Revision: 2216

Modified:
   branches/drbd-0.7/documentation/drbdsetup.sgml
   branches/drbd-0.7/drbd/drbd_receiver.c
   branches/drbd-0.7/drbd/drbd_sizeof_sanity_check.c
   branches/drbd-0.7/drbd/linux/drbd.h
   branches/drbd-0.7/drbd/linux/drbd_config.h
   branches/drbd-0.7/scripts/drbd.conf
   branches/drbd-0.7/user/drbd_limits.h
   branches/drbd-0.7/user/drbdadm_adjust.c
   branches/drbd-0.7/user/drbdadm_parser.y
   branches/drbd-0.7/user/drbdadm_scanner.fl
   branches/drbd-0.7/user/drbdsetup.c
Log:
Added a new run time configuration parameter (bdev-treshold) to 
be able to tune for special controllers. In this case HP's cciss.


Modified: branches/drbd-0.7/documentation/drbdsetup.sgml
===================================================================
--- branches/drbd-0.7/documentation/drbdsetup.sgml	2006-05-24 19:04:01 UTC (rev 2215)
+++ branches/drbd-0.7/documentation/drbdsetup.sgml	2006-05-26 13:20:48 UTC (rev 2216)
@@ -313,6 +313,21 @@
 	  </listitem>
 	</varlistentry>
 	<varlistentry>
+	  <term><option>-l</option>,
+	  <option>--bdev-treshold <replaceable>val</replaceable></option></term>
+	  <listitem>
+	    <para>
+	      When the number of pending write requests on the standby
+	      (secondary) nodes goes over bdev-treshold we trigger
+	      the request processing of out backing storage device.
+	      Some storage controllers deliver better performance with small
+	      values, other delivers beste performance when it is set to
+	      the same value as max-buffers. Minimum 16, default 128, maximum
+	      131072.
+	    </para>
+	  </listitem>
+	</varlistentry>
+	<varlistentry>
 	  <term><option>-d</option>,
 	  <option>--on-disconnect <replaceable>discon_handler</replaceable></option></term>
 	  <listitem>

Modified: branches/drbd-0.7/drbd/drbd_receiver.c
===================================================================
--- branches/drbd-0.7/drbd/drbd_receiver.c	2006-05-24 19:04:01 UTC (rev 2215)
+++ branches/drbd-0.7/drbd/drbd_receiver.c	2006-05-26 13:20:48 UTC (rev 2216)
@@ -301,7 +301,8 @@
 
 	MUST_HOLD(&mdev->ee_lock);
 
-	if(mdev->ee_vacant == EE_MININUM / 2) {
+	if(mdev->ee_vacant == EE_MININUM / 2 && 
+	   (mdev->conf.bdev_treshold != mdev->conf.max_buffers) ) {
 		spin_unlock_irq(&mdev->ee_lock);
 		drbd_kick_lo(mdev);
 		spin_lock_irq(&mdev->ee_lock);
@@ -903,11 +904,8 @@
 	/* kick lower level device, if we have more than (arbitrary number)
 	 * reference counts on it, which typically are locally submitted io
 	 * requests.  don't use unacked_cnt, so we speed up proto A and B, too.
-	 *
-	 * XXX maybe: make that arbitrary number configurable.
-	 * for now, I choose 1/16 of max-epoch-size.
 	 */
-	if (atomic_read(&mdev->local_cnt) >= (mdev->conf.max_epoch_size>>4) ) {
+	if (atomic_read(&mdev->local_cnt) >= mdev->conf.bdev_treshold ) {
 		drbd_kick_lo(mdev);
 	}
 	mdev->writ_cnt+=data_size>>9;

Modified: branches/drbd-0.7/drbd/drbd_sizeof_sanity_check.c
===================================================================
--- branches/drbd-0.7/drbd/drbd_sizeof_sanity_check.c	2006-05-24 19:04:01 UTC (rev 2215)
+++ branches/drbd-0.7/drbd/drbd_sizeof_sanity_check.c	2006-05-26 13:20:48 UTC (rev 2216)
@@ -12,13 +12,13 @@
 {
 	int err = 0, s = 0;
 	SZO(struct disk_config,		 24)
-	SZO(struct net_config,		304)
+	SZO(struct net_config,		308)
 	SZO(struct syncer_config,	 24)
 	SZO(struct ioctl_disk_config,	 32)
-	SZO(struct ioctl_net_config,	312)
+	SZO(struct ioctl_net_config,	316)
 	SZO(struct ioctl_syncer_config,	 32)
 	SZO(struct ioctl_wait,		 16)
-	SZO(struct ioctl_get_config,	440)
+	SZO(struct ioctl_get_config,	444)
 	if (err) printk("<3>ioctls won't work, aborting\n");
 	return err;
 }

Modified: branches/drbd-0.7/drbd/linux/drbd.h
===================================================================
--- branches/drbd-0.7/drbd/linux/drbd.h	2006-05-24 19:04:01 UTC (rev 2215)
+++ branches/drbd-0.7/drbd/linux/drbd.h	2006-05-26 13:20:48 UTC (rev 2216)
@@ -93,6 +93,7 @@
 	IN int      ping_int;         /* seconds */
 	IN int      max_epoch_size;
 	IN int      max_buffers;
+	IN int      bdev_treshold;
 	IN int      sndbuf_size;  /* socket send buffer size */
 	IN unsigned int ko_count;
 	IN enum disconnect_handler on_disconnect;

Modified: branches/drbd-0.7/drbd/linux/drbd_config.h
===================================================================
--- branches/drbd-0.7/drbd/linux/drbd_config.h	2006-05-24 19:04:01 UTC (rev 2215)
+++ branches/drbd-0.7/drbd/linux/drbd_config.h	2006-05-26 13:20:48 UTC (rev 2216)
@@ -23,7 +23,7 @@
 extern const char * drbd_buildtag(void);
 
 #define REL_VERSION "0.7.19"
-#define API_VERSION 78
+#define API_VERSION 79
 #define PRO_VERSION 74
 
 //#define DBG_ALL_SYMBOLS // no static functs, improves quality of OOPS traces

Modified: branches/drbd-0.7/scripts/drbd.conf
===================================================================
--- branches/drbd-0.7/scripts/drbd.conf	2006-05-24 19:04:01 UTC (rev 2215)
+++ branches/drbd-0.7/scripts/drbd.conf	2006-05-26 13:20:48 UTC (rev 2216)
@@ -172,6 +172,18 @@
     #
     # max-buffers     2048;
 
+    # When the number of outstanding requests on a standby (secondary)
+    # node goes over bdev-reshold we start to kick the backing device
+    # to start its request processing. This is an advanced tuning
+    # parameter to get more performance out of capable storage controlers.
+    # Some controlers likes to be kicked often, other controlers 
+    # deliver better performance when the are kicked less frequently.
+    # Set it to the value of max-buffers to get the least possible
+    # number of run_task_queue_disk() calls.
+    #
+    # bdev-treshold   128;
+
+
     # The highest number of data blocks between two write barriers. 
     # If you set this < 10 you might decrease your performance.
     # max-epoch-size  2048;

Modified: branches/drbd-0.7/user/drbd_limits.h
===================================================================
--- branches/drbd-0.7/user/drbd_limits.h	2006-05-24 19:04:01 UTC (rev 2215)
+++ branches/drbd-0.7/user/drbd_limits.h	2006-05-26 13:20:48 UTC (rev 2216)
@@ -52,6 +52,9 @@
   /* @4k PageSize -> 128kB - 512MB */
   RANGE(MAX_BUFFERS, 32, 131072);
 
+  /* @4k PageSize -> 64kB - 512MB */
+  RANGE(BDEV_TRESHOLD, 16, 131072);
+
   /* 0 is disabled.
    * 200 should be more than enough even for very short timeouts */
   RANGE(KO_COUNT,0, 200);

Modified: branches/drbd-0.7/user/drbdadm_adjust.c
===================================================================
--- branches/drbd-0.7/user/drbdadm_adjust.c	2006-05-24 19:04:01 UTC (rev 2215)
+++ branches/drbd-0.7/user/drbdadm_adjust.c	2006-05-26 13:20:48 UTC (rev 2216)
@@ -337,6 +337,7 @@
     do_connect |= check_opt_d(in,"ping-int",1,"sec",res->net_options);
     do_connect |= check_opt_d(in,"max-epoch-size",1,"",res->net_options);
     do_connect |= check_opt_d(in,"max-buffers",1,"",res->net_options);
+    do_connect |= check_opt_d(in,"bdev-treshold",1,"",res->net_options);
     do_connect |= check_opt_d(in,"sndbuf-size",1,"",res->net_options);
     do_connect |= check_opt_d(in,"ko-count",1,"",res->net_options);
     do_connect |= check_opt_s(in,"on-disconnect",res->net_options);

Modified: branches/drbd-0.7/user/drbdadm_parser.y
===================================================================
--- branches/drbd-0.7/user/drbdadm_parser.y	2006-05-24 19:04:01 UTC (rev 2215)
+++ branches/drbd-0.7/user/drbdadm_parser.y	2006-05-26 13:20:48 UTC (rev 2216)
@@ -144,6 +144,7 @@
   R_CONNECT_INT,
   R_PING_INT,
   R_MAX_BUFFERS,
+  R_BDEV_TRESHOLD,
   R_MAX_EPOCH_SIZE,
   R_SNDBUF_SIZE,
   R_KO_COUNT,
@@ -192,6 +193,10 @@
       m_strtoll_range(value, 1, name, DRBD_MAX_BUFFERS_MIN,
 		      DRBD_MAX_BUFFERS_MAX);
       break;
+    case R_BDEV_TRESHOLD:
+      m_strtoll_range(value, 1, name, DRBD_BDEV_TRESHOLD_MIN,
+		      DRBD_BDEV_TRESHOLD_MAX);
+      break;
     case R_MAX_EPOCH_SIZE:
       m_strtoll_range(value, 1, name, DRBD_MAX_EPOCH_SIZE_MIN,
 		      DRBD_MAX_EPOCH_SIZE_MAX);
@@ -328,7 +333,7 @@
 %token <txt> TK_MINOR_COUNT TK_INTEGER TK_STRING
 %token <txt> TK_ON_IO_ERROR TK_SIZE
 %token <txt> TK_TIMEOUT TK_CONNECT_INT TK_PING_INT TK_MAX_BUFFERS TK_IPADDR
-%token <txt> TK_MAX_EPOCH_SIZE TK_SNDBUF_SIZE
+%token <txt> TK_BDEV_TRESHOLD TK_MAX_EPOCH_SIZE TK_SNDBUF_SIZE
 %token <txt> TK_SKIP_SYNC TK_USE_CSUMS TK_RATE TK_SYNC_GROUP TK_AL_EXTENTS
 %token <txt> TK_WFC_TIMEOUT TK_DEGR_WFC_TIMEOUT
 %token <txt> TK_KO_COUNT TK_ON_DISCONNECT TK_DIALOG_REFRESH
@@ -452,6 +457,8 @@
 		{ range_check(R_PING_INT,$1,$2);	$$=new_opt($1,$2); }
 		| TK_MAX_BUFFERS    TK_INTEGER
 		{ range_check(R_MAX_BUFFERS,$1,$2);	$$=new_opt($1,$2); }
+		| TK_BDEV_TRESHOLD    TK_INTEGER
+		{ range_check(R_BDEV_TRESHOLD,$1,$2);	$$=new_opt($1,$2); }
 		| TK_MAX_EPOCH_SIZE TK_INTEGER
 		{ range_check(R_MAX_EPOCH_SIZE,$1,$2);	$$=new_opt($1,$2); }
 		| TK_SNDBUF_SIZE    TK_INTEGER

Modified: branches/drbd-0.7/user/drbdadm_scanner.fl
===================================================================
--- branches/drbd-0.7/user/drbdadm_scanner.fl	2006-05-24 19:04:01 UTC (rev 2215)
+++ branches/drbd-0.7/user/drbdadm_scanner.fl	2006-05-26 13:20:48 UTC (rev 2216)
@@ -258,10 +258,11 @@
   ping-int		do_assign(NUM);   CP; return TK_PING_INT;
   connect-int		do_assign(NUM);   CP; return TK_CONNECT_INT;
   max-buffers		do_assign(NUM);   CP; return TK_MAX_BUFFERS;
+  bdev-treshold		do_assign(NUM);   CP; return TK_BDEV_TRESHOLD;
   max-epoch-size	do_assign(NUM);   CP; return TK_MAX_EPOCH_SIZE;
   ko-count		do_assign(NUM);   CP; return TK_KO_COUNT;
   on-disconnect 	do_assign(ON_DISCONNECT); CP; return TK_ON_DISCONNECT;
-  {NDELIM}		expect_error("one of 'sndbuf-size|timeout|ping-int|connect-int|max-buffers|max-epoch-size|ko-count|on-disconnect'");
+  {NDELIM}		expect_error("one of 'sndbuf-size|timeout|ping-int|connect-int|max-buffers|bdev-treshold|max-epoch-size|ko-count|on-disconnect'");
 }
 
 <SYNCER>{

Modified: branches/drbd-0.7/user/drbdsetup.c
===================================================================
--- branches/drbd-0.7/user/drbdsetup.c	2006-05-24 19:04:01 UTC (rev 2215)
+++ branches/drbd-0.7/user/drbdsetup.c	2006-05-26 13:20:48 UTC (rev 2216)
@@ -70,6 +70,7 @@
 #define DEF_ON_IO_ERROR         PassOn
 #define DEF_KO_COUNT                 0
 #define DEF_ON_DISCONNECT       Reconnect
+#define DEF_BDEV_TRESHOLD       (DEF_MAX_BUFFERS/16)
 
 #if 0
 # define ioctl(X...) (fprintf(stderr,"ioctl(%s)\n",#X),0);
@@ -157,6 +158,7 @@
      { "timeout",    required_argument, 0, 't' },
      { "max-epoch-size", required_argument, 0, 'e' },
      { "max-buffers",required_argument, 0, 'b' },
+     { "bdev-treshold",required_argument, 0, 'l' },
      { "connect-int",required_argument, 0, 'c' },
      { "ping-int",   required_argument, 0, 'i' },
      { "sndbuf-size",required_argument, 0, 'S' },
@@ -562,6 +564,7 @@
   cn->config.sndbuf_size = DEF_SNDBUF_SIZE ;
   cn->config.on_disconnect = DEF_ON_DISCONNECT;
   cn->config.ko_count = DEF_KO_COUNT;
+  cn->config.bdev_treshold = DEF_BDEV_TRESHOLD;
 
   if(argc==0) return 0;
 
@@ -588,6 +591,10 @@
 	  cn->config.max_buffers = m_strtoll_range(optarg,1, "max-buffers",
 			  DRBD_MAX_BUFFERS_MIN, DRBD_MAX_BUFFERS_MAX);
 	  break;
+	case 'l':
+	  cn->config.bdev_treshold = m_strtoll_range(optarg,1, "bdev-treshold",
+			  DRBD_BDEV_TRESHOLD_MIN, DRBD_BDEV_TRESHOLD_MAX);
+	  break;
 	case 'c':
 	  cn->config.try_connect_int = m_strtoll_range(optarg,1, "connect-int",
 			  DRBD_CONNECT_INT_MIN, DRBD_CONNECT_INT_MAX);
@@ -1345,6 +1352,7 @@
   SHOW_I("ping-int","sec", cn.nconf.ping_int, DEF_NET_PING_I);
   SHOW_I("max-epoch-size","", cn.nconf.max_epoch_size, DEF_MAX_EPOCH_SIZE);
   SHOW_I("max-buffers","", cn.nconf.max_buffers, DEF_MAX_BUFFERS);
+  SHOW_I("bdev-threshold","", cn.nconf.bdev_treshold, DEF_BDEV_TRESHOLD);
   SHOW_I("sndbuf-size","", cn.nconf.sndbuf_size, DEF_SNDBUF_SIZE);
   SHOW_I("ko-count","", cn.nconf.ko_count, DEF_KO_COUNT);
   if( cn.nconf.on_disconnect != DEF_ON_DISCONNECT) {



More information about the drbd-cvs mailing list