Из Википедии, свободной энциклопедии
  (Перенаправлено из отслеживания кеша )
Перейти к навигации Перейти к поиску

Отслеживание шины или прослушивание шины - это схема, по которой контроллер когерентности (snooper) в кэше ( snoopy cache ) отслеживает или отслеживает транзакции шины, и его цель - поддерживать согласованность кеша в системах с распределенной общей памятью . [ необходима цитата ] Кэш, содержащий контроллер согласованности (snooper), называется snoopy cache . Эта схема была введена Равишанкаром и Гудманом в 1983 г. [1]

Как это работает [ править ]

Когда определенные данные совместно используются несколькими кешами, и процессор изменяет значение общих данных, изменение должно быть распространено на все другие кеши, которые имеют копию данных. Это распространение изменений предотвращает нарушение системой согласованности кеша . Уведомление об изменении данных может быть выполнено с помощью отслеживания шины. Все шпионы отслеживают каждую транзакцию в шине. Если на шине появляется транзакция, изменяющая блок общего кэша, все наблюдатели проверяют, есть ли в их кэшах одинаковая копия общего блока. Если в кэше есть копия совместно используемого блока, соответствующий анализатор выполняет действие для обеспечения согласованности кеша. Действие может быть сбросом или аннулированием.блока кеша. Это также включает изменение состояния блока кеша в зависимости от протокола согласованности кеша. [2]

Типы протоколов отслеживания [ править ]

В зависимости от способа управления локальной копией операции записи существует два типа протоколов отслеживания:

Запись-недействительность [ править ]

Когда процессор выполняет запись в блок совместно используемого кэша, все общие копии в других кэшах становятся недействительными из- за отслеживания шины. Этот метод гарантирует, что только одна копия данных может быть только прочитана и записана процессором. Все остальные копии в других кэшах становятся недействительными. Это наиболее часто используемый протокол отслеживания. К этой категории относятся протоколы MSI , MESI , MOSI , MOESI и MESIF .

Запись-обновление [ править ]

Когда процессор выполняет запись в блок совместно используемого кэша, все общие копии других кешей обновляются посредством отслеживания шины. Этот метод передает данные записи во все кеши по шине. Он требует большего трафика шины, чем протокол записи-недействительности. Вот почему этот метод необычен. К этой категории относятся протоколы драконов и светлячков . [3]

Реализация [ править ]

Одна из возможных реализаций следующая:

В кеше будет три дополнительных бита :

  • V  - действительный
  • D  - грязный бит, означает, что данные в кеше не такие, как в памяти
  • S  - общий

Каждая строка кэша находится в одном из следующих состояний: «грязный» (обновлен локальным процессором), «действительный», «недействительный» или «общий». Строка кэша содержит значение, и его можно читать или записывать. Запись в строке кэша изменяет значение. Каждое значение находится либо в основной памяти (доступ к которой очень медленный), либо в одном или нескольких локальных кэшах (что происходит быстро). Когда блок впервые загружается в кеш, он помечается как «действительный».

При промахе чтения из локального кеша запрос чтения передается по шине. Все контроллеры кеша контролируют шину. Если кто-то кэшировал этот адрес и он находится в состоянии «грязный», он изменяет состояние на «действительный» и отправляет копию запрашивающему узлу. «Действительное» состояние означает, что строка кэша является текущей. В случае ошибки локальной записи (делается попытка записать это значение, но оно не находится в кэше) отслеживание шины гарантирует, что любые копии в других кэшах будут установлены как «недействительные». «Недействительный» означает, что копия существовала в кэше, но уже не актуальна.

Например, начальное состояние может выглядеть так:

Тег | ID | V | D | S---------------------1111 | 00 | 1 | 0 | 00000 | 01 | 0 | 0 | 00000 | 10 | 1 | 0 | 10000 | 11 | 0 | 0 | 0

После записи адреса 1111 00 он изменится на:

Тег | ID | V | D | S---------------------1111 | 00 | 1 | 1 | 00000 | 01 | 0 | 0 | 00000 | 10 | 1 | 0 | 10000 | 11 | 0 | 0 | 0

Логика кэширования контролирует шину и определяет, запрашивается ли кэшированная память. Если кеш грязный и общий и шина запрашивает эту память, отслеживающие элементы предоставят значение из кеша, а затем уведомят каждый блок, который нуждается в этой памяти, что память была обновлена. Когда другие устройства получают уведомление об обновленном кэше, они отключат действительный бит для своего кеша этой переменной. Таким образом, исходный кеш будет помечен как эксклюзивный (бит S будет равен нулю)

При признании недействительным адреса, помеченного как грязный (т. Е. Один кеш будет иметь грязный адрес, а другой кеш записывает), кеш будет игнорировать этот запрос. Новый кеш будет помечен как грязный, действительный и эксклюзивный, и теперь этот кеш будет отвечать за адрес. [1]

