Есть ли сборщики мусора, которые учитывают подкачку?


12

Сборщики мусора должны посещать все живые объекты, чтобы найти память, которую можно восстановить. (Наличие многих поколений просто задерживает это)

При прочих равных, лучше сначала посетить объект, который уже выгружен в ОЗУ, прежде чем вставить другой блок в пейджинговый блок и, следовательно, выгрузить какой-либо объект.

Другая возможность состоит в том, что, когда ОС хочет убрать страницу оперативной памяти из процесса, GC сначала спрашивают, есть ли у него страница, которую можно отказаться, не требуя ее выгрузки. GC может в основном выполняться с перемещением объектов со страницы, поэтому можно очистить эту страницу в течение времени, которое ОС имеет для необходимости страницы.

Тем не менее, я не могу вспомнить ни одного сборщика мусора, который интегрируется с системой подкачки ОС, которая определяет порядок работы GC.


Не совсем пейджинговая, но версия ruc Enterprise Edition gc была переписана, чтобы уменьшить влияние gc на копирование на страницах записи, перемещая метаданные объекта на отдельные страницы.
user1937198


удивительно, афаик / афаик, почти вся (?) литература gc, похоже, не анализирует подкачку ОС, кроме как абстрактно. Идея: система распределения памяти, которая отслеживает указатели между объектами в структуре, отдельной от самих объектов, может быть более дружественной к локальным / подкачкам, потому что только сами указатели (во время gc) перемещаются в плотно уплотненном пространстве вместо всех объектов различные размеры, которые могут быть распределены в памяти (и некоторые нечасто доступны и, таким образом, разбиты на страницы). могут быть некоторые скромные накладные расходы, но это может привести к общей экономии в зависимости от реализации.
vzn

Флэш-накопители должны использовать форму копирования мусора, которая учитывает расположение памяти в блоках, хотя я не знаю, насколько хорошо такие вещи обсуждаются в научной литературе. Проблемы, которые должны быть решены, очень разные (флеш-накопители нуждаются в GC, потому что пространство может быть переработано только в очень больших блоках, поэтому, если у блока есть несколько живых страниц и много мертвых страниц, живые данные должны быть скопированы в другое место перед страницей. могут быть переработаны), но принципы консолидации данных могут быть полезны.
суперкат

1
Шаблон, который я использовал в тех случаях, когда все элементы данных были небольшими по сравнению с размером порции памяти, состоял в том, чтобы каждый элемент данных состоял из заголовка фиксированного размера, который был выделен спереди назад, и данных переменного размера, которые быть распределенным задом наперед. В таблице хранятся сопоставленные адреса логических чанков с физическими адресами и количеством свободного места в каждом чанке; после каждого сканирования он также будет определять, сколько места было мертвым. Ссылки хранятся во флэш-памяти, и каждая ссылка имеет форму «Элемент № 3 логического блока № 7». Цикл GC будет копировать все живые данные из одного куска в новый, и ...
суперкат

Ответы:


8

Насколько я помню, сборщики копий должны быть дружественными по страницам, так как отслеживание путем копирования имеет тенденцию улучшать локальность ссылок на указатели. Это оказывает положительное влияние на программу (мутатор), что приведет к уменьшению количества сбоев страниц при переходе по ссылкам, а также улучшит следующий цикл сбора, поскольку трассировка также приведет к уменьшению количества сбоев страниц. Повестка дня отслеживания (какие указатели должны быть обработаны в первую очередь) может повлиять на эффективность улучшения локальности данных. Это может быть улучшено путем сбора статистических данных о количестве доступа к различным указателям в разных типах ячеек.

Теперь, если вы рассматриваете сборщик трассировки в целом, вы обычно должны поддерживать структуру, которая отслеживает указатели, которые еще не отслежены. Может быть возможно организовать эту структуру так, чтобы все ожидающие указатели, указывающие на одну и ту же страницу, были сохранены вместе (хотя это может занимать больше места, в некоторых случаях, в зависимости от доступных методов для сохранения списка таких указателей). Тогда возможной политикой является всегда сначала отследить самый большой набор указателей ожидания, указывающих на одну и ту же страницу, когда на страницах в памяти не осталось указателя ожидания.

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

Подобные идеи естественны и, вероятно, описаны в некоторых статьях. Но я не припомню это от руки. Я думаю, что ранние статьи о Lisp GC содержат некоторые из этих идей (такие как: следует ли сначала следовать машине или cdr?).

