Протокол MOSI - MOSI protocol

В Протокол MOSI является расширением основных MSI согласованность кеша протокол. Он добавляет ОСостояние wned, которое указывает, что текущий процессор владеет этим блоком и будет обслуживать запросы от других процессоров для блока.

Обзор состояний

Ниже приведены разрешенные состояния данной строки кэша:

Модифицированный (M) - Только в одном кэше есть действительная копия блока, и значение, вероятно, будет отличаться от значения в основной памяти. Он имеет почти то же значение, что и грязное состояние в обратная запись в кеш за исключением той разницы, что измененное состояние также подразумевает исключительное владение этим блоком. Грязное состояние просто означает, что значение блока отличается от значения в основной памяти, тогда как измененное означает, что значение отличается от значения в основной памяти и кэшируется только в одном месте.

В собственности (O) - Несколько кешей могут содержать самое последнее и правильное значение блока, а значение в основной памяти может быть правильным, а может и нет. Одновременно только один кеш может иметь состояние владения для блока. Все остальные кэши с тем же блоком должны находиться в общем состоянии.[1]

Общий (S) - Блок кэша действителен, может использоваться несколькими кешами и может иметь или не иметь то же значение, что и основная память. Другие процессоры могут читать из него, но не имеют разрешений на запись.

Недействительный (I) - Блок кеширования недействителен.

Для любой данной пары кешей допустимые состояния данной строки кэша следующие:

M О S я
MКрасный XNКрасный XNКрасный XNЗеленая галочкаY
ОКрасный XNКрасный XNЗеленая галочкаYЗеленая галочкаY
SКрасный XNЗеленая галочкаYЗеленая галочкаYЗеленая галочкаY
яЗеленая галочкаYЗеленая галочкаYЗеленая галочкаYЗеленая галочкаY

Операции

Конечный автомат, показывающий транзакции процессора для протокола MOSI.

В протоколе MOSI каждый кеш имеет следующие запросы:

  • PrRd - Запрос процессора на чтение блока кеша.
  • PrWr - Запрос процессора на запись в блок кеша.
  • BusRd - Отслеживаемый запрос указывает, что есть запрос на чтение блока кэша, сделанный другим процессором.
  • Автобус RdX - Отслеживаемый запрос, указывающий на то, что есть запрос на запись в блок кэша, сделанный другим процессором, у которого нет этого блока.
  • BusUpgr - Отслеживаемый запрос, показывающий, что существует запрос на запись в блок кэша, сделанный другим процессором, который уже имеет этот блок в своем кэше.
  • Промывать - Отслеживающий запрос, после которого блок кеша помещается на шину для передачи кеша в кэш.[2]

Обработка транзакций

Рассмотрим случай транзакций процессора, когда блок находится в Недействительный (I) состояние, либо блок кэша никогда не извлекался из памяти, либо он был признан недействительным. Когда идет чтение процессора (PrRd) состояние изменяется с недопустимого (I) на общее (S), тем самым генерируя чтение шины (BusRd). В то же время, если это запрос на запись процессора (PrWr), то состояние блока меняется на измененное (M) вместе с отслеживаемым запросом записи (Автобус RdX).

Как только блок окажется в В собственности (O) состояние, то чтение процессора (PrRd) не генерирует никакого отслеживаемого сигнала, и блок остается в том же состоянии. Принимая во внимание, что запрос записи от процессора (PrWr) приводит к изменению состояния блока с принадлежащего (O) на измененное (M) вместе с генерацией отслеживаемого запроса записи (BusUpgr).[3]

Когда блок находится в Модифицированный (M) В состоянии, ни запрос на чтение процессора (PrRd), ни на запись процессора (PrWr) не генерирует отслеживаемый сигнал, поскольку блок уже указывает, что самое последнее и правильное значение находится только в этом кэше. Следовательно, он не меняет состояние и остается в модифицированном (M) состоянии.

Конечный автомат, показывающий отслеживаемые транзакции шины для протокола MOSI.

Пока блок находится в Общий (S) состояние и есть запрос чтения процессора (PrRd), поскольку значение блока кэша одинаково для всех остальных процессоров и в основной памяти, сигнал шины, который генерируется после чтения процессора (PrRd), отсутствует. Запрос на запись в шину (BusUpgr) генерируется, когда есть запрос на запись процессора (PrWr) в блок в общем (S) состоянии, потому что блок кеша больше не действителен во всех других кэшах и состояние блока изменяется. от общего (S) до изменяемого (M).

Автобусные транзакции

Учитывая поведение конечного автомата при отслеживании транзакций шины, если блок кэша находится в Недействительный (I) состояние, то ни один запрос шины слежения не повлияет на блок каким-либо образом, поэтому, даже если это чтение шины (BusRd) или запрос записи в шину от процессора, который имеет или не имеет блок (BusRdX или BusUpgr), блок остается в том же недопустимом (I) состоянии и не генерирует никаких дальнейших действий.

