从 RAM 保存程序实例以便快速启动

从 RAM 保存程序实例以便快速启动

是否有可能的方法来保存单个程序的实例,将其加载到 RAM 中,然后从保存的实例将该程序加载回 RAM。

这是一个具体的例子。
我有一个程序(Adobe Photoshop),它在我的计算机上运行得很好。它渲染速度快,没​​有延迟,退出速度快。它唯一不擅长的就是加载速度快,通常需要大约……8-10 分钟。我想知道是否有办法捕获在内存中运行的 Photoshop 实例(例如,在 VHD 或 IMG 文件中)。然后将该实例加载回内存,而不是从磁盘加载程序的单个文件和设置。

我正在考虑一些类似于 RAMdisk 的东西,但我不知道它是否存在(如果不存在,那应该存在)。

答案1

这是不可能的。

如果一个程序加载了 10 分钟,那么这意味着它正在做某物10 分钟。如果可以跳过这一步某物,它会跳过它。

计算机是状态机,从一个状态进入另一个状态可能需要一些时间。一般来说你不能仅仅猜测机器会在哪个状态结束相信我,如果在这个特定情况下可行,Adobe 会这么做——他们知道等待 10 分钟并不好玩。

你必须解决的实际问题是了解 Photoshop 启动时间为何这么长进程监控可能会派上用场,但首先我会检查这是否不是由于第三方插件、安装了太多字体等造成的。

答案2

如果我可以解释你的问题,是的,有一种方法可以加速你的软件并缓存内容,如果你愿意允许保存的状态,即你控制的文件只需要在用户登录时打开并且程序设置始终相同。

您可以在 MacOS、Linux 和 Windows 上执行此操作:正确执行此操作可以大大提高系统速度,同时降低整体系统温度并延长有用介质寿命。在决定这是否适合您的用例时,有几个因素很重要:

  • 物理可用 RAM 的数量(在 MacOS 或 Windows 64 位上,少于 8GB 可能会造成灾难性的段错误)

  • 必须运行的主要程序和服务的数量

  • 硬件性能和一般规格

在特定情况下,当容器或 VM 不可行或不可行,并且需要高性能和/或绝对可重复性时,这绝对是可行的方法。

当用户登录时,启动脚本会自动保留一块内存并以目录的形式创建一个符号链接:虚拟硬盘。然后,所有程序文件和数据文件都从 SSD 复制到 ramdisk。然后,相关程序将使用您准备好的设置自动启动,并打开在系统中设置为自动启动的历史记录的文件。

以下是您的脚本可以遵循的一种配方。


创建一个特定的用户配置文件,该配置文件“包含”或有权访问所有需要的程序和数据;所有不必要的程序都不会运行。关闭服务、程序、网络连接、屏幕保护程序等,并尽可能从(基于用户的)系统设置中执行此操作。

确保你有足够的内存,并在你想要重现的情况下分析系统负载。列出你需要的程序:找到可执行文件、临时文件位置和用户生成的文件和资产。这些是你想要复制到 ramdisk 的文件。这是调整 ramdisk 大小的好时机。重命名温度文件并将它们作为备份保存在原始位置。然后创建从原始临时文件位置指向 ramdisk 托管文件的符号链接。复制您的用户资产,然后调用程序来启动您希望它打开的用户文件 - 以及您可能需要的任何标志。

这就是全部内容。只是不要让您的系统进入休眠或断电状态...

苹果系统

我在艺术装置和视听表演期间在裸机硬件上对关键基础设施进行此操作。事实上,我最近在 MacOS Sierra 上也这样做过,这次是使用 resolume arena 进行现场视频表演,并使用 siphon 进行屏幕捕获。

#!/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 是一个很棒的平台,您只需安装所需的内容即可真正保持安装的精简。在极端情况下,工程师可能会选择将整个系统文件夹复制到 ramdisk(例如从相对低规格的只读 SD 卡(以防止 SD 卡损坏)或甚至从网络位置复制)。上面的代码应该经过一些修改即可工作。

视窗

我个人还没有在 Windows 上做过这个,但这是可能的。如果你在 Windows 上需要 ramdisk,请查看这个:

Github 上的 Windows ERAM

相关内容