Пособие [ править ]

Преимущество использования отслеживания шины состоит в том, что он работает быстрее, чем механизм согласованности на основе каталогов . Совместно используемые данные помещаются в общий каталог, который поддерживает согласованность между кешами в системе на основе каталогов. Слежение за шиной обычно выполняется быстрее, если пропускной способности достаточно , потому что все транзакции - это запрос / ответ, который видят все процессоры. [2]

Недостаток [ править ]

Недостатком отслеживания шины является ограниченная масштабируемость . Частое отслеживание кеш-памяти вызывает "гонку" при доступе со стороны процессора, что может увеличить время доступа к кеш-памяти и энергопотребление. Каждый из запросов должен транслироваться на все узлы в системе. Это означает, что размер (физической или логической) шины и пропускная способность, которую она обеспечивает, должны расти по мере увеличения размера системы. [2] Поскольку слежение за шиной плохо масштабируется, более крупные системы с когерентным кешем NUMA (ccNUMA) обычно используют протоколы согласованности на основе каталогов .

Snoop filter [ править ]

Когда транзакция шины происходит с конкретным блоком кеша, все средства отслеживания должны отслеживать транзакцию шины. Затем наблюдатели просматривают свой соответствующий тег кеша, чтобы проверить, есть ли у него такой же блок кеша. В большинстве случаев кеши не имеют блока кеша, поскольку хорошо оптимизированная параллельная программа не разделяет много данных между потоками. Таким образом, поиск тега кеша с помощью анализатора обычно является ненужной работой для кеша, у которого нет блока кеша. Но поиск тегов нарушает доступ процессора к кэш-памяти и вызывает дополнительное энергопотребление.

Один из способов уменьшить ненужное отслеживание - использовать фильтр отслеживания. Фильтр отслеживания определяет, нужно ли отслеживателю проверять свой тег кеша или нет. Отслеживающий фильтр представляет собой структуру на основе каталогов и контролирует весь согласованный трафик, чтобы отслеживать состояния когерентности блоков кеша. Это означает, что фильтр отслеживания знает кеши, в которых есть копия блока кеша. Таким образом, это может предотвратить ненужное отслеживание кешами, в которых нет копии блока кеша. Существует три типа фильтров в зависимости от расположения фильтров отслеживания. Один из них - это фильтр источника, который расположен на стороне кеша и выполняет фильтрацию до того, как трафик согласования достигает общей шины. Другой - это фильтр назначения, который расположен в кэше получателя и предотвращает ненужный поиск тегов кэша в ядре получателя,но этот тип фильтрации не может предотвратить исходное сообщение о согласованности от источника. Наконец, внутрисетевые фильтры динамически сокращают трафик согласованности внутри общей шины.[4] Фильтр отслеживания также подразделяется на включающий и исключающий. Включенный фильтр отслеживания отслеживает наличие блоков кэша в кэшах. Однако эксклюзивный фильтр отслеживания отслеживает отсутствие блоков кэша в кэшах. Другими словами, попадание во включающий фильтр отслеживания означает, что соответствующий блок кэша удерживается кешами. С другой стороны, попадание в эксклюзивный фильтр отслеживания означает, что ни в одном кэше нет запрошенного блока кэша. [5]

Ссылки [ править ]

  1. ^ a b Равишанкар, Чинья; Гудман, Джеймс (28 февраля 1983 г.). Реализация кэша для нескольких микропроцессоров (PDF) . С. 346–350.
  2. ^ a b c Ян Солихин (2016). Основы параллельной компьютерной архитектуры . С. 239–246.
  3. ^ Хеннесси, Джон L; Паттерсон, Дэвид А. (2011). Компьютерная архитектура: количественный подход . стр.  355 -356. ISBN 978-0123838728.
  4. ^ Agarwal, N .; Peh, L .; Джа, Н.К. (декабрь 2009 г.). «Фильтрация внутрисетевой когерентности: отслеживание согласованности без широковещательных рассылок» . 2009 42-й ежегодный международный симпозиум IEEE / ACM по микроархитектуре (MICRO) : 232–243. DOI : 10.1145 / 1669112.1669143 . ЛВП : 1721,1 / 58870 .
  5. ^ Ulfsnes, Расмус (июнь 2013). Проектирование фильтра отслеживания для протоколов когерентности кэша на основе отслеживания . Норвежский университет науки и технологий.

Внешние ссылки [ править ]

  • Джим Плюскеллик. Централизованные архитектуры с общей памятью .
  • Snoop-фильтр .
  • http://www.icsa.inf.ed.ac.uk/research/groups/hase/models/coherence/index.html
  • http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/0650/bks/SGI_Developer/books/T_IRIX_Prog/sgi_html/ch01.html