Хорошая новость в этой роли копирования-сбора также заключается в том, что подкачка удобна для копирования, поскольку увеличивает доступное пространство для хранения. Напомним, что сборщик копий в принципе требует вдвое больше места, чем используется для реального хранения данных. Теперь эффект подкачки зависит также от адресного пространства машины и доступной физической памяти. На старых компьютерах физическая память была намного меньше доступного адресного пространства, поэтому подкачка была действительно космическим бонусом, позволяя использовать такие политики, как копирование GC. Даже если физическое пространство столь же велико, как и адресное пространство, можно захотеть поделиться им, чтобы у процесса, использующего GC, было меньше адресного пространства без подкачки страниц (см. Разбиение на страницы). Эти замечания несколько заменены использованием коллекционных поколений. Они обычно используют коллекцию копий для молодого поколения именно из-за этих качеств и потому, что молодое поколение в основном недолговечное.

Тогда у вас есть все взаимодействия поколений GC с системой кеша, которые обсуждались в предыдущем вопросе: сборщики мусора поколений по своей природе дружественны кешу?

Для получения дополнительной информации по этой проблеме, я бы поискал в Интернете, например, по ключевым словам сборка мусора и местность .


Я сомневаюсь в том, что сборщики копий на самом деле более "локальны", чем трассировка. сборщики копий в концептуальном плане весьма похожи по динамике доступа к памяти (возможно, почти неразличимы) на отслеживание «старого пространства». думаю, что для этого нужна ссылка. Тем не менее, существует некоторая вероятность того, что механизм копирования улучшит смежность в новом пространстве. новое пространство начинается совершенно непрерывно, но затем эта «местность» со временем уменьшается или ухудшается.
ВЗН

Ну, вы нашли большую часть ответа. Так что не сомневайся. Это в основных ссылках по теме. Локальность из-за того, что хранилище уплотнено, и из-за копирования, которые заменяют близкие друг к другу ячейки данных, которые логически близки в соответствии со структурой указателя (которая может развиваться с переназначением указателя).
Бабу

Я все еще скептически / сомнительный. Интуитивно кажется, что старое пространство будет иметь плохую локальность и / или смежность при запуске цикла copy / gc. локальность связана с чтением (из старого пространства) и записью (с новым пространством). чтобы проанализировать это, необходимо изучить гештальт / эмерджентное поведение. возможно, многое из этого может быть эффективно / точно / реалистично изучено эмпирически, а не много теоретически.
ВЗН

Я говорю это в литературе, как и многие другие вещи. Но у меня нет времени на его поиск, и я думаю, что мой ответ длинный и забит информацией., Вы можете google: сборщик мусора, и есть ссылка на предыдущий вопрос. Извините за краткость, получил поезд, чтобы успеть.
Бабу

Извините ... перепутайте этот вопрос с другим ..., который имеет больше.
Бабу

8

Эмери Бергер, Мэтью Херц и Йи Фенг поработали над этим.

Сборка мусора предлагает множество преимуществ разработки программного обеспечения, но плохо взаимодействует с менеджерами виртуальной памяти. Существующим сборщикам мусора требуется гораздо больше страниц, чем рабочему набору приложения, и сенсорным страницам, независимо от того, какие из них находятся в памяти, особенно во время сборки мусора с полной кучей. Результирующий пейджинг может привести к резкому снижению пропускной способности и увеличению времени паузы до секунд или даже минут.

Я представляю сборщик мусора, который избегает подкачки страниц. Этот сборщик закладок взаимодействует с менеджером виртуальной памяти для принятия решений о выселении.

Это видео разговора Эмери об этом, и он написал статью « Сборка мусора без подкачки страниц».

По некоторым причинам, кажется, не будет много работы над этим или какого-либо использования в «реальном мире». В конце статьи написано «Мы разрабатываем параллельный вариант алгоритма сбора закладок» , но я не могу отследить его.

CRAMM: поддержка виртуальной памяти для приложений, собираемых мусором, направлена на изменение ОС, чтобы GC создавал меньше страниц.

Использование резидентности страницы для балансирования компромиссов при отслеживании сбора мусора

Мы представляем расширение в основном для копирования коллекции, которая использует резидентность страницы, чтобы определить, когда перемещать объекты. Наш коллекционер продвигает страницы с высоким уровнем резидентности, избегая ненужной работы и ненужного места. Он предсказывает резидентность каждой страницы, но когда его прогнозы оказываются неточными, наш сборщик освобождает незанятое пространство, используя его для удовлетворения запросов на выделение. Использование резидентности позволяет нашему сборщику динамически сбалансировать компромиссы копирующей и не копирующей коллекции. Наш метод требует меньше места, чем чистый копирующий сборщик, и поддерживает закрепление объектов, не жертвуя при этом возможностью перемещения объектов. В отличие от других гибридов, наш сборщик не зависит от конфигурации конкретного приложения и может быстро реагировать на изменение поведения приложения. Наши измерения показывают, что наш гибрид хорошо работает в различных условиях; он предпочитает копировать коллекцию, когда имеется достаточно места в куче, но использует не копирующую коллекцию, когда пространство становится ограниченным.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.