Сжатие виртуальной памяти - Virtual memory compression

Сжатие Виртуальная память (также упоминается как сжатие ОЗУ и сжатия памяти ) является управление памятью метод , который использует сжатие данных для уменьшения размера или количества поискового вызова запросов и из вспомогательной памяти . В системе сжатия виртуальной памяти страницы, которые должны выгружаться из виртуальной памяти, сжимаются и сохраняются в физической памяти , которая обычно представляет собой оперативную память (RAM), или отправляются в сжатом виде во вспомогательную память, такую ​​как жесткий диск (HDD). или твердотельный накопитель (SSD). В обоих случаях диапазон виртуальной памяти , содержимое которой было сжато, помечается как недоступный, чтобы попытки доступа к сжатым страницам могли вызвать сбои страниц и обращение процесса (извлечение из вспомогательной памяти и распаковка). Объем выгружаемых данных уменьшается за счет процесса сжатия; в первом случае освобожденная RAM возвращается в доступный пул физической памяти, а сжатая часть сохраняется в RAM. Во втором случае сжатые данные отправляются во вспомогательную память, но результирующая операция ввода-вывода меньше и, следовательно, занимает меньше времени.

В некоторых вариантах реализации, в том числе zswap , zram и Helix Software Company «s Hurricane , весь процесс реализован в программном обеспечении. В других системах, таких как IBM MXT, процесс сжатия происходит в выделенном процессоре, который обрабатывает передачи между локальным кешем и ОЗУ.

Сжатие виртуальной памяти отличается от систем сборки мусора (GC), которые удаляют неиспользуемые блоки памяти и в некоторых случаях объединяют используемые области памяти, уменьшая фрагментацию и повышая эффективность. Виртуальное сжатие памяти также отличается от контекста коммутационных систем, таких как Connectix «s RAM Doubler (хотя он также сделал онлайну компрессию) и Apple OS 7.1, в котором неактивные процессы приостанавливаются и затем прессуют в целом.

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

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

На многоядерных многопоточных процессорах некоторые тесты показывают повышение производительности более чем на 50%.

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

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

Недостатки

Низкая степень сжатия

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

Фоновый ввод / вывод

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

Повышенная обмолота

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

В обстоятельствах, когда объем свободной физической памяти невелик и подкачка довольно распространена, любое повышение производительности, обеспечиваемое системой сжатия (по сравнению с подкачкой напрямую во вспомогательную память и из нее), может быть компенсировано увеличением частоты отказов страниц, что приводит к перебоям и перегрузкам. снижение производительности системы. В противоположном состоянии, когда доступно достаточно физической памяти и активность подкачки низка, сжатие может недостаточно влиять на производительность, чтобы быть заметным. Золотая середина между этими двумя обстоятельствами - «низкий объем ОЗУ с высокой активностью подкачки» и большой объем ОЗУ с низкой активностью подкачки »- это то место, где сжатие виртуальной памяти может быть наиболее полезным. Однако чем более сжимаемы программные данные, тем заметнее улучшение производительности, поскольку для хранения сжатых данных требуется меньше физической памяти.

Например, чтобы максимально использовать кэш сжатых страниц, Hurricane 2.0 компании Helix Software предоставляет настраиваемый пользователем порог отказа от сжатия. Сжимая первые 256 до 512 байтов страницы размером 4 КиБ, эта система сжатия виртуальной памяти определяет, может ли быть достигнут настроенный порог уровня сжатия для конкретной страницы; если это возможно, остальная часть страницы будет сжата и сохранена в сжатом кэше, в противном случае страница будет отправлена ​​во вспомогательное хранилище через обычную систему подкачки. По умолчанию для этого порога используется степень сжатия 8: 1.

Проблемы с ценой / производительностью

В аппаратных реализациях технология также зависит от разницы в цене между различными компонентами системы, например, разницы между стоимостью ОЗУ и стоимостью процессора, предназначенного для сжатия. Относительные различия в цене / производительности различных компонентов, как правило, со временем меняются. Например, добавление сопроцессора сжатия может иметь минимальное влияние на стоимость ЦП.

Приоритезация

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

Сжатие с использованием квантования

