Протокол MOSI - MOSI protocol
В Протокол MOSI является расширением основных MSI согласованность кеша протокол. Он добавляет ОСостояние wned, которое указывает, что текущий процессор владеет этим блоком и будет обслуживать запросы от других процессоров для блока.
Обзор состояний
Ниже приведены разрешенные состояния данной строки кэша:
Модифицированный (M) - Только в одном кэше есть действительная копия блока, и значение, вероятно, будет отличаться от значения в основной памяти. Он имеет почти то же значение, что и грязное состояние в обратная запись в кеш за исключением той разницы, что измененное состояние также подразумевает исключительное владение этим блоком. Грязное состояние просто означает, что значение блока отличается от значения в основной памяти, тогда как измененное означает, что значение отличается от значения в основной памяти и кэшируется только в одном месте.
В собственности (O) - Несколько кешей могут содержать самое последнее и правильное значение блока, а значение в основной памяти может быть правильным, а может и нет. Одновременно только один кеш может иметь состояние владения для блока. Все остальные кэши с тем же блоком должны находиться в общем состоянии.[1]
Общий (S) - Блок кэша действителен, может использоваться несколькими кешами и может иметь или не иметь то же значение, что и основная память. Другие процессоры могут читать из него, но не имеют разрешений на запись.
Недействительный (I) - Блок кеширования недействителен.
Для любой данной пары кешей допустимые состояния данной строки кэша следующие:
M | О | S | я | |
---|---|---|---|---|
M | ||||
О | ||||
S | ||||
я |
Операции
В протоколе 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) состоянии.
Пока блок находится в Общий (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 означает, что блок кеша действителен , потенциально грязный, доступный для записи и может присутствовать более чем в одном кэше (все кеши имеют одинаковое значение).
использованная литература
- ^ Сорин, Даниэль; Хилл, Марк; Вуд, Дэвид (2011). Учебник по согласованности памяти и согласованности кеша. Морган и Клейпул. С. 119–122. ISBN 9781608455645.
- ^ Солихин, Ян (2016). Основы параллельной многоядерной архитектуры. RC Press, Taylor & Francis Group. ISBN 9781482211184.
- ^ а б «Оценка протоколов когерентности кэша на основе Snoop» (PDF).
- ^ а б «Анализ и сравнение протоколов когерентности кэша для мультипроцессоров с коммутацией пакетов». Транзакции IEEE на компьютерах. 38. Дои:10.1109/12.30868.