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

Virtual networks

  • Consider a two-node system with one incoming and one outgoing queue on each node
  • Single queue is not enough to avoid deadlock
    • Single queue forms a single virtual network
  • Similar deadlock issues as multi-level caches
    • An incoming message may generate another message e.g., request generates reply, ReadX generates reply and invalidation requests, request may generate intervention request
    • Memory controller refuses to schedule a message if the outgoing queue is full
    • Same situation may happen on all nodes: deadlock
    • One incoming and one outgoing queue is not enough
    • What if we have two in each direction?: one for request and one for reply
    • Replies can usually sink
    • Requests generating requests?
  • What is the length of the longest transaction in terms of number of messages?
    • This decides the number of queues needed in each direction (Origin 2000 uses a different scheme)
    • One type of message is usually assigned to a queue
    • One queue type connected across the system forms a virtual network of that type e.g. request network, reply network, third party request (invalidations and interventions) network
    • Virtual networks are multiplexed over a physical network
  • Sink message type must get scheduled eventually
    • Resources should be sized properly so that scheduling of these messages does not depend on anything
    • Avoid buffer shortage (and deadlock) by keeping reserved buffer for the sink queue

Three-lane protocols

  • Quite popular due to its simplicity
    • Let the request network be R, reply network Y, intervention/invalidation network be RR
    • Network dependence (aka lane dependence) graph looks something like this