Hi,

As this function issueRequest comment said, it issue a memory request. But it only pop a MemoryNode which carries request message from corresponding bankqueue at line 6 and then push it in m_response_queue at line 37. I can't find which function handles this MemoryNode like write data back to memory which is pointed by pointer req.m_msgptr->DataBlk.

    1. void
    2. MemoryControl::issueRequest(int bank)
    3. {
    4.      int rank = getRank(bank);
    5.      MemoryNode req = m_bankQueues[bank].front();
    6.      m_bankQueues[bank].pop_front();
    7.      DPRINTF(RubyMemory, "Mem issue request%7d: %#08x %c "
    8.              "bank=%3x sched %c msg %s\n", req.m_msg_counter,
       req.m_addr,
    9.              req.m_is_mem_read? 'R':'W',
   10.              bank, m_event.scheduled() ? 'Y':'N', *req.m_msgptr);
   11.      if (req.m_msgptr) {  // don't enqueue L3 writebacks
   12.          enqueueToDirectory(req, m_mem_ctl_latency +
       m_mem_fixed_delay);
   13.      }
   14.      m_oldRequest[bank] = 0;
   15.      markTfaw(rank);
   16.      m_bankBusyCounter[bank] = m_bank_busy_time;
   17.      m_busBusy_WhichRank = rank;
   18.      if (req.m_is_mem_read) {
   19.          m_profiler_ptr->profileMemRead();
   20.          m_busBusyCounter_Basic = m_basic_bus_busy_time;
   21.          m_busBusyCounter_Write = m_basic_bus_busy_time +
       m_read_write_delay;
   22.          m_busBusyCounter_ReadNewRank =
   23.              m_basic_bus_busy_time + m_rank_rank_delay;
   24.      } else {
   25.          m_profiler_ptr->profileMemWrite();
   26.          m_busBusyCounter_Basic = m_basic_bus_busy_time;
   27.          m_busBusyCounter_Write = m_basic_bus_busy_time;
   28.          m_busBusyCounter_ReadNewRank = m_basic_bus_busy_time;
   29.      }
   30. }
   31. void
   32. MemoryControl::enqueueToDirectory(MemoryNode req, int latency)
   33. {
   34.      Time arrival_time = g_eventQueue_ptr->getTime()
   35.          + (latency * m_mem_bus_cycle_multiplier);
   36.      req.m_time = arrival_time;
   37.      m_response_queue.push_back(req);
   38.      DPRINTF(RubyMemory, "Enqueueing msg %#08x %c back to
       directory at %15d\n",
   39.              req.m_addr, req.m_is_mem_read ? 'R':'W',
   40.              arrival_time * g_eventQueue_ptr->getClock());
   41.      // schedule the wake up
   42. g_eventQueue_ptr->scheduleEventAbsolute(m_consumer_ptr,
       arrival_time);
   43. }

Thank you!

--
Chuanlei Zheng

Department of Computer Science and Technology
Nanjing University

_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to