Когда блок кеша находится в Общий (S) состояние и есть транзакция с отслеживаемым чтением по шине (BusRd), тогда блок остается в том же состоянии и больше не генерирует транзакции, так как все блоки кеша имеют одинаковое значение, включая основную память, и он только читается, а не записывается. Если есть отслеживаемый запрос записи (BusRdX или BusUpgr), то состояние блока изменяется с общего (S) на недопустимое (I), поскольку значение блока было изменено в одном из других блоков кеша и во всех остальных копиях. теперь должно быть признано недействительным.

Как только блок кеша находится в Модифицированный (M) состояние и есть запрос чтения шины (BusRd), блок сбрасывается (Промывать) измененные данные и изменяют состояние на принадлежащий (O), тем самым делая его единственным владельцем для этого конкретного блока кэша. В то же время, когда он находится в модифицированном (M) состоянии, никогда не будет запроса на запись в шину (BusUpgr) от другого процессора, поскольку у него нет блока кеширования. При запросе записи от другого процессора, у которого нет блока (BusRdX), блок меняет свое состояние на недопустимое (I), поскольку другой процессор выполняет запись в блок и, следовательно, будет владеть этим блоком.

Пока блок кэша находится в измененном состоянии, нет возможности запроса BusUpgr от любого другого процессора, поскольку ни у одного из них не будет блока. Согласно определению измененного (M) состояния, только этот процессор имеет блок, остальные становятся недействительными и, следовательно, не могут инициировать запрос BusUpgr.

Пока в Владелец (O) состояние и есть отслеживаемый запрос чтения (BusRd), блок остается в том же состоянии, пока сбрасываются (сбрасываются) данные для чтения из него другим процессором. С отслеживаемым запросом записи (BusRdX) блок меняет состояние на недопустимое (I) вместе с очисткой (Flush) данных, когда другой процессор записывает в него, тем самым теряя свое владение этим блоком. Каждый раз, когда другой процессор пытается получить доступ к этому блоку, вместо обращения к памяти для доступа к нему, процессор берет его из другого кеша, в котором этот блок уже находится в состоянии владения (O). С BusUpgr он просто меняет состояние с владельца (O) на недействительное (I).[3]

Сравнение с протоколом MSI

Очевидная разница между Протокол MSI и протокол MOSI, также известный как протокол Беркли[4] - наличие дополнительного состояния (принадлежащего) в MOSI в дополнение к наличию только модифицированного (M) состояния.

В протоколе MSI всякий раз, когда возникает запрос пропуска чтения для блока, находящегося в измененном (M) состоянии, он записывает обратно в основную память, изменяя статус блока на общий (S). Но в случае протокола MOSI, где у нас есть дополнительное состояние (владелец), всякий раз, когда другой процессор запрашивает операцию чтения, блок изменяется с измененного на принадлежащее (O) состояние и, таким образом, сохраняет грязный блок кеша, тем самым удаляя необходимость немедленной записи обратно в основную память.

Эта отсрочка может сэкономить трафик шины и записи в основную память в определенных последовательностях транзакций. Рассмотрим, например, если размер кэша для процессора 1 равен M, то процессор 2 читает из него, а затем процессор 1 снова записывает в него. В MSI переход процессора 1 MS из режима чтения приводит к одной записи в память, а затем переход SM приводит к BusUpgr. В MOSI переход MO не генерирует трафика, а переход OM также генерирует один BusUpgr, как и раньше. Таким образом, MOSI распределяет начальную обратную запись в память и связанный с ней трафик шины, что и делает MSI.

Сравнение с протоколом MESI

И то и другое MESI (также известный как Иллинойс)[4] и протоколы MOSI являются расширениями протокола MSI для улучшения различных функций. MOSI фокусируется на сокращении обратной записи, а MESI пытается уменьшить количество транзакций шины, необходимых после запроса чтения и записи от другого процессора. Исключительное (E) состояние в протоколе MESI подразумевает, что блок кэша действителен, чист (такое же значение, как в основной памяти) и кэширован только в одном кэше, тогда как состояние «принадлежащий» (O) в протоколе MOSI означает, что блок кеша действителен , потенциально грязный, доступный для записи и может присутствовать более чем в одном кэше (все кеши имеют одинаковое значение).

использованная литература

  1. ^ Сорин, Даниэль; Хилл, Марк; Вуд, Дэвид (2011). Учебник по согласованности памяти и согласованности кеша. Морган и Клейпул. С. 119–122. ISBN  9781608455645.
  2. ^ Солихин, Ян (2016). Основы параллельной многоядерной архитектуры. RC Press, Taylor & Francis Group. ISBN  9781482211184.
  3. ^ а б «Оценка протоколов когерентности кэша на основе Snoop» (PDF).
  4. ^ а б «Анализ и сравнение протоколов когерентности кэша для мультипроцессоров с коммутацией пакетов». Транзакции IEEE на компьютерах. 38. Дои:10.1109/12.30868.

Смотрите также