Сжатие виртуальной памяти
Сжатие виртуальной памяти (также называемое сжатием ОЗУ и сжатием памяти ) — это метод управления памятью , который использует сжатие данных для уменьшения размера или количества запросов подкачки и из него во вспомогательное хранилище . [ 1 ] В системе сжатия виртуальной памяти страницы, подлежащие выгрузке из виртуальной памяти, сжимаются и сохраняются в физической памяти , которая обычно представляет собой оперативное запоминающее устройство (ОЗУ), или отправляются в сжатом виде во вспомогательное хранилище, такое как жесткий диск (HDD). или твердотельный накопитель (SSD). В обоих случаях область виртуальной памяти , содержимое которой было сжато, помечается как недоступная, поэтому попытки доступа к сжатым страницам могут вызвать страничные ошибки и обращение процесса (извлечение из вспомогательного хранилища и распаковка). Объем выгружаемых данных уменьшается за счет процесса сжатия; в первом случае освобожденная ОЗУ возвращается в доступный пул физической памяти, а сжатая часть сохраняется в ОЗУ. Во втором случае сжатые данные отправляются во вспомогательное хранилище, но результирующая операция ввода-вывода меньше и, следовательно, занимает меньше времени. [ 2 ] [ 3 ]
В некоторых реализациях, включая zswap , zram и Helix Software Company от Hurricane , весь процесс реализован программно. В других системах, таких как IBM MXT, процесс сжатия происходит в выделенном процессоре, который обрабатывает передачу между локальным кэшем и оперативной памятью.
Сжатие виртуальной памяти отличается от систем сборки мусора (GC), которые удаляют неиспользуемые блоки памяти и в некоторых случаях объединяют используемые области памяти, уменьшая фрагментацию и повышая эффективность. Сжатие виртуальной памяти также отличается от систем переключения контекста , таких как Connectix компании RAM Doubler (хотя она также выполняет онлайн-сжатие) и Apple OS 7.1, в которых неактивные процессы приостанавливаются, а затем сжимаются целиком. [ 4 ]
Типы
[ редактировать ]Существует два основных типа сжатия виртуальной памяти: (1) отправка сжатых страниц в файл подкачки в основной памяти, возможно, с резервным хранилищем во вспомогательной памяти; [ 1 ] [ 5 ] [ 6 ] и (2) хранение сжатых страниц рядом с несжатыми страницами. [ 1 ]
Первый тип (1) обычно использует какой-то LZ алгоритм сжатия словаря класса в сочетании с энтропийным кодированием , например LZO или LZ4 . [ 6 ] [ 5 ] для сжатия выгружаемых страниц. После сжатия они либо сохраняются в файле подкачки в основной памяти, либо записываются во дополнительное хранилище, например на жесткий диск. [ 6 ] [ 5 ] Вместо этого можно использовать двухэтапный процесс, при котором существует как резервное хранилище во вспомогательной памяти, так и файл подкачки в основной памяти, а страницы, исключенные из файла подкачки в памяти, записываются во резервное хранилище со значительно увеличенной пропускной способностью записи ( например страниц/сек), чтобы запись в резервное хранилище занимала меньше времени. Эта последняя схема использует преимущества обоих предыдущих методов: быстрый доступ к данным в памяти с большим увеличением общего объема данных, которые могут быть выгружены, и увеличенной пропускной способностью при записи страниц (страниц/сек) во вспомогательное хранилище. [ 6 ] [ 5 ] [ 1 ]
Одним из примеров класса алгоритмов сжатия виртуальной памяти типа (2) является класс алгоритмов сжатия WK (Wilson-Kaplan et. al). Они используют преимущества закономерностей данных в памяти, присутствующих в указателях и целых числах. [ 1 ] [ 7 ] В частности, в (сегменте данных -- алгоритмы WK не подходят для сжатия инструкций [ 1 ] ) целевой код, сгенерированный большинством языков программирования высокого уровня, в записях, элементы которых выравниваются по словам, часто присутствуют как целые числа, так и указатели. Более того, значения, хранящиеся в целых числах, обычно невелики. Кроме того, указатели, расположенные близко друг к другу в памяти, обычно указывают на места, которые сами находятся в памяти поблизости. Кроме того, общие шаблоны данных, такие как слово, состоящее из всех нулей, могут быть закодированы в сжатом выводе с помощью очень маленького кода (два бита в случае WKdm). Используя эти закономерности данных, алгоритмы класса WK используют очень маленький словарь (16 записей в случае WKdm ) для достижения степени сжатия до 2:1, обеспечивая при этом гораздо большую скорость и меньшие накладные расходы, чем схемы сжатия словаря класса LZ. [ 1 ] [ 7 ]
Преимущества
[ редактировать ]Уменьшая активность ввода-вывода, вызванную запросами на подкачку, сжатие виртуальной памяти может привести к общему повышению производительности. Степень повышения производительности зависит от множества факторов, включая наличие любых сопроцессоров сжатия, запасную полосу пропускания ЦП, скорость канала ввода-вывода, скорость физической памяти и сжимаемость содержимого физической памяти. .
На многоядерных и многопоточных процессорах некоторые тесты показывают повышение производительности более чем на 50%. [ 8 ] [ 9 ]
В некоторых ситуациях, например, во встроенных устройствах , дополнительная память ограничена или отсутствует. В этих случаях сжатие виртуальной памяти может позволить системе виртуальной памяти работать, тогда как в противном случае виртуальную память пришлось бы отключить. Это позволяет системе запускать определенное программное обеспечение, которое в противном случае не могло бы работать в среде без виртуальной памяти. [ 10 ]
Недостатки
[ редактировать ]Этот раздел нуждается в дополнительных цитатах для проверки . ( январь 2015 г. ) |
Низкая степень сжатия
[ редактировать ]Одним из основных вопросов является степень сжатия содержимого физической памяти при реальных нагрузках. Программный код и большая часть данных, хранящихся в физической памяти, часто не обладают высокой степенью сжатия, поскольку эффективные методы программирования и архитектуры данных предназначены для автоматического устранения избыточности в наборах данных. Различные исследования показывают, что типичные коэффициенты сжатия данных для программных данных варьируются от 2:1 до 2,5:1. [ 7 ] [ 11 ] аналогично обычно достижимой степени сжатия при сжатии диска . [ 10 ]
Фоновый ввод-вывод
[ редактировать ]Чтобы сжатие виртуальной памяти обеспечило измеримое повышение производительности, необходимо повысить пропускную способность системы виртуальной памяти по сравнению с несжатым эквивалентом. Таким образом, дополнительный объем обработки, вызванный сжатием, не должен увеличивать общую задержку. Однако в системах или приложениях, ориентированных на ввод-вывод , с сильно сжимаемыми наборами данных выигрыш может быть существенным. [ 10 ]
Повышенная тряска
[ редактировать ]Физическая память, используемая системой сжатия, уменьшает объем физической памяти, доступной процессам , выполняемым системой, что может привести к увеличению активности подкачки и снижению общей эффективности сжатия виртуальной памяти. Эта связь между активностью подкачки и доступной физической памятью является примерно экспоненциальной, то есть уменьшение объема физической памяти, доступной системным процессам, приводит к экспоненциальному увеличению активности подкачки. [ 12 ] [ 13 ]
В обстоятельствах, когда объем свободной физической памяти невелик, а подкачка широко распространена, любой прирост производительности, обеспечиваемый системой сжатия (по сравнению с подкачкой непосредственно во вспомогательную память и из нее), может быть нивелирован увеличением частоты ошибок страниц , что приводит к перегрузке и ухудшение производительности системы. В противоположном состоянии, когда доступно достаточно физической памяти, а активность подкачки низкая, сжатие может не повлиять на производительность настолько, чтобы быть заметным. Золотая середина между этими двумя обстоятельствами — «недостаток ОЗУ с высокой активностью подкачки и большой объем ОЗУ с низкой активностью подкачки» — заключается в том, где сжатие виртуальной памяти может быть наиболее полезным. Однако чем более сжимаемыми являются данные программы, тем более выраженным является улучшение производительности, поскольку для хранения сжатых данных требуется меньше физической памяти.
Например, чтобы максимально эффективно использовать кэш сжатых страниц, Hurricane 2.0 компании Helix Software Company предоставляет настраиваемый пользователем порог отклонения сжатия. Сжимая первые 256–512 байт страницы размером 4 КиБ, эта система сжатия виртуальной памяти определяет, может ли быть достигнут настроенный порог уровня сжатия для конкретной страницы; если это возможно, остальная часть страницы будет сжата и сохранена в сжатом кеше, а в противном случае страница будет отправлена во вспомогательное хранилище через обычную систему подкачки. По умолчанию для этого порога используется коэффициент сжатия 8:1. [ 14 ] [ 4 ]
Накладные расходы на загрузку ЦП
[ редактировать ]В аппаратных реализациях технология также опирается на разницу в ценах между различными компонентами системы, например, на разницу между стоимостью оперативной памяти и стоимостью процессора, предназначенного для сжатия. Относительные различия в цене и производительности различных компонентов имеют тенденцию меняться с течением времени. Например, добавление сопроцессора сжатия может минимально повлиять на стоимость ЦП.
Расстановка приоритетов
[ редактировать ]В типичной реализации виртуальной памяти подкачка происходит по последним использованным данным, что может привести к тому, что алгоритм сжатия будет использовать циклы ЦП для обработки данных с самым низким приоритетом. Более того, программный код обычно доступен только для чтения и поэтому никогда не выгружается. Вместо этого код просто удаляется и при необходимости повторно загружается из файла вспомогательной памяти программы. В этом случае планка сжатия выше, поскольку цикл ввода-вывода, который он пытается устранить, намного короче, особенно на устройствах флэш-памяти.
История
[ редактировать ]Сжатие виртуальной памяти как технология то входило, то выходило из моды. Цена и скорость оперативной памяти и внешнего хранилища резко упали из-за закона Мура и улучшенных интерфейсов оперативной памяти, таких как DDR3 , что уменьшило необходимость сжатия виртуальной памяти, в то время как многоядерные процессоры, серверные фермы и мобильные технологии вместе с появлением флэш-памяти основанные на этом системы делают сжатие виртуальной памяти более привлекательным.
Происхождение
[ редактировать ]Acorn Computers Вариант Unix компании , RISC iX , поставлялся в качестве основной операционной системы для рабочей станции R140, выпущенной в 1989 году. [ 15 ] RISC iX обеспечивал поддержку подкачки сжатых исполняемых файлов по требованию. Однако основной мотивацией предоставления сжатых исполняемых файлов было размещение всей системы Unix на жестком диске сравнительно небольшого размера. По этой схеме сжатые данные не выгружались на диск. [ 16 ] [ 17 ]
Пол Р. Уилсон предложил сжатое кэширование страниц виртуальной памяти в 1990 году в документе, распространенном на семинаре ACM OOPSLA/ECOOP '90 по сбору мусора («Некоторые проблемы и стратегии в управлении кучей и иерархиях памяти») и опубликованном в ACM SIGPLAN. Уведомления в январе 1991 г. [ 18 ]
Компания Helix Software впервые применила сжатие виртуальной памяти в 1992 году, подав заявку на патент на этот процесс в октябре того же года. [ 2 ] В 1994 и 1995 годах Helix усовершенствовала процесс, используя тестовое сжатие и кэш вторичной памяти на видеокартах и других устройствах. [ 3 ] Однако Helix не выпускала продукт, включающий сжатие виртуальной памяти, до июля 1996 года и выпуска Hurricane 2.0, в котором использовался алгоритм сжатия Stac Electronics Lempel-Ziv-Stac , а также использовалась внеэкранная видеопамять в качестве буфера сжатия для повышения производительности. . [ 14 ]
В 1995 году оперативная память стоила почти 50 долларов за мегабайт , а Microsoft в Windows 95 минимальные требования составляли 4 МБ ОЗУ. [ 19 ] Из-за высоких требований к оперативной памяти было выпущено несколько программ, в которых утверждалось, что они используют технологию сжатия для увеличения «памяти». Наибольшую известность получила программа SoftRAM от Syncronys Softcorp. SoftRAM была признана поддельной, поскольку она вообще не выполняла никакого сжатия. [ 20 ] [ 10 ] Другие продукты, включая Hurricane и MagnaRAM , включали сжатие виртуальной памяти, но реализовывали только кодирование длин серий , что давало плохие результаты, что дало технологии отрицательную репутацию. [ 21 ]
В выпуске журнала PC Magazine от 8 апреля 1997 года был опубликован всесторонний тест заявлений о повышении производительности нескольких программных инструментов сжатия виртуальной памяти. В ходе тестирования журнал PC Magazine обнаружил минимальное (в целом 5%) улучшение производительности при использовании Hurricane и полное отсутствие при использовании других пакетов. [ 21 ] Однако тесты проводились на системах Intel Pentium , которые имели одно ядро и были однопоточными, поэтому сжатие напрямую влияло на всю активность системы.
В 1996 году IBM начала экспериментировать со сжатием, а в 2000 году IBM объявила о своей технологии расширения памяти (MXT). [ 22 ] [ 23 ] MXT представлял собой автономный чип, который выступал в качестве кэша ЦП между ЦП и контроллером памяти. MXT имел встроенный механизм сжатия, который сжимал все данные, поступающие в/из физической памяти. Последующее тестирование технологии, проведенное Intel, показало общее улучшение производительности системы на 5–20%, что аналогично результатам, полученным журналом PC Magazine с Hurricane. [ 24 ]
Последние события
[ редактировать ]- В начале 2008 года был выпущен проект Linux под названием zram (первоначально называвшийся compcache); в обновлении 2013 года он был включен в ChromeOS. [ 25 ] и Андроид 4.4
- В 2010 году IBM выпустила Active Memory Expansion (AME) для AIX 6.1, который реализует сжатие виртуальной памяти. [ 26 ]
- В 2012 году некоторые версии чипа POWER7 + включали в себя аппаратные ускорители AME, использующие алгоритм сжатия 842 для поддержки сжатия данных, используемый в AIX, для сжатия виртуальной памяти. [ 27 ] Более поздние процессоры POWER продолжают поддерживать эту функцию.
- В декабре 2012 года zswap было объявлено о проекте ; он был объединен с основной веткой ядра Linux в сентябре 2013 года.
- В июне 2013 года Apple объявила, что включит сжатие виртуальной памяти в OS X Mavericks с использованием алгоритма Уилсона-Каплана WKdm. [ 28 ] [ 29 ]
- от 10 августа 2015 г. В обновлении Windows Insider Preview для Windows 10 (сборка 10525) добавлена поддержка сжатия оперативной памяти. [ 30 ]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б с д и ж г Уилсон, Пол Р.; Каплан, Скотт Ф.; Смарагдакис, Яннис (6 июня 1999 г.). Аргументы в пользу сжатого кэширования в системах виртуальной памяти (PDF) . Ежегодная техническая конференция USENIX. Монтерей, Калифорния, США. стр. 101–116.
- ^ Jump up to: а б US 5559978 , Спило, Майкл Л., «Способ повышения эффективности системы виртуальной памяти путем выборочного сжатия содержимого оперативной памяти», опубликован 24 сентября 1996 г., передан Helix Software Co., Inc.
- ^ Jump up to: а б США 5875474 , Фабрицио, Дэниел и Спило, Майкл Л., «Метод кэширования подкачки виртуальной памяти и запросов ввода/вывода с диска с использованием внеэкранной видеопамяти», опубликовано 23 февраля 1999 г., передано Helix Software Co., Inc.
- ^ Jump up to: а б «Mac Memory Booster получает обновление» . Компьютерный мир . 30 (37). ИДГ Предприятие: 56. 9 сентября 1996 г. ISSN 0010-4841 . Проверено 12 января 2015 г.
- ^ Jump up to: а б с д «Гупта», «Нитин». " "zram: блочные устройства на базе сжатой оперативной памяти" " . docs.kernel.org . «Сообщество разработчиков ядра» . Проверено 29 декабря 2023 г.
- ^ Jump up to: а б с д " "zswap" " . www.kernel.org . «Сообщество разработчиков ядра» . Проверено 29 декабря 2023 г.
- ^ Jump up to: а б с Симпсон, Мэтью (2014). «Анализ алгоритмов сжатия программных данных» (PDF) . стр. 4–14 . Проверено 9 января 2015 г.
- ^ Дженнингс, Сет. «Прозрачное сжатие памяти в Linux» (PDF) . linuxfoundation.org . Архивировано из оригинала (PDF) 4 января 2015 г. Проверено 1 января 2015 г.
- ^ «Показания производительности для compcache» . Проверено 1 января 2015 г.
- ^ Jump up to: а б с д Пол, Матиас Р. (30 июля 1997 г.) [14 апреля 1996 г.]. «Kapitel II.18. Mit STACKER Hauptspeicher 'virtuell' verdoppeln…» [Использование STACKER для «фактически» удвоения основной памяти…]. NWDOS-TIPs — Советы и подсказки для Novell DOS 7, с просмотром недокументированных подробностей, ошибок и обходных путей [ NWDOS-TIPs — Советы и подсказки для Novell DOS 7, с акцентом на недокументированные детали, ошибки и обходные пути ]. Выпуск 157 (на немецком языке) (3-е изд.). Архивировано из оригинала 5 ноября 2016 г. Проверено 11 января 2012 г.
- ^ Риццо, Луиджи (1996). «Очень быстрый алгоритм сжатия оперативной памяти» . Обзор операционных систем ACM SIGOPS . 31 (2): 8. дои : 10.1145/250007.250012 . S2CID 18563587 . Проверено 9 января 2015 г.
- ^ Деннинг, Питер Дж. (1968). «Избиение: причины и профилактика» (PDF) . Материалы AFIPS, Осенняя совместная компьютерная конференция . 33 :918 . Проверено 5 января 2015 г.
- ^ Фридман, Майкл Дж. (16 марта 2000 г.). «Кэш сжатия: сжатие виртуальной памяти для карманных компьютеров» (PDF) . Проверено 9 января 2015 г.
- ^ Jump up to: а б «Ураган 2.0 выжимает большую часть памяти из вашей системы» . Журнал ПК . 08.10.1996 . Проверено 1 января 2015 г.
- ^ Кокс, Джеймс (декабрь 1989 г.). «Власть народу» . Пользователь Желудя . стр. 66–67, 69, 71 . Проверено 06 сентября 2020 г.
- ^ Тонтон, Марк (1991). «Сжатые исполняемые файлы: упражнение на маленькое мышление» . Материалы летней конференции USENIX 1991 г., Нэшвилл, Теннесси, США, июнь 1991 г. Ассоциация USENIX: 385–404.
- ^ Тонтон, Марк (22 января 1991 г.). «Сжатые исполняемые файлы» . Группа новостей : comp.unix.internals . Usenet: [электронная почта защищена] . Проверено 10 октября 2020 г.
- ^ Уилсон, Пол Р. (1991). «Некоторые проблемы и стратегии управления кучей и иерархиями памяти». Уведомления ACM SIGPLAN . 26 (3): 45–52. дои : 10.1145/122167.122173 . S2CID 15404854 .
- ^ «Требования к установке Windows 95» . Майкрософт . Проверено 1 января 2015 г.
- ^ «SoftRAM под контролем» . Журнал ПК . 23 января 1996 г. Проверено 1 января 2015 г.
- ^ Jump up to: а б «Усилители производительности» . Журнал ПК . 8 апреля 1997 г. Проверено 1 января 2015 г.
- ^ «Прорыв в исследованиях IBM позволил удвоить емкость компьютерной памяти» . ИБМ . 26 июня 2000 г. Архивировано из оригинала 22 июня 2013 г. Проверено 1 января 2015 г.
- ^ «Технологии расширения памяти» . ИБМ . Проверено 1 января 2015 г.
- ^ Кант, Кришна (1 февраля 2003 г.). «Оценка альтернатив сжатия памяти» . Корпорация Интел . Проверено 1 января 2015 г.
- ^ «КомпКэш» . Гугл код . Проверено 1 января 2015 г.
- ^ «Активное расширение памяти AIX 6.1» . ИБМ . Архивировано из оригинала 4 января 2015 г. Проверено 1 января 2015 г.
- ^ «Подробный обзор аппаратного обеспечения IBM Power Systems» (PDF) . ИБМ . Архивировано из оригинала (PDF) 4 января 2015 г. Проверено 1 января 2015 г.
- ^ «OS X 10.9 Mavericks: обзор Ars Technica» . 22 октября 2013 г.
- ^ «Аргументы в пользу сжатого кэширования в системах виртуальной памяти» .
- ^ Аул, Гейб (18 августа 2015 г.). «Анонсируем сборку 10525 Windows 10 Insider Preview» . Блог программы предварительной оценки Windows . Майкрософт . Проверено 3 августа 2024 г.