Разработчики ускорителей используют квантование, чтобы уменьшить разрядность значений и снизить стоимость перемещения данных. Однако любое значение, которое не вписывается в уменьшенную битовую ширину, приводит к переполнению (мы называем эти значения выбросами). Поэтому ускорители используют квантование для приложений, устойчивых к переполнениям. В большинстве приложений частота выбросов низкая, а значения часто находятся в узком диапазоне, что дает возможность использовать квантование в процессорах общего назначения. Однако программная реализация квантования в универсальных процессорах имеет три проблемы. Во-первых, программист должен вручную реализовать преобразования и дополнительные инструкции для квантования и деквантования значений, что требует усилий программиста и накладных расходов на производительность. Во-вторых, чтобы покрыть выбросы, разрядность квантованных значений часто становится больше или равна исходным значениям. В-третьих, программист должен использовать стандартную разрядность; в противном случае извлечение нестандартной битовой ширины (например, 1-7, 9-15 и 17-31) для представления узких целых чисел увеличивает накладные расходы на программное квантование. Аппаратная поддержка в иерархии памяти универсальных процессоров для квантования может решить эти проблемы. Аппаратная поддержка позволяет представлять значения небольшим и гибким числом битов и сохранять выбросы в их исходном формате в отдельном пространстве, предотвращая переполнение. Он минимизирует метаданные и накладные расходы на поиск квантованных значений с помощью программно-аппаратного взаимодействия, которое передает параметры квантования и структуру данных на оборудование. В результате прозрачное аппаратное квантование имеет три преимущества по сравнению с методами сжатия кэша: (i) меньше метаданных, (ii) более высокая степень сжатия для значений с плавающей запятой и блоков кеша с несколькими типами данных, и (iii) меньшие накладные расходы на поиск сжатые блоки.

История

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

Происхождение

Пол Р. Уилсон предложил сжатое кэширование страниц виртуальной памяти в 1990 году в статье, распространенной на семинаре ACM OOPSLA / ECOOP '90 по сбору мусора («Некоторые проблемы и стратегии в управлении кучей и иерархиями памяти») и появившейся в ACM SIGPLAN. Уведомления в январе 1991 г.

Компания Helix Software стала пионером в области сжатия виртуальной памяти в 1992 году, подав патентную заявку на этот процесс в октябре того же года. В 1994 и 1995 годах Helix усовершенствовал процесс, используя тестовое сжатие и кеши вторичной памяти на видеокартах и ​​других устройствах. Однако Helix не выпускала продукт, включающий сжатие виртуальной памяти, до июля 1996 года и выпуска Hurricane 2.0, в котором использовался алгоритм сжатия Stac Electronics Lempel – Ziv – Stac , а также использовалась внеэкранная видеопамять в качестве буфера сжатия для повышения производительности. .

В 1995 году стоимость RAM почти 50 $ за мегабайт , и Microsoft «s Windows 95 перечислены минимальные требования к 4 МБ оперативной памяти. Из-за высоких требований к оперативной памяти было выпущено несколько программ, которые утверждали, что используют технологию сжатия для увеличения «памяти». Наиболее известной была программа SoftRAM от Syncronys Softcorp. SoftRAM оказался «программным обеспечением-плацебо», в котором вообще не было технологии сжатия. Другие продукты, включая Hurricane и MagnaRAM , включали сжатие виртуальной памяти, но реализовали только кодирование длин серий , что дало плохие результаты, что дало технологии отрицательную репутацию.

В своем выпуске от 8 апреля 1997 г. журнал PC Magazine опубликовал исчерпывающий тест заявлений о повышении производительности нескольких программных инструментов сжатия виртуальной памяти. В своем тестировании PC Magazine обнаружил минимальное (5% в целом) улучшение производительности от использования Hurricane и ни одного из других пакетов. Однако тесты проводились на системах Intel Pentium , которые были одноядерными и однопоточными, и, таким образом, сжатие напрямую влияло на всю активность системы.

В 1996 году IBM начала экспериментировать со сжатием, а в 2000 году IBM анонсировала свою технологию расширения памяти (MXT). MXT был автономным чипом, который действовал как кэш -память ЦП между ЦП и контроллером памяти. MXT имел встроенный механизм сжатия, который сжимал все заголовки данных в / из физической памяти. Последующее тестирование технологии Intel показало улучшение общей производительности системы на 5–20%, аналогично результатам, полученным журналом PC Magazine с Hurricane.

Недавние улучшения

  • В начале 2008 года был выпущен проект Linux под названием zram (первоначально называвшийся compcache); в обновлении 2013 года он был включен в Chrome OS и Android  4.4.
  • В 2010 году IBM выпустила Active Memory Expansion (AME) для AIX 6.1, в котором реализовано сжатие виртуальной памяти.
  • В 2012 году некоторые версии микросхемы POWER7 + включали аппаратные ускорители AME, использующие алгоритм сжатия 842 для поддержки сжатия данных, используемый в AIX для сжатия виртуальной памяти. Более поздние процессоры POWER продолжают поддерживать эту функцию.
  • В декабре 2012 года было объявлено о проекте zswap ; он был объединен с основной веткой ядра Linux в сентябре 2013 года.
  • В июне 2013 года Apple объявила, что будет включать сжатие виртуальной памяти в OS X Mavericks с использованием алгоритма WKdm Уилсона-Каплана.
  • В обновлении Windows Insider Preview от 10 августа 2015 года для Windows 10 (сборка 10525) добавлена ​​поддержка сжатия RAM.

Смотрите также

использованная литература