Общая рекомендация - минимизировать количество строк кэша и виртуальных страниц, которые демонстрируют высокую временную локальность на одном и том же ядре в течение одного и того же интервала времени жизни данного приложения.
Когда общее количество необходимых физических страниц собирается превысить объем основной памяти, ОС попытается освободить часть физической памяти, переместив некоторые резидентные страницы во вторичное хранилище. Такая ситуация может привести к серьезным сбоям страниц, что может существенно повлиять на производительность. Даже если вы точно знаете, что система не достигнет этой точки, существуют другие проблемы с производительностью, которые могут возникнуть при излишнем использовании большего количества виртуальных страниц (т. Е. На использованных страницах есть неиспользуемое пространство).
На процессорах Intel и AMD записи таблицы страниц и другие структуры подкачки кэшируются в аппаратных кэшах в блоке управления памятью для эффективного преобразования виртуальных адресов в физические адреса. К ним относятся TLB L1 и L2. В случае пропуска L2 TLB аппаратный компонент, называемый обходчиком страниц, задействуется для выполнения требуемой трансляции адресов. Больше страниц означает больше промахов. На микроархитектурах до Broadwell 1 и pre-Zen в каждый момент времени может быть только один просмотр страниц. На более поздних микроархитектурах их может быть только две. Кроме того, в Intel Ivy Bridge и более поздних версиях сборщику TLB может быть сложнее не отставать от промахов.
На процессорах Intel и AMD кэши L1D и L2 спроектированы таким образом, что все строки кэша в пределах одной страницы 4K гарантированно отображаются в разные наборы кэшей. Таким образом, если используются все строки кэша на странице, например, в борьбе за распространение строк кэша на 10 разных страницах, количество конфликтов на этих уровнях кэша может быть уменьшено. Тем не менее, на всех процессорах AMD и на микроархитектурах Intel до Haswell конфликты между банками чаще возникают, когда доступы более распределены по наборам кэша.
На процессорах Intel и AMD аппаратные средства предварительной выборки данных не работают за пределами 4K. Шаблон доступа, который может быть обнаружен одним или несколькими средствами предварительной выборки, но имеет доступ, распределенный по многим страницам, меньше выиграл бы от аппаратной предварительной выборки.
В Windows / Intel биты доступа к записям таблицы страниц всех существующих страниц сбрасываются каждую секунду менеджером рабочего набора. Поэтому, когда доступы неоправданно распределяются в виртуальном адресном пространстве, число обходов страниц, для которых требуются вспомогательные микрокоды (чтобы установить бит доступа) на доступ к памяти, может увеличиться.
То же самое относится и к незначительным сбоям страниц (на Intel и AMD). Как в Windows, так и в Linux используется разбиение на страницы по требованию, т. Е. Выделенная виртуальная страница отображается только на физическую страницу по требованию. При доступе к виртуальной странице, которая еще не сопоставлена с физической страницей, возникает незначительная ошибка страницы. Как и в случае с битом доступа, количество незначительных сбоев страниц при обращении может быть больше.
На процессорах Intel с большим количеством обращающихся страниц становится более вероятным доступ к соседним логическим ядрам с 4K-псевдонимом. Для получения дополнительной информации о псевдонимах 4K см .: Пропускная способность памяти L1: снижение эффективности на 50% при использовании адресов, которые отличаются на 4096 + 64 байта .
Возможно, есть и другие потенциальные проблемы.
Подзапрос: даже если вы совсем близко не заполняете ОЗУ, есть ли
в каких случаях современная ОС будет запускать запущенный процесс? (Я думаю
Linux 90-х мог бы сделать это для увеличения кеширования файлов, для
экземпляр.)
В Windows и Linux максимальный размер рабочего набора установлен для каждого процесса. В Linux это называется RLIMIT_RSS
и не применяется. В Windows это ограничение может быть мягким (по умолчанию) или жестким. Ограничение применяется только в том случае, если оно жесткое (это можно указать, вызвав функцию SetProcessWorkingSetSizeEx
и передав флаг QUOTA_LIMITS_HARDWS_MIN_ENABLE
). Когда процесс достигает предела своего жесткого рабочего набора, дальнейшие запросы на выделение памяти будут удовлетворены путем перемещения некоторых его страниц в файл подкачки, даже если свободная физическая память доступна.
Я не знаю о Linux 90-х годов.
Примечания:
(1) Руководство по оптимизации Intel упоминает в разделе 2.2.3, что Skylake может выполнять два обхода страницы параллельно по сравнению с одним в Haswell и более ранних микроархитектурах. Насколько мне известно, в руководстве не указано, может ли Бродвелл выполнять одну или две прогулки по страницам параллельно. Однако, согласно слайду 10 из этих слайдов Intel (озаглавленных «Процессор Intel Xeon D: первый процессор Xeon, оптимизированный для плотных решений»), Xeon Broadwell поддерживает два просмотра страниц. Я думаю, что это также относится ко всем моделям Broadwell.