On Tue, 2005-01-11 at 12:30 -0600, Steven Pratt wrote:
> Also, is it maybe time to increase the default number of locks? We had
> similar problems on large systems in SLES9 testing and we still have to
> run SPECSFS with TxLocks set to 65k.
How's this look?
===== fs/jfs/jfs_txnmgr.c 1.64 vs edited =====
--- 1.64/fs/jfs/jfs_txnmgr.c 2004-11-01 07:59:47 -06:00
+++ edited/fs/jfs/jfs_txnmgr.c 2005-01-11 13:44:12 -06:00
@@ -93,15 +93,15 @@
} TxStat;
#endif
-static int nTxBlock = 512; /* number of transaction blocks */
+static int nTxBlock = -1; /* number of transaction blocks */
module_param(nTxBlock, int, 0);
MODULE_PARM_DESC(nTxBlock,
- "Number of transaction blocks (default:512, max:65536)");
+ "Number of transaction blocks (max:65536)");
-static int nTxLock = 4096; /* number of transaction locks */
+static int nTxLock = -1; /* number of transaction locks */
module_param(nTxLock, int, 0);
MODULE_PARM_DESC(nTxLock,
- "Number of transaction locks (default:4096, max:65536)");
+ "Number of transaction locks (max:65536)");
struct tblock *TxBlock; /* transaction block table */
static int TxLockLWM; /* Low water mark for number of txLocks used */
@@ -249,6 +249,25 @@
int txInit(void)
{
int k, size;
+ struct sysinfo si;
+
+ /* Set defaults for nTxLock and nTxBlock if unset */
+
+ if (nTxLock == -1) {
+ if (nTxBlock == -1) {
+ /* Base default on memory size */
+ si_meminfo(&si);
+ if (si.totalram > (256 * 1024)) /* 1 GB */
+ nTxLock = 64 * 1024;
+ else
+ nTxLock = si.totalram >> 2;
+ } else if (nTxBlock > (8 * 1024))
+ nTxLock = 64 * 1024;
+ else
+ nTxLock = nTxBlock << 3;
+ }
+ if (nTxBlock == -1)
+ nTxBlock = nTxLock >> 3;
/* Verify tunable parameters */
if (nTxBlock < 16)
@@ -259,6 +278,9 @@
nTxLock = 256; /* No one should set it this low */
if (nTxLock > 65536)
nTxLock = 65536;
+
+ printk(KERN_INFO "JFS: nTxBlock = %d, nTxLock = %d\n",
+ nTxBlock, nTxLock);
/*
* initialize transaction block (tblock) table
*
@@ -266,8 +288,8 @@
* tid = 0 is reserved.
*/
TxLockLWM = (nTxLock * 4) / 10;
- TxLockHWM = (nTxLock * 8) / 10;
- TxLockVHWM = (nTxLock * 9) / 10;
+ TxLockHWM = (nTxLock * 7) / 10;
+ TxLockVHWM = (nTxLock * 8) / 10;
size = sizeof(struct tblock) * nTxBlock;
TxBlock = (struct tblock *) vmalloc(size);
_______________________________________________
Jfs-discussion mailing list
[email protected]
http://www-124.ibm.com/developerworks/oss/mailman/listinfo/jfs-discussion