Сохраните экземпляр программы из оперативной памяти для быстрого запуска

1388
Ulincsys

Есть ли какой-либо возможный способ сохранить экземпляр отдельной программы, после того как он был загружен в ОЗУ, а затем загрузить эту программу обратно в ОЗУ из этого сохраненного экземпляра.

Вот конкретный пример.
У меня есть программа (Adobe Photoshop), которая отлично работает на моем компьютере. Рендерится быстро, не имеет задержки, быстро выходит. Единственное, что он не делает, это быстро загружается, обычно это занимает около 8-10 минут. Мне было интересно, есть ли способ захватить экземпляр Photoshop, работающий в оперативной памяти (скажем, в VHD или IMG-файле). Затем загрузите этот экземпляр обратно в оперативную память вместо загрузки отдельных файлов и настроек программ с диска.

Я думаю о чем-то похожем на RAM-диск, но я понятия не имею, существует ли он вообще (если нет, то должен).

1

2 ответа на вопрос

2
gronostaj

Это невозможно.

Если программа загружается в течение 10 минут, значит, она что- то делает в течение 10 минут. Если бы можно было что- то пропустить, оно бы пропустило это.

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

Реальная проблема, которую вам нужно решить, это выяснить, что заставляет Photoshop запускаться так долго . Process Monitor может пригодиться, но сначала я бы проверил, не связано ли это со сторонними плагинами, слишком большим количеством установленных шрифтов и т. Д.

Я на самом деле ранее провел небольшой тест с программой, которая всегда заканчивает цикл запуска в одном и том же двоичном состоянии (Minecraft). Я создал виртуальную машину Windows XP-x64 с 4 ГБ оперативной памяти. Я использовал 32-битную локализованную Java и сохранял все файлы времени выполнения на RAM-диске (Launcher, Java, файлы игры и т. Д.). Затем я запустил MC и стал ждать его появления на экране заставки. Я изолировал экземпляр MC, запущенного в оперативной памяти виртуальной машины, сохранив снимок и отредактировав файл. Затем я успешно повторно развернул MC после перезапуска виртуальной машины, так что это доказывает, что это возможно, хотя бы в виртуальной среде. Ulincsys 9 лет назад 0
Виртуальная машина - это отдельный компьютер, т.е. отдельный конечный автомат. Вы можете сделать снимок всего конечного автомата, но вы не можете сделать снимок его части, а затем восстановить его в любой момент (если он не предназначен для такой работы - виртуальные машины есть, а Photoshop - нет) gronostaj 9 лет назад 1
Спасибо за ваше понимание, я думаю, что единственным моим шагом вперед будет использование гипервизоров с динамической виртуальной оперативной памятью для реализации моей идеи; и я не могу поверить, что я с ошибкой виртуальный. Если только комментарии можно редактировать так долго после публикации ... Ulincsys 9 лет назад 0
1
Nothingismagick

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

Вы можете сделать это на MacOS, Linux и Windows: если все сделано правильно, это может значительно повысить скорость работы системы, снизить общую температуру системы и увеличить срок полезного использования носителя. Есть несколько факторов, которые будут важны при принятии решения, подходит ли это для вашего случая использования:

  • Объем физически доступной оперативной памяти (менее 8 ГБ на MacOS или Windows 64bit может быть катастрофически поврежден)

  • Количество основных программ и служб, которые должны быть запущены

  • Производительность оборудования и общие характеристики

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

При входе пользователя скрипт запуска автоматически резервирует часть памяти и создает символическую ссылку в виде директории: ramdisk . Затем все программные файлы и файлы данных копируются с SSD на виртуальный диск. Затем соответствующие программы автоматически запускаются с использованием подготовленных вами настроек и открывают файлы с историей в настройках системы для автоматического запуска.

Ниже приведен своего рода рецепт, которому может следовать ваш сценарий.


Создать определенный профиль пользователя, который «содержит» или имеет доступ ко всем нужным программам и данным; тот, где все ненужные программы не запускаются. Отключите службы, программы, сетевые подключения, экранные заставки и т. Д. И, по возможности, делайте это из (пользовательских) настроек системы.

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

Это все, что нужно сделать. Только не позволяйте вашей системе переходить в спящий режим или отключать питание ...

MACOS

Я делаю это для критически важной инфраструктуры на железном железе во время художественных инсталляций и аудиовизуальных представлений. Я на самом деле делал это недавно на MacOS Sierra, в данном случае это было для живого видео-исполнения с resolume arena и захвата экрана с помощью сифона.

#!/usr/bin/env bash  # use these cache dirs dirs="com.resolume.arena info.v002.syphon.Syphon-Recorder"  # get available memory size_mb=$(sysctl hw.memsize | awk '')  # use half the memory size_mb=$[size_mb/2048]  origin="$/Library/Caches" ramdisk="/Volumes/ramdisk"  diskutil erasevolume HFS+ "ramdisk" hdiutil attach -nomount ram://$[size_mb]  if [ -d $ ]; then for dir in $ do /bin/mkdir -p $/$ if [ -d $/$ ]; then if [ ! -L $/$ ]; then /bin/mv $/$ $/$.bak fi fi  if [ -L $/$ ]; then /bin/rm $/$ fi  if [ ! -L $/$ ]; then /bin/ln -v -s -f $/$ $/$ fi done fi  /bin/mkdir -p $/Applications/Resolume /bin/mkdir -p $/RAMDISK_REPOSITORY/  echo "Copying Resolume to ramdisk" /bin/cp -r "/Applications/Resolume Arena 5.0.2/" "$/Applications/Resolume/" /bin/cp -r "/Users/Shared/RAMDISK_REPOSITORY/" "$/RAMDISK_REPOSITORY/"  cd /Applications/syphon /usr/bin/open Syphon\ Recorder.app/ cd /Volumes/ramdisk/Applications/Resolume/ /usr/bin/open Arena.app/  exit 

LINUX

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

WINDOWS

Я лично не делал этого на Windows, но это возможно. Проверьте это, если вам нужен виртуальный диск в Windows:

Windows ERAM на GitHub

Я фактически использовал Virtualbox для достижения своей цели. Я загрузил облегченную копию Windows 7 на виртуальную машину и настроил ее запуск в «бесшовном» режиме и автоматическое скрытие панели задач. Затем я создал несколько копий виртуальной машины и установил различные программы с высокой нагрузкой на каждую из них, после чего я создал снимок каждой виртуальной машины с уже загруженной программой, чтобы ее можно было запустить практически мгновенно. Самое приятное, что я могу запустить каждую виртуальную машину с помощью ярлыка на рабочем столе! Ulincsys 6 лет назад 1

Похожие вопросы