Почему LRU лучше, чем FIFO? - PullRequest
       27

Почему LRU лучше, чем FIFO?

2 голосов
/ 13 января 2010

Почему Наименее недавно использованный лучше, чем FIFO в отношении файлов подкачки?

Ответы [ 5 ]

10 голосов
/ 13 января 2010

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

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

3 голосов
/ 13 января 2010

Не существует единого алгоритма кэширования, который всегда будет работать хорошо, потому что для этого требуются совершенные знания о будущем. (И если вы знаете, где это взять ...) Доминирование LRU в дизайне кеша ВМ является результатом долгой истории измерения поведения системы. Учитывая реальную рабочую нагрузку, LRU работает довольно хорошо большую часть времени. Однако не так сложно создать справочную строку, для которой FIFO будет иметь более высокую производительность по сравнению с LRU.

Рассмотрим линейную развертку через большое адресное пространство, намного превышающее доступную реальную память с возможностью постраничного вывода. LRU основан на предположении, что «то, к чему вы недавно прикасались, вы, скорее всего, коснетесь снова», но линейная развертка полностью нарушает это предположение. Вот почему некоторые операционные системы позволяют программам сообщать ядру об их эталонном поведении - одним из примеров является сборка мусора «разметка и очистка», типичная для классических интерпретаторов LISP. (И основной драйвер для работы на более современных GC, таких как «поколения».)

Другим примером является таблица символов в определенном античном макропроцессоре (STAGE2). Двоичное дерево ищется в корне для каждого символа, а оценка строки выполняется в стеке. Оказалось, что уменьшение доступных фреймов страницы путем «разводки» корневой страницы дерева символов и нижней страницы стека значительно улучшило частоту отказов страниц. Кэш был крошечным и сильно взбалтывался, всегда выталкивая две наиболее часто упоминаемые страницы, потому что кэш был меньше, чем расстояние между ссылками до этих страниц. Таким образом, маленький кэш работал лучше, но ТОЛЬКО потому, что эти два фрейма страницы, украденные из кеша, использовались с умом.

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

2 голосов
/ 13 января 2010

Рассматривать оперативную память как кеш . Чтобы быть эффективным кешем, он должен хранить элементы, которые с наибольшей вероятностью будут запрошены в памяти.

LRU хранит вещи, которые были использованы в последнее время в памяти. FIFO хранит вещи, которые были добавлены совсем недавно. LRU, в целом, более эффективен, потому что обычно есть элементы памяти, которые добавляются один раз и никогда не используются снова, и есть элементы, которые добавляются и используются часто. LRU гораздо чаще хранит часто используемые элементы в памяти.

1 голос
/ 26 января 2012

В зависимости от шаблонов доступа, FIFO может иногда превосходить LRU. Adaptive Replacement Cache - это гибрид, который адаптирует свою стратегию на основе фактических моделей использования.

1 голос
/ 13 января 2010

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

...