Протокол согласования кэша Firefly - это схема, используемая в многопроцессорной рабочей станции DEC Firefly , разработанная DEC Systems Research Center . Этот протокол представляет собой протокол согласования кэша обновления записи с 3 состояниями. В отличие от протокола Dragon, протокол Firefly обновляет основную память, а также локальные кеши при переходе шины обновления записи. Таким образом, состояния Shared Clean и Shared Modified, присутствующие в случае протокола Dragon, не различаются в случае протокола Firefly.
состояния
В этом протоколе каждому блоку могут быть присвоены следующие состояния:
- Valid-Exclusive (V) : блок кеша действителен, чист и находится только в одном кэше.
- Общий (S) : блок кеша действителен, чист и может находиться в нескольких кэшах.
- Грязный (D) : блок является единственной копией памяти, и он грязный, т.е. его значение было изменено с момента извлечения из памяти. Это единственное состояние, которое генерирует обратную запись при замене блока в кэше.
Эти состояния соответствуют Exclusive , Shared , и Modified состояния протокола МЭСИ . Этот протокол никогда не вызывает недействительность, поэтому состояние Invalid здесь не указано.
Запросы на стороне процессора
Запросы на стороне процессора или запросы ЦП - это обращения, которые процессор делает к своим собственным кэшам. Их можно разделить на 4 типа запросов, а именно:
- PrRdMiss : запрос со стороны процессора на чтение блока кэша, который не находится в кэше.
- PrRdHit : запрос со стороны процессора на чтение блока кэша, который уже находится в кэше.
- PrWtHit : запрос со стороны процессора на запись в блок кеша, который уже находится в кэше.
- PrWtMiss : запрос со стороны процессора на запись в блок кэша, который не находится в кэше.
Запросы на стороне автобуса
Запросы на стороне шины - это запросы, сгенерированные в ответ на запросы на стороне процессора для поддержания согласованности кеша. Они отслеживаются анализатором кешей и памяти, и принимаются соответствующие меры. В протоколе Firefly они подразделяются на два типа, а именно:
1. BusRd : запрос, который указывает, что есть запрос на чтение блока кэша, сделанный другим процессором, и этот процессор не имеет данных.
2. BusWr / BusUpdt : запрос, который указывает, что есть запрос на запись в блок кэша, сделанный другим процессором, и все другие кэши должны обновить свои копии блока.
Переходы
Чтобы определить, какие переходы должны быть выполнены, протокол определяет совместное использование с помощью специальной линии шины с именем CopiesExist . Все другие кеши отслеживают все операции с памятью и вызывают CopiesExist (C), если они обнаруживают «отслеживание попаданий», то есть если у них есть копия данных в их собственном кэше.
Стрелка, идущая из ниоткуда в состояние, представляет недавно загруженный блок.
Переходы, инициированные процессором
В случае промаха процессора при чтении блока, и если нет копии блока в любом другом кэше, проверяется строка CopiesExist (C) и C имеет значение LOW, тогда блок помещается в кеш, и состояние устанавливается как Valid . Если в некоторых кэшах уже есть копия (C - HIGH), то блок помещается в кеш в состоянии Shared .
При промахе записи в блок, если в каком-либо кэше нет копии блока (C - LOW), блок помещается в кэш в состоянии Dirty . Если в некоторых кэшах уже есть копия блока (C - HIGH), то блок помещается в кеш в состоянии Shared, и изменения отражаются в памяти.
Если блок уже кэширован в состоянии Valid , попадание записи процессора изменяет состояние на состояние Dirty, поскольку ни один другой кеш не имеет копии данных. Эта запись не записывается в память.
Если блок кэшируется в состоянии « грязный» и происходит попадание записи процессора, то состояние остается как состояние « грязное» .
Если блок находится в состоянии Shared и есть попадание записи процессора, и если в некоторых кэшах уже есть копия (C), блок остается в состоянии Shared . Если в каком-либо кэше нет копии блока (! C), блок записывается в действительном состоянии, поскольку это единственная «действительная» копия, присутствующая в кэшах.
Если происходит чтение ЦП, блок остается в том состоянии, в котором он уже находится - точно так же, как в протоколе Dragon.
Переходы, инициированные шиной
Если блок находится в общегосударственном , и есть запрос BusRd или BusWr, блок остается в состоянии Shared.
Если блок находится в состоянии « грязное» , а другой процессор читает или записывает его, запрос от другого процессора, он переходит в общее состояние, и изменения отражаются в основной памяти.
Если блок находится в действительном состоянии и его читает другой процессор, он переходит в общее состояние. Если отслеживается другой запрос на запись процессора, блок будет обновлен, и, поскольку он теперь используется совместно, он также переходит в состояние Shared.
В отличие от MESI, в протоколе обновления Firefly распространение записи обеспечивается прямым обновлением всех других копий по запросу на запись процессоров (PrWr).
Сравнение с другими политиками
1. Из-за того, что обновленные копии данных существуют в кэшах, существует меньше нарушений согласованности, чем в политиках записи-недействительности.
2. Требуется более высокая полоса пропускания шины, чем в протоколах с недействительными протоколами, поскольку протоколы с аннулированием просто отправляют сигнал / команду на шину, которая отслеживается другими процессорами, заставляя их аннулировать свои собственные копии данных. В протоколах обновления, напротив, новое значение данных должно быть отправлено вместе с сигналом BusUpdate, чтобы позволить памяти и другим кэшам отслеживать и обновлять свои данные.
3. Обновление данных при каждой записи приводит к тому, что некоторые ненужные данные остаются в кэше, что может привести к удалению некоторых «полезных» данных.
Смотрите также
Рекомендации
- Хашеми, Б. (01.05.2011). Моделирование и оценка протоколов согласованности Snoopy Cache со стратегией обновления в многопроцессорных системах с общей памятью . 2011 Девятый международный симпозиум IEEE по параллельной и распределенной обработке с использованием приложений, семинары (ISPAW) . С. 256–259. DOI : 10.1109 / ISPAW.2011.68 . ISBN 978-1-4577-0524-3.
- Эггерс, SJ; Кац, RH (1988-01-01). Характеристика совместного использования в параллельных программах и ее применение для оценки протокола согласованности . Материалы 15-го ежегодного международного симпозиума по компьютерной архитектуре . ISCA '88. Лос-Аламитос, Калифорния, США: IEEE Computer Society Press. С. 373–382. DOI : 10.1145 / 633625.52442 . ISBN 978-0818608612.
- Арчибальд, Джеймс; Баер, Жан-Лу (1986-09-01). «Протоколы согласованности кэша: оценка с использованием модели многопроцессорного моделирования». ACM Trans. Comput. Syst . 4 (4): 273–298. DOI : 10.1145 / 6513.6514 . ISSN 0734-2071 .
- Солихин, Ян (09.10.2015). Основы параллельной многоядерной архитектуры. Роли, Северная Каролина: Solihin Publishing and Consulting, LLC. ISBN 978-1-4822-1118-4 .