Протокол когерентности кэша MOSI: расширение MSI с состоянием Owned
MOSI protocol
Протокол MOSI: расширение MSI для обеспечения когерентности кэша. Добавлен статус Owned для обслуживания запросов. Оптимизация работы процессора и памяти.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Протокол обеспечения когерентности кэша включает состояние Owned как расширение протокола MSI. Протокол MOSI является расширением базового протокола когерентности кэша MSI. Он добавляет состояние Owned, которое указывает, что данный процессор владеет этим блоком и будет обрабатывать запросы на этот блок от других процессоров.
Cache coherence protocol, includes an Owned state as an extension of the MSI protocol. The MOSI protocol is an extension of the basic MSI cache coherency protocol. It adds the Owned state, which indicates that the current processor owns this block, and will service requests from other processors for the block.
Операции с обработчиком
Рассматривая случай транзакций процессора, когда блок находится в состоянии Invalid (I), блок кэша либо никогда не был запрошен из памяти, либо был аннулирован. При чтении процессором (PrRd) состояние изменяется с недействительного (I) на общее (S), что приводит к генерации запроса чтения шины (BusRd). Одновременно, если поступает запрос записи процессора (PrWr), состояние блока изменяется на модифицированное (M) вместе с запросом записи с отслеживанием (BusRdX). Как только блок переходит в состояние Owned (O), чтение процессором (PrRd) не генерирует никаких сигналов отслеживания, и блок остается в том же состоянии. В то время как запрос записи от процессора (PrWr) приводит к изменению состояния блока с owned (O) на модифицированное (M) и генерации запроса обновления шины (BusUpgr). Когда блок находится в состоянии Modified (M), ни запрос чтения процессором (PrRd), ни запрос записи процессором (PrWr) не генерируют сигналы отслеживания, поскольку блок уже указывает, что самое последнее и корректное значение содержится только в этом кэше. Следовательно, состояние не изменяется, и блок остается в состоянии modified (M). В то время как блок находится в состоянии Shared (S) и поступает запрос чтения процессором (PrRd), поскольку значение блока кэша одинаково во всех остальных процессорах и в основной памяти, после чтения процессором (PrRd) не генерируется никаких сигналов шины. Запрос записи шины (BusUpgr) генерируется при поступлении запроса записи процессора (PrWr) к блоку в состоянии shared (S), поскольку блок кэша больше не является действительным во всех остальных кэшах, и состояние блока изменяется с shared (S) на модифицированное (M).
Looking at the case for processor transactions, when the block is in the Invalid (I) state, either the cache block was never fetched from the memory or it was invalidated. When there is a processor read (PrRd), the state changes from invalid (I) to shared (S), thereby generating a bus read (BusRd). At the same time, if it is a processor write request (PrWr), then the state of the block changes to modified (M) along with a snooped write request (BusRdX). Once the block is in the Owned (O) state, then a processor read (PrRd) does not generate any snooped signal and the block remains in the same state. Whereas, a write request from the processor (PrWr) results in changing the state of the block from owned (O) to modified (M) along with generating a snooped write request (BusUpgr). When the block is in the Modified (M) state, neither a processor read (PrRd) nor a processor write (PrWr) request generates a snooped signal since the block already indicates that the most recent and correct value resides only in that cache. Hence, it does not change the state and stays in modified (M) state. While the block is in the Shared (S) state and there is processor read (PrRd) request, since the value of the cache block is the same in every other processor and in the main memory, there is no bus signal that is generated after a processor read (PrRd). A bus write request (BusUpgr) is generated once there is a processor write (PrWr) request to a block in the shared (S) state because the cache block is now no longer valid in all the other caches and the state of the block changes from shared (S) to being modified (M).
Транзакции на автобусе
Учитывая поведение конечного автомата при обработке транзакций снюппинга шины, если блок кэша находится в состоянии Invalid (I), то никакой запрос снюппинга шины не повлияет на блок каким-либо образом. Следовательно, даже если это запрос на чтение (BusRd) или запись (BusRdX или BusUpgr) от процессора, который имеет или не имеет этот блок, блок останется в том же недействительном (I) состоянии и не вызовет никаких дальнейших действий. Когда блок кэша находится в состоянии Shared (S) и происходит транзакция считывания шины (BusRd), блок остается в том же состоянии и не генерирует дополнительных транзакций, поскольку все блоки кэша имеют одинаковое значение, включая основную память, и выполняется только чтение, а не запись. Если поступает запрос на запись (BusRdX или BusUpgr), состояние блока изменяется с shared (S) на invalid (I), так как значение блока было изменено в одном из других блоков кэша, и все остальные копии должны быть аннулированы. Как только блок кэша переходит в состояние Modified (M) и поступает запрос на чтение шины (BusRd), блок сбрасывает (Flush) измененные данные и переходит в состояние owned (O), становясь таким образом единственным владельцем этого конкретного блока кэша. В то же время, находясь в состоянии modified (M), запрос на запись шины (BusUpgr) от другого процессора невозможен, поскольку у него нет этого блока кэша. При запросе на запись от другого процессора, у которого нет блока (BusRdX), блок изменяет свое состояние на invalid (I), так как другой процессор записывает в блок и, следовательно, получает право собственности на него. Пока блок кэша находится в состоянии modified, запрос BusUpgr от любого другого процессора невозможен, так как ни у кого из них нет этого блока. По определению состояния modified (M), только этот процессор имеет блок, все остальные недействительны и, следовательно, не могут инициировать запрос BusUpgr. Находясь в состоянии Owner (O) и получая запрос на чтение (BusRd), блок остается в том же состоянии, одновременно сбрасывая (Flush) данные для чтения другим процессором. При запросе на запись (BusRdX) блок переходит в состояние invalid (I) вместе со сбросом (Flush) данных, так как другой процессор записывает в него, теряя таким образом право собственности на этот блок. Всякий раз, когда другой процессор пытается получить доступ к этому блоку, вместо обращения к памяти он берет его из другого кэша, который уже имеет этот блок в состоянии owned (O). Запрос BusUpgr просто изменяет состояние с owner (O) на invalid (I). Суть добавления дополнительного состояния (owned) в протокол MOSI заключается в том, что он дополняет состояние modified (M). В протоколе MSI, при запросе на прочтение блока, находящегося в состоянии modified (M), данные записываются обратно в основную память, а статус блока изменяется на shared (S). Однако в протоколе MOSI, с дополнительным состоянием (owned), при запросе на чтение от другого процессора блок переходит из состояния modified в состояние owned (O) и сохраняет "грязный" блок кэша, устраняя необходимость немедленной записи в основную память. Такая отсрочка может снизить нагрузку на шину и уменьшить количество операций записи в основную память в определенных последовательностях транзакций. Например, если кэш процессора 1 находится в состоянии M, процессор 2 читает из него, а затем процессор 1 снова записывает в него. В MSI переход MS процессора 1 после чтения приводит к одной записи в память, а затем переход SM вызывает BusUpgr. В MOSI переход MO не генерирует трафик, а переход OM также генерирует один BusUpgr, как и раньше. Таким образом, MOSI избавляет от первоначальной записи в память и связанного с ней трафика шины, которые выполнялись бы в MSI.
Considering the behavior of the finite state machine to snooped bus transactions, if the cache block is in Invalid (I) state then no snooped bus request will affect the block in any way, so even if it is a bus read (BusRd) or bus write request from a processor that has or does not have the block (BusRdX or BusUpgr), the block remains in the same invalid (I) state and does not generate any further actions. When the cache block is in the Shared (S) state and there is a snooped bus read (BusRd) transaction, then the block stays in the same state and generates no more transactions as all the cache blocks have the same value including the main memory and it is only being read, not written into. If there is snooped write request (BusRdX or BusUpgr), then the state of the block changes from shared (S) to invalid (I) as the value of the block has been modified in one of the other cache blocks and all the other copies now must be invalidated. Once the cache block is in the Modified (M) state and there is a bus read (BusRd) request, the block flushes (Flush) the modified data and changes the state to owned (O), thus making it the sole owner for that particular cache block. At the same time, when it is in the modified (M) state, there is never going to be a bus write request (BusUpgr) from another processor as it does not have the cache block. With a write request from another processor that doesn't have the block (BusRdX), the block changes its state to invalid (I) as another processor is writing to the block and hence will have the ownership for that block. While a cache block is in the modified state, there is no possibility of a BusUpgr request from any other processor as none of them will have the block. By the definition of the modified (M) state, only that processor has the block, rest all are invalidated and hence cannot initiate a BusUpgr request. While in the Owner (O) state and there is a snooped read request (BusRd), the block remains in the same state while flushing (Flush) the data for the other processor to read from it. With a snooped write request (BusRdX), the block changes state to invalid (I) along with flushing (Flush) the data as another processor is writing to it, thereby losing its ownership on that block. Whenever another processor tries to access that block, instead of going to the memory to access it, the processor takes it from other cache which already has that block in the owned (O) state. With a BusUpgr, it just changes the state from owner (O) to invalid (I). is the presence of an extra state (owned) in MOSI in addition to having just a modified (M) state. In the MSI protocol, whenever there is a read miss request to block which is in the modified (M) state, it writes back to the main memory while changing the status of the block to shared (S). But in the case of MOSI protocol, where we have an additional state (owner), whenever another processor requests for a read operation, the block changes from modified to the owned (O) state and so retains the dirty block of cache, thereby removing the need to write back to the main memory immediately. This deferral can save bus traffic and main memory writes in certain sequences of transactions. Consider for example if a cache is M for processor 1, then processor 2 reads from it, and then processor 1 writes again to it. In MSI, the MS transition of processor 1 from the read leads to one memory write, and then the SM transition leads to a BusUpgr. On MOSI, the MO transition generates no traffic, and the OM transition also generates one BusUpgr as before. MOSI therefore dispensed the initial memory write back and associated bus traffic which MSI would do.
Сравнение с протоколом MESI
Протоколы MESI (также известные как Illinois) и MOSI являются расширениями протокола MSI, предназначенными для улучшения различных функций. MOSI ориентирован на уменьшение количества обратных записей в память, а MESI – на сокращение числа транзакций шины, необходимых после запроса на чтение или запись от другого процессора. Эксклюзивное (E) состояние в протоколе MESI означает, что блок кэша действителен, чист (имеет такое же значение, как в основной памяти) и хранится только в одном кэше, в то время как состояние "принадлежность" (O) в протоколе MOSI означает, что блок кэша действителен, потенциально изменен, доступен для записи и может присутствовать более чем в одном кэше (при этом во всех кэшах содержится одно и то же значение).
Both MESI (also known as Illinois) and MOSI protocols, are extensions of the MSI protocol to improve different functionalities. MOSI focuses on reducing write backs and MESI attempts to reduce the number of bus transactions required after a read and write request from another processor. The exclusive (E) state in MESI protocol implies that the cache block is valid, clean (same value as in the main memory) and cached only in one cache whereas the owned (O) state in MOSI protocol implies that the cache block is valid, potentially dirty, writable and could be present in more than one cache (all caches have the same value).