[Gems-users] Non-stallable requests and transactional protocols


Date: Fri, 23 Feb 2007 12:25:20 +0100
From: Enrique Vallejo Gutierrez <enrique@xxxxxxxxxxxxx>
Subject: [Gems-users] Non-stallable requests and transactional protocols

Dear List,

 

      I have been making some changes to Ruby on the LogTM protocols, and I have found a problem that might also affect the original protocol in some corner cases. When a non-stallable memory operation is executed (such as a casxa, swap or ldda instruction), the mem_trans->s.may_stall bit is set to 0 by Simics. This means that the timing model (Ruby) is not allowed to model the timing of the request, it is directly executed. This case is considered in SimicsDriver::isUnhandledTransaction().

 

      This is not a serious problem in ordinary protocols, as the global image view of the memory makes the operation coherent (given that cache data is not modelled). However, in transactional protocols, this becomes quite a serious concern, as the possible collisions or the log entries that would be generated by the access are not considered. This would mean, for example, that an aborting transaction would not restore the original value of the line modified by the casxa instruction. I know this is a corner case, but it migh affect, for example, to code that acquires and releases locks in the middle of a transaction.

 

      This is clearly a limitation of Simics, not Ruby, that does not allow stalling certain memory transactions. Anyway, has someone ever experienced a similar situation and can give some hints on how to avoid the problem? I would really appreciate some help with the problem.

 

      Thanks in advance,

 

Enrique Vallejo

University of Cantabria, Spain

http://www.atc.unican.es/~enrique/

 

[← Prev in Thread] Current Thread [Next in Thread→]