Module 14: "Directory-based Cache Coherence"
  Lecture 30: "SGI Origin 2000"
 

Handling a write miss

  • Request opcode could be upgrade or read exclusive
    • State busy: send NACK
    • State unowned: if ReadX send cache block, change state to M, mark owner in vector; if upgrade what do you do?
    • State shared: send reply (upgrade ack or ReadX reply) with number of sharers, send invalidations to sharers, change state to M, mark owner in vector; sharers send invalidation acknowledgments to requester directly
      • What if outgoing request network queue fills up before all invalidations are sent?
    • State M: same as read miss except directory remains in PDEX state until completion message (no data) is received from owner; directory remains in M state, only the owner changes; how do you handle upgrades here?

Serializing requests

  • The tricky situation is collection of invalidation acknowledgments
    • Note from previous slides that even before all acknowledgments are collected at the requester, the directory at home goes to M state with the new owner marked
    • A subsequent request will get forwarded to the new owner (at this point directory goes to PSH or PDEX state)
    • The owner is responsible for serializing the new request with the previous write
      • The write is not complete until all invalidation acknowledgments are collected
      • OTT (aka CRB) of the owner is equipped to block any incoming request until all the acknowledgments and the reply from home are collected (early interventions)
    • Note that there is no completion message back to home

Handling writebacks

  • Valid directory states: M or busy; cannot be S or I
  • State M
    • Just clear directory entry, write block to memory
    • Need to send writeback acknowledgment to the evicting processor (explanation coming up)
  • State busy
    • How can this happen? (Late intervention race)
    • Can NACK writeback? What support needed for this?
    • Better solution: writeback forwarding
    • Any special consideration at the evicting node?
      • Drop intervention (how?)
    • How does the directory state change in this case?