Когерентность кэша: отслеживание на основе каталогов
Из того, что я понимаю: система, основанная на каталогах, больше ориентирована на сервер, а слежка больше однорангова.
Вот почему на основе каталога требуется меньше сообщений для любого промаха чтения, поскольку он может достичь процессора, который имеет действительные данные после проверки каталога.
Snooping просто запрашивает у каждого другого процессора сообщения n-1.
Таким образом, системы на основе каталогов масштабируются больше.
Теперь мои вопросы: если есть только одна центральная директория, то не сталкивается ли она с узким местом, когда слишком много процессоров задают вопрос после пропуска чтения?
1 ответ
Если сценарий, о котором вы спрашиваете, таков: что происходит, если все (или N-1) процессоры одновременно пропускают чтение (это обычно генерирует совместное чтение для чтения), тогда да, все процессоры N-1 отправят сообщение в каталог и всем понадобится ответ. Этот сценарий может действительно случаться часто только тогда, когда каждый процессор ожидает одной и той же спин-блокировки. Решение заключается не в том, чтобы исправить протокол когерентности (хотя для этого есть множество вариантов), а в том, чтобы использовать лучший алгоритм. Обычно люди используют алгоритмы блокировки на основе очереди (например, известный алгоритм блокировки Меллора-Крамми и Скотта).
Спин-замки одинаковы для всех одновременно, спрашивая "мы уже там?" вновь и вновь. С блокировками на основе очереди каждый берет номер и встает в очередь. Затем, когда ресурс становится доступным, следующий парень в очереди получает его с прямым уведомлением о закрытой переменной.
Просто чтобы прояснить что-то, хотя логически существует (обычно) один центральный каталог, физически не все в одном месте. Записи каталога для определенной области памяти обычно размещаются на процессоре, который имеет физическую память DRAM, поддерживающую эту память.