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