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


Date: Fri, 23 Feb 2007 22:10:30 -0600
From: Jayaram Bobba <bobba@xxxxxxxxxxx>
Subject: Re: [Gems-users] Non-stallable requests and transactional protocols

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().

I dont think this is entirely true. An atomic operation is split into two components and only the second component is non-stallable. The first component should be handled as a store by the logTM implementation and hence
should be properly logged and isolated.

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.


I believe a similar scenario occurs when Simics comes across double word load/stores. Simics hands them to Ruby as two separate single word transactions. Only the first is stallable. Fortunately, sparc does not handle misaligned memory operations. Hence double word operations dont span multiple cache lines and the LogTM implementation should work correctly. This could be true for multi-word operations too. I haven't run across
them though.

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