Сжатие Виртуальная память (также упоминается как сжатие ОЗУ и сжатия памяти ) является управление памятью метод , который использует сжатие данных для уменьшения размера или количества поискового вызова запросов и из вспомогательной памяти . [1] В системе сжатия виртуальной памяти страницы, которые должны выгружаться из виртуальной памяти, сжимаются и сохраняются в физической памяти , которая обычно представляет собой оперативную память (RAM), или отправляются в сжатом виде во вспомогательную память, такую как жесткий диск. (HDD) или твердотельный накопитель (SSD). В обоих случаяхдиапазон виртуальной памяти , содержимое которого было сжато, помечается как недоступный, чтобы попытки доступа к сжатым страницам могли вызвать сбои страниц и обращение процесса (извлечение из вспомогательной памяти и распаковка). Объем выгружаемых данных сокращается за счет процесса сжатия; в первом случае освобожденная RAM возвращается в доступный пул физической памяти, а сжатая часть сохраняется в RAM. Во втором случае сжатые данные отправляются во вспомогательную память, но результирующая операция ввода-вывода меньше и, следовательно, занимает меньше времени. [2] [3]
В некоторых вариантах реализации, в том числе zswap , zram и Helix Software Company «s Hurricane , весь процесс реализован в программном обеспечении. В других системах, таких как IBM MXT, процесс сжатия происходит в выделенном процессоре, который обрабатывает передачи между локальным кешем и ОЗУ.
Сжатие виртуальной памяти отличается от систем сборки мусора (GC), которые удаляют неиспользуемые блоки памяти и в некоторых случаях объединяют используемые области памяти, уменьшая фрагментацию и повышая эффективность. Виртуальное сжатие памяти также отличается от контекста коммутационных систем, таких как Connectix «s RAM Doubler (хотя он также сделал онлайну компрессию) и Apple OS 7.1, в котором неактивные процессы приостанавливаются и затем прессуют в целом. [4]
Преимущества
За счет снижения активности ввода-вывода, вызванной запросами на подкачку, сжатие виртуальной памяти может привести к повышению общей производительности. Степень повышения производительности зависит от множества факторов, включая доступность любых сопроцессоров сжатия, свободную полосу пропускания ЦП, скорость канала ввода-вывода, скорость физической памяти и сжимаемость содержимого физической памяти. .
На многоядерных многопоточных процессорах некоторые тесты показывают повышение производительности более чем на 50%. [5] [6]
В некоторых ситуациях, например, во встроенных устройствах , вспомогательная память ограничена или отсутствует. В этих случаях сжатие виртуальной памяти может позволить системе виртуальной памяти работать, в противном случае виртуальная память должна быть отключена. Это позволяет системе запускать определенное программное обеспечение, которое в противном случае не могло бы работать в среде без виртуальной памяти. [7]
Флэш-память имеет определенные ограничения по выносливости по максимальному количеству циклов стирания, которое она может выдержать, которое может составлять всего 100 циклов стирания. В системах, где флэш-память используется в качестве единственной системы вспомогательной памяти, реализация сжатия виртуальной памяти может уменьшить общий объем данных, записываемых во вспомогательную память, повышая надежность системы.
Недостатки
Низкая степень сжатия
Одна из основных проблем - это степень, в которой содержимое физической памяти может быть сжато при реальных нагрузках. Программный код и большая часть данных, хранящихся в физической памяти, часто не поддаются сжатию, поскольку эффективные методы программирования и архитектуры данных предназначены для автоматического устранения избыточности в наборах данных. Различные исследования показывают типичные коэффициенты сжатия данных в диапазоне от 2: 1 до 2,5: 1 для программных данных [8] [9], аналогичные обычно достижимым коэффициентам сжатия при дисковом сжатии . [7]
Фоновый ввод / вывод
Чтобы сжатие виртуальной памяти обеспечивало измеримые улучшения производительности, пропускная способность системы виртуальной памяти должна быть улучшена по сравнению с несжатым эквивалентом. Таким образом, дополнительная обработка, вносимая сжатием, не должна увеличивать общую задержку. Однако в системах или приложениях с привязкой к вводу-выводу с наборами данных с высокой степенью сжатия выигрыш может быть значительным. [7]
Повышенная обмолота
Физическая память, используемая системой сжатия, уменьшает объем физической памяти, доступной для процессов , выполняемых системой, что может привести к увеличению активности подкачки и снижению общей эффективности сжатия виртуальной памяти. Эта взаимосвязь между активностью подкачки и доступной физической памятью является примерно экспоненциальной, что означает, что уменьшение объема физической памяти, доступной системным процессам, приводит к экспоненциальному увеличению активности подкачки. [10] [11]
В обстоятельствах, когда объем свободной физической памяти невелик и подкачка довольно распространена, любое повышение производительности, обеспечиваемое системой сжатия (по сравнению с подкачкой напрямую во вспомогательную память и из нее), может быть компенсировано увеличением частоты отказов страниц, что приводит к перебоям и перегрузкам. снижение производительности системы. В противоположном состоянии, когда доступно достаточно физической памяти и активность подкачки низка, сжатие может недостаточно влиять на производительность, чтобы быть заметным. Золотая середина между этими двумя обстоятельствами - «низкая оперативная память при высокой активности подкачки» и «много ОЗУ при низкой подкачке» - это то место, где сжатие виртуальной памяти может быть наиболее полезным. Однако чем более сжимаемы программные данные, тем более выражено улучшение производительности, поскольку для хранения сжатых данных требуется меньше физической памяти.
Например, чтобы максимально использовать кэш сжатых страниц, Hurricane 2.0 компании Helix Software предоставляет настраиваемый пользователем порог отказа от сжатия. Сжимая первые 256 до 512 байтов страницы размером 4 КиБ, эта система сжатия виртуальной памяти определяет, может ли быть достигнут настроенный порог уровня сжатия для конкретной страницы; если это возможно, остальная часть страницы будет сжата и сохранена в сжатом кэше, в противном случае страница будет отправлена во вспомогательное хранилище через обычную систему подкачки. По умолчанию для этого порога используется степень сжатия 8: 1. [12] [4]
Проблемы с ценой / производительностью
В аппаратных реализациях технология также зависит от разницы в цене между различными компонентами системы, например, разницы между стоимостью ОЗУ и стоимостью процессора, предназначенного для сжатия. Относительные различия в цене / производительности различных компонентов, как правило, со временем меняются. Например, добавление сопроцессора сжатия может иметь минимальное влияние на стоимость ЦП.
Приоритезация
В типичной реализации виртуальной памяти разбиение на страницы происходит на основе наименее недавно использованного , потенциально заставляя алгоритм сжатия использовать циклы ЦП, работающие с данными с самым низким приоритетом. Более того, программный код обычно доступен только для чтения и поэтому никогда не выгружается. Вместо этого код просто отбрасывается и при необходимости повторно загружается из файла вспомогательной памяти программы. В этом случае планка сжатия выше, поскольку цикл ввода-вывода, который он пытается исключить, намного короче, особенно на устройствах флэш-памяти.
Сжатие с использованием квантования
Разработчики ускорителей используют квантование, чтобы уменьшить разрядность значений и снизить стоимость перемещения данных. Однако любое значение, которое не вписывается в уменьшенную битовую ширину, приводит к переполнению (мы называем эти значения выбросами). Поэтому ускорители используют квантование для приложений, устойчивых к переполнениям. В большинстве приложений частота выбросов низкая, а значения часто находятся в узком диапазоне [13], что дает возможность использовать квантование в процессорах общего назначения. Однако программная реализация квантования в универсальных процессорах имеет три проблемы. Во-первых, программист должен вручную реализовать преобразования и дополнительные инструкции, которые квантовывают и деквантовывают значения, что требует усилий программиста и накладных расходов на производительность. Во-вторых, чтобы покрыть выбросы, разрядность квантованных значений часто становится больше или равна исходным значениям. В-третьих, программист должен использовать стандартную разрядность; в противном случае извлечение нестандартной битовой ширины (например, 1-7, 9-15 и 17-31) для представления узких целых чисел увеличивает накладные расходы на программное квантование. Аппаратная поддержка в иерархии памяти универсальных процессоров для квантования может решить эти проблемы. Аппаратная поддержка позволяет представлять значения небольшим и гибким числом битов и сохранять выбросы в их исходном формате в отдельном пространстве, предотвращая переполнение. Он минимизирует метаданные и накладные расходы на поиск квантованных значений с помощью программно-аппаратного взаимодействия, которое передает параметры квантования и структуру данных на оборудование. В результате прозрачное аппаратное квантование имеет три преимущества по сравнению с методами сжатия кэша: (i) меньше метаданных, (ii) более высокая степень сжатия для значений с плавающей запятой и блоков кеша с несколькими типами данных, и (iii) меньшие накладные расходы на поиск сжатые блоки. [13]
История
Сжатие виртуальной памяти стало популярной технологией и вышло из нее. Цена и скорость оперативной памяти и внешнего хранилища резко упали из-за закона Мура и улучшенных интерфейсов оперативной памяти, таких как DDR3 , что снизило потребность в сжатии виртуальной памяти, в то время как многоядерные процессоры, серверные фермы и мобильные технологии вместе с появлением флэш-памяти системы на базе делают сжатие виртуальной памяти более привлекательным.
Происхождение
Пол Р. Уилсон предложил сжатое кэширование страниц виртуальной памяти в 1990 году в статье, распространенной на семинаре ACM OOPSLA / ECOOP '90 по сбору мусора («Некоторые проблемы и стратегии в управлении кучей и иерархиями памяти») и появившейся в ACM SIGPLAN. Уведомления в январе 1991 г. [14]
Компания Helix Software стала пионером в области сжатия виртуальной памяти в 1992 году, подав патентную заявку на этот процесс в октябре того же года. [2] В 1994 и 1995 годах Helix усовершенствовал процесс, используя тестовое сжатие и вторичные кеши памяти на видеокартах и других устройствах. [3] Однако Helix не выпускала продукт, включающий сжатие виртуальной памяти, до июля 1996 года и выпуска Hurricane 2.0, в котором использовался алгоритм сжатия Stac Electronics Lempel – Ziv – Stac , а также использовалась видеопамять вне экрана в качестве буфера сжатия для получить преимущества в производительности. [12]
В 1995 году стоимость RAM почти 50 $ за мегабайт , и Microsoft «s Windows 95 перечислены минимальные требования к 4 МБ оперативной памяти. [15] Из-за высоких требований к оперативной памяти было выпущено несколько программ, в которых утверждалось, что для увеличения «памяти» используется технология сжатия. Наиболее известной была программа SoftRAM от Syncronys Softcorp. SoftRAM оказался «программным обеспечением-плацебо», в котором вообще не было технологии сжатия. [16] [7] Другие продукты, включая Hurricane и MagnaRAM , включали сжатие виртуальной памяти, но реализовали только кодирование длин серий , что дало плохие результаты, что дало технологии отрицательную репутацию. [17]
В своем выпуске от 8 апреля 1997 г. журнал PC Magazine опубликовал исчерпывающий тест заявлений о повышении производительности нескольких программных инструментов сжатия виртуальной памяти. В своем тестировании PC Magazine обнаружил минимальное (5% в целом) улучшение производительности от использования Hurricane и ни одного из других пакетов. [17] Однако тесты проводились на системах Intel Pentium , которые имели одно ядро и были однопоточными, и, таким образом, сжатие напрямую влияло на всю активность системы.
В 1996 году IBM начала экспериментировать со сжатием, а в 2000 году IBM анонсировала свою технологию расширения памяти (MXT). [18] [19] MXT был автономным чипом, который действовал как кэш ЦП между ЦП и контроллером памяти. MXT имел встроенный механизм сжатия, который сжимал все заголовки данных в / из физической памяти. Последующее тестирование технологии Intel показало улучшение общей производительности системы на 5–20%, аналогично результатам, полученным журналом PC Magazine с Hurricane. [20]
Недавние улучшения
- В начале 2008 года был выпущен проект Linux под названием zram (первоначально называвшийся compcache); в обновлении 2013 года он был включен в Chrome OS [21] и Android 4.4.
- В 2010 году IBM выпустила Active Memory Expansion (AME) для AIX 6.1, в котором реализовано сжатие виртуальной памяти. [22]
- В 2012 году некоторые версии микросхемы POWER7 + включали аппаратный ускоритель AME для поддержки сжатия данных, используемый в AIX для сжатия виртуальной памяти. [23]
- В декабре 2012 года было объявлено о проекте zswap ; он был объединен с основной веткой ядра Linux в сентябре 2013 года.
- В июне 2013 года Apple объявила, что будет включать сжатие виртуальной памяти в OS X Mavericks с использованием алгоритма Wilson-Kaplan WKdm. [24] [25]
- В обновлении Windows Insider Preview от 10 августа 2015 года для Windows 10 (сборка 10525) добавлена поддержка сжатия RAM. [26]
Смотрите также
- Сжатие диска
- Разделы подкачки на SSD
Рекомендации
- ^ Уилсон, Пол Р .; Каплан, Скотт Ф .; Смарагдакис, Яннис (1999-06-06). Аргументы в пользу сжатого кэширования в системах виртуальной памяти (PDF) . Ежегодная техническая конференция USENIX. Монтерей, Калифорния, США. С. 101–116.
- ^ a b Патент США 5559978
- ^ a b Патент США 5875474
- ^ а б Ускоритель памяти Mac получает обновление . Журнал ComputerWorld. 1996-09-09 . Проверено 12 января 2015 .
- ^ Дженнингс, Сет. «Прозрачное сжатие памяти в Linux» (PDF) . linuxfoundation.org . Проверено 1 января 2015 .
- ^ «Показатели производительности для compcache» . Проверено 1 января 2015 .
- ^ а б в г Пол, Матиас Р. (1997-07-30) [1996-04-14]. «Kapitel II.18. Mit STACKER Hauptspeicher 'virtuell' verdoppeln…» [Использование STACKER для «виртуального» удвоения основной памяти…]. NWDOS-TIPs - Советы и приемы для Novell DOS 7, с помощью Blick auf undokumentierte Details, Bugs and Workarounds [ Советы и приемы для Novell DOS 7, с акцентом на недокументированные детали, ошибки и обходные пути ]. MPDOSTIP . Выпуск 157 (на немецком языке) (3-е изд.). Архивировано 5 ноября 2016 года . Проверено 11 января 2012 .
- ^ Симпсон, Мэтью (2014). «Анализ алгоритмов сжатия программных данных» (PDF) . п. 6 . Проверено 9 января 2015 .
- ^ Риццо, Луиджи (1996). «Очень быстрый алгоритм сжатия RAM» . Обзор операционных систем ACM SIGOPS : 8 . Проверено 9 января 2015 .
- ^ Деннинг, Питер Дж. (1968). «Взбучка: причины и профилактика» (PDF) . Труды AFIPS, Fall Joint Computer Conference . 33 : 918 . Проверено 5 января 2015 .
- ^ Фридман, Майкл Дж. (2000-03-16). «Кэш сжатия: сжатие виртуальной памяти для карманных компьютеров» (PDF) . Проверено 9 января 2015 .
- ^ а б «Ураган 2.0 выжимает из вашей системы максимум памяти» . Журнал ПК . 1996-10-08 . Проверено 1 января 2015 .
- ^ а б Ленджани, Марзи (2019-11-03). «Иерархия квантованной памяти без переполнения в процессорах общего назначения» (PDF) . in Proceedings of the IEEE International Symposium on Workload Characterization . Проверено 16 марта 2020 .
- ^ Уилсон, Пол Р. (1991). «Некоторые вопросы и стратегии в управлении кучей и иерархиями памяти». Уведомления ACM SIGPLAN . 26 (3): 45–52. DOI : 10.1145 / 122167.122173 .
- ^ «Требования для установки Windows 95» . Microsoft . Проверено 1 января 2015 .
- ^ «SoftRAM под Scruitny» . Журнал ПК . 1996-01-23 . Проверено 1 января 2015 .
- ^ а б «Усилители производительности» . Журнал ПК . 1997-04-08 . Проверено 1 января 2015 .
- ^ «Прорыв в исследованиях IBM удваивает объем памяти компьютера» . IBM . 2000-06-26 . Проверено 1 января 2015 .
- ^ «Технологии расширения памяти» . IBM . Проверено 1 января 2015 .
- ^ Кант, Кришна (01.02.2003). «Оценка альтернатив сжатия памяти» . Корпорация Intel . Проверено 1 января 2015 .
- ^ «CompCache» . Код Google . Проверено 1 января 2015 .
- ^ «AIX 6.1 Active Memory Expansion» . IBM . Проверено 1 января 2015 .
- ^ «Глубокое погружение в аппаратное обеспечение IBM Power Systems» (PDF) . IBM . Проверено 1 января 2015 .
- ^ https://arstechnica.com/apple/2013/10/os-x-10-9/17/#compressed-memory
- ^ https://www.usenix.org/legacy/publications/library/proceedings/usenix01/cfp/wilson/wilson_html/acc.html
- ^ Аул, Гейб (18.08.2015). «Представляем Windows 10 Insider Preview Build 10525» . Ведение блогов Windows . Microsoft . Проверено 19 августа 2015 .