1

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

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

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

2 ответа2

2

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

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

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

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

1

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

Вы можете сделать это на 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 '{print $2;}')

# use half the memory
size_mb=$[size_mb/2048]

origin="${HOME}/Library/Caches"
ramdisk="/Volumes/ramdisk"

diskutil erasevolume HFS+ "ramdisk" hdiutil attach -nomount ram://$[size_mb]

if [ -d ${ramdisk} ]; then
 for dir in ${dirs}
 do
  /bin/mkdir -p ${ramdisk}/${dir}
  if [ -d ${origin}/${dir} ]; then
   if [ ! -L ${origin}/${dir} ]; then
    /bin/mv ${origin}/${dir} ${origin}/${dir}.bak
   fi
  fi

  if [ -L ${origin}/${dir} ]; then
   /bin/rm ${origin}/${dir}
  fi

  if [ ! -L ${origin}/${dir} ]; then
   /bin/ln -v -s -f ${ramdisk}/${dir} ${origin}/${dir}
  fi
 done
fi

/bin/mkdir -p ${ramdisk}/Applications/Resolume
/bin/mkdir -p ${ramdisk}/RAMDISK_REPOSITORY/

echo "Copying Resolume to ramdisk"
/bin/cp -r "/Applications/Resolume Arena 5.0.2/" "${ramdisk}/Applications/Resolume/"
/bin/cp -r "/Users/Shared/RAMDISK_REPOSITORY/" "${ramdisk}/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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .