# Firefly The **Firefly protocol** is a [[cache-snoopy-protocols|snoopy]] [[cache-coherence|coherence]] protocol developed at DEC's Systems Research Center (1987), contemporary with [[dragon]] and sharing its central idea: updates instead of invalidations. When a core writes to a line other caches also hold, Firefly broadcasts the new value on the bus so sharers can refresh their copy in place, rather than forcing them to invalidate and later reload. ## Distinguishing feature: a dedicated "shared" wire Firefly's main departure from Dragon is in how a cache discovers whether a line is shared at all. Instead of relying purely on the bus snoop response to a read request, Firefly-style designs add a dedicated **shared line** (a single extra wire on the bus) that any cache holding a copy asserts when it sees a read request for that address. A core loading a line can then tell, in the same cycle as the load completes, whether the line is exclusive to it or shared with others, without needing a separate protocol exchange to find out. ``` read request on bus -> any sharer asserts the shared-signal wire -> requester loads as Shared if wire asserted, Exclusive-like otherwise ``` ## Why this matters Knowing exclusivity at load time removes the ambiguity that update-based protocols otherwise have to resolve on the first write: if the requester already knows a line came in as sole owner, an early write can skip broadcasting an update it doesn't need to send to anyone. This is essentially the same problem [[mesi]] solves for invalidate-based protocols with its Exclusive state, applied instead to an update-based protocol. In practice, Firefly and Dragon are usually presented side by side in the literature as the two canonical update-based protocols, differing mainly in this detection mechanism rather than in overall philosophy.