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

Из того, что я понимаю: система, основанная на каталогах, больше ориентирована на сервер, а слежка больше однорангова.

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

Snooping просто запрашивает у каждого другого процессора сообщения n-1.

Таким образом, системы на основе каталогов масштабируются больше.

Теперь мои вопросы: если есть только одна центральная директория, то не сталкивается ли она с узким местом, когда слишком много процессоров задают вопрос после пропуска чтения?

1 ответ

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

Спин-замки одинаковы для всех одновременно, спрашивая "мы уже там?" вновь и вновь. С блокировками на основе очереди каждый берет номер и встает в очередь. Затем, когда ресурс становится доступным, следующий парень в очереди получает его с прямым уведомлением о закрытой переменной.

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

Другие вопросы по тегам