Иерархия памяти
В компьютерной архитектуреиерархия памяти разделяет память компьютера на иерархию , основанную на времени отклика. Поскольку время отклика, сложность и пропускная способность взаимосвязаны, уровни могут также различаться по их производительности и технологиям управления.[1] иерархия памяти влияет на производительность при компьютерном архитектурном проектировании, предсказании алгоритмов и построениях программирования более низкого уровня, связанных с локальностью ссылок.
Проектирование для обеспечения высокой производительности требует учета ограничений иерархии памяти, то есть размера и возможностей каждого компонента. Каждый из различных компонентов можно рассматривать как часть иерархии воспоминаний (m1,m2,...,mn), в которой каждый элемент mi обычно меньше и быстрее, чем следующий самый высокий элемент mi+1 иерархии. Чтобы ограничить ожидание более высокими уровнями, более низкий уровень ответит заполнением буфера, а затем сигнализирует для активации передачи.
Существует четыре основных уровня хранения.
- Внутренние Регистры процессора и кэш.
- Основная – системная оперативная память и карты контроллера.
- On-line mass storage-вторичная память.
- Off-line bulk storage – третичное и автономное хранение.
Это общее структурирование иерархии памяти. Многие другие структуры полезны. Например, алгоритм разбиения на страницы может рассматриваться как уровень для виртуальной памяти при проектировании архитектуры компьютера, и можно включить уровень nearline хранения между сетевым и автономным хранилищем.
Свойства технологий в иерархии памяти[править]
- Добавление сложности замедляет иерархию памяти.[2]
- Технология памяти CMOx растягивает пространство флэш - памяти в иерархии памяти
- Одним из основных способов повышения производительности системы является минимизация того, как далеко вниз по иерархии памяти нужно идти, чтобы манипулировать данными.
- Задержка и пропускная способность-это две метрики, связанные с кэшами. Ни один из них не является однородным, но специфичен для конкретного компонента иерархии памяти.
- Предсказать, где в иерархии памяти находятся данные, довольно сложно.
- ..расположение в иерархии памяти определяет время, необходимое для выполнения предварительной выборки.
Примеры[править]
Количество уровней в иерархии памяти и производительность на каждом уровне со временем увеличились. Тип памяти или компонентов хранилища также изменяется исторически. например, иерархия памяти процессора Intel Haswell Mobile примерно в 2013 г.:
- Регистры процессора – максимально быстрый доступ (обычно 1 цикл процессора). Размер в несколько тысяч байт
- Кэш
- Кэш микроопераций уровня 0 (L0) – размер 6 КБ
- Кэш команд уровня 1 (L1) – размер 128 Кб
- Кэш данных уровня 1 (L1) – размер 128 Кб. Лучшая скорость доступа-около 700 гиб/с[9]
- Уровень 2 (L2) инструкции и данные (общие) – размер 1 Мб. Лучшая скорость доступа - около 200 гиб/с
- Общий кэш уровня 3 (L3) – размер 6 Мб. Лучшая скорость доступа-около 100 гиб/с
- Общий кэш уровня 4 (L4) – 128 Мбайт. Лучшая скорость доступа-около 40 гиб/с
- Основная память (Primary storage) – гигабайт в размере. Наилучшая скорость доступа составляет около 10 гиб/с. в случае машины NUMA время доступа может быть неравномерным
- Дисковое хранилище (вторичное хранилище) – размер в терабайтах. По состоянию на 2017 год наилучшая скорость доступа с потребительского твердотельного накопителя составляет около 2000 МБ/с
- Nearline storage (Третичное хранилище) - до эксабайт в размере. По состоянию на 2013 год, лучшая скорость доступа составляет около 160 МБ / с
- Автономное хранилище данных
Нижние уровни иерархии – от дисков вниз – также известны как многоуровневое хранилище. Формальное различие между онлайн -, nearline и автономным хранилищем заключается в следующем:
- Онлайн-хранилище сразу же доступно для ввода-вывода.
- Хранилище Nearline доступно не сразу, но может быть быстро подключено к сети без вмешательства человека.
- Автономное хранилище не сразу доступно, и требует некоторого вмешательства человека, чтобы вывести его в интернет.
Например, всегда включенные вращающиеся диски находятся в режиме онлайн, в то время как вращающиеся диски, которые вращаются вниз, такие как массивный массив холостого диска (MAID), находятся рядом. Съемные носители, такие как ленточные картриджи, которые могут быть загружены автоматически , как в библиотеке ленточныхносителей, находятся вблизи линии, в то время как картриджи, которые должны быть загружены вручную, находятся вне сети.
Большинство современных процессоров работают настолько быстро, что для большинства рабочих нагрузок программ узким местом является локальность ссылок на доступ к памяти и эффективность кэширования и передачи памяти между различными уровнями иерархии[нужная цитата]. В результате процессор тратит большую часть своего времени на холостом ходу, ожидая завершения ввода-вывода памяти. Это иногда называют стоимостью пространства, так как более крупный объект памяти с большей вероятностью переполнит малый/быстрый уровень и потребует использования большего/более медленного уровня. Результирующая нагрузка на использование памяти известна как давление (соответственно давление регистра, давление кэшаи (основное) давление памяти). Термины для данных, отсутствующих на более высоком уровне и нуждающихся в извлечении с более низкого уровня, соответственно: разлив регистра (из-за давления регистра: регистр в кэш), промах кэша (кэш в основную память) и (жесткая) ошибка страницы (основная память на диск).
Современные языки программирования в основном предполагают два уровня памяти: основную память и дисковое хранилище, хотя в ассемблере и встроенных ассемблерах в таких языках , как C, регистры могут быть доступны непосредственно. Оптимальное использование иерархии памяти требует сотрудничества программистов, аппаратных средств и компиляторов (а также базовой поддержки со стороны операционной системы):
- Программисты отвечают за перемещение данных между диском и памятью через файловый ввод-вывод.
- Аппаратное обеспечение отвечает за перемещение данных между памятью и кэшем.
- Оптимизирующие компиляторы отвечают за генерацию кода, который при выполнении заставляет аппаратное обеспечение эффективно использовать кэши и регистры.
Многие программисты предполагают один уровень памяти. Это работает нормально, пока приложение не попадает в стену производительности. Затем иерархия памяти будет оценена во время рефакторинга кода.
См. также[править]
- Иерархия кэша
- Использование пространственной и временной локальности: иерархическая память
- Буфер против кэша
- Иерархия кэша в современном процессоре
- Стена памяти
- Память компьютера
- Иерархическое управление хранилищем
- Облачное хранилище
- Шаблон доступа к памяти
- Алгоритм избегания общения