Протокол MESI. Запись с отсутствием кэша, но копия строки кэша существует на другом процессоре. Зачем нужно извлекать из основной памяти?
Согласно этой схеме в случае пропуска кеша записи при копировании в другой кеш процессора (например, Shared/Exclusive state). Шаги:
1. Отслеживание ядер (с копией строки кэша) устанавливает состояние Invalid.
2. Текущий кеш хранит свежее значение основной памяти.
Почему одно из отслеживающих ядер не может сначала поместить значение строки кэша на шину? А затем перейдите в неверное состояние. Тот же алгоритм используется в считывании с существующей копией. Спасибо.
1 ответ
Вы абсолютно правы в том, что довольно глупо извлекать строку из памяти, когда она уже рядом с вами, но эта диаграмма описывает минимальные требования к функциональной корректности протокола когерентности (то есть, что нужно сделать, чтобы избежать согласованности). ошибки), и это только требует отслеживания данных для измененных строк, так как это единственная правильная копия. То, что вы описываете, является возможной оптимизацией, и некоторые системы действительно ведут себя таким образом.
Однако имейте в виду, что в настоящее время большинство систем также используют общий кэш (L2 или L3, иногда даже выше этого), и это часто включительно (в отношении всех линий, которые существуют во всех ядрах). В таких системах нет никакой необходимости переходить к памяти полностью, поскольку наличие строки в другом ядре означает, что она также находится в общем кэше, и после аннулирования запрашивающее ядро может получить ее оттуда. Поэтому ваше предложение относится только к системам без общего кеша или с кешем, который не является строго включенным.