[Gems-users] TLB MISS for Virtual Log Pointer


Date: Wed, 10 Sep 2008 14:55:48 +0200
From: "Rubén Titos" <rtitos@xxxxxxxxxxx>
Subject: [Gems-users] TLB MISS for Virtual Log Pointer
Dear list,

I'm trying to run some transactional microbenchmarks with Gems 2.1 and simics 2.2.19. For runs with 2 and 4 processors the benchmark runs just fine, but for 8 or more processors, I get an assertion that makes the program fail when executing the setLogBase function of log_tm/TransacionVersionManager.C

       
void TransactionVersionManager::setLogBase(int thread){

  m_logPointer_physical[thread] = Address(getDataTranslation(m_logPointer[thread].getAddress(), thread));
  if(m_logPointer_physical[thread] == Address(0)){
    if(XACT_DEBUG && XACT_DEBUG_LEVEL > 0) {
      cout << proc_no << " TLB MISS for Virtual Log Pointer " << m_logPointer[thread] << " thread = " << thread << endl;
    }
    assert(0);
  }

The data translation fails (tlb miss) for that address and a 0 is returned, raising the assertion. The address to be translated does not seem to be garbage:

(gdb) print m_logPointer[thread]
$1 = {m_address = 5148704}
(gdb) print m_logBase[thread]
$2 = {m_address = 5148704}
(gdb) print m_logSize[thread]
$3 = 0
(gdb) print m_tm_contextAddress[thread]
$4 = {m_address = 5144576}

I've been using Gems/LogTM for a while now, setting up my own TM workloads and so on, and in all this time I've never run into this kind of TLB miss when initializing the transactional state  (set_transaction_registers). I believe I have done nothing different this time for workload setup.

Is there anything I can do to avoid this assertion? Any comment will be appreciated.

Regards,

Ruben

--
Rubén Titos
Parallel Computing and Architecture Group
Computer Engineering Dept.
University of Murcia
http://skywalker.inf.um.es/~rtitos/
[← Prev in Thread] Current Thread [Next in Thread→]