Когерентность кэша

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

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

Несколько кэшей общих ресурсовZoom
Несколько кэшей общих ресурсов

Определение

Когерентность определяет поведение чтения и записи в одну и ту же ячейку памяти. Кэши являются когерентными, если выполняются все следующие условия:

  1. Когда процессор P читает местоположение X, после записи в это местоположение, P должен получить значение, которое он записал, если никакой другой процессор не записал другое значение в это место. Это справедливо и для монопроцессорных систем, это означает, что память способна хранить записанное значение.
  2. Предположим, есть два процессора, P1 и P2, и P1 записал значение X1, а после этого P2 записал значение X2, если P 1читает значение, он должен получить значение, записанное P2, X2, а не то значение, которое он записал, X1, если нет других записей между ними. Это означает, что представление памяти является когерентным. Если процессоры могут прочитать то же самое старое значение после записи, сделанной P2, память не будет когерентной.
  3. Одновременно может быть только одна запись в определенное место в памяти. Если записей несколько, они должны происходить друг за другом. Другими словами, если местоположение X получило два разных значения A и B, в таком порядке, любыми двумя процессорами, процессоры никогда не смогут прочитать местоположение X как B, а затем прочитать его как A. Местоположение X должно восприниматься со значениями A и B в таком порядке.

Эти условия определены в предположении, что операции чтения и записи выполняются мгновенно. Однако в компьютерном оборудовании этого не происходит из-за задержки памяти и других аспектов архитектуры. Запись процессора X может быть не замечена чтением процессора Y, если чтение производится в течение очень малого времени после записи. Модель согласованности памяти определяет, когда записанное значение должно быть увидено следующей инструкцией чтения, выполненной другими процессорами.

Механизмы когерентности кэша

  • Механизмы согласованности на основе каталогов поддерживают центральный каталог кэшированных блоков.
  • Снупинг - это процесс, в ходе которого каждый кэш отслеживает адресные линии на предмет доступа к местам памяти, которые находятся в его кэше. Когда наблюдается операция записи в место, копия которого есть в кэше, контроллер кэша аннулирует собственную копию этого места памяти.
  • Snarfing - это когда контроллер кэша следит за адресом и данными в попытке обновить свою собственную копию ячейки памяти, когда второй мастер изменяет ячейку в основной памяти.

Распределенные системы общей памяти имитируют эти механизмы, чтобы поддерживать согласованность между блоками памяти в слабосвязанных системах.

Два наиболее распространенных типа согласованности, которые обычно изучаются, - это Snooping и Directory-based. Каждый из них имеет свои преимущества и недостатки. Протоколы Snooping, как правило, быстрее, если имеется достаточная пропускная способность, поскольку все транзакции представляют собой запрос/ответ, который видят все процессоры. Недостатком является то, что snooping не масштабируется. Каждый запрос должен быть передан всем узлам системы. По мере роста системы размер (логической или физической) шины и обеспечиваемая ею пропускная способность должны увеличиваться. С другой стороны, каталоги имеют тенденцию к увеличению задержек (при запросе/пересылке/ответе в 3 прыжка), но используют гораздо меньшую пропускную способность, поскольку сообщения передаются от точки к точке, а не широковещательно. По этой причине во многих больших системах (>64 процессоров) используется этот тип когерентности кэша.

Вопросы и ответы

В: Что такое когерентность кэша?


О: Под согласованностью кэша понимается обеспечение того, что все кэши ресурса имеют одинаковые данные и что данные в кэшах согласованы (целостность данных).

В: Какова цель когерентности кэша?


О: Целью когерентности кэша является управление конфликтами между несколькими кэшами общего ресурса памяти и поддержание согласованности между кэшем и памятью.

В: Каковы могут быть последствия отсутствия когерентности кэша?


О: Без когерентности кэша данные в кэше могут перестать иметь смысл, или в одном кэше могут быть не те же данные, что и в других, что может привести к несогласованности и ошибкам.

В: Каков общий случай, когда возникают проблемы с когерентностью кэша?


О: Распространенным случаем, когда возникают проблемы с когерентностью кэша, является кэш процессоров в многопроцессорной системе.

В: Как работает когерентность кэша?


О: Когерентность кэша работает путем обеспечения того, что все кэши ресурса имеют одинаковые данные и что данные в кэшах согласованы с помощью различных методов.

В: Что подразумевается под согласованностью памяти?


О: Когерентность памяти относится к согласованности данных в общем ресурсе памяти.

В: Как когерентность кэша может повысить производительность?


О: Согласованность кэша может повысить производительность, обеспечивая более быстрый и эффективный доступ к определенному ресурсу.

AlegsaOnline.com - 2020 / 2023 - License CC3