To simulate TLR, using a Nack based protocol, I have to eliminate the timing effect of the log, abort transactions when cache overflows and make a FIFO order according to the time-stamp.
TLR is similar to SLR when it comes to aborting. It can abort anytime, but I have to make it rollback on load/store instruction, just like SLE. This approach has to deal with those multi-legged read/write operations.
I decided to go with the Nack based protocol because the following case needs extra message in TLR.
Consider
P0 > P1 > P2 in terms of priority.
P0 owns cache line A, P1 owns cache line B, P2 owns nothing.
P2 now sends a GetX request of cache line B to P1. P1 ignores P2's request until P1 finishes it transaction, but P2 now is the assumed owner of cache line B. P1 sends a GetX request of cache line A to P0. P0 ignores it. Now P0 sends a GetX request of cache line B to P2, but since P2 doesn't have the data, P2 cannot service the request even P0 has a higher priority. And we have a dead lock.
To aviod that, we need to have a marker message to force P1 to give up its ownership of cache line B. But I don't really know how I could do that. So, I decide to go with a Nack based protocol, which could avoid the dead lock all together.
Monday, August 07, 2006
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment