This commit is contained in:
parent
756ef88701
commit
abd333c9bd
@ -7,8 +7,8 @@ date:
|
||||
zero-link:
|
||||
- "[[../../meta/zero/00 Алгоритм|00 Алгоритм]]"
|
||||
parents:
|
||||
- "[[Алгоритмы вытеснения]]"
|
||||
linked:
|
||||
- "[[Алгоритм вытеснения кэша]]"
|
||||
linked:
|
||||
---
|
||||
Объединяет преимущества: [Last Frequently Used](Last%20Frequently%20Used.md) и [Least Recently Used](Least%20Recently%20Used.md).
|
||||
|
||||
@ -18,7 +18,7 @@ linked:
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Алгоритм|00 Алгоритм]]
|
||||
**Родитель**:: [[Алгоритмы вытеснения]]
|
||||
**Родитель**:: [[Алгоритм вытеснения кэша]]
|
||||
**Источник**::
|
||||
**Автор**::
|
||||
**Создана**:: [[2024-06-17]]
|
||||
|
@ -8,7 +8,7 @@ date:
|
||||
zero-link:
|
||||
- "[[../../meta/zero/00 Алгоритм|00 Алгоритм]]"
|
||||
parents:
|
||||
- "[[Алгоритмы вытеснения]]"
|
||||
- "[[Алгоритм вытеснения кэша]]"
|
||||
linked:
|
||||
- "[[Most Recently Used]]"
|
||||
---
|
||||
@ -16,7 +16,7 @@ linked:
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Алгоритм|00 Алгоритм]]
|
||||
**Родитель**:: [[Алгоритмы вытеснения]]
|
||||
**Родитель**:: [[Алгоритм вытеснения кэша]]
|
||||
**Источник**::
|
||||
**Автор**::
|
||||
**Создана**:: [[2024-06-17]]
|
||||
|
@ -8,7 +8,7 @@ date:
|
||||
zero-link:
|
||||
- "[[../../meta/zero/00 Алгоритм|00 Алгоритм]]"
|
||||
parents:
|
||||
- "[[Алгоритмы вытеснения]]"
|
||||
- "[[Алгоритм вытеснения кэша]]"
|
||||
linked:
|
||||
- "[[Most Recently Used]]"
|
||||
- "[[Псевдо-LRU]]"
|
||||
@ -34,7 +34,7 @@ Least Recently Used (LRU) — это алгоритм управления кэ
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Алгоритм|00 Алгоритм]]
|
||||
**Родитель**:: [[Алгоритмы вытеснения]]
|
||||
**Родитель**:: [[Алгоритм вытеснения кэша]]
|
||||
**Источник**::
|
||||
**Автор**::
|
||||
**Создана**:: [[2024-05-24]]
|
||||
|
@ -8,7 +8,7 @@ date:
|
||||
zero-link:
|
||||
- "[[../../meta/zero/00 Алгоритм|00 Алгоритм]]"
|
||||
parents:
|
||||
- "[[Алгоритмы вытеснения]]"
|
||||
- "[[Алгоритм вытеснения кэша]]"
|
||||
linked:
|
||||
- "[[Least Recently Used]]"
|
||||
---
|
||||
@ -24,7 +24,7 @@ linked:
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Алгоритм|00 Алгоритм]]
|
||||
**Родитель**:: [[Алгоритмы вытеснения]]
|
||||
**Родитель**:: [[Алгоритм вытеснения кэша]]
|
||||
**Источник**::
|
||||
**Автор**::
|
||||
**Создана**:: [[2024-06-17]]
|
||||
|
@ -1,5 +1,8 @@
|
||||
---
|
||||
aliases:
|
||||
aliases:
|
||||
- алгоритмы замещения кэша
|
||||
- Алгоритмы вытеснения
|
||||
- алгоритмов замещения
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-09-11
|
||||
@ -9,12 +12,15 @@ parents:
|
||||
- "[[../architecture/highload/Инвалидация кэша|Инвалидация кэша]]"
|
||||
linked:
|
||||
---
|
||||
Алгоритмы вытеснения кэша определяют, какие данные должны быть удалены из кэша, когда он заполняется.
|
||||
|
||||
- Алгоритм Белади. Несуществующий идеальный алгоритм. Храним только нужную информацию, не нужную не храним.
|
||||
- [Least Recently Used](Least%20Recently%20Used.md)
|
||||
- [Least Recently Used](Least%20Recently%20Used.md). Один из наиболее популярных. Отслеживает, какие данные использовались недавно, и удаляет те, которые не использовались дольше всего
|
||||
- [Псевдо-LRU](Псевдо-LRU.md)
|
||||
- [Most Recently Used](Most%20Recently%20Used.md)
|
||||
- [Last Frequently Used](Last%20Frequently%20Used.md)
|
||||
- [Adaptive Replacement Cache](Adaptive%20Replacement%20Cache.md)
|
||||
- **FIFO (First In, First Out)** работает по принципу "первым пришел — первым ушел", удаляя данные в том порядке, в котором они были загружены в кэш. Хотя этот алгоритм проще, он не всегда эффективен, так как не учитывает, что старые данные могут по-прежнему быть востребованными.
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Алгоритм|00 Алгоритм]]
|
@ -7,7 +7,7 @@ date:
|
||||
zero-link:
|
||||
- "[[../../meta/zero/00 Алгоритм|00 Алгоритм]]"
|
||||
parents:
|
||||
- "[[Алгоритмы вытеснения]]"
|
||||
- "[[Алгоритм вытеснения кэша]]"
|
||||
linked:
|
||||
- "[[Least Recently Used]]"
|
||||
---
|
||||
@ -21,7 +21,7 @@ linked:
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Алгоритм|00 Алгоритм]]
|
||||
**Родитель**:: [[Алгоритмы вытеснения]]
|
||||
**Родитель**:: [[Алгоритм вытеснения кэша]]
|
||||
**Источник**::
|
||||
**Автор**::
|
||||
**Создана**:: [[2024-06-18]]
|
||||
|
@ -20,7 +20,7 @@ linked:
|
||||
- При большом TTL данные могут быть не консистентны
|
||||
- Инвалидация по событию
|
||||
- Опасно из-за риска мгновенной инвалидации и сопутствующей [[Перестройка кэша|перестройки кэша]]
|
||||
- Использование [[../../algorithm/Алгоритмы вытеснения|алгоритмов вытеснения]]
|
||||
- Использование [[../../algorithm/Алгоритм вытеснения кэша|алгоритмов вытеснения]]
|
||||
|
||||
Дополнительно для работы со статическими файлами можно отменить [[../Fingerprint|Fingerprint]].
|
||||
|
||||
@ -59,7 +59,7 @@ return value;
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
<!-- SerializedQuery: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
- [[Алгоритмы вытеснения]]
|
||||
- [[Fingerprint]]
|
||||
- [[Алгоритм вытеснения кэша]]
|
||||
<!-- SerializedQuery END -->
|
||||
|
||||
|
34
dev/fundamental/Cache coherence.md
Normal file
34
dev/fundamental/Cache coherence.md
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
aliases:
|
||||
- кэш-кохерентность
|
||||
- кэш-кохерентности
|
||||
- кэш-кохерентностью
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-12
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
Когда [[Центральный процессор|процессор]] имеет несколько [[Ядро процессора|ядер]], каждое из них может иметь собственный [[Кэш процессора|кэш процессора]], что приводит к проблеме кэш-кохерентности. Она возникает, когда одно ядро изменяет данные, находящиеся в его кэше, а другие ядра продолжают использовать устаревшую версию этих данных из своего кэша. В результате возникает рассинхронизация, что может привести к некорректной работе программ, особенно в многозадачных системах.
|
||||
|
||||
Для решения этой проблемы используются протоколы кэш-кохерентности:
|
||||
- [[MESI]]. Один из наиболее распространенных.
|
||||
- MOESI
|
||||
- MESIF
|
||||
***
|
||||
## Мета информация
|
||||
**Область**::
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-12]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
<!-- SerializedQuery: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
- [[MESI]]
|
||||
<!-- SerializedQuery END -->
|
||||
|
31
dev/fundamental/MESI.md
Normal file
31
dev/fundamental/MESI.md
Normal file
@ -0,0 +1,31 @@
|
||||
---
|
||||
aliases:
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-12
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
Название MESI происходит от четырех состояний, в которых могут находиться данные в [[Кэш процессора|кэше процессора]]:
|
||||
|
||||
- **M (Modified)** — данные изменены в кэше ядра и не синхронизированы с оперативной памятью.
|
||||
- **E (Exclusive)** — данные находятся только в кэше этого ядра и соответствуют содержимому памяти.
|
||||
- **S (Shared)** — данные разделены между несколькими ядрами, и их копии синхронизированы с памятью.
|
||||
- **I (Invalid)** — данные в кэше недействительны, потому что они были изменены другим ядром или сброшены.
|
||||
|
||||
==Когда одно ядро изменяет данные в своем кэше, протокол MESI уведомляет другие ядра о том, что их копии этих данных больше не актуальны==. Это позволяет поддерживать согласованность данных между ядрами и предотвращает возможные ошибки.
|
||||
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Архитектура ЭВМ|00 Архитектура ЭВМ]]
|
||||
**Родитель**:: [[Cache coherence]]
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-12]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
30
dev/fundamental/Non-Uniform Memory Access.md
Normal file
30
dev/fundamental/Non-Uniform Memory Access.md
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
aliases:
|
||||
- NUMA
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-12
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
**NUMA (Non-Uniform Memory Access)** — это архитектура памяти, используемая в многопроцессорных системах, где время доступа к оперативной памяти зависит от физического расположения [[Центральный процессор|процессора]] и модулей памяти.
|
||||
|
||||
В традиционной архитектуре **UMA (Uniform Memory Access)**, время доступа ко всей памяти одинаково для всех процессоров, что ограничивает масштабируемость. В NUMA же каждый процессор имеет собственную локальную память, к которой он получает доступ быстрее, чем к памяти, расположенной у другого процессора.
|
||||
|
||||
NUMA может существенно влиять на работу [[Кэш процессора|кэш-памяти]]. Поскольку кэш каждого процессора хранит данные, связанные с его локальной памятью, доступ к удаленной памяти требует дополнительной синхронизации и согласования данных. В многоядерных системах это приводит к более сложным задачам по управлению [[Cache coherence|кэш-кохерентностью]], чтобы предотвратить несогласованность данных между ядрами, особенно при частом доступе к удаленным данным.
|
||||
|
||||
В системах с NUMA также важно правильно распределять задачи между ядрами, чтобы минимизировать обращения к удаленной памяти и максимально использовать локальную память и кэш. Программисты могут оптимизировать производительность таких систем с помощью NUMA-aware алгоритмов, распределяя данные и задачи таким образом, чтобы кэш эффективно использовался в пределах каждого процессора и минимизировался доступ к удаленной памяти.
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Архитектура ЭВМ|00 Архитектура ЭВМ]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-12]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
28
dev/fundamental/Атомарная операция.md
Normal file
28
dev/fundamental/Атомарная операция.md
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
aliases:
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-12
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
Операция атомарная, если невозможно наблюдать частичный результат ее выполнения. Любой наблюдатель видит либо состояние системы до атомарной операции, либо после
|
||||
|
||||
В Java:
|
||||
- Запись в поле типа boolean, byte, short, char, int, Object всегда атомарна
|
||||
- Запись в поле типа long/double: атомарна запись старших и младших 32 бит
|
||||
- Запись в поле типа long/double, объявленное volatile, атомарна
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Разработка|00 Разработка]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-12]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
47
dev/fundamental/Кэш процессора.md
Normal file
47
dev/fundamental/Кэш процессора.md
Normal file
@ -0,0 +1,47 @@
|
||||
---
|
||||
aliases:
|
||||
- кэше процессора
|
||||
- кэш-памяти
|
||||
- кэш-память
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date: 2024-10-12
|
||||
zero-link:
|
||||
parents:
|
||||
linked:
|
||||
---
|
||||
Кэш — это небольшая и очень быстрая память, встроенная в [[Центральный процессор|процессор]], предназначенная для временного хранения данных, к которым процессор обращается чаще всего. Основная задача кэша — ускорение работы процессора за счет минимизации времени доступа к этим данным.
|
||||
|
||||
Процессор работает значительно быстрее, чем [[../../../../knowledge/dev/pc/Оперативная память|оперативная память]] (RAM), поэтому при прямом обращении к оперативной памяти возникали бы значительные задержки. Кэш решает эту проблему, храня наиболее востребованные данные и инструкции ближе к процессору. Когда процессор выполняет операцию, он сначала проверяет кэш. ==Если нужная информация находится в кэше, она загружается практически мгновенно==. В противном случае процессору приходится обращаться к более медленной оперативной памяти, что увеличивает время ожидания.
|
||||
|
||||
Кэш-память процессора делится на два типа: кэш для данных и кэш для инструкций. Такое разделение позволяет повысить производительность процессора за счет оптимизации доступа к различным видам информации.
|
||||
|
||||
Кэш инструкций хранит машинный код программ, который процессор должен выполнить, а кэш данных содержит фактические данные, с которыми работают программы. Это разделение позволяет процессору одновременно загружать инструкции для выполнения и данные для обработки, минимизируя задержки.
|
||||
|
||||
Когда кэш заполняется, процессор должен решить, какие данные удалить, чтобы освободить место для новых. Эта задача решается с помощью специальных алгоритмов замещения.
|
||||
|
||||
Когда процессор имеет несколько ядер, каждое из них может иметь собственный кэш, что приводит к проблеме [[Cache coherence|кэш-кохерентности]].
|
||||
## Уровни кэша
|
||||
Кэш процессора разделен на несколько уровней: L1, L2 и L3. Каждый уровень отличается по объему, скорости и месту в архитектуре процессора.
|
||||
|
||||
**L1-кэш** — самый быстрый и ближайший к ядру процессора уровень кэша. Он имеет небольшой объем, обычно от нескольких десятков до сотни килобайт, и разделяется на две части: для инструкций и для данных. Это позволяет ускорять как выполнение команд, так и работу с информацией.
|
||||
|
||||
**L2-кэш** находится на следующем уровне и имеет больший объем, чем L1, но его скорость ниже. Обычно L2-кэш выделяется для каждого ядра процессора отдельно, что позволяет ядрам работать автономно и быстро получать доступ к своим данным.
|
||||
|
||||
**L3-кэш** — самый медленный, но и самый большой по объему уровень кэша. Он общий для всех ядер процессора и позволяет ядрам обмениваться данными через этот уровень. Несмотря на то что L3 медленнее, чем L1 и L2, он все равно значительно быстрее оперативной памяти.
|
||||
|
||||
## Кэш-линия
|
||||
Кэш-линия — это минимальная единица данных, с которой работает кэш-память. Когда процессор загружает данные из оперативной памяти в кэш, он перемещает не один байт, а целую кэш-линию, которая содержит группу смежных данных. Использование кэш-линий позволяет более эффективно задействовать кэш, так как высока вероятность того, что процессору понадобятся соседние данные, что объясняется [[Принцип локальности|принципом локальности]].
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Архитектура ЭВМ|00 Архитектура ЭВМ]]
|
||||
**Родитель**:: [[Центральный процессор]]
|
||||
**Источник**::
|
||||
**Создана**:: [[2024-10-12]]
|
||||
**Автор**::
|
||||
### Дополнительные материалы
|
||||
-
|
||||
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
aliases:
|
||||
- принципе локальности
|
||||
- принципом локальности
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date:
|
||||
|
@ -7,6 +7,7 @@ aliases:
|
||||
- процессору
|
||||
- процессоре
|
||||
- процессора
|
||||
- процессор
|
||||
tags:
|
||||
- maturity/🌱
|
||||
date:
|
||||
@ -32,7 +33,7 @@ linked:
|
||||
Первые процессоры могли одновременно выполнять только одну программу. В какой-то момент появились процессоры, которые содержат несколько [процессорных ядер](Ядро%20процессора.md). Каждое процессорное ядро может работать независимо от другого, что увеличивает производительность процессора, если ПО поддерживает работу в многоядерной системе.
|
||||
***
|
||||
## Мета информация
|
||||
**Область**:: [[../../meta/zero/00 Архитектура ЭВМ|Архитектура ЭВМ]]
|
||||
**Область**:: [[../../meta/zero/00 Архитектура ЭВМ|00 Архитектура ЭВМ]]
|
||||
**Родитель**::
|
||||
**Источник**::
|
||||
**Автор**::
|
||||
@ -42,6 +43,6 @@ linked:
|
||||
### Дочерние заметки
|
||||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
<!-- SerializedQuery: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||||
- [[Ядро процессора]]
|
||||
- [[Многозадачность]]
|
||||
- [[Ядро процессора]]
|
||||
<!-- SerializedQuery END -->
|
||||
|
@ -5,5 +5,5 @@ parents:
|
||||
- "[[00 Разработка]]"
|
||||
title: Алгоритм
|
||||
---
|
||||
- [[../../dev/algorithm/Алгоритмы вытеснения|Алгоритмы вытеснения]]
|
||||
- [[../../dev/algorithm/Алгоритм вытеснения кэша|Алгоритмы вытеснения]]
|
||||
- [Бинарный поиск на Java](../../dev/java/Бинарный%20поиск%20на%20Java.md)
|
Loading…
Reference in New Issue
Block a user