📌 Cache coherence
Cache coherence — свойство многопроцессорных систем, гарантирующее согласованность данных между копиями одного и того же адреса в разных L1/L2 при использовании общего RAM.
🧠 Как работает
В SMP и Multicore CPU каждое ядро имеет собственный Cache. Когда несколько ядер читают и пишут одну и ту же память, возможны несогласованные состояния.
Протоколы когерентности обеспечивают единое представление данных:
- MESI (Modified, Exclusive, Shared, Invalid)
- MOESI, MSI, MESIF — расширения MESI
- Directory-based — централизованная таблица отслеживает владельцев
Принцип работы (на примере MESI):
- Ядро читает адрес A → получает его в состоянии Shared
- Ядро B модифицирует A → переводит A в Modified, остальные инвалидируются
- Другие ядра при следующем чтении получают обновлённые данные
Механизмы поддержки:
- Bus snooping — ядра следят за шиной памяти
- Interconnect — передаёт сообщения между CPU и Cache Controller
- Memory barrier — упорядочивает доступ к памяти
⚙️ Где применяется
Система | Значение |
---|---|
Multicore CPU | Согласованность кэшей при совместной памяти |
NUMA | Глобальный порядок обновлений |
GPU с shared memory | Между блоками/ядрами |
Hypervisor | Поддержка когерентности у VM и VCPU |
✅ Преимущества
- Гарантирует правильность работы многопоточных программ
- Автоматически поддерживается современными CPU
- Улучшает предсказуемость и дебаггинг параллельного кода
❌ Недостатки
- Performance penalty из-за частых инвалидаций
- Повышенная нагрузка на Memory bus
- Сложность реализации в гетерогенных системах
- Возможен False sharing — деградация производительности