Ложный обмен - False sharing

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

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

Пример

структура фу {    int Икс;    int y; };статический структура фу ж;/ * Две следующие функции работают одновременно: * /int sum_a(пустота){    int s = 0;    за (int я = 0; я < 1000000; ++я)        s += ж.Икс;    возвращаться s;}пустота inc_b(пустота){    за (int я = 0; я < 1000000; ++я)        ++ж.y;}

Здесь, sum_a может потребоваться постоянно перечитывать Икс из основной памяти (а не из кеша), хотя inc_bодновременная модификация y не должно иметь значения.

внешняя ссылка

Рекомендации