On Tue, 2005-01-11 at 08:20 -0600, Dave Kleikamp wrote:
> I also noticed that several of the static functions called by diAlloc do
> show up in this latest stack trace, so I believe I was mistaken about
> the cause of the earlier deadlock.  I now think that the thread in
> diAlloc was trying to grab the AG_LOCK, and never made it down into
> diNewIAG.  I'm afraid there may still be two different problems that
> still need to be figured out.

No, I think it's the same problem.  I only saw a subset of the blocked
threads in the earlier case, and I believe there probably was a thread
blocked in diNewIAG.

This patch simply blocks new transactions earlier when the tlocks are
starting to get scarce.

When I implemented the multiple commit threads, I split TxLockVHWM out
of TxLockHWM, which was 80% of nTxLock.  So this patch puts TxLockVHWM
back to the old value of TxLockHWM.  Maybe I was a little too bold
waiting until 90% of the tlocks were in use before blocking new
transactions.  (jfsSync thread is awakened when TxLockHWM is hit, and
transactions are actually blocked when TxLockVHWM is hit.)

===== 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 09:42:49 -06:00
@@ -266,8 +266,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

Reply via email to