Производительность стоимость протокола MESI?
Протокол MESI (Modified, Exclusive, Shared, Invalid) используется для связи кэшей ЦП и обеспечения того, что все они используют последнее значение для строки кэша. Когда один ЦП изменяет значение строки кэша, все остальные ЦП, подписанные на эту строку кэша, получают предупреждение об изменении строки кэша.
Тем не менее, во всей литературе, которую я читал о MESI, я не видел, есть ли какие-либо издержки производительности, пока протокол взаимодействует? Будет ли эта стоимость просто частью x86 LOCK
стоимость префикса? Я вполне уверен, что MESI можно использовать даже тогда, когда x86 LOCK
префикса нет?
Обратите внимание, что Intel фактически использует протокол MESIF, где F - дополнительное состояние "Пересылка".
2 ответа
Да, протокол MESI(F) используется во всех операциях с памятью (т. Е. Чтение и запись). Представьте, что вы записали что-то в кеш (то есть состояние 'M'), и теперь эту строку нужно удалить. Протокол говорит, что вам нужно записать его обратно в память. Если бы протокол не использовался, то нам либо нужно было бы всегда осуществлять сквозную запись в память (огромные затраты на пропускную способность), либо иметь несовместимую память (плохая идея).
То есть, если нет общего доступа, протокол MESI все равно будет использоваться, и в этом случае линии будут в состояниях "E", "I" или "M", и "S" не будет использоваться.
Примечание: помните, что почти все приложения в системе обычно совместно используют некоторый динамический библиотечный код. Как вы думаете, где будет находиться код и как будет осуществляться управление его доступом?
Теперь, чтобы ответить на ваш вопрос о влиянии на производительность. Да, реализация MESI(f) или любого протокола когерентности будет влиять на производительность, но это влияние на самом деле положительное по сравнению со случаем, когда протокол когерентности не существует. В этом случае каждая операция чтения / записи должна идти в основную память (т. Е. Ваше приложение будет в 100 раз медленнее).
Итак, суть: хотя протокол MESI(f) оказывает негативное влияние на пропускную способность, в целом он оказывает положительное влияние на производительность. Это на самом деле дает нам большую производительность (и мощность) по сравнению со случаем, когда мы не используем протокол когерентности кеша (т.е. не кешируем)
Протокол MESI работает путем обмена сообщениями на межпроцессорной шине (однако эта шина реализована). Эта шина имеет ограниченную пропускную способность, поэтому ее можно насыщать с помощью атомарных инструкций.
Вот почему плохо написанные приложения, которые без необходимости используют атомарные инструкции, негативно влияют на всю машину.