Открыть сервис

Формат ARC

ARC (от англ. _Adaptable Replacement Cache_ — адаптируемый замещающий кэш) — это алгоритм кэширования, предназначенный для управления памятью в операционных системах, базах данных и файловых системах. Разработан в 2003 году исследователями Нимродом Мегиддо и Дхармой Моди из IBM Almaden Research Center. ARC обеспечивает динамическое балансирование между частотой и давностью обращений к данным, что позволяет достигать высокой эффективности при различных рабочих нагрузках без необходимости ручной настройки параметров.

История и предпосылки создания

До появления ARC в системах кэширования доминировали алгоритмы LRU (Least Recently Used) и LFU (Least Frequently Used). LRU вытесняет данные, к которым дольше всего не было обращений, что хорошо работает при равномерных запросах, но плохо справляется со скачкообразными нагрузками. LFU, напротив, учитывает частоту обращений, но требует значительных вычислительных ресурсов для подсчёта и подвержен «загрязнению» кэша устаревшими, но ранее популярными данными.

В начале 2000-х годов рост объёмов оперативной памяти и усложнение рабочих нагрузок (веб-серверы, базы данных, научные вычисления) выявили потребность в алгоритме, который мог бы адаптироваться к меняющимся паттернам доступа без вмешательства администратора. ARC стал ответом на эту потребность, предложив комбинированный подход, автоматически переключающийся между стратегиями LRU и LFU.

Принцип работы

ARC использует четыре списка (или очереди) для отслеживания страниц памяти: два для недавно использованных данных (LRU-часть) и два для часто используемых (LFU-часть). Ключевая особенность — динамическая настройка размера этих частей в зависимости от характера запросов.

Структура очередей

  1. T1очередь для недавно использованных страниц (LRU-подобная). Содержит данные, к которым обращались один или несколько раз за короткий промежуток времени.
  2. T2 — очередь для часто используемых страниц (LFU-подобная). Содержит данные, к которым обращались многократно, что указывает на их высокую популярность.
  3. B1 — очередь «призраков» (ghost entries) для страниц, недавно вытесненных из T1. Хранит только метаданные (например, идентификатор страницы), но не сами данные.
  4. B2 — очередь «призраков» для страниц, недавно вытесненных из T2.

Размеры T1 и T2 динамически регулируются параметром p (target size for T1), который изменяется в диапазоне от 0 до общего размера кэша (c). Изначально p = c/2, то есть обе части равны.

Алгоритм замещения

При обращении к странице:

После загрузки новая страница помещается в «голову» T1. Если кэш переполнен, алгоритм вытесняет страницу из «хвоста» T1 или T2 в зависимости от текущего значения p. Вытесненная страница перемещается в соответствующую очередь «призраков» (B1 или B2), а её данные удаляются из памяти.

Адаптация

Механизм «призраков» позволяет ARC «помнить» о недавно вытесненных страницах без хранения их содержимого. Если к странице из B1 снова обращаются, это сигнал, что алгоритм слишком агрессивно вытеснял недавние данные, и долю T1 следует увеличить. Аналогично для B2. Таким образом, ARC автоматически подстраивается под текущую рабочую нагрузку: при преобладании краткосрочных запросов (например, последовательное чтение) растёт T1, при долгосрочных (например, часто используемые индексы базы данных) — T2.

Преимущества и недостатки

Преимущества

Недостатки

Применение

ARC широко используется в системах, где важна производительность работы с данными:

Модификации и альтернативы

На основе ARC были разработаны улучшенные версии:

Среди альтернативных алгоритмов можно выделить LFU-DA (LFU with Dynamic Aging) и LRU-K, которые также пытаются комбинировать частоту и давность, но без динамической адаптации размера очередей.

Критика и ограничения

Несмотря на успешное применение, ARC не лишён критики:

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →