MSI-протокол
В вычислениях протокол MSI — базовый протокол когерентности кэша — работает в многопроцессорных системах. Как и в случае с другими протоколами когерентности кэша, буквы имени протокола определяют возможные состояния, в которых может находиться строка кэша.
Обзор
[ редактировать ]В MSI каждый блок, содержащийся в кеше, может иметь одно из трех возможных состояний:
- Изменено : блок был изменен в кэше . В этом случае данные в кеше несовместимы с резервным хранилищем (например, памятью ). Кэш с блоком в состоянии «M» несет ответственность за запись блока в резервное хранилище при его вытеснении.
- Общий : этот блок не модифицируется и существует в состоянии «только для чтения» как минимум в одном кэше. Кэш может удалить данные без записи их в резервное хранилище.
- Недействителен : этот блок либо отсутствует в текущем кэше, либо был признан недействительным запросом шины, и его необходимо извлечь из памяти или другого кэша, если блок должен храниться в этом кэше. [1]
Эти состояния согласованности поддерживаются посредством связи между кэшами и резервным хранилищем. Кэши имеют разные обязанности, когда блоки читаются или записываются, или когда они узнают о других кэшах, выполняющих чтение или запись для блока.
Когда запрос на чтение поступает в кэш для блока в состояниях «M» или «S», кэш предоставляет данные. Если блока нет в кеше (в состоянии «I»), он должен проверить, что блок не находится в состоянии «M» ни в каком другом кеше. Различные архитектуры кэширования решают эту проблему по-разному. Например, в шинных архитектурах часто выполняется отслеживание , при котором запрос на чтение передается всем кэшам. Другие архитектуры включают каталоги кэша , у которых есть агенты (каталоги), которые знают, в каких кэшах последними были копии определенного блока кэша. Если в другом кэше блок находится в состоянии «M», он должен записать данные обратно в резервное хранилище и перейти в состояния «S» или «I». Как только любая строка «M» записывается обратно, кеш получает блок либо из резервного хранилища, либо из другого кеша с данными в состоянии «S». Затем кэш может предоставить данные запрашивающей стороне. После подачи данных блок кэша находится в состоянии «S».
Когда запрос на запись поступает в кэш для блока в состоянии «M», кэш изменяет данные локально. Если блок находится в состоянии «S», кэш должен уведомить любые другие кэши, которые могут содержать блок в состоянии «S», о том, что они должны удалить этот блок. Это уведомление может осуществляться посредством отслеживания шины или каталога, как описано выше. Затем данные могут быть локально изменены. Если блок находится в состоянии «I», кэш должен уведомить любые другие кэши, которые могут содержать блок в состояниях «S» или «M», о том, что они должны удалить этот блок. Если блок находится в другом кэше в состоянии «M», этот кэш должен либо записать данные в резервное хранилище, либо передать их в запрашивающий кэш. Если на этом этапе в кеше еще нет локального блока, блок считывается из резервного хранилища перед изменением в кеше. После изменения данных блок кэша находится в состоянии «М».
Для любой пары кэшей разрешенные состояния данной строки кэша следующие:
М | С | я | |
---|---|---|---|
М | |||
С | |||
я |
Государственная машина
[ редактировать ]Запросы процессора к кешу включают в себя:
- PrRd: запрос процессора на чтение блока кэша.
- PrWr: запрос процессора на запись блока кэша.
Кроме того, есть запросы со стороны автобусов. К ним относятся:
- BusRd: когда в кэше процессора происходит промах чтения, он отправляет запрос BusRd на шину и ожидает получить взамен блок кэша.
- BusRdX: когда в кэше процессора происходит промах записи, он отправляет запрос BusRdX на шину, который возвращает блок кэша и делает блок недействительным в кэшах других процессоров.
- BusUpgr: когда в кэше процессора происходит запись, он отправляет запрос BusUpgr на шину, чтобы сделать недействительным блок в кэшах других процессоров.
- Очистка: запрос, указывающий, что весь блок кэша записывается обратно в память. [2]
Государственные переходы:
- Неверный :
- На PrRd выдается BusRd и состояние меняется на Shared .
- На PrWr выдается BusRdX, и состояние меняется на Modified .
- В BusRd, BusRdX или BusUpgr недопустимый блок остается Invalid .
- Поделился :
- В PrRd блок остается в состоянии Shared .
- На PrWr выдается BusUpgr и состояние меняется на Modified .
- На BusRd блок остается в состоянии Shared .
- В BusRdX или BusUpgr блок переходит в Invalid .
- Изменено :
- В PrRd или PrWr блок остается в состоянии «Изменено» .
- На BusRd блок кэша сбрасывается на шину, и его состояние меняется на Shared .
- В BusRdX блок кэша сбрасывается на шину, и его состояние меняется на Invalid . [2]
- BusUpgr невозможен. Обратите внимание, что, находясь в состоянии «Изменено» в одном конкретном процессоре, блок кэша должен находиться в состоянии «Недействительно» во всех других процессорах, поскольку состояние «Изменение» разрешено либо ни в одном процессоре, либо только в одном процессоре. Это эффективно сводит на нет возможность BusUpgr на шине, что потребует, чтобы этот блок находился в состоянии Shared в одном из процессоров, которые, как показано выше, выдают PrWr.
Использование
[ редактировать ]Этот протокол аналогичен тому, который используется в машине SGI 4D. [3]
Варианты
[ редактировать ]Современные системы используют варианты протокола MSI для уменьшения объема трафика в когерентном соединении. Протокол MESI добавляет «эксклюзивное» состояние для уменьшения трафика, вызванного записью блоков, которые существуют только в одном кэше. Протокол MOSI добавляет состояние «В собственности», чтобы уменьшить трафик, вызванный обратной записью блоков, которые читаются другими кэшами. Протокол MOESI выполняет обе эти задачи.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Фуксен, Р. (01 октября 2010 г.). «Как пройти сертификацию многоядерных платформ IMA: текущий статус и потенциальные решения». 29-я конференция по цифровым авиационным системам . стр. 5.E.3–1-5.E.3-11. дои : 10.1109/DASC.2010.5655461 . ISBN 978-1-4244-6616-0 . S2CID 16461614 .
- ^ Jump up to: а б Солихин, Ян (2016). Основы параллельной многоядерной архитектуры . Чепмен и Холл / Серия CRC по вычислительной науке.
- ^ Со, Тэвон (декабрь 2006 г.). «ИНТЕГРАЦИЯ И ОЦЕНКА ПРОТОКОЛОВ СВЯЗАННОСТИ КЕША ДЛЯ МНОГОПРОЦЕССОРНЫХ SOCS» (PDF) .